python - 在 telethon.events 中使用 "chats"参数

标签 python python-3.x telegram telethon

我正在运行这个:

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_idevent.user_idclient.get_peer_id 都返回带前缀的 ID,因为它对库有帮助,对用户也方便.

更新是来自 Telegram 的“原始”对象,它们是原始的真实值。

关于python - 在 telethon.events 中使用 "chats"参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60752706/

相关文章:

python - 如何检索我的 redis 实例中的所有数据?

python - 如何对字典中的所有值求和?

python - Python 3.4.1 中的 wxPython

python - Telegram 的 websocket

android - 使用 Telegram bot api 创建简单的聊天

docker - Docker 容器中的 Telethon TelegramClient 身份验证

python - 我可以使用 Tornado+Celery+RabbitMQ+Redis 吗?

python - 如何通过Python运行unix命令来就地编辑文件

python-3.x - 比较两个数据帧并根据匹配的列值从 df 中删除行

python-3.x - flask 应用程序中的ldap3绑定(bind)语法错误