python - 如何使用 telethon 让所有用户进入 Telegram channel ?

标签 python telegram telethon

我是 telethon 和 python 的新手。我在 python3 中安装了 telethon,我想获得 Telegram channel 或群组的所有成员。我在互联网上搜索了很多,发现下面的代码。我真的很努力去理解它。Telegram 文档不足以做到这一点。有更好的解决方案吗?

from telethon import TelegramClient

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

from telethon.tl.types import ChannelParticipantsRecent
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 = 12345
api_hash = '8710a45f0f81d383qwertyuiop'
phone_number = '+123456789'

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('channelusername')) # Your channel username

user = client(ResolveUsernameRequest('admin')) # 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
filter = ChannelAdminLogEventsFilter(True, False, False, False, True, True, True, True, True, True, True, True, True, True)
cont = 0
list = [0,100,200,300]
for num in list:
    result = client(GetParticipantsRequest(InputChannel(channel.chats[0].id, channel.chats[0].access_hash), filter, num, 100))
    for _user in result.users:
        print( str(_user.id) + ';' + str(_user.username) + ';' + str(_user.first_name) + ';' + str(_user.last_name) )
with open(''.join(['users/', str(_user.id)]), 'w') as f: f.write(str(_user.id))

但是我遇到了这个错误。我错过了什么?

Traceback (most recent call last):
  File "run.py", line 51, in <module>
    result = client(GetParticipantsRequest(InputChannel(channel.chats[0].id, channel.chats[0].access_hash), filter, num, 100))
TypeError: __init__() missing 1 required positional argument: 'hash'

最佳答案

肖恩的回答不会有任何区别。

您的代码适用于较旧的 Telethon 版本。在新版本中,一个新参数 hash 被添加到 GetParticipantsRequest 方法。因此,您也需要将 hash 作为参数传递。像这样添加 hash=0:

result = client(GetParticipantsRequest(InputChannel(channel.chats[0].id, channel.chats[0].access_hash), filter, num, 100, 0))

请注意,请求的哈希 不是 channel 哈希。它是根据您已知的参与者计算的特殊哈希值,因此 Telegram 可以避免重新发送整个内容。您可以将其保留为 0。

Here是来自官方 Telethon wiki 的最新示例。

关于python - 如何使用 telethon 让所有用户进入 Telegram channel ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47698756/

相关文章:

python - login_required 装饰器不起作用,flask-Login 允许匿名用户

c# - 上传多个文件时出现 TLSharp 错误

python - 如何删除 channel Telegram 上的消息?

python-3.x - Telethon 中有没有办法从聊天中获取消息以及发件人姓名、日期和时间?

python - 在 Spark 中应用具有非恒定帧大小的窗口函数

python - 为 PyGtk 应用授予 root 权限

python - 多个 numpy 数组的点积

python - Telegram:从不同的脚本向机器人发送消息

python - 如何检测用户使用电视马拉松阅读消息?

python - 如何从 Telegram 获取公共(public) channel 的消息