Как сделать вложенное меню в python-telegram-bot?
Мне нужно написать вложенное меню для телеграм-бота. Я использую python-telegram-bot и в настоящее время имею следующий код. По команде /caregories бот получает список родительских категорий из базы данных с помощью метода caregory_service.get_parent_categories() и отображает их в виде кнопок меню. Я хочу добавить в бот следующий функционал: при нажатии на каждую из кнопок категорий открывается подменю со списком подкатегорий и кнопкой возврата к списку родительских категорий. Вы можете получить список подкатегорий, используя метод caregory_service.get_subcategories(). При нажатии на любую из подкатегорий она добавляется в список выбранных и этот список возвращается после нажатия кнопки "ОК" в главном меню. Как я могу реализовать это с помощью python-telegram-bot?
from telegram.ext import AIORateLimiter, Application, CommandHandler, ContextTypes
from telegram import Update, InlineKeyboardButton, InlineKeyboardMarkup
from services import CategoryService
TOKEN = 'TOKEN'
async def categories_callback(update: Update, context: ContextTypes.DEFAULT_TYPE):
keyboard = []
category_service = CategoryService()
categories = await category_service.get_parent_categories() # get all parent categories from database
categories_buttons = [[InlineKeyboardButton(category.name, callback_data=str(category.id))] for category in categories]
keyboard.extend(categories_buttons)
keyboard.extend([
[InlineKeyboardButton(
"Cancel 😕",
callback_data="cancel"
)],
[InlineKeyboardButton(
"Ok 👌",
callback_data="confirm"
)]])
reply_markup = InlineKeyboardMarkup(keyboard)
await update.message.reply_text(
"Some text",
reply_markup=reply_markup
)
def create_bot() -> Application:
bot = Application.builder().token(TOKEN).rate_limiter(AIORateLimiter()).build()
bot.add_handler(CommandHandler("categories", categories_callback))
return bot
async def start_bot() -> Application:
bot = create_bot()
await bot.initialize()
await bot.updater.start_polling()
await bot.start()
return bot
bot = start_bot()