Files
myfirstprogram/utils/antispam.py
T
2025-10-19 14:28:41 +03:00

54 lines
1.6 KiB
Python

from datetime import datetime
from functools import wraps
from aiogram import types
from models.state import BotState
from config import Config
from storage.message_storage import save_message
def is_chat_spam(chat_id: int, state: BotState) -> bool:
"""Проверка на спам"""
if chat_id in Config.ADMINS:
return False
now = datetime.now()
if chat_id in state.last_chat_time:
delta = (now - state.last_chat_time[chat_id]).total_seconds()
if delta < Config.ANTISPAM_DELAY:
return True
state.last_chat_time[chat_id] = now
return False
def admin_required(need_level: int):
"""Декоратор для проверки прав администратора (0 = высший уровень)"""
def decorator(func):
@wraps(func)
async def wrapper(message: types.Message, *args, **kwargs):
user_id = message.from_user.id
user_level = Config.ADMINS.get(user_id, 9999) # 9999 = "нет прав"
# чем меньше число, тем выше права
if user_level > need_level:
await message.answer("⛔ У вас нет доступа к этой команде.")
return
return await func(message, *args, **kwargs)
return wrapper
return decorator
def saving(func):
"""Декоратор для сохранения входящего сообщения"""
@wraps(func)
async def wrapper(message: types.Message, *args, **kwargs):
save_message(message.chat.id, message.message_id)
return await func(message, *args, **kwargs)
return wrapper