31 lines
866 B
Python
31 lines
866 B
Python
|
from cachetools import TTLCache
|
|||
|
from typing import Any, Awaitable, Callable, Dict
|
|||
|
|
|||
|
from aiogram import BaseMiddleware
|
|||
|
from aiogram.types import Message, User
|
|||
|
|
|||
|
|
|||
|
class ThrottlingMiddleware(BaseMiddleware):
|
|||
|
throt = TTLCache(maxsize=10_000, ttl=1)
|
|||
|
|
|||
|
async def __call__(
|
|||
|
self,
|
|||
|
handler: Callable[[Message, Dict[str, Any]], Awaitable[Any]],
|
|||
|
event: Message,
|
|||
|
data: Dict[str, Any],
|
|||
|
) -> Any:
|
|||
|
user: User = data["event_from_user"]
|
|||
|
|
|||
|
if user.id in self.throt:
|
|||
|
count = self.throt[user.id] + 1
|
|||
|
self.throt[user.id] = count
|
|||
|
|
|||
|
if count == 4:
|
|||
|
return await data['bot'].send_message(user.id, ('Не спамьте!'))
|
|||
|
elif count > 3:
|
|||
|
return
|
|||
|
else:
|
|||
|
self.throt[user.id] = 0
|
|||
|
|
|||
|
return await handler(event, data)
|