from aiogram import types from aiogram.dispatcher import FSMContext from load import dp, bot, messages from keyboard.default.checkout import confirm_all_info from keyboard.default.main_menu import cancel_btn, get_phone_number, continue_btn from keyboard.default.ordering import load_info from state.checkout import Checkout from utils.database.ordering import get_info @dp.message_handler(lambda x: x.text == messages.all_right_message, state="load_or_create_profile") async def confirm(message: types.Message, state: FSMContext): await state.finish() info = get_info(message.from_user.id) await bot.send_message( message.chat.id, "Может у вас есть сохраненные данные?", reply_markup=load_info(bool(info)) ) await state.set_state(state="load_data") @dp.message_handler(lambda x: x.text == messages.load_data, state="load_data") async def load_form(message: types.message, state: FSMContext): info = get_info(message.from_user.id) await state.update_data( first_name=info["first_name"], last_name=info["last_name"], phone_number=info["phone_number"], address=info["address"], load=True ) await bot.send_message(message.chat.id, "Ваши данные загружены!", reply_markup=continue_btn) await state.set_state("finish_send_form") @dp.message_handler(lambda x: x.text == messages.rewrite_data, state="load_data") async def new_form(message: types.Message): await bot.send_message( message.chat.id, "Напишите вашу фамилию", reply_markup=cancel_btn ) await Checkout.last_name.set() @dp.message_handler(state=Checkout.last_name) async def form_last_name(message: types.Message, state: FSMContext): await state.update_data(last_name=message.text) await bot.send_message( message.chat.id, "Ваше имя", reply_markup=cancel_btn ) await Checkout.first_name.set() @dp.message_handler(state=Checkout.first_name) async def form_first_name(message: types.Message, state: FSMContext): await state.update_data(first_name=message.text) await bot.send_message( message.chat.id, ("Номер телефона\n\n" "Можете написать номер телефона вручную"), reply_markup=get_phone_number ) await Checkout.phone_number.set() @dp.message_handler(state=Checkout.phone_number, content_types=[types.ContentType.CONTACT, types.ContentType.TEXT]) async def form_phone(message: types.Message, state: FSMContext): if message.contact is not None: phone = message.contact.phone_number else: phone = message.text if len(phone) not in [10, 12, 13]: await bot.send_message(message.chat.id, "Номер телефона не правильный!") await Checkout.phone_number.set() return await state.update_data(phone_number=phone) await bot.send_message(message.chat.id, "Отправте адрес доставки", reply_markup=cancel_btn) await Checkout.address.set() @dp.message_handler(state=Checkout.address) async def form_address(message: types.Message, state: FSMContext): await state.update_data(address=message.text) await bot.send_message(message.chat.id, "Отлично, заявка заполнена!", reply_markup=continue_btn) await state.set_state("finish_send_form") @dp.message_handler(state="finish_send_form") async def finish_form(message: types.Message, state: FSMContext): data = await state.get_data() text = (f"Имя: {data['first_name']}\n" f"Фамилия: {data['last_name']}\n" f"Номер телефона: {data['phone_number']}\n" f"Адрес: {data['address']}\n") await bot.send_message( message.chat.id, text, reply_markup=confirm_all_info(load=data.pop("load", False)) ) await state.set_state("save_or_continue")