如何使用 Telegram Bot 获取 Telegram 频道用户列表 API

How to get Telegram channel users list with Telegram Bot API

谁能告诉我如何从我的电报机器人中获取有关用户的信息。想象一下我的机器人在我频道的管理员用户中,我想获取我的频道用户列表或在新用户加入时被注意到。我怎样才能做到这一点。 Telegram 的文档太杂乱无章了。 到目前为止,我已经看过这些:

但是 none 这些确实有帮助。

Telegram Bot 不会保留有关您用户的任何信息。您应该自己保存所有与您的机器人通信的用户。例如,将他们的 ID 存储在数据库中。

如果是频道 - 您可以从频道的成员列表中获取此信息。

如果您需要得到通知 - 您的机器人应该将用户存储在某处并检查用户是否是新用户。

Bot 无法通过 api 访问频道用户列表。 实现这一目标有两种可能性:

Telegram 机器人没有任何 api 来访问频道或群组用户。 如果访问组用户对你很重要,我建议你使用 Telegram-CLI。您可以访问所有 Telegran 用户帐户的 API,因此您可以访问您组的所有用户数据。

https://github.com/vysheng/tg

为了获取用户列表,您需要使用电报API。

Telegram API 相当复杂。有些客户可以更快地完成工作。

对于python,有Telethon,获取频道用户的方法是:

get_full_channel

为了获取用户列表,您需要使用电报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))

正如其他人已经提到的,您无法通过机器人列出频道用户 API。

但您可以使用 MTProto API 以普通用户身份登录,并以编程方式访问您在桌面或移动应用程序中看到的所有内容。

要使用 MTProto,您需要登录 https://my.telegram.org/ with your existing Telegram account and get credentialsapi_idapi_hash

这是一个如何使用 Telethon python 库获取 Telegram channel/group 用户列表的工作示例。

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)

用name/phone/URL和client.get_entity()搜索channels/users很容易。