bot telegram notificaciones

Bot de notificaciones Free2Z en Telegram.

Bot de notificaciones en Telegram para Free2Z, rastreando comentarios públicos con posibles mejoras en el código.

November 3, 2024· 3 min read
144 score

Desde hace algunas semanas había pensado en un bot de Telegram que genere notificaciones de Free2Z. Creo que esto puede ser muy útil en el futuro con el creciente ingreso de usuarios; la actividad en la plataforma será mucho mayor, por lo tanto, recibiremos notificaciones personalizadas de manera instantánea sobre la actividad relacionada a nuestra cuenta o nombre de usuario.

Una inspiración para mí han sido los bots relacionados a otras plataformas o blockchains que permiten el rastreo de actividades o direcciones específicas.

Telegram: Bot


El Código.

He comenzado con códigos sencillos para probar el funcionamiento del bot. También usé varios de la librería de ejemplos de la sección bot en la web de Telegram. Finalmente, utilicé pyTelegramBotAPI como un modelo base para mi código, luego realicé varios cambios y lo personalicé. Además, recurrí a diversas fuentes, tutoriales y herramientas para aprender y lograr hacer estas modificaciones de código. Hasta que pude hacer que el bot arrojara notificaciones sobre Free2Z.

Al principio, la idea era que se recibieran notificaciones personalizadas; es decir, en el bot registrabas el nombre de usuario y luego recibirías las notificaciones asociadas (respuestas, comentarios, 2Z o actividad pública AI). Pero algunos eventos o notificaciones son privados; por eso existieron algunos inconvenientes y lo modifiqué para que fuera un bot no personalizado, que rastree la actividad pública más reciente de los comentarios y respuestas.


Problemas.

Sin embargo, han surgido problemas; solo dos códigos han funcionado adecuadamente. El primero muestra las últimas notificaciones de comentarios, pero no mantiene el rastreo de las notificaciones en tiempo real. Además, tiene problemas para detectar el "content_url", que es donde podemos ver el enlace y el nombre de usuario asociado a una respuesta.

El segundo es similar; muestra los comentarios públicos no personalizados, pero en ocasiones repite constantemente los mensajes. También hay que mejorar el orden en que se muestran los mensajes, ya que los más recientes deben aparecer al final en el chat del bot de Telegram.


Códigos.

1.

import telebotimport configimport requests bot = telebot.TeleBot(config.API_TOKEN) users = {} @bot.message_handler(commands=['start', 'help'])def send_welcome(message):    bot.reply_to(message, "Hola, ¿cómo estás? Usa /register [nombre_de_usuario] para registrarte y /notify para recibir notificaciones.") @bot.message_handler(commands=['register'])def register_user(message):    try:        username = message.text.split()[1]        users[message.chat.id] = username        bot.reply_to(message, f"Usuario {username} registrado exitosamente.")    except IndexError:        bot.reply_to(message, "Por favor, proporciona un nombre de usuario válido después de /register.") @bot.message_handler(commands=['notify'])def send_notification(message):    url = 'https://free2z.com/api/comments/'    response = requests.get(url)  # Sin headers de autenticación    if response.status_code == 200:        comments = response.json()        if comments['results']:            for comment in comments['results']:                bot.send_message(message.chat.id, f"{comment['headline']}\n{comment['content']}")        else:            bot.reply_to(message, "No hay nuevos comentarios.")    else:        bot.reply_to(message, f"Error {response.status_code} al obtener comentarios de Free2z.") @bot.message_handler(commands=['conversations'])def get_conversations(message):    url = 'https://free2z.com/api/ai/public-conversations/'    response = requests.get(url)  # Sin headers de autenticación    if response.status_code == 200:        conversations = response.json()        if conversations['results']:            for conversation in conversations['results']:                bot.send_message(message.chat.id, f"{conversation['display_name']}\n{conversation['tags']}")        else:            bot.reply_to(message, "No hay nuevas conversaciones.")    else:        bot.reply_to(message, f"Error {response.status_code} al obtener conversaciones de Free2z.") @bot.message_handler(commands=['creators'])def get_creators(message):    url = 'https://free2z.com/api/creator/'    response = requests.get(url)  # Sin headers de autenticación    if response.status_code == 200:        creators = response.json()        if creators['results']:            for creator in creators['results']:                bot.send_message(message.chat.id, f"{creator['username']}\n{creator['description']}")        else:            bot.reply_to(message, "No hay nuevos creadores.")    else:        bot.reply_to(message, f"Error {response.status_code} al obtener creadores de Free2z.") bot.polling() 

2.

import telebotimport configimport requestsimport timefrom threading import Thread bot = telebot.TeleBot(config.API_TOKEN) users = {}  # Definimos la variable users @bot.message_handler(commands=['start', 'help'])def send_welcome(message):    bot.reply_to(message, "Hola, ¿cómo estás? Usa /register para registrarte y recibir notificaciones.")    users[message.chat.id] = True  # Registramos al usuario para recibir notificaciones def check_comments():    url = 'https://free2z.com/api/comments/'    response = requests.get(url)  # Sin headers de autenticación    if response.status_code == 200:        comments = response.json()        if comments['results']:            for comment in comments['results']:                message_text = f"{comment['headline']}\n{comment['content']}\n{comment.get('content_url', 'No link')}"                send_notification_to_all_users(message_text)                print(f"Notificación enviada: {message_text}")        else:            print("No hay nuevos comentarios.")    else:        print(f"Error {response.status_code} al obtener comentarios.") def send_notification_to_all_users(message_text):    for chat_id in users:        bot.send_message(chat_id, message_text)        print(f"Mensaje enviado a {chat_id}") def check_notifications():    while True:        print("Revisando notificaciones...")        check_comments()        time.sleep(10)  # Revisa cada 10 segundos para nuevas notificaciones if __name__ == '__main__':    notification_thread = Thread(target=check_notifications)    notification_thread.start()    print("Bot inicializado y en espera de comandos.")    bot.polling()  

Conclusión.

Tengo la esperanza de que alguien con conocimiento en esta área se anime a mejorar mi idea o modificar el código y hacer que funcione. Aunque he publicado el código, aún no me he rendido y pienso continuar mejorándolo hasta tener el funcionamiento deseado. Por ahora, el bot solo se mantiene activo 1 hora desde que lo activo en mi editor de códigos; cuando tenga un modelo que funcione, pienso que podría alojarlo y ponerlo a funcionar las 24 horas.

Related Articles