如何使用 Telegram Bot 获取 Telegram 频道用户列表 API
How to get Telegram channel users list with Telegram Bot API
谁能告诉我如何从我的电报机器人中获取有关用户的信息。想象一下我的机器人在我频道的管理员用户中,我想获取我的频道用户列表或在新用户加入时被注意到。我怎样才能做到这一点。
Telegram 的文档太杂乱无章了。
到目前为止,我已经看过这些:
- https://core.telegram.org/bots
- https://core.telegram.org/bots/api
- https://core.telegram.org/bots/samples
- https://core.telegram.org/bots/faq
但是 none 这些确实有帮助。
Telegram Bot 不会保留有关您用户的任何信息。您应该自己保存所有与您的机器人通信的用户。例如,将他们的 ID 存储在数据库中。
如果是频道 - 您可以从频道的成员列表中获取此信息。
如果您需要得到通知 - 您的机器人应该将用户存储在某处并检查用户是否是新用户。
Bot 无法通过 api 访问频道用户列表。
实现这一目标有两种可能性:
- 捕获所有频道消息并过滤"XXX joined the channel"一个 - 这是理论上的,我没有尝试
- 使用https://github.com/vysheng/tgl
Telegram 机器人没有任何 api 来访问频道或群组用户。
如果访问组用户对你很重要,我建议你使用 Telegram-CLI。您可以访问所有 Telegran 用户帐户的 API,因此您可以访问您组的所有用户数据。
为了获取用户列表,您需要使用电报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 credentials:api_id
和 api_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很容易。
谁能告诉我如何从我的电报机器人中获取有关用户的信息。想象一下我的机器人在我频道的管理员用户中,我想获取我的频道用户列表或在新用户加入时被注意到。我怎样才能做到这一点。 Telegram 的文档太杂乱无章了。 到目前为止,我已经看过这些:
- https://core.telegram.org/bots
- https://core.telegram.org/bots/api
- https://core.telegram.org/bots/samples
- https://core.telegram.org/bots/faq
但是 none 这些确实有帮助。
Telegram Bot 不会保留有关您用户的任何信息。您应该自己保存所有与您的机器人通信的用户。例如,将他们的 ID 存储在数据库中。
如果是频道 - 您可以从频道的成员列表中获取此信息。
如果您需要得到通知 - 您的机器人应该将用户存储在某处并检查用户是否是新用户。
Bot 无法通过 api 访问频道用户列表。 实现这一目标有两种可能性:
- 捕获所有频道消息并过滤"XXX joined the channel"一个 - 这是理论上的,我没有尝试
- 使用https://github.com/vysheng/tgl
Telegram 机器人没有任何 api 来访问频道或群组用户。 如果访问组用户对你很重要,我建议你使用 Telegram-CLI。您可以访问所有 Telegran 用户帐户的 API,因此您可以访问您组的所有用户数据。
为了获取用户列表,您需要使用电报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 credentials:api_id
和 api_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很容易。