43 lines
1.3 KiB
Python
43 lines
1.3 KiB
Python
import logging
|
|
from typing import Any, Awaitable, Callable, Dict
|
|
from aiogram import BaseMiddleware
|
|
from aiogram.types import TelegramObject
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
class LoggingMiddleware(BaseMiddleware):
|
|
"""
|
|
A simple middleware that logs details about incoming events.
|
|
"""
|
|
async def __call__(
|
|
self,
|
|
handler: Callable[[TelegramObject, Dict[str, Any]], Awaitable[Any]],
|
|
event: TelegramObject,
|
|
data: Dict[str, Any],
|
|
) -> Any:
|
|
logger.debug("Received event: %s", event.__class__.__name__)
|
|
try:
|
|
result = await handler(event, data)
|
|
logger.debug("Event %s handled successfully", event.__class__.__name__)
|
|
return result
|
|
except Exception as e:
|
|
logger.error("Error handling event %s: %s", event.__class__.__name__, e, exc_info=True)
|
|
raise e
|
|
|
|
|
|
class I18nMiddleware(BaseMiddleware):
|
|
async def __call__(
|
|
self,
|
|
handler: Callable[[TelegramObject, Dict[str, Any]], Awaitable[Any]],
|
|
event: TelegramObject,
|
|
data: Dict[str, Any],
|
|
) -> Any:
|
|
from_user = data.get("event_from_user")
|
|
if from_user and from_user.language_code:
|
|
data["locale"] = from_user.language_code
|
|
else:
|
|
data["locale"] = "en"
|
|
|
|
return await handler(event, data)
|