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 se puede rastrear el número de nuevos suscriptores de un canal de Telegram?

Estoy utilizando telethon en python y quiero intentar hacer un seguimiento del número de nuevos miembros que se unen a un canal con el tiempo.

Mi primer intento fue utilizando la función “telethon.tl.functions.channels.GetFullChannelRequest”:

async def save_subs(channel_id):
    client = TelegramClient('anon', TELEGRAM_API_ID, TELEGRAM_API_HASH)
    await client.start()
    async with client:
        previous_count = None
        number_new_members = 0
        while True:
            res = await client(
                GetFullChannelRequest(
                    channel=channel_id
                )
            )
            channel_info = res.to_dict()
            count = channel_info['full_chat']['participants_count']
            print(f'current count: {count}')
            if previous_count is not None and count > previous_count:
                number_new_members += count - previous_count
                print(f'new subs: {number_new_members}')
            previous_count = count
            time.sleep(1)

def start(channel_id):
    asyncio.run(save_subs())

Sin embargo, parece que esperar 1 segundo cada vez es demasiado, y después de 4 solicitudes hay un retraso de unos segundos. ¿Quizás esto está siendo limitado por la tasa?

Luego intenté utilizar el evento “events.ChatAction” porque en la documentación dice que un nuevo usuario que se une a un canal debería activarlo, pero no se está disparando nada:

def check_new_user(channel_id):
    telegram_client = TelegramClient('anon', TELEGRAM_API_ID, TELEGRAM_API_HASH)

    @telegram_client.on(events.ChatAction)
    async def my_event_handler(event):
        # esto nunca se imprime
        print('evento capturado')

    telegram_client.start()
    telegram_client.run_until_disconnected()


def start(channel_id):
    check_events(channel_id)
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para llevar un registro de la cantidad de nuevos miembros que se unen a un canal de Telegram con el tiempo usando Telethon en Python, puedes utilizar el evento events.ChatAction. Este evento debería activarse cada vez que un nuevo usuario se una al canal.

    Aquí tienes un fragmento de código de ejemplo que debería funcionar:

    from telethon import TelegramClient, events
    
    async def count_new_members(channel_id):
        client = TelegramClient('nombre_de_sesión', api_id, api_hash)
    
        # Obtén el conteo inicial de participantes
        channel = await client.get_entity(channel_id)
        conteo_anterior = channel.participants_count
    
        @client.on(events.ChatAction)
        async def handler(event):
            # Verifica si un nuevo usuario se unió al canal
            if event.user_joined:
                # Actualiza el conteo
                nonlocal conteo_anterior
                conteo_anterior = event.chat.participants_count
                print(f"¡Nuevo miembro se unió al canal! Total: {conteo_anterior}")
    
        # Inicia el cliente
        await client.start()
        await client.run_until_disconnected()
    
    
    # Ejemplo de uso: count_new_members('@micanal')
    

    En este ejemplo de código, definimos una función async llamada count_new_members que toma un ID de canal como parámetro. Creamos una nueva instancia de TelegramClient con el api_id y api_hash proporcionados.

    Dentro de la función, primero obtenemos el conteo inicial de participantes del canal utilizando client.get_entity. Luego, definimos una función manejadora de eventos llamada handler que se ejecutará cada vez que haya una acción de chat en cualquiera de los chats en los que esté el cliente.

    Dentro de la función handler, verificamos si el atributo user_joined del evento es True, lo que significa que un nuevo usuario se unió al chat. Si es así, actualizamos la variable conteo_anterior e imprimimos el nuevo conteo.

    Finalmente, iniciamos el cliente y lo ejecutamos hasta que se desconecte usando client.start() y client.run_until_disconnected().

    Puedes llamar a esta función con el ID del canal que deseas rastrear, de la siguiente manera: count_new_members('@micanal').

Comments are closed.