added sending logs to the admin chat
This commit is contained in:
@ -1 +1,3 @@
|
||||
BOT_TOKEN = "..." # Токен бота получать у @BotFather
|
||||
BOT_TOKEN = "..." # Токен бота получать у @BotFather
|
||||
ADMIN_CHAT_ID = -1001111111111 # ID админ-чата получать у @username_to_id_bot
|
||||
LOG_THREAD_ID = 2 # ID топика, брать из ссылки сообщения
|
@ -1,6 +1,6 @@
|
||||
<div align="center">
|
||||
<h1 align="center">LGBot</h1>
|
||||
<p align="center">Бот-модератор для @linux_gaming_ru </p>
|
||||
<p align="center">Бот-администратор для @linux_gaming_ru </p>
|
||||
</div>
|
||||
|
||||
## Список дел
|
||||
@ -15,7 +15,7 @@
|
||||
- [ ] Удаление сообщений с матом
|
||||
- [ ] Удаление рекламы
|
||||
|
||||
### Установка зависимостей (через pyenv)
|
||||
### Установка зависимостей (pyenv)
|
||||
|
||||
```sh
|
||||
pyenv install 3.11.0
|
||||
@ -30,7 +30,7 @@ pip install -r requirements.txt
|
||||
|
||||
### Настройка
|
||||
|
||||
Создатите файл **.env** и внесите в него ваш токен, который вы получили у @BotFather.
|
||||
Создайте файл **.env** и внесите в него токен бота, ID админ-чата и топика.
|
||||
|
||||
### Запуск
|
||||
|
||||
|
80
src/action_reporter.py
Normal file
80
src/action_reporter.py
Normal file
@ -0,0 +1,80 @@
|
||||
from telebot.async_telebot import AsyncTeleBot
|
||||
from telebot.types import Message
|
||||
import logging
|
||||
from database import db
|
||||
|
||||
# Инициализация
|
||||
class ActionReporter:
|
||||
def __init__(self, bot: AsyncTeleBot, log_chat_id: int, log_thread_id: int):
|
||||
self.bot = bot
|
||||
self.log_chat_id = log_chat_id
|
||||
self.log_thread_id = log_thread_id
|
||||
|
||||
# Получает информацию о пользователе из базы данных
|
||||
async def _get_user_info(self, user_id: int) -> str:
|
||||
user_info = db.get_user(user_id)
|
||||
if user_info:
|
||||
|
||||
# Вытаскиваем данные с кортежа
|
||||
_, nickname, tag = user_info
|
||||
|
||||
# Формируем справку о пользователе
|
||||
text = "👤 <b>Пользователь:</b>\n"
|
||||
if nickname:
|
||||
text += f"• Name: <code>{nickname}</code>\n"
|
||||
if tag:
|
||||
text += f"• Tag: <code>@{tag}</code>\n"
|
||||
text += f"• ID: <code>{user_id}</code>"
|
||||
|
||||
return text
|
||||
|
||||
# Получает информацию об администраторе
|
||||
async def _get_admin_info(self, admin_id: int) -> str:
|
||||
admin_info = db.get_user(admin_id)
|
||||
if admin_info:
|
||||
|
||||
# Вытаскиваем данные с кортежа
|
||||
_, nickname, tag = admin_info
|
||||
|
||||
# Формируем справку об администраторе
|
||||
text = "🛡 <b>Администратор:</b>\n"
|
||||
if nickname:
|
||||
text += f"• Name: <code>{nickname}</code>\n"
|
||||
if tag:
|
||||
text += f"• Tag: <code>@{tag}</code>\n"
|
||||
text += f"• ID: <code>{admin_id}</code>"
|
||||
|
||||
return text
|
||||
|
||||
# Отправляет лог действия в админ-чат
|
||||
async def log_action(self, action: str, user_id: int, admin_id: int, reason: str, duration: str):
|
||||
try:
|
||||
|
||||
# Получаем информацию о пользователе и администраторе
|
||||
user_info = await self._get_user_info(user_id)
|
||||
admin_info = await self._get_admin_info(admin_id)
|
||||
|
||||
# Формируем сообщение
|
||||
msg = f"⚙️ <b>Действие:</b> {action}\n"
|
||||
|
||||
if duration:
|
||||
msg += f"⏱ <b>Длительность:</b> {duration}\n"
|
||||
|
||||
if reason:
|
||||
msg += f"📝 <b>Причина:</b> <i>{reason}</i>\n"
|
||||
|
||||
msg += f"\n{user_info}\n\n{admin_info}"
|
||||
|
||||
# Отправляем сообщение
|
||||
await self.bot.send_message(self.log_chat_id, msg, message_thread_id=self.log_thread_id)
|
||||
|
||||
except Exception as e:
|
||||
logging.error(f"Ошибка отправки лога: {str(e)}")
|
||||
|
||||
# Создаем глобальный экземпляр для импорта
|
||||
action_reporter = None
|
||||
|
||||
# Инициализирует логгер модерации
|
||||
def init_action_reporter(bot: AsyncTeleBot, log_chat_id: int, log_thread_id: int):
|
||||
global action_reporter
|
||||
action_reporter = ActionReporter(bot, log_chat_id, log_thread_id)
|
@ -12,11 +12,16 @@ from logger import setup_logging
|
||||
|
||||
from database import db
|
||||
|
||||
from action_reporter import init_action_reporter
|
||||
|
||||
from config import MODULES_DIR
|
||||
|
||||
load_dotenv() # Загружаем токен бота из .env
|
||||
bot = AsyncTeleBot(os.getenv("BOT_TOKEN"), parse_mode="html")
|
||||
|
||||
# Загружаем ID админ-чата из .env и инициализируемся для логов в чат
|
||||
init_action_reporter(bot, os.getenv("ADMIN_CHAT_ID"), os.getenv("LOG_THREAD_ID"))
|
||||
|
||||
logger = logging.getLogger(__name__) # Получаем логгер для текущего модуля
|
||||
|
||||
class UserUpdateMiddleware(BaseMiddleware):
|
||||
|
@ -4,6 +4,8 @@ import asyncio
|
||||
import logging
|
||||
from database import db
|
||||
|
||||
from action_reporter import action_reporter
|
||||
|
||||
from config import COMMAND_MESSAGES
|
||||
|
||||
logger = logging.getLogger(__name__) # Получаем логгер для текущего модуля
|
||||
@ -211,6 +213,15 @@ def register_handlers(bot: AsyncTeleBot): # Регистрирует все об
|
||||
try:
|
||||
await bot.ban_chat_member(message.chat.id, target_user.id)
|
||||
|
||||
# Отправляем лог в админ-чат
|
||||
await action_reporter.log_action(
|
||||
action="БАН",
|
||||
user_id=target_user.id,
|
||||
admin_id=message.from_user.id,
|
||||
reason=reason,
|
||||
duration=None
|
||||
)
|
||||
|
||||
# Отправляем сообщения, что пользователь получил бан
|
||||
await send_message(chat_id, COMMAND_MESSAGES['banned'])
|
||||
logger.info(f"Пользователь {target_user.id} забанен администратором {message.from_user.id}.")
|
||||
|
@ -5,6 +5,8 @@ import logging
|
||||
import time
|
||||
from database import db
|
||||
|
||||
from action_reporter import action_reporter
|
||||
|
||||
from config import COMMAND_MESSAGES
|
||||
|
||||
logger = logging.getLogger(__name__) # Получаем логгер для текущего модуля
|
||||
@ -195,8 +197,7 @@ def register_handlers(bot: AsyncTeleBot): # Регистрирует все об
|
||||
identifier = parts_msg[1].strip()
|
||||
time_arg = parts_msg[2]
|
||||
reason = extract_reason(parts_msg[3:])
|
||||
print(identifier)
|
||||
|
||||
|
||||
# Поиск по ID
|
||||
if identifier.isdigit():
|
||||
|
||||
@ -343,6 +344,15 @@ def register_handlers(bot: AsyncTeleBot): # Регистрирует все об
|
||||
# Форматирование времени
|
||||
time_display = format_time(mute_seconds)
|
||||
|
||||
# Отправляем лог в админ-чат
|
||||
await action_reporter.log_action(
|
||||
action="МУТ",
|
||||
user_id=target_user.id,
|
||||
admin_id=message.from_user.id,
|
||||
reason=reason,
|
||||
duration=time_display
|
||||
)
|
||||
|
||||
# Отправляем сообщения, что пользователь получил мут
|
||||
await send_message(chat_id, COMMAND_MESSAGES['muted'].format(time_display=time_display))
|
||||
logger.info(f"Пользователь {target_user.id} получил мут на {time_display} от администратора {message.from_user.id}.")
|
||||
|
@ -4,6 +4,8 @@ import asyncio
|
||||
import logging
|
||||
from database import db
|
||||
|
||||
from action_reporter import action_reporter
|
||||
|
||||
from config import COMMAND_MESSAGES
|
||||
|
||||
logger = logging.getLogger(__name__) # Получаем логгер для текущего модуля
|
||||
@ -143,6 +145,15 @@ def register_handlers(bot: AsyncTeleBot): # Регистрирует все об
|
||||
# Выполняем разбан
|
||||
try:
|
||||
await bot.unban_chat_member(message.chat.id, target_user.id)
|
||||
|
||||
# Отправляем лог в админ-чат
|
||||
await action_reporter.log_action(
|
||||
action="РАЗБАН",
|
||||
user_id=target_user.id,
|
||||
admin_id=message.from_user.id,
|
||||
reason=None,
|
||||
duration=None
|
||||
)
|
||||
|
||||
# Отправляем сообщения, что пользователь получил разбан
|
||||
await send_message(chat_id, COMMAND_MESSAGES['unbanned'])
|
||||
|
@ -4,6 +4,8 @@ import asyncio
|
||||
import logging
|
||||
from database import db
|
||||
|
||||
from action_reporter import action_reporter
|
||||
|
||||
from config import COMMAND_MESSAGES
|
||||
|
||||
logger = logging.getLogger(__name__) # Получаем логгер для текущего модуля
|
||||
@ -159,6 +161,15 @@ def register_handlers(bot: AsyncTeleBot): # Регистрирует все об
|
||||
user_id=target_user.id,
|
||||
permissions=permissions
|
||||
)
|
||||
|
||||
# Отправляем лог в админ-чат
|
||||
await action_reporter.log_action(
|
||||
action="РАЗМУТ",
|
||||
user_id=target_user.id,
|
||||
admin_id=message.from_user.id,
|
||||
reason=None,
|
||||
duration=None
|
||||
)
|
||||
|
||||
# Отправляем сообщения, что пользователь получил размут
|
||||
await send_message(chat_id, COMMAND_MESSAGES['unmuted'])
|
||||
|
Reference in New Issue
Block a user