es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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')
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Sí, hay una forma de identificar canales inválidos. Una forma es utilizar el método get_entity de la clase TelegramClient para verificar si un canal existe antes de escuchar mensajes de él. Por ejemplo:

    try:
        client.get_entity('https://t.me/closed_channel_name')
    except ValueError:
        print('Canal inválido')
    

    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étodo get_entity puede levantar otras excepciones si hay otros problemas con el canal o la API.

Comments are closed.