如何使用 Telethon 获取电报私人频道 ID
Posted
技术标签:
【中文标题】如何使用 Telethon 获取电报私人频道 ID【英文标题】:How to get a telegram private channel id with telethon 【发布时间】:2020-11-01 00:39:42 【问题描述】:您好,不知道如何解决这个问题,因此我们将不胜感激。 我订阅了一个私人频道。这个频道没有用户名,我也没有邀请链接(管理员刚刚添加了我)。 由于我在工作中使用这个频道,为了加快我想要使用 Telethon 处理频道上发布的消息的事情。
程序的核心是:
@events.register(events.NewMessage(chats = my_private_channel))
async def handler(event):
#do things
问题是我无法过滤到达该特定频道 ID 的消息。我得到错误:
ValueError: Cannot find any entity corresponding to "0123456789"
我尝试了不同的技术来获取我的频道 ID,但错误总是相同的。特别是:
-
频道是私有的,所以它没有用户名(“@blablabla”)
我没有邀请链接
我已尝试处理所有传入消息,直到管理员在频道上发送消息,打印发件人信息并从“ID”键中获取值
我曾尝试使用电报网络并从 url 获取 ID(也在其前面添加 -100)
但是当我将 ID 放入参数 chats 中时,我总是得到上面报告的错误。
提前致谢, 祝你有美好的一天
【问题讨论】:
【参考方案1】:如果您有权访问该频道,则该频道会显示在您的聊天列表中。
你必须遍历你的聊天检查他们的标题,然后将所需的聊天存储在一个变量中:
my_private_channel_id = None
my_private_channel = None
async for dialog in tg.client.iter_dialogs():
if dialog.name == "private chat name":
my_private_channel = dialog
my_private_channel_id = dialog.id
break
if my_private_channel is None:
print("chat not found")
else:
print("chat id is", my_private_channel_id)
您可以过滤发送到 my_private_channel 的消息。
【讨论】:
非常感谢!这很有效,也是跟踪所有加入的频道和聊天的好方法。谢谢【参考方案2】:如果没有邀请链接,您将无法加入私人频道,也无法获得有关该频道的任何信息。顾名思义,它是私有的。
【讨论】:
是的,但我订阅了那个频道。在我的 Telegram 应用程序上,我可以看到所有消息,因为管理员添加了我。我也可以通过 Telethon 读取所有消息,唯一不能做的就是过滤将 chats 参数中的 id 传递给 event.NewMessage 函数的消息。以上是关于如何使用 Telethon 获取电报私人频道 ID的主要内容,如果未能解决你的问题,请参考以下文章