исправление работы списков слов

добавление сброса счётчиков нарушений
This commit is contained in:
2025-10-13 14:20:18 +03:00
parent ab10879c06
commit 69d55a68b9
5 changed files with 161 additions and 3 deletions

View 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)