Использование аргумента "чаты" в telethon.events - PullRequest
0 голосов
/ 19 марта 2020

Я запускаю это:

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), но не получил обновлений ...

1 Ответ

2 голосов
/ 19 марта 2020

Не следует смешивать понятия «отмеченные идентификаторы» и 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 (мегагруппы, также известные как супергруппы, также 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 все возвращают префиксные идентификаторы, потому что это полезно для библиотеки и удобно для пользователя.

Обновления - это «необработанные» объекты из Telegram, а это подлинные реальные значения.

...