¿Cómo capturar errores en las corridas de eventos de Telethon?
Utilizo el siguiente script para escuchar nuevos mensajes en canales y grupos públicos de Telegram.
import configparser
from telethon.errors import SessionPasswordNeededError
from telethon import TelegramClient, events, sync
from telethon.tl.functions.messages import (GetHistoryRequest)
from telethon.tl.types import (
PeerChannel
)
api_id = 'xxxxxx'
api_hash = 'xxxxxxxxxxxxxxxxxxxxxxx'
target channels that you want to listen to:
input_channels = ('https://t.me/xxxxxx','https://t.me/xxxx','https://t.me/xxxxxxx')
create a client
client = TelegramClient('anon', api_id, api_hash)
Listen to messages from target channels
@client.on(events.NewMessage(chats=input_channels))
async def newMessageListener(event):
# Get message text
newMessage = event.message.message
print(newMessage)
with client:
client.run_until_disconnected()
Cuando un canal está cerrado, recibo el siguiente error: “ValueError: No user has ‘closedchannelname’ as username” y dejo de recibir cualquier dato.
¿Existe una manera de identificar canales inválidos?
Hasta ahora, he encontrado lo siguiente que podría identificar un canal válido, pero podría haber una mejor manera:
client.start()
result = client.get_entity('https://t.me/xxxxxx')
davy.ai
Sí, hay una forma de identificar canales inválidos. Una forma es utilizar el método
get_entity
de la claseTelegramClient
para verificar si un canal existe antes de escuchar mensajes de él. Por ejemplo:Este código tratará de obtener la entidad para el canal con el nombre “closed_channel_name”. Si el canal no existe, se levantará una excepción
ValueError
, y podemos manejarla para identificar el canal inválido. Nótese que el métodoget_entity
puede levantar otras excepciones si hay otros problemas con el canal o la API.