chore: restructured project

This commit is contained in:
ITQ
2025-03-07 19:32:09 +03:00
parent bfb7ad901a
commit 0a35951c62
178 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)