from aiogram import types, Dispatcher
from handlers.user.states import RegisterStates
from bot.functions import validate_fio, validate_phone, reject_latin, reject_cmd
from aiogram.dispatcher.storage import FSMContext
from bot.keyboards import reset_register_kb, register_kb, main_kb, check_register_kb
from bot import database, sql
from handlers.admin.notifications import new_user
async def registration(message: types.Message):
db = database.Database()
await message.delete()
if db.sql_fetchone(f'select tg_id from user_table where tg_id = {message.from_user.id} and approved = 0'):
await message.answer("Ваша заявка находится на рассмотрернии", reply_markup=check_register_kb)
elif db.sql_fetchone(f'select tg_id from user_table where tg_id = {message.from_user.id} and approved = 1'):
msg = await message.answer("Вы зарегистрированы", reply_markup=main_kb)
await msg.delete()
else:
await message.answer(f"Для регистрации необходимо указать номер телефона")
await message.answer(f"Введите номер телефона\n"
f"Возможные форматы:\n\n"
f"+79995554433\n"
f"9997771122\n"
f"89995554433\n"
f"8-999-888-11-22\n"
f"+7-999-888-11-22", reply_markup=reset_register_kb)
await RegisterStates.phone.set()
async def check_reg_status(message: types.Message):
db = database.Database()
await message.delete()
if db.sql_fetchone(f'select tg_id from user_table where tg_id = {message.from_user.id} and approved = 0'):
await message.answer("Ваша заявка находится на рассмотрернии", reply_markup=check_register_kb)
elif db.sql_fetchone(f'select tg_id from user_table where tg_id = {message.from_user.id} and approved = 1'):
await message.answer("Вы зарегистрированы", reply_markup=main_kb)
else:
await message.answer("Вы не зарегистрированы", reply_markup=register_kb)
async def get_number(message: types.Message, state: FSMContext):
if validate_phone(message.text):
await state.update_data(number=message.text)
await message.answer(f"Укажите ФИО\n"
f"Например: Иванов Иван Иванович", reply_markup=reset_register_kb)
await RegisterStates.FIO.set()
else:
await message.delete()
await message.answer(f"Указан некорректный номер телефона", reply_markup=reset_register_kb)
async def get_fio(message: types.Message, state: FSMContext):
db = database.Database()
if reject_cmd(message.text):
await message.delete()
await message.answer("Нельзя использовать команды", reply_markup=reset_register_kb)
elif reject_latin(message.text):
await message.delete()
await message.answer("Нельзя использовать латиницу и символы", reply_markup=reset_register_kb)
elif validate_fio(message.text):
await message.answer("Необходимо указать полное ФИО", reply_markup=reset_register_kb)
else:
await state.update_data(FIO=message.text)
await state.update_data(id=message.from_user.id)
reg_data = await state.get_data()
await message.answer(f"Спасибо за регистрацию\n"
f"Вы сможете воспользоваться функциями после одобрения\n", reply_markup=check_register_kb)
db.sql_query_send(sql.sql_send(reg_data))
await state.finish()
await new_user()
async def reset_register(message: types.Message, state: FSMContext):
await state.finish()
await message.answer("Регистрация отменена", reply_markup=register_kb)
def register_handlers(dp: Dispatcher):
# хендлеры регистрации
dp.register_message_handler(registration, text="Зарегистрироваться")
dp.register_message_handler(check_reg_status, text="Проверить статус заявки")
dp.register_message_handler(reset_register, text='Отменить регистрацию', state=[RegisterStates.phone,
RegisterStates.FIO])
dp.register_message_handler(get_number, state=RegisterStates.phone)
dp.register_message_handler(get_fio, state=RegisterStates.FIO)