diff --git a/src/action_reporter.py b/src/action_reporter.py
index cf790e2..f737847 100644
--- a/src/action_reporter.py
+++ b/src/action_reporter.py
@@ -1,6 +1,7 @@
from telebot.async_telebot import AsyncTeleBot
from telebot.types import Message
import logging
+import os
from database import db
# Инициализация
@@ -47,7 +48,7 @@ class ActionReporter:
return text
# Отправляет лог действия в админ-чат
- async def log_action(self, action: str, user_id: int, admin_id: int, reason: str, duration: str):
+ async def log_action(self, action: str, user_id: int, admin_id: int, reason: str, duration: str, photo_path: str):
try:
# Получаем информацию о пользователе и администраторе
@@ -64,9 +65,15 @@ class ActionReporter:
msg += f"📝 Причина: {reason}\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)
+
+ # Отправляем лог с изображением
+ if photo_path and os.path.exists(photo_path):
+ with open(photo_path, 'rb') as photo_file:
+ await self.bot.send_photo(self.log_chat_id, photo_file, caption=msg, message_thread_id=self.log_thread_id)
+
+ # Отправляем лог без изображения
+ else:
+ 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)}")
diff --git a/src/modules/ban.py b/src/modules/ban.py
index 0e86069..d6d51e1 100644
--- a/src/modules/ban.py
+++ b/src/modules/ban.py
@@ -26,67 +26,138 @@ async def delete_messages(bot: AsyncTeleBot, message: Message, time_sleep: int):
await bot.delete_message(message.chat.id, message.message_id)
await bot.delete_message(message.chat.id, message.message_id+1)
-def register_handlers(bot: AsyncTeleBot): # Регистрирует все обработчики команд
+# Регистрирует все обработчики команд
+def register_handlers(bot: AsyncTeleBot):
- @bot.message_handler(commands=['ban']) # Обработчик команды /ban
- async def ban_command(message: Message):
+ # Обработчик команды /ban
+ @bot.message_handler(commands=['ban'])
+ async def _ban_command_wrapper(message: Message):
+ await ban_command(bot, message)
- # Отправка сообщения в тему или обычный чат
- send_message = bot.reply_to if message.is_topic_message else bot.send_message
- chat_id = message if message.is_topic_message else message.chat.id
+# Основная функция команды /ban
+async def ban_command(bot: AsyncTeleBot, message: Message, photo_path: str = None):
- # Определяем целевого пользователя
- target_user = None
+ # Отправка сообщения в тему или обычный чат
+ send_message = bot.reply_to if message.is_topic_message else bot.send_message
+ chat_id = message if message.is_topic_message else message.chat.id
- # Определяем причину
- reason = None
+ # Определяем целевого пользователя
+ target_user = None
- # Разбиваем текст сообщения на части
- parts_msg = message.text.split()
+ # Определяем причину
+ reason = None
- # Выводим помощь (/ban help)
- if len(parts_msg) == 2 and parts_msg[1].strip() in ['help', 'помощь']:
- await send_message(chat_id, COMMAND_MESSAGES['manual_ban'])
+ # Разбиваем текст сообщения на части
+ parts_msg = message.text.split()
- # Удаляем сообщения через 30 секунд
- await delete_messages(bot, message, 30)
+ # Выводим помощь (/ban help)
+ if len(parts_msg) == 2 and parts_msg[1].strip() in ['help', 'помощь']:
+ await send_message(chat_id, COMMAND_MESSAGES['manual_ban'])
- return
+ # Удаляем сообщения через 30 секунд
+ await delete_messages(bot, message, 30)
+ return
+
+ try:
+ # Проверяем, является ли отправитель администратором
try:
- # Проверяем, является ли отправитель администратором
- try:
- admin_status = await bot.get_chat_member(message.chat.id, message.from_user.id)
-
- # Проверяем статус администратора (создателя)
- if admin_status.status not in ['administrator', 'creator']:
- await send_message(chat_id, COMMAND_MESSAGES['no_admin_rights'])
-
- # Удаляем сообщения через 5 секунд
- await delete_messages(bot, message, 5)
-
- return
-
- # Проверяем право администратора на бан
- if admin_status.status == 'administrator' and not admin_status.can_restrict_members:
- await send_message(chat_id, COMMAND_MESSAGES['no_restrict_rights'])
-
- # Удаляем сообщения через 5 секунд
- await delete_messages(bot, message, 5)
-
- return
+ admin_status = await bot.get_chat_member(message.chat.id, message.from_user.id)
- except Exception as e:
- await send_message(chat_id, f"⚠️ Ошибка: {str(e)}")
- logger.error(f"Ошибка при получении статуса администратора: {str(e)}")
+ # Проверяем статус администратора (создателя)
+ if admin_status.status not in ['administrator', 'creator']:
+ await send_message(chat_id, COMMAND_MESSAGES['no_admin_rights'])
# Удаляем сообщения через 5 секунд
await delete_messages(bot, message, 5)
return
+
+ # Проверяем право администратора на бан
+ if admin_status.status == 'administrator' and not admin_status.can_restrict_members:
+ await send_message(chat_id, COMMAND_MESSAGES['no_restrict_rights'])
- # Если одно слово, то ответом на сообщение
- if len(parts_msg) == 1:
+ # Удаляем сообщения через 5 секунд
+ await delete_messages(bot, message, 5)
+
+ return
+
+ except Exception as e:
+ await send_message(chat_id, f"⚠️ Ошибка: {str(e)}")
+ logger.error(f"Ошибка при получении статуса администратора: {str(e)}")
+
+ # Удаляем сообщения через 5 секунд
+ await delete_messages(bot, message, 5)
+
+ return
+
+ # Если одно слово, то ответом на сообщение
+ if len(parts_msg) == 1:
+
+ # Если это тема
+ if message.is_topic_message:
+
+ # Если без ответа на сообщение, ошибка
+ if message.message_thread_id == message.reply_to_message.message_id:
+ await asyncio.sleep(3)
+ await bot.delete_message(message.chat.id, message.message_id)
+ return
+
+ # Если с ответом на сообщение
+ else:
+ target_user = message.reply_to_message.from_user
+ reason = extract_reason(parts_msg[1:])
+
+ # Если это обычный чат
+ elif message.reply_to_message and message.is_topic_message is None:
+ target_user = message.reply_to_message.from_user
+ reason = extract_reason(parts_msg[1:])
+
+ # Удаляем сообщение, если команда неправильная
+ else:
+ await asyncio.sleep(3)
+ await bot.delete_message(message.chat.id, message.message_id)
+ return
+
+ else:
+
+ # Если второе слово это тег или ID
+ if parts_msg[1].strip().isdigit() or parts_msg[1].startswith('@'):
+
+ identifier = parts_msg[1].strip()
+ reason = extract_reason(parts_msg[2:])
+
+ # Поиск по ID
+ if identifier.isdigit():
+
+ # Делаем в int и ищем
+ user_info = db.get_user(int(identifier))
+
+ if user_info:
+ # Создаем объект пользователя из данных базы
+ target_user = User(
+ id=user_info[0],
+ first_name=user_info[1],
+ username=user_info[2],
+ is_bot=False
+ )
+
+ # Поиск по тэгу
+ elif identifier.startswith('@'):
+
+ # Убираем @ и ищем
+ user_info = db.get_user_by_username(identifier[1:])
+
+ if user_info:
+ # Создаем объект пользователя из данных базы
+ target_user = User(
+ id=user_info[0],
+ first_name=user_info[1],
+ username=user_info[2],
+ is_bot=False
+ )
+
+ else:
# Если это тема
if message.is_topic_message:
@@ -113,134 +184,70 @@ def register_handlers(bot: AsyncTeleBot): # Регистрирует все об
await bot.delete_message(message.chat.id, message.message_id)
return
- else:
-
- # Если второе слово это тег или ID
- if parts_msg[1].strip().isdigit() or parts_msg[1].startswith('@'):
-
- identifier = parts_msg[1].strip()
- reason = extract_reason(parts_msg[2:])
-
- # Поиск по ID
- if identifier.isdigit():
-
- # Делаем в int и ищем
- user_info = db.get_user(int(identifier))
-
- if user_info:
- # Создаем объект пользователя из данных базы
- target_user = User(
- id=user_info[0],
- first_name=user_info[1],
- username=user_info[2],
- is_bot=False
- )
-
- # Поиск по тэгу
- elif identifier.startswith('@'):
-
- # Убираем @ и ищем
- user_info = db.get_user_by_username(identifier[1:])
-
- if user_info:
- # Создаем объект пользователя из данных базы
- target_user = User(
- id=user_info[0],
- first_name=user_info[1],
- username=user_info[2],
- is_bot=False
- )
-
- else:
-
- # Если это тема
- if message.is_topic_message:
-
- # Если без ответа на сообщение, ошибка
- if message.message_thread_id == message.reply_to_message.message_id:
- await asyncio.sleep(3)
- await bot.delete_message(message.chat.id, message.message_id)
- return
-
- # Если с ответом на сообщение
- else:
- target_user = message.reply_to_message.from_user
- reason = extract_reason(parts_msg[1:])
-
- # Если это обычный чат
- elif message.reply_to_message and message.is_topic_message is None:
- target_user = message.reply_to_message.from_user
- reason = extract_reason(parts_msg[1:])
-
- # Удаляем сообщение, если команда неправильная
- else:
- await asyncio.sleep(3)
- await bot.delete_message(message.chat.id, message.message_id)
- return
-
- # Если пользователь не найден
- if not target_user:
- await send_message(chat_id, COMMAND_MESSAGES['user_not_found'])
-
- # Удаляем сообщения через 5 секунд
- await delete_messages(bot, message, 5)
-
- return
-
- # Проверяем статус целевого пользователя
- try:
- target_status = await bot.get_chat_member(message.chat.id, target_user.id)
-
- # Проверяем, является ли цель администратором или создателем
- if target_status.status in ['administrator', 'creator']:
- await send_message(chat_id, COMMAND_MESSAGES['cant_ban_admin'])
-
- # Удаляем сообщения через 5 секунд
- await delete_messages(bot, message, 5)
-
- return
-
- except Exception as e:
- await send_message(chat_id, f"⚠️ Ошибка: {str(e)}")
- logger.error(f"Ошибка при получении статуса пользователя: {str(e)}")
-
- # Удаляем сообщения через 5 секунд
- await delete_messages(bot, message, 5)
-
- return
-
- # Выполняем бан
- 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 секунд
- await asyncio.sleep(5)
- await bot.delete_message(message.chat.id, message.message_id)
- await bot.delete_message(message.chat.id, message.message_id+2)
-
- except Exception as e:
- await send_message(chat_id, f"⚠️ Ошибка: {str(e)}")
- logger.error(f"Ошибка бана: {str(e)}")
-
- # Удаляем сообщения через 5 секунд
- await delete_messages(bot, message, 5)
-
- except Exception as e:
- await send_message(chat_id, COMMAND_MESSAGES['general_error'])
- logger.error(f"Общая ошибка в ban_command: {str(e)}")
+ # Если пользователь не найден
+ if not target_user:
+ await send_message(chat_id, COMMAND_MESSAGES['user_not_found'])
# Удаляем сообщения через 5 секунд
- await delete_messages(bot, message, 5)
\ No newline at end of file
+ await delete_messages(bot, message, 5)
+
+ return
+
+ # Проверяем статус целевого пользователя
+ try:
+ target_status = await bot.get_chat_member(message.chat.id, target_user.id)
+
+ # Проверяем, является ли цель администратором или создателем
+ if target_status.status in ['administrator', 'creator']:
+ await send_message(chat_id, COMMAND_MESSAGES['cant_ban_admin'])
+
+ # Удаляем сообщения через 5 секунд
+ await delete_messages(bot, message, 5)
+
+ return
+
+ except Exception as e:
+ await send_message(chat_id, f"⚠️ Ошибка: {str(e)}")
+ logger.error(f"Ошибка при получении статуса пользователя: {str(e)}")
+
+ # Удаляем сообщения через 5 секунд
+ await delete_messages(bot, message, 5)
+
+ return
+
+ # Выполняем бан
+ 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,
+ photo_path=photo_path
+ )
+
+ # Отправляем сообщения, что пользователь получил бан
+ await send_message(chat_id, COMMAND_MESSAGES['banned'])
+ logger.info(f"Пользователь {target_user.id} забанен администратором {message.from_user.id}.")
+
+ # Удаляем сообщения через 5 секунд
+ await asyncio.sleep(5)
+ await bot.delete_message(message.chat.id, message.message_id)
+ await bot.delete_message(message.chat.id, message.message_id+2)
+
+ except Exception as e:
+ await send_message(chat_id, f"⚠️ Ошибка: {str(e)}")
+ logger.error(f"Ошибка бана: {str(e)}")
+
+ # Удаляем сообщения через 5 секунд
+ await delete_messages(bot, message, 5)
+
+ except Exception as e:
+ await send_message(chat_id, COMMAND_MESSAGES['general_error'])
+ logger.error(f"Общая ошибка в ban_command: {str(e)}")
+
+ # Удаляем сообщения через 5 секунд
+ await delete_messages(bot, message, 5)
\ No newline at end of file
diff --git a/src/modules/content_filter.py b/src/modules/content_filter.py
new file mode 100644
index 0000000..c0706ea
--- /dev/null
+++ b/src/modules/content_filter.py
@@ -0,0 +1,70 @@
+from telebot.async_telebot import AsyncTeleBot
+from telebot.types import Message
+import asyncio
+import os
+
+import logging
+from database import db
+
+# Импортируем обработчики команд
+from modules.mute import mute_command
+from modules.ban import ban_command
+
+logger = logging.getLogger(__name__) # Получаем логгер для текущего модуля
+
+def register_handlers(bot: AsyncTeleBot): # Регистрирует все обработчики событий
+
+ # Обработчик изображений
+ @bot.message_handler(content_types=['photo'])
+ async def message_photo(message: Message):
+
+ # Определяем путь к изображению
+ photo_path = None
+
+ try:
+
+ # Проверяем, есть ли подпись
+ if not message.caption:
+ return
+
+ # Разделяем подпись на части
+ parts = message.caption.split()
+
+ # Определяем команду (первое слово в подписи)
+ command = parts[0].lower()
+
+ # Поддерживаемые команды
+ supported_commands = {
+ '/mute': mute_command,
+ '/ban': ban_command
+ }
+
+ # Проверяем, является ли первое слово командой
+ if command not in supported_commands:
+ return
+
+ # Скачиваем изображение
+ file_info = await bot.get_file(message.photo[-1].file_id)
+ os.makedirs("tmp", exist_ok=True)
+ photo_path = f"tmp/{file_info.file_id}.jpg"
+ downloaded_file = await bot.download_file(file_info.file_path)
+
+ with open(photo_path, 'wb') as new_file:
+ new_file.write(downloaded_file)
+
+ # Переносим caption в text
+ message.text = message.caption
+
+ # Вызываем обработчик команды
+ handler = supported_commands[command]
+ await handler(bot, message, photo_path=photo_path)
+
+ except Exception as e:
+ logger.error(f"Ошибка обработки команды с изображением: {str(e)}")
+
+ finally:
+ if photo_path and os.path.exists(photo_path):
+ try:
+ os.remove(photo_path)
+ except Exception as e:
+ logger.error(f"Ошибка удаления временного изображения: {str(e)}")
\ No newline at end of file
diff --git a/src/modules/mute.py b/src/modules/mute.py
index c727cd4..0105915 100644
--- a/src/modules/mute.py
+++ b/src/modules/mute.py
@@ -91,76 +91,150 @@ async def delete_messages(bot: AsyncTeleBot, message: Message, time_sleep: int):
await bot.delete_message(message.chat.id, message.message_id)
await bot.delete_message(message.chat.id, message.message_id+1)
-def register_handlers(bot: AsyncTeleBot): # Регистрирует все обработчики команд
+# Регистрирует все обработчики команд
+def register_handlers(bot: AsyncTeleBot):
- @bot.message_handler(commands=['mute']) # Обработчик команды /mute
- async def mute_command(message: Message):
+ # Обработчик команды /mute
+ @bot.message_handler(commands=['mute'])
+ async def _mute_command_wrapper(message: Message):
+ await mute_command(bot, message)
- # Отправка сообщения в тему или обычный чат
- send_message = bot.reply_to if message.is_topic_message else bot.send_message
- chat_id = message if message.is_topic_message else message.chat.id
+# Основная функция команды /mute
+async def mute_command(bot: AsyncTeleBot, message: Message, photo_path: str = None):
- # Определяем целевого пользователя
- target_user = None
+ # Отправка сообщения в тему или обычный чат
+ send_message = bot.reply_to if message.is_topic_message else bot.send_message
+ chat_id = message if message.is_topic_message else message.chat.id
- # Отпределяем время
- time_arg = None
+ # Определяем целевого пользователя
+ target_user = None
- # Определяем причину
- reason = None
+ # Отпределяем время
+ time_arg = None
- # Разбиваем текст сообщения на части
- parts_msg = message.text.split()
+ # Определяем причину
+ reason = None
- # Выводим помощь
- if len(parts_msg) == 2 and parts_msg[1].strip() in ['help', 'помощь']:
- await send_message(chat_id, COMMAND_MESSAGES['manual_mute'])
+ # Разбиваем текст сообщения на части
+ parts_msg = message.text.split()
- # Удаляем сообщения через 30 секунд
- await delete_messages(bot, message, 30)
+ # Выводим помощь
+ if len(parts_msg) == 2 and parts_msg[1].strip() in ['help', 'помощь']:
+ await send_message(chat_id, COMMAND_MESSAGES['manual_mute'])
- return
+ # Удаляем сообщения через 30 секунд
+ await delete_messages(bot, message, 30)
+ return
+
+ try:
+ # Проверяем, является ли отправитель администратором
try:
- # Проверяем, является ли отправитель администратором
- try:
- admin_status = await bot.get_chat_member(message.chat.id, message.from_user.id)
+ admin_status = await bot.get_chat_member(message.chat.id, message.from_user.id)
- # Проверяем статус администратора (создателя)
- if admin_status.status not in ['administrator', 'creator']:
- await send_message(chat_id, COMMAND_MESSAGES['no_admin_rights'])
-
- # Удаляем сообщения через 5 секунд
- await delete_messages(bot, message, 5)
-
- return
-
- # Проверяем право администратора на мут
- if admin_status.status == 'administrator' and not admin_status.can_restrict_members:
- await send_message(chat_id, COMMAND_MESSAGES['no_restrict_rights'])
-
- # Удаляем сообщения через 5 секунд
- await delete_messages(bot, message, 5)
-
- return
-
- except Exception as e:
- await send_message(chat_id, f"⚠️ Ошибка: {str(e)}")
- logger.error(f"Ошибка при получении статуса администратора: {str(e)}")
+ # Проверяем статус администратора (создателя)
+ if admin_status.status not in ['administrator', 'creator']:
+ await send_message(chat_id, COMMAND_MESSAGES['no_admin_rights'])
# Удаляем сообщения через 5 секунд
await delete_messages(bot, message, 5)
return
- # Если одно слово, то удаляем сообщение. Ошибка
- if len(parts_msg) == 1:
+ # Проверяем право администратора на мут
+ if admin_status.status == 'administrator' and not admin_status.can_restrict_members:
+ await send_message(chat_id, COMMAND_MESSAGES['no_restrict_rights'])
+
+ # Удаляем сообщения через 5 секунд
+ await delete_messages(bot, message, 5)
+
+ return
+
+ except Exception as e:
+ await send_message(chat_id, f"⚠️ Ошибка: {str(e)}")
+ logger.error(f"Ошибка при получении статуса администратора: {str(e)}")
+
+ # Удаляем сообщения через 5 секунд
+ await delete_messages(bot, message, 5)
+
+ return
+
+ # Если одно слово, то удаляем сообщение. Ошибка
+ if len(parts_msg) == 1:
+ await asyncio.sleep(3)
+ await bot.delete_message(message.chat.id, message.message_id)
+ return
+
+ # Если два слово, то ответом на сообщение
+ elif len(parts_msg) == 2:
+
+ # Если это тема
+ if message.is_topic_message:
+
+ # Если без ответа на сообщение, ошибка
+ if message.message_thread_id == message.reply_to_message.message_id:
+ await asyncio.sleep(3)
+ await bot.delete_message(message.chat.id, message.message_id)
+ return
+
+ # Если с ответом на сообщение
+ else:
+ target_user = message.reply_to_message.from_user
+ time_arg = parts_msg[1]
+ reason = extract_reason(parts_msg[2:])
+
+ # Если это обычный чат
+ elif message.reply_to_message and message.is_topic_message is None:
+ target_user = message.reply_to_message.from_user
+ time_arg = parts_msg[1]
+ reason = extract_reason(parts_msg[2:])
+
+ # Удаляем сообщение, если команда неправильная
+ else:
await asyncio.sleep(3)
await bot.delete_message(message.chat.id, message.message_id)
return
- # Если два слово, то ответом на сообщение
- elif len(parts_msg) == 2:
+ else:
+
+ # Если второе слово это тег или ID
+ if parts_msg[1].strip().isdigit() or parts_msg[1].startswith('@'):
+
+ identifier = parts_msg[1].strip()
+ time_arg = parts_msg[2]
+ reason = extract_reason(parts_msg[3:])
+
+ # Поиск по ID
+ if identifier.isdigit():
+
+ # Делаем в int и ищем
+ user_info = db.get_user(int(identifier))
+
+ if user_info:
+ # Создаем объект пользователя из данных базы
+ target_user = User(
+ id=user_info[0],
+ first_name=user_info[1],
+ username=user_info[2],
+ is_bot=False
+ )
+
+ # Поиск по тегу
+ elif identifier.startswith('@'):
+
+ # Убираем @ и ищем
+ user_info = db.get_user_by_username(identifier[1:])
+
+ if user_info:
+ # Создаем объект пользователя из данных базы
+ target_user = User(
+ id=user_info[0],
+ first_name=user_info[1],
+ username=user_info[2],
+ is_bot=False
+ )
+
+ else:
# Если это тема
if message.is_topic_message:
@@ -189,187 +263,120 @@ def register_handlers(bot: AsyncTeleBot): # Регистрирует все об
await bot.delete_message(message.chat.id, message.message_id)
return
- else:
-
- # Если второе слово это тег или ID
- if parts_msg[1].strip().isdigit() or parts_msg[1].startswith('@'):
-
- identifier = parts_msg[1].strip()
- time_arg = parts_msg[2]
- reason = extract_reason(parts_msg[3:])
-
- # Поиск по ID
- if identifier.isdigit():
-
- # Делаем в int и ищем
- user_info = db.get_user(int(identifier))
-
- if user_info:
- # Создаем объект пользователя из данных базы
- target_user = User(
- id=user_info[0],
- first_name=user_info[1],
- username=user_info[2],
- is_bot=False
- )
-
- # Поиск по тегу
- elif identifier.startswith('@'):
-
- # Убираем @ и ищем
- user_info = db.get_user_by_username(identifier[1:])
-
- if user_info:
- # Создаем объект пользователя из данных базы
- target_user = User(
- id=user_info[0],
- first_name=user_info[1],
- username=user_info[2],
- is_bot=False
- )
-
- else:
-
- # Если это тема
- if message.is_topic_message:
-
- # Если без ответа на сообщение, ошибка
- if message.message_thread_id == message.reply_to_message.message_id:
- await asyncio.sleep(3)
- await bot.delete_message(message.chat.id, message.message_id)
- return
-
- # Если с ответом на сообщение
- else:
- target_user = message.reply_to_message.from_user
- time_arg = parts_msg[1]
- reason = extract_reason(parts_msg[2:])
-
- # Если это обычный чат
- elif message.reply_to_message and message.is_topic_message is None:
- target_user = message.reply_to_message.from_user
- time_arg = parts_msg[1]
- reason = extract_reason(parts_msg[2:])
-
- # Удаляем сообщение, если команда неправильная
- else:
- await asyncio.sleep(3)
- await bot.delete_message(message.chat.id, message.message_id)
- return
-
- # Если пользователь не найден
- if not target_user:
- await send_message(chat_id, COMMAND_MESSAGES['user_not_found'])
-
- # Удаляем сообщения через 5 секунд
- await delete_messages(bot, message, 5)
-
- return
-
- # Парсинг времени мута
- mute_seconds = parse_mute_time(time_arg)
- if mute_seconds is None:
- await send_message(chat_id, COMMAND_MESSAGES['incorrect_time_format'])
-
- # Удаляем сообщения через 5 секунд
- await delete_messages(bot, message, 5)
-
- return
-
- # Минимальный мут 1 минута (60 секунд)
- if mute_seconds < 60:
- await send_message(chat_id, COMMAND_MESSAGES['min_mute'])
-
- # Удаляем сообщения через 5 секунд
- await delete_messages(bot, message, 5)
-
- return
-
- # Максимальный мут 30 дней (2592000 секунд)
- if mute_seconds > 2592000:
- await send_message(chat_id, COMMAND_MESSAGES['max_mute'])
-
- # Удаляем сообщения через 5 секунд
- await delete_messages(bot, message, 5)
-
- return
-
- # Проверяем статус целевого пользователя
- try:
- target_status = await bot.get_chat_member(message.chat.id, target_user.id)
-
- # Проверяем, является ли цель администратором или создателем
- if target_status.status in ['administrator', 'creator']:
- await send_message(chat_id, COMMAND_MESSAGES['cant_mute_admin'])
-
- # Удаляем сообщения через 5 секунд
- await delete_messages(bot, message, 5)
-
- return
-
- except Exception as e:
- await send_message(chat_id, f"⚠️ Ошибка: {str(e)}")
- logger.error(f"Ошибка при получении статуса пользователя: {str(e)}")
-
- # Удаляем сообщения через 5 секунд
- await delete_messages(bot, message, 5)
-
- return
-
- # Выполняем мут
- try:
-
- # Вычисляем время окончания мута
- until_date = int(time.time()) + mute_seconds
-
- # Устанавливаем ограничения (только чтение)
- permissions = ChatPermissions(
- can_send_messages=False,
- can_send_media_messages=False,
- can_send_polls=False,
- can_send_other_messages=False,
- can_add_web_page_previews=False,
- can_change_info=False,
- can_invite_users=False,
- can_pin_messages=False,
- )
-
- await bot.restrict_chat_member(
- chat_id=message.chat.id,
- user_id=target_user.id,
- permissions=permissions,
- until_date=until_date
- )
-
- # Форматирование времени
- 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}.")
-
- # Удаляем сообщения через 5 секунд
- await delete_messages(bot, message, 5)
-
- except Exception as e:
- await send_message(chat_id, f"⚠️ Ошибка: {str(e)}")
- logger.error(f"Ошибка мута: {str(e)}")
-
- # Удаляем сообщения через 5 секунд
- await delete_messages(bot, message, 5)
-
- except Exception as e:
- await send_message(chat_id, COMMAND_MESSAGES['general_error'])
- logger.error(f"Общая ошибка в mute_command: {str(e)}")
+ # Если пользователь не найден
+ if not target_user:
+ await send_message(chat_id, COMMAND_MESSAGES['user_not_found'])
# Удаляем сообщения через 5 секунд
- await delete_messages(bot, message, 5)
\ No newline at end of file
+ await delete_messages(bot, message, 5)
+
+ return
+
+ # Парсинг времени мута
+ mute_seconds = parse_mute_time(time_arg)
+ if mute_seconds is None:
+ await send_message(chat_id, COMMAND_MESSAGES['incorrect_time_format'])
+
+ # Удаляем сообщения через 5 секунд
+ await delete_messages(bot, message, 5)
+
+ return
+
+ # Минимальный мут 1 минута (60 секунд)
+ if mute_seconds < 60:
+ await send_message(chat_id, COMMAND_MESSAGES['min_mute'])
+
+ # Удаляем сообщения через 5 секунд
+ await delete_messages(bot, message, 5)
+
+ return
+
+ # Максимальный мут 30 дней (2592000 секунд)
+ if mute_seconds > 2592000:
+ await send_message(chat_id, COMMAND_MESSAGES['max_mute'])
+
+ # Удаляем сообщения через 5 секунд
+ await delete_messages(bot, message, 5)
+
+ return
+
+ # Проверяем статус целевого пользователя
+ try:
+ target_status = await bot.get_chat_member(message.chat.id, target_user.id)
+
+ # Проверяем, является ли цель администратором или создателем
+ if target_status.status in ['administrator', 'creator']:
+ await send_message(chat_id, COMMAND_MESSAGES['cant_mute_admin'])
+
+ # Удаляем сообщения через 5 секунд
+ await delete_messages(bot, message, 5)
+
+ return
+
+ except Exception as e:
+ await send_message(chat_id, f"⚠️ Ошибка: {str(e)}")
+ logger.error(f"Ошибка при получении статуса пользователя: {str(e)}")
+
+ # Удаляем сообщения через 5 секунд
+ await delete_messages(bot, message, 5)
+
+ return
+
+ # Выполняем мут
+ try:
+
+ # Вычисляем время окончания мута
+ until_date = int(time.time()) + mute_seconds
+
+ # Устанавливаем ограничения (только чтение)
+ permissions = ChatPermissions(
+ can_send_messages=False,
+ can_send_media_messages=False,
+ can_send_polls=False,
+ can_send_other_messages=False,
+ can_add_web_page_previews=False,
+ can_change_info=False,
+ can_invite_users=False,
+ can_pin_messages=False,
+ )
+
+ await bot.restrict_chat_member(
+ chat_id=message.chat.id,
+ user_id=target_user.id,
+ permissions=permissions,
+ until_date=until_date
+ )
+
+ # Форматирование времени
+ 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,
+ photo_path=photo_path
+ )
+
+ # Отправляем сообщения, что пользователь получил мут
+ 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}.")
+
+ # Удаляем сообщения через 5 секунд
+ await delete_messages(bot, message, 5)
+
+ except Exception as e:
+ await send_message(chat_id, f"⚠️ Ошибка: {str(e)}")
+ logger.error(f"Ошибка мута: {str(e)}")
+
+ # Удаляем сообщения через 5 секунд
+ await delete_messages(bot, message, 5)
+
+ except Exception as e:
+ await send_message(chat_id, COMMAND_MESSAGES['general_error'])
+ logger.error(f"Общая ошибка в mute_command: {str(e)}")
+
+ # Удаляем сообщения через 5 секунд
+ await delete_messages(bot, message, 5)
\ No newline at end of file
diff --git a/src/modules/unban.py b/src/modules/unban.py
index 30fe752..30ecb0c 100644
--- a/src/modules/unban.py
+++ b/src/modules/unban.py
@@ -152,7 +152,8 @@ def register_handlers(bot: AsyncTeleBot): # Регистрирует все об
user_id=target_user.id,
admin_id=message.from_user.id,
reason=None,
- duration=None
+ duration=None,
+ photo_path=None
)
# Отправляем сообщения, что пользователь получил разбан
diff --git a/src/modules/unmute.py b/src/modules/unmute.py
index 01dff27..f449717 100644
--- a/src/modules/unmute.py
+++ b/src/modules/unmute.py
@@ -168,7 +168,8 @@ def register_handlers(bot: AsyncTeleBot): # Регистрирует все об
user_id=target_user.id,
admin_id=message.from_user.id,
reason=None,
- duration=None
+ duration=None,
+ photo_path=None
)
# Отправляем сообщения, что пользователь получил размут