from aiogram import types, Dispatcher from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup, CallbackQuery from aiogram.filters import Command # Главное меню клавиатура def main_menu_keyboard(): keyboard = InlineKeyboardMarkup() keyboard.add(InlineKeyboardButton("Личный кабинет", callback_data="main:personal")) keyboard.add(InlineKeyboardButton("FAQ", callback_data="main:faq")) keyboard.add(InlineKeyboardButton("О нас", callback_data="main:about")) return keyboard # Личный кабинет клавиатура def personal_menu_keyboard(): keyboard = InlineKeyboardMarkup() keyboard.add(InlineKeyboardButton("Баланс", callback_data="personal:balance")) keyboard.add(InlineKeyboardButton("Приобрести подписку", callback_data="personal:subscribe")) keyboard.add(InlineKeyboardButton("Руководство по использованию", callback_data="personal:guide")) keyboard.add(InlineKeyboardButton("Назад", callback_data="back:main")) return keyboard # Подписка меню клавиатура def subscribe_menu_keyboard(): keyboard = InlineKeyboardMarkup() keyboard.add(InlineKeyboardButton("Lark", callback_data="subscribe:lark")) keyboard.add(InlineKeyboardButton("Lark Pro", callback_data="subscribe:lark_pro")) keyboard.add(InlineKeyboardButton("О тарифах", callback_data="subscribe:about_tariffs")) keyboard.add(InlineKeyboardButton("Назад", callback_data="back:personal")) return keyboard # Тарифы Lark клавиатура def lark_tariffs_keyboard(): keyboard = InlineKeyboardMarkup() keyboard.add(InlineKeyboardButton("Lark 1 месяц", callback_data="lark:1")) keyboard.add(InlineKeyboardButton("Lark 6 месяцев", callback_data="lark:6")) keyboard.add(InlineKeyboardButton("Lark 12 месяцев", callback_data="lark:12")) keyboard.add(InlineKeyboardButton("Назад", callback_data="back:subscribe")) return keyboard # Тарифы Lark Pro клавиатура def lark_pro_tariffs_keyboard(): keyboard = InlineKeyboardMarkup() keyboard.add(InlineKeyboardButton("Lark Pro 1 месяц", callback_data="lark_pro:1")) keyboard.add(InlineKeyboardButton("Lark Pro 6 месяцев", callback_data="lark_pro:6")) keyboard.add(InlineKeyboardButton("Lark Pro 12 месяцев", callback_data="lark_pro:12")) keyboard.add(InlineKeyboardButton("Назад", callback_data="back:subscribe")) return keyboard # Руководство меню клавиатура def guide_menu_keyboard(): keyboard = InlineKeyboardMarkup() keyboard.add(InlineKeyboardButton("iOS, Android", callback_data="guide:ios_android")) keyboard.add(InlineKeyboardButton("Windows, Macintosh", callback_data="guide:windows_mac")) keyboard.add(InlineKeyboardButton("Назад", callback_data="back:personal")) return keyboard async def start_command(message: types.Message): """Обработчик команды /start.""" await message.answer("Главное меню", reply_markup=main_menu_keyboard()) async def callback_handler(callback: CallbackQuery): """Обработчик callback.""" data = callback.data.split(":") action = data[0] sub_action = data[1] if len(data) > 1 else None if action == "main": if sub_action == "personal": await callback.message.edit_text("Личный кабинет", reply_markup=personal_menu_keyboard()) elif sub_action == "faq": await callback.message.edit_text("FAQ", reply_markup=InlineKeyboardMarkup().add( InlineKeyboardButton("Назад", callback_data="back:main"))) elif sub_action == "about": await callback.message.edit_text("Наш сайт: {URL}", reply_markup=InlineKeyboardMarkup().add( InlineKeyboardButton("Назад", callback_data="back:main"))) elif action == "personal": if sub_action == "balance": await callback.message.edit_text("Баланс:", reply_markup=InlineKeyboardMarkup().add( InlineKeyboardButton("Пополнение", callback_data="balance:topup"), InlineKeyboardButton("История транзакций", callback_data="balance:history"), InlineKeyboardButton("Назад", callback_data="back:personal") )) elif sub_action == "subscribe": await callback.message.edit_text("Выберите подписку:", reply_markup=subscribe_menu_keyboard()) elif sub_action == "guide": await callback.message.edit_text("Руководство по использованию", reply_markup=guide_menu_keyboard()) elif action == "subscribe": if sub_action == "lark": await callback.message.edit_text("Тарифы Lark", reply_markup=lark_tariffs_keyboard()) elif sub_action == "lark_pro": await callback.message.edit_text("Тарифы Lark Pro", reply_markup=lark_pro_tariffs_keyboard()) elif sub_action == "about_tariffs": await callback.message.edit_text("О тарифах", reply_markup=InlineKeyboardMarkup().add( InlineKeyboardButton("Назад", callback_data="back:subscribe") )) elif action == "lark": await callback.message.edit_text(f"Вы выбрали тариф Lark {sub_action} месяцев.", reply_markup=InlineKeyboardMarkup().add( InlineKeyboardButton("Подтвердить", callback_data=f"confirm:lark:{sub_action}"), InlineKeyboardButton("Отменить", callback_data="back:subscribe") )) elif action == "lark_pro": await callback.message.edit_text(f"Вы выбрали тариф Lark Pro {sub_action} месяцев.", reply_markup=InlineKeyboardMarkup().add( InlineKeyboardButton("Подтвердить", callback_data=f"confirm:lark_pro:{sub_action}"), InlineKeyboardButton("Отменить", callback_data="back:subscribe") )) elif action == "back": if sub_action == "main": await callback.message.edit_text("Главное меню", reply_markup=main_menu_keyboard()) elif sub_action == "personal": await callback.message.edit_text("Личный кабинет", reply_markup=personal_menu_keyboard()) elif sub_action == "subscribe": await callback.message.edit_text("Выберите подписку:", reply_markup=subscribe_menu_keyboard()) await callback.answer() def register_handlers(dp: Dispatcher): dp.message.register(start_command, Command("start")) dp.callback_query.register(callback_handler)