如何通过telethon获得电报专用频道id



Hi不知道如何解决这个问题,所以非常感谢您的帮助。我订阅了一个私人频道。这个频道没有用户名,我也没有邀请链接(管理员刚刚添加了我(。由于我在工作中使用这个频道,为了加快事情的速度,我想使用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. 我已经尝试使用telegram网站并从url中获取ID(还在前面添加-100(

但当我将ID放入参数chats时,我总是会收到上面报告的错误。

提前感谢,祝度过美好的一天

如果您可以访问该频道,则它会显示在您的聊天列表中。

你必须循环浏览你的聊天记录,检查它们的标题,然后将所需的聊天记录存储在一个变量中:

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的消息。

您可以打印您参与的所有对话框/对话。您还需要从id中删除-100前缀,例如:-1001419092328 = 1419092328 (actual ID)

from telethon import TelegramClient, events

client = 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 -1001419092328

client.run_until_disconnected()

如果您想收听特定频道,可以使用channel_id=1419092328。您将只接收广播给它的消息:

from telethon import TelegramClient, events
from telethon.tl.types import PeerChannel

print(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()

没有邀请链接,你就无法加入私人频道,也无法获得任何信息。顾名思义,这是私人频道。

最新更新