我正在运行这个:
from telethon import TelegramClient, events
from 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()
但是,没有得到更新,为什么?这里有什么问题吗?
起初,我尝试了 chats=[-100123456]
(没有 PeerChat),但没有得到更新...
最佳答案
您不应将“标记 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)
但不是两者都是。
-100
前缀告诉 Telethon 它是一个Channel
(megagroups,也称为 supergroups,也是Channel
)。-
前缀告诉 Telethon 这是一个Chat
。+
前缀告诉 Telethon 这是一个User
。
这遵循与 Telegram HTTP Bot API 相同的约定。
如果您不使用前缀,Telethon 将在缓存中查找所有类型。如果它不在缓存中,它将尝试使用 User
。
如果您使用前缀,Telethon 只会从缓存中获取该类型。如果它不在缓存中,它将尝试使用您的前缀所说的类型。
内部,
-100123 == PeerChannel(123)
-123 == PeerChat(123)
123 == PeerUser(123)
event.chat_id
、event.user_id
、client.get_peer_id
都返回带前缀的 ID,因为它对库有帮助,对用户也方便.
更新是来自 Telegram 的“原始”对象,它们是原始的真实值。
关于python - 在 telethon.events 中使用 "chats"参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60752706/