functions.py 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. import phonenumbers
  2. import re
  3. import datetime
  4. from datetime import date, timedelta
  5. from bot import database
  6. import intervaltree
  7. def validate_phone(number):
  8. number = number.replace('-', '')
  9. number = number.replace(' ', '')
  10. if len(number) == 10:
  11. number = "+7" + number
  12. elif len(number) == 11 and number[0] == '8':
  13. number = "+7" + number[1:]
  14. try:
  15. parse_phone = phonenumbers.parse(number)
  16. if phonenumbers.is_possible_number(parse_phone):
  17. return True
  18. else:
  19. return False
  20. except:
  21. return False
  22. def reject_cmd(text):
  23. if "/" in text:
  24. return True
  25. else:
  26. return False
  27. def reject_latin(text):
  28. if re.search(r'[a-zA-Z0-9]', text):
  29. return True
  30. else:
  31. return False
  32. def validate_fio(text):
  33. if len(text.split(' ')) < 3:
  34. return True
  35. else:
  36. return False
  37. def validate_time():
  38. pass
  39. def beauty_reg_request(data):
  40. result = (f"ФИО: {data['ФИО']}\n"
  41. f"Контакт: {data['Номер телефона']}")
  42. return result
  43. def beauty_all_events(data):
  44. result = (f"******************\n"
  45. f"Инициатор:\n{data['Инициатор']}\n\n"
  46. f"Событие:\n{data['Описание']}\n\n"
  47. f"Дата:\n{data['Дата']}\n\n"
  48. )
  49. return result
  50. def make_date():
  51. today = datetime.datetime.now()
  52. return datetime.datetime.strftime(today, '%d.%m.%Y')
  53. def date_range(data):
  54. today = date.today()
  55. weekday = today.weekday()
  56. days_per_month = {1: 31, 2: 28, 3: 30, 4: 31, 5: 30, 6: 31,
  57. 7: 31, 8: 31, 9: 30, 10: 31, 11: 30, 12: 31}
  58. if data == "today":
  59. return today
  60. if data == "week":
  61. first = today - timedelta(days=weekday)
  62. # upper bound
  63. last = today + timedelta(days=(6 - weekday))
  64. return f"{first} and {last}"
  65. if data == "month":
  66. first = today.replace(day=1)
  67. try:
  68. last = today.replace(day=days_per_month[today.month])
  69. except ValueError:
  70. if today.month == 2: # Not a leap year
  71. last = today.replace(day=28)
  72. else:
  73. raise
  74. return f"{first} and {last}"
  75. def to_quotes(data):
  76. data = "'" + str(data) + "'"
  77. return data
  78. def time_validator(data):
  79. re_pattern = "^(2[0-3]|[01]?[0-9])(:|\.)([0-5]?[0-9])( |-)(2[0-3]|[01]?[0-9])(:|\.)([0-5]?[0-9])$"
  80. if re.match(re_pattern, data):
  81. if len(data.split(" ")) == 2:
  82. return True
  83. elif len(data.split("-")) == 2:
  84. return True
  85. else:
  86. return False
  87. else:
  88. return False
  89. def normalize_time(data):
  90. if len(data.split(" ")) == 2:
  91. if len(data.split(" ")[0]) == 4:
  92. data = "0" + data
  93. return data.replace(".", ":").split(" ")
  94. else:
  95. return data.replace(".", ":").split(" ")
  96. elif len(data.split("-")) == 2:
  97. if len(data.split("-")[0]) == 4:
  98. data = "0" + data
  99. return data.replace(".", ":").split("-")
  100. else:
  101. return data.replace(".", ":").split("-")
  102. else:
  103. return False
  104. def check_overlap(start, end, date):
  105. it = intervaltree.IntervalTree()
  106. db = database.Database()
  107. times = db.sql_fetchall(f"select e_start,e_end from events_table where e_date = {date}")
  108. for time in times:
  109. it.addi(time['e_start'], time['e_end'])
  110. return not it.overlaps(start, end)