From c05703c1b13c0b0876dd26a8358c216ddd117ebc Mon Sep 17 00:00:00 2001 From: Muzifs Date: Sun, 13 Jul 2025 12:57:43 +0300 Subject: [PATCH] finalized the unban command --- src/modules/unban.py | 73 +++++++++++++++++++++++++++++++++----------- 1 file changed, 55 insertions(+), 18 deletions(-) diff --git a/src/modules/unban.py b/src/modules/unban.py index 6e5a679..e913180 100644 --- a/src/modules/unban.py +++ b/src/modules/unban.py @@ -8,6 +8,12 @@ from config import COMMAND_MESSAGES logger = logging.getLogger(__name__) # Получаем логгер для текущего модуля +# Удаляет два последних сообщения +async def delete_messages(bot: AsyncTeleBot, message: Message, time_sleep: int): + await asyncio.sleep(time_sleep) + 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): # Регистрирует все обработчики команд @bot.message_handler(commands=['unban']) # Обработчик команды /unban @@ -31,47 +37,67 @@ def register_handlers(bot: AsyncTeleBot): # Регистрирует все об # Проверяем статус администратора (создателя) 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)}") + + # Удаляем сообщения через 5 секунд + await delete_messages(bot, message, 5) + return - # Случай №1 - Команда используется в ответ на сообщение + # Выводим помощь (/unban help) + if len(parts_msg) == 2 and parts_msg[1].strip() in ['help', 'помощь']: + await send_message(chat_id, COMMAND_MESSAGES['manual_unban']) + + # Удаляем сообщения через 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 - # Если банят в обычном чате + # Если это обычный чат elif message.reply_to_message and message.is_topic_message is None: target_user = message.reply_to_message.from_user - # Не выводим сообщение, что команда неправильная + # Удаляем сообщение, если команда неправильная else: + await asyncio.sleep(3) + await bot.delete_message(message.chat.id, message.message_id) return - # Случай №2 - Команда с аргументом (/unban @username или /unban 12345) + # Если два, то через тег или ID elif len(parts_msg) == 2: - - # Выводим помощь (/unban help) - if parts_msg[1].strip() in ['help', 'помощь']: - await send_message(chat_id, COMMAND_MESSAGES['manual_unban']) - return identifier = parts_msg[1].strip() @@ -90,7 +116,7 @@ def register_handlers(bot: AsyncTeleBot): # Регистрирует все об is_bot=False ) - # Поиск по тэгу + # Поиск по тегу elif identifier.startswith('@'): # Убираем @ и ищем @@ -108,22 +134,33 @@ def register_handlers(bot: AsyncTeleBot): # Регистрирует все об # Если пользователь не найден if not target_user: await send_message(chat_id, COMMAND_MESSAGES['user_not_found']) + + # Удаляем сообщения через 5 секунд + await delete_messages(bot, message, 5) + return # Выполняем разбан try: await bot.unban_chat_member(message.chat.id, target_user.id) - await send_message(chat_id, COMMAND_MESSAGES['unbanned']) - await asyncio.sleep(5) - await bot.delete_message(message.chat.id, message.message_id) - await bot.delete_message(message.chat.id, message.message_id+1) + # Отправляем сообщения, что пользователь получил разбан + await send_message(chat_id, COMMAND_MESSAGES['unbanned']) logger.info(f"Пользователь {target_user.id} разбанен администратором {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"Общая ошибка в unban_command: {str(e)}") \ No newline at end of file + logger.error(f"Общая ошибка в unban_command: {str(e)}") + + # Удаляем сообщения через 5 секунд + await delete_messages(bot, message, 5) \ No newline at end of file