mr_qpdb
@mr_qpdb
⏱ - is not eternal

Почему callback_query_handler обрабатывает лишь последнюю строку?

Использую библиотеку Aiogram для telegram ботов.
Мой telegram бот обрабатывает лишь одну inline строку, и мне кажется, что только последнюю.

Вот код:
keyboard = types.InlineKeyboardMarkup()
foods = ['Бургер', 'Картофель', 'Куринные ножки']
for food in foods:
    inline_btns = types.InlineKeyboardButton(food, callback_data=food)
    keyboard.add(inline_btns)

    @dp.callback_query_handler(lambda c: c.data == food)
    async def process_callback(call: types.CallbackQuery):
        await bot.edit_message_text(text=f"Нажата кнопка {food}", chat_id=call.message.chat.id,
                                    message_id=call.message.message_id)
await message.answer("Выберите блюдо:", reply_markup=keyboard)

Срабатывает лишь последняя строка из массива: "Куринные ножки".
Если поставить на последнее место в массиве, например "Бургер" - сработает Бургер и т.д.
Что за херня? Из-за чего это может быть, и как это исправить? Я в шоке, тут явно задействована черная магия.
  • Вопрос задан
  • 6225 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Akakiy1880
keyboard = types.InlineKeyboardMarkup()
foods = ['Бургер', 'Картофель', 'Куринные ножки']
for food in foods:
inline_btns = types.InlineKeyboardButton(food, callback_data=food)
keyboard.add(inline_btns)

@dp.callback_query_handler(lambda c: c.data == food)
async def process_callback(call: types.CallbackQuery):
await bot.edit_message_text(text=f"Нажата кнопка {food}", chat_id=call.message.chat.id,
message_id=call.message.message_id)
await message.answer("Выберите блюдо:", reply_markup=keyboard)
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы