Files
2026-05-06 20:47:53 +00:00

37 lines
1.3 KiB
Python

from collections.abc import Awaitable, Callable
from typing import Any
from aiogram import BaseMiddleware
from aiogram.types import TelegramObject, User
from database.access.resolution import resolve_actor_from_legacy_ref
from logger import logger
class ActorMiddleware(BaseMiddleware):
async def __call__(
self,
handler: Callable[[TelegramObject, dict[str, Any]], Awaitable[Any]],
event: TelegramObject,
data: dict[str, Any],
) -> Any:
try:
from_user: User | None = data.get("event_from_user")
session = data.get("session")
if (
from_user is not None
and not from_user.is_bot
and session is not None
and getattr(session, "execute", None) is not None
):
data["actor"] = await resolve_actor_from_legacy_ref(session, int(from_user.id))
except Exception as error:
logger.error(f"[ActorMiddleware] Ошибка резолва actor: {error}", exc_info=True)
_session = data.get("session")
if _session is not None:
try:
await _session.rollback()
except Exception:
pass
return await handler(event, data)