Добавлена команда /log

спасибо Евгений Храмов
This commit is contained in:
2026-01-05 16:33:51 +03:00
parent 07dca8009f
commit 9efd418451
4 changed files with 96 additions and 4 deletions

View File

@@ -14,7 +14,8 @@ COMMAND_MESSAGES = {
"<b>📚 Справочник команд администратора</b>\n\n"
"<u>Основные команды:</u>\n"
"• <code>/start</code> - Начало работы\n"
"• <code>/help</code> - Этот справочник\n\n"
"• <code>/help</code> - Этот справочник\n"
"• <code>/log</code> - Инструкция по созданию логов\n\n"
"<u>🛠 Команды модерации:</u>\n"
"• <code>/mute help</code> - Инструкция по муту\n"
"• <code>/unmute help</code> - Снятие мута\n"
@@ -22,6 +23,11 @@ COMMAND_MESSAGES = {
"• <code>/unban help</code> - Снятие бана\n\n"
"<i> Для подробностей по конкретной команде используйте: /команда help</i>"
),
'log': (
"<b>📋 Как создать лог ошибки?</b>\n\n"
"Подробная инструкция по созданию логов для диагностики проблем:\n\n"
"🔗 <a href='https://linux-gaming.ru/t/kak-sozdat-log-oshibki/25'>Перейти к инструкции</a>"
),
'manual_mute': (
"<b>🔇 Команда /mute</b>\n\n"
"<i>Ограничивает права пользователя на указанное время</i>\n\n"

View File

@@ -0,0 +1,36 @@
from telebot.async_telebot import AsyncTeleBot
from telebot.types import Message
import logging
from config import COMMAND_MESSAGES
from utils import send_log_instruction
# Получаем логгер для текущего модуля
logger = logging.getLogger(__name__)
# Регистрирует все обработчики команд
def register_handlers(bot: AsyncTeleBot):
# Обработчик команды /log
@bot.message_handler(commands=['log'])
async def log_command(message: Message):
try:
# Отправляем сообщение
await send_log_instruction(bot, message)
# Записываем действие в логи
logger.info(f"Пользователь {message.from_user.id} запустил /log.")
except Exception as e:
# Отправляем ошибку
await bot.send_message(
chat_id=message.chat.id,
text=COMMAND_MESSAGES['general_error'],
message_thread_id=message.message_thread_id,
)
# Записываем ошибку в логи
logger.error(f"Общая ошибка в log_command: {str(e)}")

View File

@@ -1,10 +1,10 @@
from telebot.async_telebot import AsyncTeleBot
from telebot.types import Message
import asyncio
import os
import logging
from database import db
from utils import send_log_instruction, trigger_contains_log
# Импортируем обработчики команд
from modules.commands.mute import mute_command
@@ -67,4 +67,21 @@ def register_handlers(bot: AsyncTeleBot): # Регистрирует все об
try:
os.remove(photo_path)
except Exception as e:
logger.error(f"Ошибка удаления временного изображения: {str(e)}")
logger.error(f"Ошибка удаления временного изображения: {str(e)}")
# Автоматический обработчик триггерных фраз со словом лог
@bot.message_handler(func=lambda message: message.content_type == "text" and trigger_contains_log(message.text))
async def auto_log_trigger(message: Message):
try:
# Отправляем сообщение
await send_log_instruction(bot, message)
# Записываем действие в логи
logger.info(f"Автоматически отправлена инструкция по логам в ответ на сообщение от {message.from_user.id}.")
except Exception as e:
# Записываем ошибку в логи
logger.error(f"Ошибка в auto_log_trigger: {str(e)}")

View File

@@ -2,6 +2,7 @@ from telebot.async_telebot import AsyncTeleBot
from telebot.types import Message
import asyncio
import logging
import re
from config import COMMAND_MESSAGES
@@ -176,4 +177,36 @@ def format_mute_time(seconds: int) -> str:
elif 2 <= days % 10 <= 4 and (days % 100 < 10 or days % 100 >= 20):
return f"{days} дня"
else:
return f"{days} дней"
return f"{days} дней"
# Отправляет сообщение с инструкцией по логам
async def send_log_instruction(bot: AsyncTeleBot, message: Message):
await bot.send_message(
chat_id=message.chat.id,
text=COMMAND_MESSAGES['log'],
message_thread_id=message.message_thread_id,
disable_web_page_preview=False,
)
# Проверяет наличие триггерных фраз со словом "лог"
def trigger_contains_log(text: str) -> bool:
# Если строка пустая
if not text:
return False
# Список триггерных фраз
triggers = [
r'лог\?',
r'приложите\s+лог',
r'приложи\s+лог'
]
text_lower = text.lower()
for trigger in triggers:
if re.search(trigger, text_lower):
return True
return False