chore: restructured project

This commit is contained in:
ITQ
2025-03-07 19:32:09 +03:00
parent 4ae5cf7498
commit aa5a6be8a7
169 changed files with 304 additions and 376 deletions
+43
View File
@@ -0,0 +1,43 @@
from collections.abc import Awaitable, Callable
from typing import Any
from aiogram import BaseMiddleware
from aiogram.fsm.context import FSMContext
from aiogram.types import Message
from api.client import AdNovaClient
from api.errors import HTTPError
class AuthMiddleware(BaseMiddleware):
def __init__(self) -> None:
pass
async def __call__(
self,
handler: Callable[[Message, dict[str, Any]], Awaitable[Any]],
event: Message,
data: dict[str, Any],
) -> Any:
state: FSMContext = data["state"]
state_data = await state.get_data()
if "advertiser_id" in state_data:
advertiser_id = state_data["advertiser_id"]
async with AdNovaClient() as client:
try:
advertiser = await client.get_advertiser(advertiser_id)
state_data["authenticated"] = True
state_data["advertiser"] = advertiser.model_dump(
mode="json"
)
except HTTPError:
state_data["authenticated"] = False
state_data["advertiser_id"] = None
else:
state_data["authenticated"] = False
state_data["advertiser_id"] = None
await state.set_data(state_data)
return await handler(event, data)
@@ -0,0 +1,24 @@
from collections.abc import Awaitable, Callable
from typing import Any
from aiogram import BaseMiddleware
from aiogram.types import Message
from cachetools import TTLCache
class ThrottlingMiddleware(BaseMiddleware):
def __init__(self, time_limit: float = 2) -> None:
self.limit = TTLCache(maxsize=10_000, ttl=time_limit)
async def __call__(
self,
handler: Callable[[Message, dict[str, Any]], Awaitable[Any]],
event: Message,
data: dict[str, Any],
) -> Any | None:
if event.chat.id in self.limit:
return None
self.limit[event.chat.id] = None
return await handler(event, data)