如何使用 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的主要内容,如果未能解决你的问题,请参考以下文章

sh 获取电报频道ID

Python 和 Telethon:登录错误 UPDATE_APP_TO_LOGIN

公共频道更改为私人频道时无法获取 Slack 频道信息

如何将电报机器人添加到我不是管理员的公共频道?

如何使用电报内联机器人获取组 ID 和聊天 ID?

如何将消息从另一个用户的频道正确转发到群组?