В `aiogram` извлечь `callback_data` из нажатой кнопки можно с помощью хендлера для `CallbackQuery`. Если вы хотите использовать middleware для получения `callback_data` перед передачей управления хендлеру, это вполне возможно.
Ниже приведен пример реализации такого middleware:
```python
from aiogram import Bot, Dispatcher, types
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram.dispatcher import MiddlewareMixin
API_TOKEN = 'YOUR_BOT_TOKEN'
bot = Bot(token=API_TOKEN)
storage = MemoryStorage()
dp = Dispatcher(bot, storage=storage)
class CallbackDataMiddleware(MiddlewareMixin):
async def on_pre_process_callback_query(self, callback_query: types.CallbackQuery, data: dict):
# Извлекаем callback_data
callback_data = callback_query.data
data['callback_data'] = callback_data
print(f'Callback data: {callback_data}') # Выводим в консоль или обрабатываем по-другому
@dp.middleware.setup(CallbackDataMiddleware())
@dp.callback_query_handler(lambda c: True) # Можно задать свой фильтр
async def handle_callback_query(callback_query: types.CallbackQuery, data: dict):
# Доступ к callback_data через data['callback_data']
callback_data = data.get('callback_data')
await bot.answer_callback_query(callback_query.id, text=f'Вы нажали кнопку с данными: {callback_data}')
# Здесь добавьте дальнейшую обработку
if __name__ == '__main__':
import logging
from aiogram import executor
logging.basicConfig(level=logging.INFO)
executor.start_polling(dp, skip_updates=True)
```
В этом примере мы создали middleware, которая перехватывает все запросы типа `CallbackQuery` и извлекает `callback_data`, добавляя его в `data` для дальнейшего использования. Мы выводим `callback_data` в консоль, но вы можете обрабатывать его любым другим способом.
Потом в вашем хендлере вы можете получить `callback_data` через словарь `data`, который был модифицирован в middleware. Это позволяет вам иметь доступ к `callback_data` до начала обработки, что может быть полезно для различных целей, включая ведение журнала или дополнительную логику на основе значений.