registration.py 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. from aiogram import types, Dispatcher
  2. from handlers.user.states import RegisterStates
  3. from bot.functions import validate_fio, validate_phone, reject_latin, reject_cmd
  4. from aiogram.dispatcher.storage import FSMContext
  5. from bot.keyboards import reset_register_kb, register_kb, main_kb, check_register_kb
  6. from bot import database
  7. async def registration(message: types.Message):
  8. Db = database.Database()
  9. await message.delete()
  10. if Db.sql_simple_check(f'select tg_id from user_table where tg_id = {message.from_user.id} and approved = 0'):
  11. await message.answer("Ваша заявка рассматривается", reply_markup=check_register_kb)
  12. elif Db.sql_simple_check(f'select tg_id from user_table where tg_id = {message.from_user.id} and approved = 1'):
  13. msg = await message.answer("Вы зарегистрированны", reply_markup=main_kb)
  14. await msg.delete()
  15. else:
  16. await message.answer(f"Дkя регистрации необходимо указать\n"
  17. f"Номер телефона\n"
  18. f"Фамилия Имя Отчество")
  19. await message.answer(f"Введите номер телефона\n"
  20. f"Возможные форматы:\n\n"
  21. f"<b>+79995554433</b>\n"
  22. f"<b>9997771122</b>\n"
  23. f"<b>89995554433</b>\n"
  24. f"<b>8-999-888-11-22</b>\n"
  25. f"<b>+7-999-888-11-22</b>", reply_markup=reset_register_kb)
  26. await RegisterStates.phone.set()
  27. async def get_number(message: types.Message, state: FSMContext):
  28. if validate_phone(message.text):
  29. await state.update_data(number=message.text)
  30. await message.answer(f"Теперь укажите ФИО\n"
  31. f"Например: Иванов Иван Иванович", reply_markup=reset_register_kb)
  32. await RegisterStates.FIO.set()
  33. else:
  34. await message.delete()
  35. await message.answer(f"Указан некорректный номер телефона", reply_markup=reset_register_kb)
  36. async def get_fio(message: types.Message, state: FSMContext):
  37. Db = database.Database()
  38. if reject_cmd(message.text):
  39. await message.delete()
  40. await message.answer("Нельзя использовать команды", reply_markup=reset_register_kb)
  41. elif reject_latin(message.text):
  42. await message.delete()
  43. await message.answer("Нельзя использовать латиницу и символы", reply_markup=reset_register_kb)
  44. elif validate_fio(message.text):
  45. await message.answer("Необходимо указать полное ФИО", reply_markup=reset_register_kb)
  46. else:
  47. await state.update_data(FIO=message.text)
  48. await state.update_data(id=message.from_user.id)
  49. reg_data = await state.get_data()
  50. await message.answer(f"Спасибо за регистрацию\n"
  51. f"Вы сможете воспользоваться функциями после одобрения\n", reply_markup=check_register_kb)
  52. Db.sql_query_send(f"INSERT INTO user_table"
  53. f"(tg_id,name,phone) VALUES "
  54. f"({reg_data['id']},"
  55. f"'{reg_data['FIO']}'"
  56. f",{reg_data['number']})")
  57. await state.finish()
  58. async def reset_register(message: types.Message, state: FSMContext):
  59. await state.finish()
  60. await message.answer("Регистрация отменена", reply_markup=register_kb)
  61. async def check_reg_status(message: types.Message):
  62. Db = database.Database()
  63. await message.delete()
  64. if Db.sql_simple_check(f'select tg_id from user_table where tg_id = {message.from_user.id} and approved = 0'):
  65. await message.answer("Ваша заявка рассматривается", reply_markup=check_register_kb)
  66. elif Db.sql_simple_check(f'select tg_id from user_table where tg_id = {message.from_user.id} and approved = 1'):
  67. await message.answer("Вы зарегистрированны", reply_markup=main_kb)
  68. def register_handlers(dp: Dispatcher):
  69. # хендлеры регистрации
  70. dp.register_message_handler(registration, text="Зарегистрироваться")
  71. dp.register_message_handler(check_reg_status, text="Проверить статус заявки")
  72. dp.register_message_handler(reset_register, text='Отменить регистрацию', state=[RegisterStates.phone,
  73. RegisterStates.FIO])
  74. dp.register_message_handler(get_number, state=RegisterStates.phone)
  75. dp.register_message_handler(get_fio, state=RegisterStates.FIO)