@Mister25

Как получить callback_data из апдейта в aiogram?

Необходимо до стадии хендлера с помощью мидлваря получить callback_data кнопки, которую нажал юзер для дальнейшей генерации ответа. Дело в том, что количество кнопок в inline клавиатуре неизвестно, его задаёт юзер в "админ панеле" и неизвестно сколько callback_query нужно создать. Сколько бы я не пытался, получаю любую информацию, кроме того самого callback_data.
  • Вопрос задан
  • 58 просмотров
Пригласить эксперта
Ответы на вопрос 3
Wispik
@Wispik
Добавь этим кнопкам одинаковый префикс (например prefix_btn1, prefix_btn2, prefix_btn3 ...) И создай один callback_query, для F.data.startswith('prefix_')
Ответ написан
Комментировать
Используйте Callback Data Factory
Ответ написан
Комментировать
@ProKraster
Вот тебе два решения, для aiogram 2x и 3x

aiogram 2x
from aiogram import types
from aiogram.dispatcher.middlewares import BaseMiddleware

class CallbackDataMiddleware(BaseMiddleware):
    async def on_pre_process_callback_query(self, callback_query: types.CallbackQuery, data: dict):
        # Здесь можно получить callback_data
        callback_data = callback_query.data
        # Добавляем callback_data в data, чтобы оно было доступно в хендлере
        data['callback_data'] = callback_data
        print(f"Callback Data: {callback_data}")


aiogram 3x
from aiogram import BaseMiddleware
from aiogram.types import CallbackQuery


class CallbackDataMiddleware(BaseMiddleware):
    async def __call__(self, handler, event: CallbackQuery, data: dict):
        # Здесь мы можем извлечь callback_data
        callback_data = event.data
        data['callback_data'] = callback_data
        print(f"Callback Data: {callback_data}")
        return await handler(event, data)
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
CTRL+ Москва
от 250 000 до 320 000 ₽
CTRL+ Москва
от 200 000 до 300 000 ₽
CTRL+ Белград
от 250 000 до 320 000 ₽
22 нояб. 2024, в 00:55
500 руб./за проект
21 нояб. 2024, в 23:30
300000 руб./за проект
21 нояб. 2024, в 22:21
3000 руб./в час