"""Клавиатуры главного меню и пользовательских режимов бота.""" from __future__ import annotations from aiogram.types import ( KeyboardButton, ReplyKeyboardMarkup, ) from user_store import SUBSCRIPTION_PRICE_STARS MODE_BUTTONS: dict[str, str] = { "🎓 Обучение": "/training", "✍️ Генерация": "/generate", "💳 Подписка": "/subscription", "📖 Помощь": "/help", } MAIN_MENU_BUTTON = "🏠 Главное меню" MAIN_MENU_VALUE = "__main_menu__" BUTTON_TEXT_MAP: dict[str, str] = { **MODE_BUTTONS, MAIN_MENU_BUTTON: MAIN_MENU_VALUE, "Главное меню": MAIN_MENU_VALUE, } def main_menu_keyboard() -> ReplyKeyboardMarkup: """Показывает только четыре доступных пользователю режима.""" return ReplyKeyboardMarkup( keyboard=[ [KeyboardButton(text="🎓 Обучение"), KeyboardButton(text="✍️ Генерация")], [KeyboardButton(text="💳 Подписка"), KeyboardButton(text="📖 Помощь")], ], resize_keyboard=True, input_field_placeholder="Выбери режим", ) def mode_keyboard(_mode: str) -> ReplyKeyboardMarkup: """Внутри любого режима оставляет только выход в главное меню.""" return ReplyKeyboardMarkup( keyboard=[[KeyboardButton(text=MAIN_MENU_BUTTON)]], resize_keyboard=True, input_field_placeholder="Напиши сообщение или вернись в главное меню", ) MAIN_MENU = main_menu_keyboard() LOCKED_MENU = mode_keyboard("subscription") def resolve_button_text(text: str | None) -> str | None: """Возвращает команду или текст запроса для нажатой кнопки, иначе None.""" if not text: return None return BUTTON_TEXT_MAP.get(text.strip()) def price_hint() -> str: return f"Продление подписки — {SUBSCRIPTION_PRICE_STARS} звёзд."