tgs / bot /middlewares /auth.py
AZILS's picture
Upload 119 files
054900e verified
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)