Как в aiogram в callback handler обработать один из нескольких возможных запросов?

Как должно работать:

  1. Выводится сообщение с двумя инлайн кнопками
  2. Пользователь нажимает одну из них
  3. Сообщение удаляется
  4. В зависимости какую кнопку он нажал, срабатывает внутри function1 одно из условий и отправляется определённое сообщение, что уже не суть важно для вопроса

Изначально я думал что всё будет прекрасно работать с таким кодом:

@dp.callback_query_handler(text = 'button2' or 'button3')
async def process_callback_button23(c_q: types.CallbackQuery):
    t1 = c_q.data
    await c_q.answer()
    await c_q.message.delete()
    await function1(t1)

Но бот не воспринимает callback_data = 'button3'. То есть, если я нажму первую инлайн кнопку, которая отправляет callback_data = 'button2', то process_callback_button23 срабатывает, а если нажму вторую, которая отправляет callback_data = 'button3', то process_callback_button23 не реагирует вообще.

Создавать для каждой кнопки отдельный handler я не захотел, т.к. действие, по сути, одно и тоже, мне главное передать в function1 то, какую кнопку нажал пользователь.

Вопрос в целом, такой же как и в заголовке: 'Как в callback handler обработать один из нескольких возможных запросов?'


Ответы (1 шт):

Автор решения: oleksandrigo

Попробуй так

@dp.callback_query_handler(text_startswith="button")
#Или так
@dp.callback_query_handler(lambda call: call.data=="button2" or call.data=="button3")
→ Ссылка