← Все вопросы

Как сделать кнопочное меню у бота, чтобы было удобно тыкать?

Задан 9 месяцев назад584 просмотров2 ответа
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=.... А кнопку «Назад» обрабатывай отдельным хендлером, который возвращает главное меню.

Ваш ответ

Войдите, чтобы ответить на вопрос.