Files
Solo_bot/middlewares/message_handler.py
T

47 lines
1.9 KiB
Python

from collections.abc import Awaitable, Callable
from typing import Any, Dict, Union
from aiogram import BaseMiddleware
from aiogram.types import CallbackQuery, Message, TelegramObject
class MessageHandlerMiddleware(BaseMiddleware):
"""
Middleware для обработки сообщений и callback-запросов.
Добавляет в контекст обработчика следующие данные:
- chat_id: ID чата или пользователя
- target_message: Объект сообщения для ответа или редактирования
- is_callback: Флаг, указывающий, является ли запрос callback-запросом
"""
async def __call__(
self,
handler: Callable[[TelegramObject, dict[str, Any]], Awaitable[Any]],
event: Message | CallbackQuery,
data: dict[str, Any],
) -> Any:
"""
Обрабатывает входящее событие и добавляет в контекст необходимые данные.
Args:
handler: Обработчик события.
event: Событие (сообщение или callback-запрос).
data: Словарь с данными контекста.
Returns:
Any: Результат выполнения обработчика.
"""
# Определяем тип события и извлекаем нужные данные
if isinstance(event, CallbackQuery):
data["chat_id"] = event.from_user.id
data["target_message"] = event.message
data["is_callback"] = True
else:
data["chat_id"] = event.chat.id
data["target_message"] = event
data["is_callback"] = False
# Вызываем следующий обработчик
return await handler(event, data)