Как получить список пользователей канала Telegram с помощью Telegram Bot API

Кто-нибудь может дать понять, как я могу получить информацию о пользователях из моего телеграмм-бота. Представьте, что мой бот является пользователем с правами администратора в моем канале, и я хочу получить список пользователей моего канала или быть замеченным, когда присоединяется новый пользователь. Как мне это сделать. Документы Telegram настолько неорганизованы. До сих пор я смотрел на это:

Но ничто из этого не помогает.


person M.Shahrokhi    schedule 21.11.2015    source источник
comment
М.Шахрохи, Вы нашли какое-нибудь решение, которое поддерживает Bot API?   -  person Vahid Ghadiri    schedule 12.10.2017


Ответы (7)


Чтобы получить список пользователей, вам необходимо использовать Telegram API.

Telegram API довольно сложен. Есть клиенты, которые выполняют работу намного быстрее.

Для python существует Telethon, и метод получения пользователей канала:

get_full_channel.

person apadana    schedule 14.06.2017
comment
Для PHP я использовал Madeline Proto и эту функцию get_pwr_chat: docs. madelineproto.xyz/docs/ - person coderama; 03.01.2020
comment
привет. как мы можем использовать этот метод (get-full-channel)? Я имею в виду, что у меня нет доступа к этому методу - person Mohammad; 06.12.2020

Telegram Bot ничего не хранит о ваших пользователях. Вы должны сами сохранить всех пользователей, которые общаются с вашим ботом. Например, сохранить их идентификаторы в базе данных.

В случае с каналом - вы можете получить эту информацию из списка участников канала.

Если вам нужно получить уведомление - ваш бот должен где-то хранить пользователей и проверять, новый ли пользователь.

person Stas Parshin    schedule 22.11.2015
comment
Я согласен, но: в случае каналов: API Telegram Bot вообще НЕ связаны с управлением каналами. Новости (см .: core.telegram.org/bots/api#recent-changes) заключается в том, что владелец канала может добавить (одного или нескольких) ботов в качестве администратора (ов) канала. В этом случае админ-бот может получить доступ к идентификаторам пользователей канала. См .: telegram.wiki/tips:channels - person Giorgio Robino; 01.12.2015
comment
@GiorgioRobino сейчас бот может иметь доступ только к сообщениям группы, но бот не имеет доступа к пользователям группы или канала (такого API нет), и даже если бот является администратором, у него нет доступа к сообщениям канала. Может это ошибка - person Stas Parshin; 01.12.2015
comment
да. Не существует специального API-интерфейса бота для получения всех идентификаторов (ни для 1. подписчиков ботов, ни для 2. ботов как администратора канала). В случае, если 1 бот может собирать и хранить идентификаторы (как вы сказали). В случае 2: ​​бот-администратор канала МОЖЕТ видеть сообщения канала. Если вы проверили, что это неправда ... (я еще не видел), поэтому я согласен с: это ошибка .. - person Giorgio Robino; 01.12.2015

Как уже упоминалось, вы не можете перечислить пользователей канала через Bot API.

Но вы можете использовать MTProto API, чтобы войти в систему как обычный пользователь и получить программный доступ ко всему, что вы можно увидеть в настольном или мобильном приложении.

Чтобы использовать MTProto, вам необходимо войти в https://my.telegram.org/ с существующей учетной записью Telegram. и получить учетные данные: api_id и api_hash.

Вот рабочий пример использования библиотеки Python Telethon для получения списка пользователей канала / группы Telegram.

from telethon import TelegramClient, sync

api_id = 'FILL REAL VALUES HERE'
api_hash = 'FILL REAL VALUES HERE'

client = TelegramClient('xxx', api_id, api_hash).start()

# get all the channels that I can access
channels = {d.entity.username: d.entity
            for d in client.get_dialogs()
            if d.is_channel}

# choose the one that I want list users from
channel = channels[channel_name]

# get all the users and print them
for u in client.get_participants(channel):
    print(u.id, u.first_name, u.last_name, u.username)

Легко искать каналы / пользователей по имени / телефону / URL с помощью client.get_entity ().

person max taldykin    schedule 23.11.2018
comment
что это за "xxx" в TelegramClient('xxx', api_id, api_hash).start() ?? - person Lalit Vavdara; 28.10.2020
comment
@LalitVavdara, xxx - это имя сеанса. Это может быть что угодно. Telethon создаст файл хранилища сеанса с именем xxx.session в текущем каталоге. Кстати, этот файл на самом деле представляет собой базу данных SQLite. - person max taldykin; 29.10.2020
comment
спасибо, человек за ответ, я не ожидал ответа после 2 лет публикации ответа, кстати, если я создам новый сеанс, будет создан новый файл, так что могу ли я удалить старый файл? Также, если я использую то же имя, что и в предыдущем сеансе, мне все равно потребуется войти в систему? - person Lalit Vavdara; 29.10.2020
comment
Если вы используете то же имя, вам не нужно входить в систему. Если вы удалите файл, вам нужно будет снова войти в систему - person max taldykin; 29.10.2020

Чтобы получить список пользователей, вам необходимо использовать Telegram API.

Telegram API довольно сложен. Есть клиенты, которые могут выполнить работу намного быстрее.

Для python существует Telethon, а код для получения пользователей канала:

from telethon import TelegramClient

from telethon.tl.functions.contacts import ResolveUsernameRequest
from telethon.tl.functions.channels import GetAdminLogRequest

from telethon.tl.types import InputChannel
from telethon.tl.types import ChannelAdminLogEventsFilter
from telethon.tl.types import InputUserSelf
from telethon.tl.types import InputUser

# These example values won't work. You must get your own api_id and
# api_hash from https://my.telegram.org, under API Development.
api_id = ****** # Your api_id
api_hash = '********************************' # Your api_hash
phone_number = '+989122594574' # Your phone number

client = TelegramClient(phone_number, api_id, api_hash)
client.session.report_errors = False
client.connect()

if not client.is_user_authorized():
    client.send_code_request(phone_number)
    client.sign_in(phone_number, input('Enter the code: '))


channel = client(ResolveUsernameRequest('tabe_eshgh')) # Your channel username

user = client(ResolveUsernameRequest('amir2b')) # Your channel admin username
admins = [InputUserSelf(), InputUser(user.users[0].id, user.users[0].access_hash)] # admins
admins = [] # No need admins for join and leave and invite filters

filter = None # All events
# param: (join, leave, invite, ban, unban, kick, unkick, promote, demote, info, settings, pinned, edit, delete)
filter = ChannelAdminLogEventsFilter(True, True, True, False, False, False, False, False, False, False, False, False, False, False)

result = client(GetAdminLogRequest(InputChannel(channel.chats[0].id, channel.chats[0].access_hash), '', 0, 0, 10, filter, admins))
##print(result)

for _user in result.users:
    ##print(_user.id)
    with open(''.join(['users/', str(_user.id)]), 'w') as f:
        f.write(str(_user.id))
person Amir Bashiri    schedule 10.09.2017

Бот не может получить доступ к списку пользователей канала через api. Для этого есть две возможности:

  • поймать все сообщения канала и отфильтровать "XXX присоединился к каналу" - это теоретически, я не пробовал
  • используйте https://github.com/vysheng/tgl
person Belegnar    schedule 25.01.2017
comment
Не могли бы вы пояснить, как использование github.com/vysheng/tgl ответит на вопрос? Я не вижу никакой документации, кроме официальной, которая, как мы уже определили, не поддерживает списки пользователей из коробки. - person Maximo Dominguez; 11.05.2017
comment
Первая теоретическая доза раствора не сработает. потому что в возвращенных объектах обновления нет XXX присоединился к информации о канале. - person Vahid Ghadiri; 12.10.2017

Для бота Telegram нет API для доступа к каналам или группам пользователей. Если для вас важен доступ к групповым пользователям, я предлагаю вам использовать Telegram-CLI. Вы можете получить доступ ко всем API учетной записи пользователя Telegran, чтобы иметь доступ ко всем данным пользователей вашей группы.

https://github.com/vysheng/tg

person Hadi.A    schedule 30.05.2017