Как получить имя чата или группы входящего сообщения Telegram с помощью Telethon?

У меня есть этот код

from telethon.sync import TelegramClient, events

with TelegramClient('name', api_id, api_hash) as client:
   @client.on(events.NewMessage(pattern=pattern))
   async def handler(event):
      await event.reply("Here should be the Chat or Group name")

Как это реализовать?


person Иван Петрухин    schedule 27.04.2020    source источник


Ответы (1)


если мы говорим только о группах / каналах

chat_from = event.chat if event.chat else (await event.get_chat()) # telegram MAY not send the chat enity
chat_title = chat_from.title

Иначе (если мы хотим получить полное имя сущностей чата, включая пользователей):

from telethon import utils

chat_from = event.chat if event.chat else (await event.get_chat()) # telegram MAY not send the chat enity
chat_title = utils.get_display_name(chat_from)

get_display_name () фактически получает имя, которое вы могли бы увидеть. Работает для типов User, Channel, Chat Этот метод не должен иметь await

person Apepenkov    schedule 27.04.2020
comment
Стоит упомянуть, что event.get_chat() не будет делать запрос, если event.chat is not None and not event.chat.min (я считаю, что заголовок всегда присутствует даже с min, поэтому этот подход является лучшим). - person Lonami; 27.04.2020