Aiogram 3x Python - InlineKeyboardBuilder
Всем доброго времени суток! Начинаю учить азы Aiogram. Сегодня сделал inline кнопки через билдер. По курсу который прохожу создаётся динамическая кнопка(и), разобрался с советами как создать и вывести каждый, но для этого я создаю хендлеров столько, сколько в множестве значений, а это мне так сказали плохо, да и сам понимаю что их может быть не 3, а 103
from aiogram.types import KeyboardButton, InlineKeyboardButton
from aiogram.utils.keyboard import ReplyKeyboardBuilder, InlineKeyboardBuilder
potatiki = ('Красные', 'Зеленые', 'Желтые')
def potato():
keyboard = InlineKeyboardBuilder()
for c, potat in enumerate(potatiki):
keyboard.add(InlineKeyboardButton(text=potat, callback_data="potato_" + str(c)))
return keyboard.adjust(3).as_markup(resize_keyboard=True)
Представим что potatiki это база данных, импорт из неё товаров каталога. Ниже мной написана функция с помощью которой создаётся кнопка... а да ладно, что я буду объяснять сами всё знаете. Суть вопроса как сделать для этой функции один хендлер. Буду благодарен если распишите полностью все импорты.
Мой хендлер на данный момент для вывода одного callback:
@router.callback_query(F.data == 'potato_0')
async def potato(callback: CallbackQuery):
await callback.answer('')
await callback.message.answer('Обработан potato1')
Ответы (1 шт):
Немного меняем ваш генератор клавиатуры:
potatiki = ('Красные', 'Зеленые', 'Желтые')
def potato():
kb = InlineKeyboardBuilder()
for c, potat in enumerate(potatiki):
kb.button(text=potat, callback_data="potato_" + str(c))
return kb.adjust(3).as_markup(resize_keyboard=True)
далее, к примеру, на команду /start
ее добавляем:
@router.message(Command('start'))
async def cmd_start(message: Message):
await message.answer('Привет', reply_markup=potato())
ну и собственно сам хэндлер, который будет отлавливать все кнопки этой клавиатуры:
@router.callback_query(F.data.startswith('potato_'))
async def cmd_start(call: CallbackQuery):
await call.message.edit_text(f'Был вызван callback {call.data}', reply_markup=potato())
ну и внутри него уже обрабатывайте как хотите, в зависимости от вашей задачи.