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