From ed4bbacaf1dc95a4d02aed088322b1d5a80a3415 Mon Sep 17 00:00:00 2001 From: Muzifs Date: Sat, 12 Jul 2025 12:42:47 +0300 Subject: [PATCH] finalized the mute command --- README.md | 2 +- src/modules/mute.py | 136 +++++++++++++++++++++++++------------------- 2 files changed, 80 insertions(+), 58 deletions(-) diff --git a/README.md b/README.md index d9d3aa2..c064960 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ - [X] Команда /start - [ ] Команда /help -- [ ] Команда /mute +- [X] Команда /mute - [ ] Команда /unmute - [X] Команда /ban - [X] Команда /unban diff --git a/src/modules/mute.py b/src/modules/mute.py index 9cfdd70..c5d99b8 100644 --- a/src/modules/mute.py +++ b/src/modules/mute.py @@ -39,14 +39,6 @@ def parse_mute_time(time_str: str) -> int: except: return None - # Число без указания единицы (по умолчанию минуты) - elif time_str.isdigit(): - try: - minutes = int(time_str) - return abs(minutes) * 60 - except: - return None - return None # Возвращает причину мута @@ -159,13 +151,19 @@ def register_handlers(bot: AsyncTeleBot): # Регистрирует все об return - # Случай №1 - Команда используется в ответ на сообщение - if len(parts_msg) >= 2: + # Если одно слово, то удаляем сообщение. Ошибка + 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) @@ -177,62 +175,86 @@ def register_handlers(bot: AsyncTeleBot): # Регистрирует все об 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 - # Случай №2 - Команда через тег или ID - elif len(parts_msg) >= 3: - - 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: - await asyncio.sleep(3) - await bot.delete_message(message.chat.id, message.message_id) - return - print(reason) + # Если второе слово это тег или 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:]) + print(identifier) + + # Поиск по 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: -- 2.49.0