29 lines
1.0 KiB
Python
29 lines
1.0 KiB
Python
from aiogram.dispatcher.middlewares.base import BaseMiddleware
|
|
from aiogram.types import TelegramObject
|
|
import time
|
|
|
|
|
|
class AntiSpamMiddleware(BaseMiddleware):
|
|
def __init__(self, rate_limit=1):
|
|
super().__init__()
|
|
self.rate_limit = rate_limit
|
|
self.users = {}
|
|
|
|
async def __call__(self, handler, event: TelegramObject, data: dict):
|
|
user_id = None
|
|
|
|
# Определяем user_id для события
|
|
if hasattr(event, "from_user") and event.from_user:
|
|
user_id = event.from_user.id
|
|
|
|
if user_id:
|
|
now = time.time()
|
|
last_time = self.users.get(user_id)
|
|
if last_time and now - last_time < self.rate_limit:
|
|
# Если сообщение отправлено слишком быстро, игнорируем
|
|
return
|
|
self.users[user_id] = now
|
|
|
|
# Если прошло достаточно времени, продолжаем обработку
|
|
return await handler(event, data)
|