functions.py 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. from PIL import Image, ImageDraw, ImageFont, ImageFilter
  2. from random import randint
  3. import speedtest
  4. def generate_captcha():
  5. # Generate one letter
  6. def gen_letter():
  7. return chr(randint(65, 90))
  8. def rndColor():
  9. return (randint(64, 255), randint(64, 255), randint(64, 255))
  10. def rndColor2():
  11. return (randint(32, 127), randint(32, 127), randint(32, 127))
  12. # Generate a 4 letter word
  13. def gen_wrong_answer():
  14. word = ""
  15. for _ in range(4):
  16. word += gen_letter()
  17. return word
  18. # Generate 7 wrong captcha answers
  19. wrong_answers = []
  20. for _ in range(7):
  21. wrong_answers.append(gen_wrong_answer())
  22. width = 80 * 4
  23. height = 100
  24. correct_answer = ""
  25. font = ImageFont.truetype("assets/arial.ttf", 55)
  26. file = f"assets/{randint(1000, 9999)}.jpg"
  27. image = Image.new('RGB', (width, height), (255, 255, 255))
  28. draw = ImageDraw.Draw(image)
  29. # Draw random points on image
  30. for x in range(width):
  31. for y in range(height):
  32. draw.point((x, y), fill=rndColor())
  33. for t in range(4):
  34. letter = gen_letter()
  35. correct_answer += letter
  36. draw.text(
  37. (60 * t + 50, 15),
  38. letter,
  39. font=font,
  40. fill=rndColor2()
  41. )
  42. image = image.filter(ImageFilter.BLUR)
  43. image.save(file, 'jpeg')
  44. return [file, correct_answer, wrong_answers]
  45. async def test_speedtest():
  46. def speed_convert(size):
  47. power = 2 ** 10
  48. zero = 0
  49. units = {0: "", 1: "Kb/s", 2: "Mb/s", 3: "Gb/s", 4: "Tb/s"}
  50. while size > power:
  51. size /= power
  52. zero += 1
  53. return f"{round(size, 2)} {units[zero]}"
  54. speed = speedtest.Speedtest()
  55. info = speed.get_best_server()
  56. download = speed.download()
  57. upload = speed.upload()
  58. return [speed_convert(download), speed_convert(upload), info]