File size: 1,305 Bytes
970583e |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
from __future__ import annotations
from typing import TYPE_CHECKING, Any
from aiogram import BaseMiddleware
from aiogram.types import Message
from loguru import logger
from bot.services.users import add_user, user_exists
from bot.utils.command import find_command_argument
if TYPE_CHECKING:
from collections.abc import Awaitable, Callable
from aiogram.types import TelegramObject
from sqlalchemy.ext.asyncio import AsyncSession
class AuthMiddleware(BaseMiddleware):
async def __call__(
self,
handler: Callable[[TelegramObject, dict[str, Any]], Awaitable[Any]],
event: TelegramObject,
data: dict[str, Any],
) -> Any:
if not isinstance(event, Message):
return await handler(event, data)
session: AsyncSession = data["session"]
message: Message = event
user = message.from_user
if not user:
return await handler(event, data)
if await user_exists(session, user.id):
return await handler(event, data)
referrer = find_command_argument(message.text)
logger.info(f"new user registration | user_id: {user.id} | message: {message.text}")
await add_user(session=session, user=user, referrer=referrer)
return await handler(event, data)
|