29 lines
848 B
Python
29 lines
848 B
Python
from typing import Any, Awaitable, Callable, Dict
|
|
|
|
from aiogram import BaseMiddleware
|
|
from aiogram.types import TelegramObject, User
|
|
|
|
from utils.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,
|
|
)
|