Desarrollo de bots: Escriba del Muro. Parte 4

Imagen de un hombre escribiendo sobre un papel con estilo lineart, generado por la inteligencia artificial de bing

He estado teniendo algunos problemas para determinar la flexibilidad del escriba del muro, por lo que estudie el código que funciona para el propósito que fue creado, pero es muy difícil de escalar.

Para la parte cuatro de esta entrega en la que se analiza el código de un bot llamado «escriba del muro», analizare las funciones creadas en el archivo index.js del escriba del muro y daré detalles del despliegue del bot.

Introducción

Me tardé en crear esta entrega debido a muchos factores, pero el mas relevante es que le perdí la fe a mi propio código, pero en realidad es absurdo. No creé este código para hacer una cosa super poderosa sino para practicar y entender el funcionamiento de un bot en Telegram.

Conforme lo he ido trabajando y estudiando, he notado que no hay una forma correcta o especifica de hacer bots. Incluso he visto gente que programa algunos con una interfaz Tkinter de python. Por lo tanto, como meta he decidido que lo siguiente para hacer con este código, es mejorarlo para que se pueda escalar y adaptar fácilmente como base para posteriores proyectos.

Escriba del Muro

El escriba del muro es un proyecto sencillo que busca poner en práctica, no solo la programación sino también la administración y despliegue de proyectos. El objetivo principal es utilizar el gestor de procesos PM2 y el panel de línea de comandos para poder ejecutar los procesos necesarios para el correcto funcionamiento del sistema. Además, cuenta con el soporte de Sequelize ORM, que permite una fácil migración de sistemas de base de datos. Este proyecto ofrece la flexibilidad de utilizar tanto MySQL como SQLite, dependiendo de las necesidades o preferencias del usuario final. Gracias a Sequelize ORM, se simplifica el proceso de migración de sistemas de base de datos, lo cual facilita la administración del sistema en general. El uso de PM2 como gestor de procesos permite garantizar un funcionamiento eficiente y estable del sistema. Esto, junto con el panel de línea de comandos, proporciona una interfaz fácil de usar para ejecutar y supervisar los procesos necesarios. En resumen, el escriba del muro es un proyecto completo que combina programación, administración y despliegue de proyectos. Con su capacidad para utilizar diferentes sistemas de base de datos y su fácil sistema de migración, se adapta a las necesidades y preferencias de cada usuario.

Inicializando el Sistema

El Escriba del Muro utiliza un sistema basado en dotenv, por lo que deberias tenerlo instalado para ejecutarlo. las variables son las siguientes

DB=sqlite
CHANNEL=
ADMIN=
BOTAPI=

Recuerda llenar los datos de tu bot. La variable DB existe por si en un futuro agrego soporte para MySQL (que sequelize ya lo tiene, solo es para ver si adapto el código a almacenar en MySQL también)

require('dotenv').config();
//const sequelize = require("./sequelize")
var DB = require("./persistencia")
var SESION = require("./sesion")

async function registrar_mensaje(ctx,next){
	DB.registrar_mensaje(ctx)
	next()
}

const { Bot } = require("grammy");
const bot = new Bot(process.env.BOTAPI);

bot.use(registrar_mensaje)

La primera funcion asincrona registrar_mensaje(ctx,next) Fue repasada por la seccion de persistencia en la parte tres de esta entrega. Sirve para registrar datos del usuario y validarlos si pertenecen al canal o no. Es llamado por el filtro bot.use(registrar_mensaje)

Filtros de Comandos

Los filtros de comandos permiten disparar las funciones que dependen únicamente de un comando para funcionar. por lo general responden con un mensaje prediseñado.

//Comandos
bot.command("start", iniciar_bot);
bot.command("sobremi", sobremi);
bot.command("publicar", publicar);
bot.command("ayuda", ayuda);
bot.command("cancelar",cancelar)

Filtros de flujo de sesion

Los filtros de flujo de sesión detectan las palabras clave que disparan funciones diseñadas para establecer persistencia y respuesta acorde al guion. Permiten al usuario interactuar con funciones especificas sin necesidad de recordar comandos, de una forma mas intuitiva que los bots tradicionales.

//flujo de sesion
bot.command("guardar_username",guardar_username)//guarda el nombre del usuario y pasa al siguiente paso, registrar las redes sociales
bot.command("guardar_redes",guardar_redes)//guarda las redes y avanza a la siguiente fase, agregar contenido
bot.command("guardar_contenido",guardar_contenido)//guarda el contenido y crea la vista previa
//bot.command("enviar_revision",guardar_contenido)//guarda el contenido y crea la vista previa

//flujo de sesion para el admin
bot.command("revisar", iniciar_revision)
bot.command("aprobar", aprobar_publicacion)
bot.command("rechazar", rechazar_publicacion)

//flujo de sesion de soporte
bot.command("soporte", iniciar_soporte)
bot.command("revisar_soporte", revisar_soporte)
bot.command("terminar_soporte", terminar_soporte)

Filtro General

El filtro general permite determinar si el usuario ha puesto cualquier texto no controlado y actuar correspondientemente

//mensajes en general
bot.on("message", mensajes_generales);

Inicio del sistema

Un detalle que me costo mucho localizar, es entender la forma en la que Grammy establece la escucha de eventos de telegram.

Por defecto, la API de Telegram no entrega todos los eventos sino solo los mas importantes, asi que hay que pedirle explícitamente los eventos que necesitamos. En este caso, necesitamos que el bot sea capaz de escuchar cuando un nuevo usuario se registra en el canal para poder confirmar que lo ha hecho como requisito principal para utilizar el bot.

Para esto, se crea un objeto allowed_updates especificando chat_member, message, my_chat_member para obtener esta información

//Inicializa el Pooling
bot.start({
	allowed_updates: ["chat_member", "message","my_chat_member"],
});

Despliegue

No es complicado utilizar el Escriba del Muro. Una vez editado el archivo .env, basta con ejecutar el comando npm install y npm start para tenerlo ejecutando.

Si deseas tener el sistema ejecutando en el fondo y guardando logs, deberas utilizar el sistema PM2 utilizando el comando pm2 start index.js

Conclusiones

Este bot es un ejercicio practico que he realizado para comprender mejor las interfaces de usuario menos convencionales, como son las de línea de comandos.

El flujo de trabajo de los bots puede parecer lineal en un principio, pero es mas complejo de lo que parece y como no hay ningún lineamiento ni buenas practicas estandarizadas, uno puede terminar bastante perdido al desarrollarlo.

Espero que esta colección de artículos les haya gustado. Aunque el desarrollo del boto no tomo mas de unas semanas, terminar esta colección de artículos tomo algo mas de cinco meses. Esto no es debido a la dificultad del proyecto, sino a sucesos imprevistos que impidieron que termine el trabajo a tiempo.

Actualmente estoy dejando el proyecto listo para descargar en este enlace, pero solo puede ser utilizado por las personas que se registren en el sitio. Luego creare un repo en GitHub


Descubre más desde Interlan

Suscríbete y recibe las últimas entradas en tu correo electrónico.


Una respuesta a “Desarrollo de bots: Escriba del Muro. Parte 4”

Deja un comentario

Interlan