44 lines
1.3 KiB
Python
44 lines
1.3 KiB
Python
from datetime import datetime
|
|
from functools import wraps
|
|
from aiogram import types
|
|
from models.state import BotState
|
|
from config import Config
|
|
|
|
|
|
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
|
|
|
|
|
|
from functools import wraps
|
|
from aiogram import types
|
|
|
|
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
|