from typing import Any, Awaitable, Callable, Dict from aiogram import BaseMiddleware from aiogram.types import TelegramObject, User from database import upsert_user class UserMiddleware(BaseMiddleware): async def __call__( self, handler: Callable[[TelegramObject, Dict[str, Any]], Awaitable[Any]], event: TelegramObject, data: Dict[str, Any], ) -> Any: if user := data.get("event_from_user"): await self._process_user(user) return await handler(event, data) async def _process_user(self, user: User) -> None: await upsert_user( tg_id=user.id, username=user.username, first_name=user.first_name, last_name=user.last_name, language_code=user.language_code, is_bot=user.is_bot, )