¿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)
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:
En este ejemplo de código, definimos una función
async
llamadacount_new_members
que toma un ID de canal como parámetro. Creamos una nueva instancia deTelegramClient
con elapi_id
yapi_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 llamadahandler
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 atributouser_joined
del evento esTrue
, lo que significa que un nuevo usuario se unió al chat. Si es así, actualizamos la variableconteo_anterior
e imprimimos el nuevo conteo.Finalmente, iniciamos el cliente y lo ejecutamos hasta que se desconecte usando
client.start()
yclient.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')
.