import asyncio
from aiogram import types, Dispatcher
from aiogram.dispatcher.storage import FSMContext
from bot import database
from bot.states import RegisterStates
from bot.keyboards import reset_register_kb, register_kb
from bot.functions import validate_phone, reject_latin, reject_cmd, validate_fio
from bot.notifications import new_user
async def registration(call: types.CallbackQuery):
await call.message.edit_text(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 get_number(message: types.Message, state: FSMContext):
if validate_phone(message.text):
await state.update_data(number=message.text)
await message.delete()
msg = await message.answer(f"Укажите ФИО\n"
f"Например: Иванов Иван Иванович")
await RegisterStates.FIO.set()
await asyncio.sleep(60)
await msg.delete()
else:
await message.delete()
msg = await message.answer(f"Указан некорректный номер телефона")
await asyncio.sleep(5)
await msg.delete()
async def get_fio(message: types.Message, state: FSMContext):
db = database.Database()
if reject_cmd(message.text):
await message.delete()
msg = await message.answer("Нельзя использовать команды")
await asyncio.sleep(5)
await msg.delete()
elif reject_latin(message.text):
await message.delete()
msg = await message.answer("Нельзя использовать латиницу и символы")
await asyncio.sleep(5)
await msg.delete()
elif validate_fio(message.text):
await message.delete()
msg = await message.answer("Необходимо указать полное ФИО")
await asyncio.sleep(5)
await msg.delete()
else:
await message.delete()
await state.update_data(FIO=message.text)
await state.update_data(id=message.from_user.id)
await state.update_data(tg=message.from_user.username)
reg_data = await state.get_data()
await state.finish()
msg = await message.answer(f"Заявка отправлена")
db.sql_query_send(f"INSERT INTO user_table (tg_id,name,phone)"
f"VALUES ({reg_data['id']},"
f"'{reg_data['FIO']}',"
f"'{reg_data['number']}')")
await new_user(reg_data)
await asyncio.sleep(5)
await msg.delete()
async def reset_register(call: types.CallbackQuery, state: FSMContext):
await state.finish()
await call.message.edit_text(f"🤖Вас приветствует бот 405 кабинета🤖\n"
f"\n"
f"Для доступа к функционалу необходимо зарегистрироваться\n"
f"", reply_markup=register_kb())
def register(dp: Dispatcher):
dp.register_callback_query_handler(registration, text="register")
dp.register_callback_query_handler(reset_register, text="res_register", state=[RegisterStates.phone,
RegisterStates.FIO])
dp.register_message_handler(get_number, state=RegisterStates.phone)
dp.register_message_handler(get_fio, state=RegisterStates.FIO)