Телеграмм бот не видит администрацию сообщества

Рейтинг: 0Ответов: 1Опубликовано: 26.03.2023

Я использую следующую функцию для проверки, подписан ли человек на мой канал перед использованием бота. (pytelegrambotapi)

def check_subscription(chat_id, user_id):
    chat_member = bot.get_chat_member(chat_id, user_id)
    return chat_member.status == 'member'

Эта функция отлично работает для обычных юзеров, однако не видит администрацию и всех у кого есть роли, подскажите, как можно ее преобразовать

Ответы

▲ 1Принят

Есть вариант решения этой задачи, он заключается в проверке статусов помимо 'member':

def check_subscription(chat_id, user_id):
    chat_member = bot.get_chat_member(chat_id, user_id)
    return chat_member.status in ['administrator', 'member']

Можно так же использовать get_chat_administrators для получения списка администраторов:

def check_subscription(chat_id, user_id):
    # проверяем является ли member
    chat_member = bot.get_chat_member(chat_id, user_id)
    is_member = chat_member.status == 'member'
    # если нет, то проверим по списку админов
    if not is_member:
        chat_admins = bot.get_chat_administrators(chat_id)
        for admin in chat_admins:
            if admin.user.id == user_id:
                is_member = True
                break
    return is_member

Таким образом, если пользователь является участником чата или администратором, функция вернет True, в противном случае - False.

P.S. Существует так же статус в get_chat_member, называемый как 'creator' - это статус относится к создателю чата. Функция get_chat_administrators в свою очередь не возвращает создателя чата. Стоит учитывать данное при проверке пользователей из чата в телеграмм.