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">
|
<div align="center">
|
||||||
<h1 align="center">LGBot</h1>
|
<h1 align="center">LGBot</h1>
|
||||||
<p align="center">Бот-модератор для @linux_gaming_ru </p>
|
<p align="center">Бот-администратор для @linux_gaming_ru </p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
## Список дел
|
## Список дел
|
||||||
@ -15,7 +15,7 @@
|
|||||||
- [ ] Удаление сообщений с матом
|
- [ ] Удаление сообщений с матом
|
||||||
- [ ] Удаление рекламы
|
- [ ] Удаление рекламы
|
||||||
|
|
||||||
### Установка зависимостей (через pyenv)
|
### Установка зависимостей (pyenv)
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
pyenv install 3.11.0
|
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 database import db
|
||||||
|
|
||||||
|
from action_reporter import init_action_reporter
|
||||||
|
|
||||||
from config import MODULES_DIR
|
from config import MODULES_DIR
|
||||||
|
|
||||||
load_dotenv() # Загружаем токен бота из .env
|
load_dotenv() # Загружаем токен бота из .env
|
||||||
bot = AsyncTeleBot(os.getenv("BOT_TOKEN"), parse_mode="html")
|
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__) # Получаем логгер для текущего модуля
|
logger = logging.getLogger(__name__) # Получаем логгер для текущего модуля
|
||||||
|
|
||||||
class UserUpdateMiddleware(BaseMiddleware):
|
class UserUpdateMiddleware(BaseMiddleware):
|
||||||
|
@ -4,6 +4,8 @@ import asyncio
|
|||||||
import logging
|
import logging
|
||||||
from database import db
|
from database import db
|
||||||
|
|
||||||
|
from action_reporter import action_reporter
|
||||||
|
|
||||||
from config import COMMAND_MESSAGES
|
from config import COMMAND_MESSAGES
|
||||||
|
|
||||||
logger = logging.getLogger(__name__) # Получаем логгер для текущего модуля
|
logger = logging.getLogger(__name__) # Получаем логгер для текущего модуля
|
||||||
@ -211,6 +213,15 @@ def register_handlers(bot: AsyncTeleBot): # Регистрирует все об
|
|||||||
try:
|
try:
|
||||||
await bot.ban_chat_member(message.chat.id, target_user.id)
|
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'])
|
await send_message(chat_id, COMMAND_MESSAGES['banned'])
|
||||||
logger.info(f"Пользователь {target_user.id} забанен администратором {message.from_user.id}.")
|
logger.info(f"Пользователь {target_user.id} забанен администратором {message.from_user.id}.")
|
||||||
|
@ -5,6 +5,8 @@ import logging
|
|||||||
import time
|
import time
|
||||||
from database import db
|
from database import db
|
||||||
|
|
||||||
|
from action_reporter import action_reporter
|
||||||
|
|
||||||
from config import COMMAND_MESSAGES
|
from config import COMMAND_MESSAGES
|
||||||
|
|
||||||
logger = logging.getLogger(__name__) # Получаем логгер для текущего модуля
|
logger = logging.getLogger(__name__) # Получаем логгер для текущего модуля
|
||||||
@ -195,8 +197,7 @@ def register_handlers(bot: AsyncTeleBot): # Регистрирует все об
|
|||||||
identifier = parts_msg[1].strip()
|
identifier = parts_msg[1].strip()
|
||||||
time_arg = parts_msg[2]
|
time_arg = parts_msg[2]
|
||||||
reason = extract_reason(parts_msg[3:])
|
reason = extract_reason(parts_msg[3:])
|
||||||
print(identifier)
|
|
||||||
|
|
||||||
# Поиск по ID
|
# Поиск по ID
|
||||||
if identifier.isdigit():
|
if identifier.isdigit():
|
||||||
|
|
||||||
@ -343,6 +344,15 @@ def register_handlers(bot: AsyncTeleBot): # Регистрирует все об
|
|||||||
# Форматирование времени
|
# Форматирование времени
|
||||||
time_display = format_time(mute_seconds)
|
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))
|
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}.")
|
logger.info(f"Пользователь {target_user.id} получил мут на {time_display} от администратора {message.from_user.id}.")
|
||||||
|
@ -4,6 +4,8 @@ import asyncio
|
|||||||
import logging
|
import logging
|
||||||
from database import db
|
from database import db
|
||||||
|
|
||||||
|
from action_reporter import action_reporter
|
||||||
|
|
||||||
from config import COMMAND_MESSAGES
|
from config import COMMAND_MESSAGES
|
||||||
|
|
||||||
logger = logging.getLogger(__name__) # Получаем логгер для текущего модуля
|
logger = logging.getLogger(__name__) # Получаем логгер для текущего модуля
|
||||||
@ -143,6 +145,15 @@ def register_handlers(bot: AsyncTeleBot): # Регистрирует все об
|
|||||||
# Выполняем разбан
|
# Выполняем разбан
|
||||||
try:
|
try:
|
||||||
await bot.unban_chat_member(message.chat.id, target_user.id)
|
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'])
|
await send_message(chat_id, COMMAND_MESSAGES['unbanned'])
|
||||||
|
@ -4,6 +4,8 @@ import asyncio
|
|||||||
import logging
|
import logging
|
||||||
from database import db
|
from database import db
|
||||||
|
|
||||||
|
from action_reporter import action_reporter
|
||||||
|
|
||||||
from config import COMMAND_MESSAGES
|
from config import COMMAND_MESSAGES
|
||||||
|
|
||||||
logger = logging.getLogger(__name__) # Получаем логгер для текущего модуля
|
logger = logging.getLogger(__name__) # Получаем логгер для текущего модуля
|
||||||
@ -159,6 +161,15 @@ def register_handlers(bot: AsyncTeleBot): # Регистрирует все об
|
|||||||
user_id=target_user.id,
|
user_id=target_user.id,
|
||||||
permissions=permissions
|
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'])
|
await send_message(chat_id, COMMAND_MESSAGES['unmuted'])
|
||||||
|
Reference in New Issue
Block a user