from aiogram import Router, F from aiogram.types import Message, CallbackQuery from aiogram.fsm.context import FSMContext from app.database import requests as rq from app.keyboards import user_keyboards as kb from app.states import Register from app.database.requests import check_login_unique router = Router() @router.callback_query(F.data == "user_register") async def register_start(callback: CallbackQuery, state: FSMContext): await state.set_state(Register.user_register_name) await callback.message.answer('Как к вам обращаться?') @router.message(Register.user_register_name) async def register_name(message: Message, state: FSMContext): await state.update_data(name=message.text) await state.set_state(Register.user_register_login) await message.answer( 'Выберите свой логин. Он должен быть уникальным!' ) @router.message(Register.user_register_login) async def register_name(message: Message, state: FSMContext): if not await check_login_unique(message.text): await message.answer('Этот логин уже занят. Пожалуйста, выберите другой.') return await state.update_data(login=message.text) await state.set_state(Register.user_register_contact) await message.answer('Укажите предпочтительный способ связи с вами') @router.message(Register.user_register_contact) async def register_contact(message: Message, state: FSMContext): await state.update_data(contact=message.text) await state.set_state(Register.user_register_subscribe) await message.answer( 'Хотите получать уведомления о новинках и специальных предложениях?', reply_markup=kb.yes_no_keyboard ) @router.message(Register.user_register_subscribe) async def register_subscribe(message: Message, state: FSMContext): await state.update_data(include_in_broadcast=message.text) if message.text == 'Да': await message.answer('Спасибо за регистрацию! Добро пожаловать в наш тайный клуб клиентов!') elif message.text == 'Нет': await message.answer('Спасибо за регистрацию! Если Вы измените свое решение, Вы всегда можете подписаться ' 'на наши секретные материалы, воспользовавшись ботом!') data = await state.get_data() await state.set_state(Register.user_register_check) await message.answer(f'Давайте проверим еще раз:' f'\n - Ваше имя - {data["name"]},' f'\n - Ваш логин - {data["login"]},' f'\n - Ваш контакт - {data["contact"]}, ' f'\n - Подписаны ли Вы на секретную рассылку: {data["include_in_broadcast"]} ' f'\n\n Всё верно?', reply_markup=kb.yes_no_keyboard) @router.message(Register.user_register_check) async def register_check(message: Message, state: FSMContext): if message.text == 'Да': data = await state.get_data() await rq.user_register(message.from_user.id, data["name"], data["login"], data["contact"], data["include_in_broadcast"]) await message.answer('Ура! Спасибо, что Вы с нами! Хотите ли Вы сделать что-то еще?', reply_markup=kb.user_main) await state.clear() if message.text == 'Нет': await state.set_state(Register.user_register_correct) await message.answer('Упс :( Что Вы хотите исправить?', reply_markup=kb.register_correct_keyboard) @router.message(Register.user_register_correct) async def choose_the_correction(message: Message, state: FSMContext): if message.text == 'Имя': await state.set_state(Register.user_register_name) await message.answer('Как к Вам обращаться?') elif message.text == 'Логин': await state.set_state(Register.user_register_login) await message.answer('Выберите свой логин. Он должен быть уникальным!') elif message.text == 'Контакт': await state.set_state(Register.user_register_contact) await message.answer('Оставьте контакт, с которого Вам будет удобнее всего общаться с нами') elif message.text == 'Статус подписки на рассылку': await state.set_state(Register.user_register_subscribe) await message.answer('Хотите ли Вы получать от нас уведомления о новинках, акциях и даже ' 'СЕКРЕТНЫХ РАСПРОДАЖАХ ДЛЯ СВОИХ?', reply_markup=kb.yes_no_keyboard) @router.callback_query(F.data == "user_to_main") async def register(callback: CallbackQuery): await callback.answer("Возвращаемся в меню") await callback.message.answer("Чем я могу Вам помочь?", reply_markup=kb.user_main)