From ab80af2744def8b417ca64f957af707b14078f94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=A5=D1=80?= =?UTF-8?q?=D0=B0=D0=BC=D0=BE=D0=B2?= Date: Sat, 18 Oct 2025 13:27:05 +0300 Subject: [PATCH] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BE=D0=BF=D1=80=D0=B5=D0=B4=D0=B5?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BF=D1=80=D0=B0=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/utils.py | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/src/utils.py b/src/utils.py index 9db425c..3a15ef1 100644 --- a/src/utils.py +++ b/src/utils.py @@ -39,8 +39,31 @@ async def check_admin_status(bot: AsyncTeleBot, message: Message, check_restrict logger.info(f"Получен статус пользователя {message.from_user.id}: status={admin_status.status}, " f"can_restrict={getattr(admin_status, 'can_restrict_members', None)}") + # ВАЖНО: В каналах администраторы могут иметь статус 'left', но при этом иметь права администратора + # Проверяем наличие прав администратора через can_* поля + is_admin = admin_status.status in ('administrator', 'creator') + + # Для каналов: если статус 'left', но есть админские права - считаем администратором + if admin_status.status == 'left': + # Проверяем наличие любых админских прав + has_admin_rights = any([ + getattr(admin_status, 'can_be_edited', False), + getattr(admin_status, 'can_manage_chat', False), + getattr(admin_status, 'can_delete_messages', False), + getattr(admin_status, 'can_restrict_members', False), + getattr(admin_status, 'can_promote_members', False), + getattr(admin_status, 'can_change_info', False), + getattr(admin_status, 'can_invite_users', False), + getattr(admin_status, 'can_post_messages', False), + getattr(admin_status, 'can_edit_messages', False), + getattr(admin_status, 'can_pin_messages', False), + ]) + if has_admin_rights: + is_admin = True + logger.info(f"Пользователь {message.from_user.id} имеет статус 'left', но обнаружены админские права") + # Проверка наличия прав администратора/создателя - if admin_status.status not in ('administrator', 'creator'): + if not is_admin: # Восстанавливаем thread_id для отправки сообщения в правильный топик message.message_thread_id = original_thread_id