【问题标题】:Cant get Telegram Channel Users with GetParticipantsRequest (Telethon API)无法使用 GetParticipantsRequest(Telethon API)获取 Telegram 频道用户
【发布时间】:2018-05-17 17:50:02
【问题描述】:

我正在使用Telethon API,当我尝试让用户进入我自己的电报频道(我是管理员)时,GetParticipantsRequest 函数出现权限错误

telethon.errors.rpc_error_list.ChatAdminRequiredError: (ChatAdminRequiredError(...), 'Chat admin privileges are required to do that in the specified chat (for e
xample, to send a message in a channel which is not yours)')

没有意义,因为当我对我的一个电报组执行相同的代码例程时,它就像一个魅力。

下面是例程:

def getUserNames(channel):
offset = 0
limit = 100
all_participants = []
selected_participants = []
channel = client(ResolveUsernameRequest(channel))
channel = InputChannel(channel.chats[0].id, channel.chats[0].access_hash)       

while True:
    participants = client(
        GetParticipantsRequest(channel, ChannelParticipantsSearch(''), offset, limit, 0)
    )
    if not participants.users:
        break
    all_participants.extend(participants.users)
    offset += len(participants.users)

if len(all_participants):
    for x in all_participants:
        if x.username: selected_participants.append(x.username)
    print (selected_participants)
    return selected_participants
else:
    return -1

【问题讨论】:

    标签: python python-3.x telegram python-telegram-bot telethon


    【解决方案1】:

    使用可以使用此代码获取所有参与者:

    from telethon import TelegramClient
    from telethon.tl.functions.channels import GetParticipantsRequest
    from telethon.tl.functions.channels import GetFullChannelRequest
    from telethon.tl.types import ChannelParticipantsSearch
    
    api_id = XXXXX
    api_hash = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
    phone_number = '+98XXXXXXXX'
    ################################################
    channel_username = 'tehrandb'
    ################################################
    
    client = TelegramClient('session_name',api_id,api_hash)
    
    assert client.connect()
    if not client.is_user_authorized():
        client.send_code_request(phone_number)
        me = client.sign_in(phone_number, input('Enter code: '))
    
    # ---------------------------------------
    offset = 0
    limit = 200
    my_filter = ChannelParticipantsSearch('')
    all_participants = []
    while_condition = True
    # ---------------------------------------
    channel = client(GetFullChannelRequest(channel_username))
    while while_condition:
        participants = client(GetParticipantsRequest(channel=channel_username, filter=my_filter, offset=offset, limit=limit, hash=0))
        all_participants.extend(participants.users)
        offset += len(participants.users)
        if len(participants.users) < limit:
             while_condition = False
    

    我用的是‍Telethon V0.19,不过之前的版本差不多

    【讨论】:

    • RuntimeWarning: coroutine 'TelegramBaseClient.connect' was never awaited assert client.connect() RuntimeWarning: Enable tracemalloc to get the object allocation traceback RuntimeWarning: coroutine 'UserMethods.is_user_authorized' was never awaited if not client.is_user_authorized(): RuntimeWarning: Enable tracemalloc to get the object allocation traceback Traceback (most recent call last): line 30, in &lt;module&gt; all_participants.extend(participants.users) AttributeError: 'coroutine' object has no attribute 'users'
    猜你喜欢
    • 1970-01-01
    • 2016-02-23
    • 2022-07-17
    • 2023-01-26
    • 1970-01-01
    • 2016-04-04
    • 2018-06-11
    • 2023-01-02
    • 2021-01-31
    相关资源
    最近更新 更多