Ловить событие телеграм бот

Прошу помочь по телеграм боту

InlineKeyboardButton(
      text="✅ Добавить в корзину",                                          
      callback_data='2',
InlineKeyboardButton(
      text="❌ Удалить из корзины",
      callback_data='3',
 )

Возникает проблема, как мне ловить событие кнопок по тексту а не по callback, когда я кликаю я получаю обе варианта

call.message.reply_markup.inline_keyboard[0]

прошу помочь

вот код обработчика

@dp.callback_query_handler()
async def byuing_pear(call: CallbackQuery):
print(call.message)
    if call.message.reply_markup.inline_keyboard[0][0].text == '✅ Добавить в корзину':
        product_id = call.message.reply_markup.inline_keyboard[0][0].callback_data
        print('0')
        await call.message.answer(call.message)
    elif call.message.reply_markup.inline_keyboard[0][0].text == '❌ Удалить из корзины':
        product_id = call.message.reply_markup.inline_keyboard[0][0].callback_data
        print('1')

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

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

У Вас логика построения приложения неправильная. Зачем Вам обрабатывать текст кнопки, когда есть уникальный идентификатор callback_data?

Плюс вот это: @dp.callback_query_handler() значит, что абсолютно все коллбэки будут приходить в эту функцию, а оно вам надо? :)

Вместо этого используйте декоратор так: @dp.callback_query_handler(text='1')

Это значит, что эта функция запустится только тогда, когда callback_data у нажатой пользователем кнопки = 1.


Плохо, когда одна функция (или обработчик, в Вашем случае) выполняет больше одной задачи - в Вашем случае, добавление и удаление с корзины.

Хорошо, когда логика разделена:

cart_cb = CallbackData("Cart", "product_id", "action")

# Тут измените кнопки на свои, я просто привёл пример, как лучше назвать callback_data
buttons = [
    InlineKeyboardButton(text="✅ Добавить в корзину", callback_data=cart_cb.new(product_id=123, action="add")),
    InlineKeyboardButton(text="❌ Удалить из корзины", callback_data=cart_cb.new(product_id=123, action="delete"))
]

...


@dp.callback_query_handler(cart_cb.filter(action=["add"]))
async def add_to_cart_handler(call: CallbackQuery, callback_data: dict):
    product_id = int(callback_data.get("product_id")) # 123
    print('Сработало нажатие на кнопку "Добавить в корзину!"')
    
    # Здесь Ваша логика на добавление товара в корзину


@dp.callback_query_handler(cart_cb.filter(action=["delete"]))
async def delete_from_cart_handler(call: CallbackQuery, callback_data: dict):
    product_id = int(callback_data.get("product_id")) # 123
    print('Сработало нажатие на кнопку "Удалить из корзины!"')

    # Здесь Ваша логика на удаление товара из корзины

P.S. В примере используется фабрика коллбэков от aiogram, это очень удобно и практично, почитать подробнее можете здесь.

→ Ссылка