"""Клавиатуры главного меню и пользовательских режимов бота.""" 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__" TRAINING_RESET_BUTTON = "🗑 Сбросить данные" TRAINING_RESET_VALUE = "__training_reset__" POST_GENERATE_BUTTON = "✍️ Придумать пост" BUTTON_TEXT_MAP: dict[str, str] = { **MODE_BUTTONS, MAIN_MENU_BUTTON: MAIN_MENU_VALUE, "Главное меню": MAIN_MENU_VALUE, TRAINING_RESET_BUTTON: TRAINING_RESET_VALUE, POST_GENERATE_BUTTON: "/post", } 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: """Внутри режима показывает релевантные действия и возврат в меню.""" rows = [[KeyboardButton(text=MAIN_MENU_BUTTON)]] if mode == "training": rows.append([KeyboardButton(text=TRAINING_RESET_BUTTON)]) elif mode == "generation": rows.insert(0, [KeyboardButton(text=POST_GENERATE_BUTTON)]) return ReplyKeyboardMarkup( keyboard=rows, resize_keyboard=True, input_field_placeholder=( "Управляй обучением или вернись в меню" if mode == "training" else "Напиши сообщение или вернись в главное меню" ), ) 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} звёзд."