forked from Muzifs/LGBot
исправление работы списков слов
добавление сброса счётчиков нарушений
This commit is contained in:
120
src/modules/reset_violations.py
Normal file
120
src/modules/reset_violations.py
Normal file
@@ -0,0 +1,120 @@
|
||||
from telebot.async_telebot import AsyncTeleBot
|
||||
from telebot.types import Message
|
||||
import logging
|
||||
|
||||
from database import db
|
||||
from utils import check_admin_status, delete_messages
|
||||
from config import COMMAND_MESSAGES
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
def register_handlers(bot: AsyncTeleBot):
|
||||
"""Регистрирует обработчик команды сброса нарушений"""
|
||||
|
||||
@bot.message_handler(commands=['reset_violations'])
|
||||
async def reset_violations_command(message: Message):
|
||||
"""Команда для сброса счётчика нарушений пользователя"""
|
||||
|
||||
logger.info(f"Команда /reset_violations получена от пользователя {message.from_user.id}")
|
||||
|
||||
# Проверяем права администратора
|
||||
admin_check = await check_admin_status(bot, message)
|
||||
if admin_check == 1:
|
||||
logger.info(f"Пользователь {message.from_user.id} не является администратором")
|
||||
return
|
||||
|
||||
logger.info(f"Пользователь {message.from_user.id} прошел проверку прав администратора")
|
||||
|
||||
# Определяем целевого пользователя
|
||||
target_user = None
|
||||
target_user_id = None
|
||||
|
||||
# Обработка ответа на сообщение
|
||||
if message.reply_to_message:
|
||||
target_user = message.reply_to_message.from_user
|
||||
target_user_id = target_user.id
|
||||
|
||||
# Обработка по username или ID
|
||||
else:
|
||||
parts = message.text.split(maxsplit=1)
|
||||
|
||||
if len(parts) < 2:
|
||||
await send_temp_message(
|
||||
bot,
|
||||
message,
|
||||
COMMAND_MESSAGES['reset_violations_help']
|
||||
)
|
||||
return
|
||||
|
||||
identifier = parts[1].strip()
|
||||
|
||||
# Попытка получить по username
|
||||
if identifier.startswith('@'):
|
||||
username = identifier[1:]
|
||||
user_data = db.get_user_by_username(username)
|
||||
if user_data:
|
||||
target_user_id = user_data[0]
|
||||
else:
|
||||
await send_temp_message(
|
||||
bot,
|
||||
message,
|
||||
COMMAND_MESSAGES['user_not_found']
|
||||
)
|
||||
return
|
||||
|
||||
# Попытка получить по ID
|
||||
else:
|
||||
try:
|
||||
target_user_id = int(identifier)
|
||||
except ValueError:
|
||||
await send_temp_message(
|
||||
bot,
|
||||
message,
|
||||
COMMAND_MESSAGES['user_not_found']
|
||||
)
|
||||
return
|
||||
|
||||
# Проверяем, что нашли пользователя
|
||||
if not target_user_id:
|
||||
await send_temp_message(
|
||||
bot,
|
||||
message,
|
||||
COMMAND_MESSAGES['user_not_found']
|
||||
)
|
||||
return
|
||||
|
||||
# Получаем информацию о пользователе из базы
|
||||
user_info = db.get_user(target_user_id)
|
||||
|
||||
# Получаем текущее количество нарушений
|
||||
violations_count = db.get_violations_count(target_user_id, message.chat.id)
|
||||
|
||||
# Сбрасываем нарушения
|
||||
deleted_count = db.reset_user_violations(target_user_id, message.chat.id)
|
||||
|
||||
# Формируем сообщение
|
||||
if user_info:
|
||||
_, nickname, tag = user_info
|
||||
user_display = f"<b>{nickname}</b>"
|
||||
if tag:
|
||||
user_display += f" (@{tag})"
|
||||
else:
|
||||
user_display = f"<code>{target_user_id}</code>"
|
||||
|
||||
response = (
|
||||
f"✅ Счётчик нарушений сброшен\n\n"
|
||||
f"👤 Пользователь: {user_display}\n"
|
||||
f"📊 Удалено нарушений: <b>{deleted_count}</b>"
|
||||
)
|
||||
|
||||
await send_temp_message(bot, message, response, time_sleep=30)
|
||||
logger.info(f"Администратор {message.from_user.id} сбросил счётчик нарушений пользователя {target_user_id}")
|
||||
|
||||
async def send_temp_message(bot: AsyncTeleBot, message: Message, text: str, time_sleep: int = 10):
|
||||
"""Отправляет временное сообщение, которое удаляется через указанное время"""
|
||||
await bot.send_message(
|
||||
chat_id=message.chat.id,
|
||||
text=text,
|
||||
message_thread_id=message.message_thread_id,
|
||||
)
|
||||
await delete_messages(bot, message, time_sleep=time_sleep, number_message=2)
|
Reference in New Issue
Block a user