如何使用 telethon 获取电报私人频道 ID

您好不知道如何解决这个问题,所以任何帮助将不胜感激。我订阅了一个私人频道。这个频道没有用户名,我也没有邀请链接(管理员刚刚加了我)。由于我在工作中使用这个频道,为了加快我想处理使用 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,但错误总是一样的。尤其:

  1. 该频道是私有的,因此没有用户名(“@blablabla”)

  2. 我没有邀请链接

  3. 我试图处理所有传入的消息,直到管理员在频道上发送消息,打印发件人信息并从“ID”键获取值

  4. 我尝试使用电报网络并从 url 获取 ID(也在它前面添加 -100)

但是当我把 ID 放在参数chats中时,我总是得到上面报告的错误。

提前致谢,祝你有美好的一天


MMMHUHU
浏览 768回答 3
3回答

慕婉清6462132

如果您有权访问该频道,它就会显示在您的聊天列表中。您必须遍历聊天以检查其标题,然后将所需的聊天存储在变量中:my_private_channel_id = Nonemy_private_channel = Noneasync for dialog in tg.client.iter_dialogs():    if dialog.name == "private chat name":        my_private_channel = dialog        my_private_channel_id = dialog.id        breakif my_private_channel is None:    print("chat not found")else:    print("chat id is", my_private_channel_id)比您可以过滤发送到 my_private_channel 的消息。

明月笑刀无情

您可以打印您参与的所有对话/对话。您还需要从您获得的 id 中删除 -100 前缀:-1001419092328 = 1419092328 (actual ID)from telethon import TelegramClient, eventsclient = TelegramClient("bot", API_ID, API_HASH)client.start()print("🎉 Connected")@client.on(events.NewMessage())async def my_event_handler(event):        async for dialog in client.iter_dialogs():        print(dialog.name, 'has ID', dialog.id) # test ID -1001419092328client.run_until_disconnected()如果您想收听特定频道,可以使用channel_id=1419092328. 您只会收到广播给它的消息:from telethon import TelegramClient, eventsfrom telethon.tl.types import PeerChannelprint(f"👉 Connecting...")client = TelegramClient("bot", API_ID, API_HASH)client.start()print("🎉 Connected")@client.on(events.NewMessage(PeerChannel(channel_id=1419092328)))async def my_event_handler(event):    msg = event.text        print(f"[M] {msg}")client.run_until_disconnected()

catspeake

如果没有邀请链接,您将无法加入私人频道,也无法获得有关它的任何信息。顾名思义,它是私有的。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python