forked from Muzifs/LGBot
Исправление определения прав
This commit is contained in:
25
src/utils.py
25
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}, "
|
logger.info(f"Получен статус пользователя {message.from_user.id}: status={admin_status.status}, "
|
||||||
f"can_restrict={getattr(admin_status, 'can_restrict_members', None)}")
|
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 для отправки сообщения в правильный топик
|
# Восстанавливаем thread_id для отправки сообщения в правильный топик
|
||||||
message.message_thread_id = original_thread_id
|
message.message_thread_id = original_thread_id
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user