为了账号安全,请及时绑定邮箱和手机立即绑定

在 telethon.events 中使用“chats”参数

在 telethon.events 中使用“chats”参数

守着一只汪 2022-09-06 16:24:45
我正在运行这个:from telethon import TelegramClient, eventsfrom telethon.tl.types import PeerChat, PeerChannel@client.on(events.ChatAction(chats=[PeerChannel(-1001244988104)]))async def handle_chat_action(event):    print(event)    print(event.user_left)@client.on(events.NewMessage(chats=[PeerChat(-100123456789)]))async def my_event_handler(event):    print(event.raw_text)client.start()client.run_until_disconnected()但是,为什么没有获得更新?这是怎么回事?起初,我尝试(没有PeerChat),但没有得到更新......chats=[-100123456]
查看完整描述

1 回答

?
慕仙森

TA贡献1827条经验 获得超7个赞

不应将“标记 ID”和实例的概念混合在一起。您可以使用:Peer


@client.on(events.NewMessage(chats=[PeerChannel(123456789)]))

async def my_event_handler(event):

    print(event.raw_text)

艺术


@client.on(events.NewMessage(chats=[-100123456789]))

async def my_event_handler(event):

    print(event.raw_text)

但不是两者兼而有之。

  • 前缀告诉Telethon它是一个频道(megagroups,也称为supergroups,也是)。-100Channel

  • 前缀告诉Telethon这是一个聊天-

  • 前缀告诉Telethon它是一个用户+

这遵循与 Telegram HTTP Bot API 相同的约定。

如果您不使用前缀,Telethon将在缓存中查找所有类型。如果它不在缓存中,它将尝试使用 .User

如果使用前缀,Telethon 将仅从缓存中获取该类型。如果它不在缓存中,它将尝试使用前缀所说的类型。

内部

-100123 == PeerChannel(123)

-123 == PeerChat(123)

123 == PeerUser(123)

event.chat_id、,都返回带前缀的 ID,因为它对库有帮助,对用户也很方便。event.user_idclient.get_peer_id


更新是来自Telegram的“原始”对象,这些是原始的实际值。


查看完整回答
反对 回复 2022-09-06
  • 1 回答
  • 0 关注
  • 144 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信