import logging import time from aiogram.exceptions import TelegramBadRequest from config import bot from database import get_user_data, get_user_data_ban, save_user_data, save_user_data_ban logger = logging.getLogger("antispam") STICKER_LIMIT = 15 STICKER_WINDOW_SECONDS = 60 STICKER_BAN_SECONDS = 300 COMMAND_WARNING_AT = 3 COMMAND_MUTE_AT = 5 COMMAND_WINDOW_SECONDS = 60 COMMAND_MUTE_SECONDS = 600 async def anti_DuDo(user_id: int, message, now: float) -> None: chat_id = message.chat.id username = message.from_user.username or message.from_user.full_name user_info = get_user_data(user_id, chat_id) if not user_info: save_user_data( user_id=user_id, chat_id=chat_id, count=0, start_time=now, ban_trigger=False, ban_time=0, username=username, ) user_info = get_user_data(user_id, chat_id) count = user_info[2] start_time = user_info[3] ban_trigger = bool(user_info[4]) ban_time = user_info[5] if username != user_info[6]: save_user_data(user_id, chat_id, username=username) if ban_trigger: if now - ban_time >= STICKER_BAN_SECONDS: save_user_data( user_id, chat_id, count=0, start_time=now, ban_trigger=False, ban_time=0, username=username, ) await bot.send_message(chat_id, f"Надеюсь, {username}, твое злобное дудо остыло...") ban_trigger = False count = 0 else: try: await message.delete() except TelegramBadRequest: pass return if now - start_time >= STICKER_WINDOW_SECONDS: count = 0 start_time = now count += 1 save_user_data(user_id, chat_id, count=count, start_time=start_time, username=username) if count >= STICKER_LIMIT: save_user_data(user_id, chat_id, ban_trigger=True, ban_time=now, username=username) await bot.send_message( chat_id, ( f"⚠️ {username}, отдохни 5 минут, лови АнтиДудо!\n\n" "Хочешь узнать время своего бана — жми /info_ban" ), ) try: await message.delete() except TelegramBadRequest: pass async def call_verification(user_id: int, message, command: str) -> None: now = time.time() chat_id = message.chat.id username = message.from_user.username or message.from_user.full_name user_ban_info = get_user_data_ban(user_id, chat_id, command) if not user_ban_info: save_user_data_ban(user_id, chat_id, command, count=1, ban_time_inf=now) return count = user_ban_info[3] last_time = user_ban_info[4] if now - last_time >= COMMAND_WINDOW_SECONDS: count = 0 count += 1 save_user_data_ban(user_id, chat_id, command, count=count, ban_time_inf=now) if count == COMMAND_WARNING_AT: await bot.send_message(chat_id, f"⚠️ {username}, не злоупотребляй командой /{command}") if count >= COMMAND_MUTE_AT: member = await bot.get_chat_member(chat_id, user_id) if member.status in ["administrator", "creator"]: await bot.send_message( chat_id, f"❗️ {username} нельзя замутить: статус {member.status}.", ) return await bot.restrict_chat_member(chat_id, user_id, until_date=int(now + COMMAND_MUTE_SECONDS)) await bot.send_message( chat_id, f"{username} был замучен на 10 минут за злоупотребление командой /{command}.", ) save_user_data_ban(user_id, chat_id, command, count=0, ban_time_inf=now)