fix session middleware
This commit is contained in:
@@ -4,7 +4,7 @@ from dotenv import load_dotenv
|
||||
from aiogram import Dispatcher, Bot
|
||||
from handlers import *
|
||||
from keyboards import set_main_menu
|
||||
from middlewares import AccessCheckMiddleware
|
||||
from middlewares import SessionMiddleware
|
||||
|
||||
load_dotenv(".env")
|
||||
bot = Bot(token=os.getenv("TOKEN"))
|
||||
@@ -16,7 +16,7 @@ async def main() -> None:
|
||||
dp.startup.register(set_main_menu)
|
||||
dp.include_router(registration_router)
|
||||
dp.include_router(admin_router)
|
||||
dp.update.outer_middleware(AccessCheckMiddleware())
|
||||
dp.update.outer_middleware(SessionMiddleware())
|
||||
dp.include_router(orders_router)
|
||||
dp.include_router(components_router)
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
from .outer_middlewares import AccessCheckMiddleware
|
||||
from .outer_middlewares import SessionMiddleware
|
||||
|
||||
|
||||
__all__ = ["AccessCheckMiddleware"]
|
||||
__all__ = ["SessionMiddleware"]
|
||||
@@ -1,29 +1,29 @@
|
||||
import logging
|
||||
from typing import Any, Awaitable, Callable, Dict
|
||||
from aiogram import BaseMiddleware, Bot
|
||||
from aiogram.types import TelegramObject
|
||||
from database import async_session_, Worker
|
||||
from sqlalchemy import select
|
||||
from loguru import logger
|
||||
from database import async_session_, Worker
|
||||
|
||||
|
||||
|
||||
class AccessCheckMiddleware(BaseMiddleware):
|
||||
class SessionMiddleware(BaseMiddleware):
|
||||
sessions_in_memory_db = set()
|
||||
|
||||
async def __call__(
|
||||
self,
|
||||
handler: Callable[[TelegramObject, Dict[str, Any]], Awaitable[Any]],
|
||||
event: TelegramObject,
|
||||
data: Dict[str, Any]
|
||||
) -> Any:
|
||||
logger.info("Session check")
|
||||
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:
|
||||
async with session.begin():
|
||||
result = await session.execute(select(Worker).where(Worker.telegram_id == event_data.from_user.id))
|
||||
user = result.scalars().first()
|
||||
if user:
|
||||
self.sessions_in_memory_db.add(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)
|
||||
return None
|
||||
|
||||
|
||||
Reference in New Issue
Block a user