Files

30 lines
1.1 KiB
Python
Raw Permalink Normal View History

2025-07-27 22:17:28 +03:00
from typing import Any, Awaitable, Callable, Dict
from aiogram import BaseMiddleware, Bot
from aiogram.types import TelegramObject
from sqlalchemy import select
2025-09-25 22:37:54 +03:00
from loguru import logger
from database import async_session_, Worker
2025-07-27 22:17:28 +03:00
2025-09-25 22:37:54 +03:00
class SessionMiddleware(BaseMiddleware):
2025-07-27 22:17:28 +03:00
sessions_in_memory_db = set()
2025-09-25 22:37:54 +03:00
2025-07-27 22:17:28 +03:00
async def __call__(
self,
handler: Callable[[TelegramObject, Dict[str, Any]], Awaitable[Any]],
event: TelegramObject,
data: Dict[str, Any]
) -> Any:
2025-09-25 22:37:54 +03:00
logger.info("Session check")
2025-07-27 22:17:28 +03:00
event_data = event.message or event.callback_query
user = event_data.from_user.id
if user not in self.sessions_in_memory_db:
async with async_session_() as session:
2025-09-25 22:37:54 +03:00
result = await session.execute(select(Worker).where(Worker.telegram_id == event_data.from_user.id))
user_in_db = result.scalars().first()
if not user_in_db:
data["through_registration"] = True
else:
self.sessions_in_memory_db.add(user)
return await handler(event, data)