feat(start): add persistent reply keyboard with main commands; add /menu to show it\nchore(bot): register BotCommand list for Telegram menu

This commit is contained in:
2025-12-04 17:15:49 +03:00
parent f8a5294ca8
commit ff17dc543a
2 changed files with 58 additions and 3 deletions

View File

@@ -1,6 +1,13 @@
from aiogram import Router, F
from aiogram.filters import CommandStart, Command
from aiogram.types import Message, InlineKeyboardMarkup, InlineKeyboardButton, CallbackQuery
from aiogram.types import (
Message,
InlineKeyboardMarkup,
InlineKeyboardButton,
CallbackQuery,
ReplyKeyboardMarkup,
KeyboardButton,
)
from aiogram.fsm.context import FSMContext
from database.db import async_session_maker
@@ -43,7 +50,8 @@ async def cmd_start(message: Message, state: FSMContext):
f"• /stats - статистика\n"
f"• /settings - настройки\n"
f"• /reminder - напоминания\n"
f"• /help - полная справка"
f"• /help - полная справка",
reply_markup=main_menu_keyboard(),
)
# Предлагаем пройти тест уровня
@@ -70,10 +78,17 @@ async def cmd_start(message: Message, state: FSMContext):
f"• /practice - практика диалога\n"
f"• /words [тема] - тематическая подборка\n"
f"• /stats - статистика\n"
f"• /help - все команды"
f"• /help - все команды",
reply_markup=main_menu_keyboard(),
)
@router.message(Command("menu"))
async def cmd_menu(message: Message):
"""Показать клавиатуру с основными командами."""
await message.answer("Главное меню доступно ниже ⤵️", reply_markup=main_menu_keyboard())
@router.message(Command("help"))
async def cmd_help(message: Message):
"""Обработчик команды /help"""
@@ -111,6 +126,30 @@ async def skip_level_test_callback(callback: CallbackQuery):
"""Пропустить тест уровня"""
await callback.message.edit_text(
"✅ Хорошо!\n\n"
def main_menu_keyboard() -> ReplyKeyboardMarkup:
"""Клавиатура с основными командами (кнопки отправляют команды)."""
return ReplyKeyboardMarkup(
resize_keyboard=True,
keyboard=[
[
KeyboardButton(text="/add"),
KeyboardButton(text="/vocabulary"),
],
[
KeyboardButton(text="/task"),
KeyboardButton(text="/practice"),
],
[
KeyboardButton(text="/words travel"),
KeyboardButton(text="/import"),
],
[
KeyboardButton(text="/stats"),
KeyboardButton(text="/settings"),
],
],
)
"Ты можешь пройти тест позже командой /level_test\n"
"или установить уровень вручную в /settings\n\n"
"Давай начнём! Попробуй:\n"