30 lines
863 B
Python
30 lines
863 B
Python
from collections.abc import Awaitable, Callable
|
|
from typing import Any
|
|
|
|
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,
|
|
)
|