← Все вопросы
Как сделать кнопочное меню у бота, чтобы было удобно тыкать?
5
Хочу нормальное меню: несколько кнопок «Профиль», «Игры», «Помощь», и при нажатии бот переходит в нужный раздел. С чего собирать такое меню, чтобы оно не превратилось в кашу из if?
2 ответа
9
✓ Принятый ответ — помог автору
Удобный приём: показать меню Reply-кнопками, а на каждую кнопку повесить отдельный хендлер через магический фильтр F.text. Так никакой каши из if не будет.
from aiogram import F
from aiogram.types import ReplyKeyboardMarkup, KeyboardButton
menu = ReplyKeyboardMarkup(
keyboard=[
[KeyboardButton(text="Профиль"), KeyboardButton(text="Игры")],
[KeyboardButton(text="Помощь")],
],
resize_keyboard=True,
)
@dp.message(CommandStart())
async def start(message: Message):
await message.answer("Главное меню:", reply_markup=menu)
@dp.message(F.text == "Профиль")
async def profile(message: Message):
await message.answer("Это твой профиль")
@dp.message(F.text == "Игры")
async def games(message: Message):
await message.answer("Список игр: ...")
Каждый раздел — своя функция. Меню всегда под рукой, пользователь просто тыкает кнопки, а текст они шлют сами.
3
Если хочется «многоуровневое» меню (зашёл в «Игры» → там свои кнопки), сделай для каждого раздела свою клавиатуру и в хендлере раздела отправляй её через reply_markup=.... А кнопку «Назад» обрабатывай отдельным хендлером, который возвращает главное меню.
Ваш ответ
Войдите, чтобы ответить на вопрос.