Automatiza el envío de mensajes en Discord

Automatiza el envío de mensajes en Discord

Hace poco descubrí las siglas RPA (Automatización Robótica de Procesos) y el universo que lo rodea, por lo que hoy vengo a compartir mi experiencia a través de una guía paso a paso para crear una automatización que ayude a organizar un club de lectura.

Para este proyecto utilizaremos algunas herramientas como Python, BotCity y Discord.

Conociendo las tecnologías

RPA

Comprendamos inicialmente el significado del acrónimo: Robotic Process Automation. Esta tecnología se puede utilizar para crear robots que realicen esos procesos repetitivos que encontramos en la vida cotidiana, como completar hojas de cálculo, leer archivos, acceder a portales gubernamentales, etc.

Al utilizar código para desarrollar este robot, podemos definir todos los pasos a seguir para resolver un proceso, teniendo infinitas posibilidades, incluida la interacción con el sistema operativo, páginas web y diversos programas informáticos.

Python

Python es un lenguaje de programación de alto nivel, es decir, su escritura es muy parecida al lenguaje natural. Esta característica hace que el código sea más fácil de entender, facilitando el aprendizaje, pero siempre es importante comprender los conceptos detrás de cada expresión que escribimos.

Otro punto fuerte de este lenguaje es que es de código abierto, es decir, tiene una comunidad alrededor del mundo apoyándolo, y debido a su popularidad, podemos encontrar fácilmente soluciones a problemas comunes que nos encontramos durante el proceso de aprendizaje.

BotCity

Es una herramienta brasileña de código abierto, con sus bibliotecas tenemos acceso a aceleradores de código, que son funciones intuitivas que facilitan el desarrollo de automatizaciones.

Además de ayudar con la construcción, también cuenta con un portal de gestión y orquestación de automatización integrado en el código, por lo que podemos definir varios recursos como tareas, registros y alertas.

Discord

Discord es una aplicación de comunicación de texto, imágenes, voz y video. Está disponible en varios sistemas operativos y con versión para navegadores web.

A través de él podemos crear grupos, servidores y canales con intereses comunes e intercambiar información sobre un tema específico.

Club de lectura

Luego de conocer un poco las herramientas que utilizaremos en este proyecto, identificaremos los principales objetivos del club de lectura para luego desarrollarlo.

Requisitos principales

  • La reunión del club de lectura se realizará una vez por semana en Discord a través del canal de voz y video para discutir las lecciones aprendidas de un artículo.
  • El robot buscará el artículo para discutirlo en la comunidad Revelo una semana antes de la reunión.
  • El robot presentará el mensaje con la siguiente información:

-Título del artículo;

-Resumen;

-Nombre y foto del autor;

-Portada del artículo;

-Link que lleva a la lectura.

  • El robot pondrá automáticamente el artículo a disposición de los miembros, en el canal de texto del club de lectura, para que lo lean durante la semana.

Configurando Discord

Si aún no tienes una, crea una cuenta siguiendo los pasos disponibles en el sitio oficial de Discord. Posteriormente, crearemos un servidor que será nuestro club de lectura de la siguiente manera:

  • Busque el botón agregar un servidor en la barra lateral izquierda de la aplicación;
  • Se abrirá una pestaña de opciones. Elige la opción Club escolar;
  • Selecciona la opción “Para mis amigos y yo”;
  • Da un nombre y carga un ícono en el servidor;
  • Finaliza haciendo clic en crear.

De esta forma se creará una estructura con canales predefinidos, los cuales se pueden modificar según su uso. Para el club de lectura crearemos un canal de texto llamado artículos para recibir mensajes robados.

Necesitaremos crear un webhook, que es un token de conexión de automatización con Discord. Para ello accedemos a la configuración del servidor en la aplicación, en la pestaña de integraciones, donde encontramos una tarjeta llamada webhooks y pulsamos en crear.

Ya creado, cambiamos su nombre a ‘Robot Lector’ y definimos el canal por el que enviará mensajes a artículos. Finalmente, copiamos la URL del webhook para usarla más adelante en el código.

Desarrollando el bot

Para desarrollar el robot, comencemos definiendo los paquetes de Python que usaremos en un archivo requirements.txt.

Lo que hace cada paquete es:

  • Framework web: facilita la interacción del robot con páginas web;
  • Maestro: integra el robot con la orquestación;
  • Discord plugin: Facilita la interacción del robot con la aplicación.

Para instalarlos usamos el siguiente comando en la terminal en la raíz del proyecto, donde se guarda el archivo:


El siguiente paso será descargar el controlador web del navegador. Para este proyecto usaremos el geckodriver de Firefox. Lo colocaremos dentro de una carpeta llamada resources.

Finalmente crearemos el archivo principal llamado bot.py, en el cual desarrollaremos toda la lógica de nuestro robot para capturar información de los artículos y crear un mensaje para el club de lectura.

La estructura del archivo se verá así:


Al comienzo del archivo bot.py, importaremos todas las bibliotecas que usaremos, luego crearemos una estructura básica con la instancia y configuraciones de un webbot dentro de una función llamada main.


Entendamos qué está sucediendo en cada línea dentro de la función main:

  1. Define una variable llamada robo_leitor que será una instancia de WebBot.
  2. Define que el robot se ejecutará en background, es decir, podemos usar nuestra computadora normalmente mientras el robot actúa en segundo plano.
  3. Define cuál navegador va a utilizar el robot.
  4. Almacena la ruta del webdriver en una variable llamada driver.
  5. Configura el webdriver.
  6. Define la url de la página a la que accesará el robot.

Luego de este paso, buscaremos en la página web para capturar los elementos que necesitamos para crear el mensaje que el robot enviará a Discord.

Para ello usaremos el DOM de la página. Se puede visualizar en los navegadores a través del teclado presionando F12 o haciendo clic en algún lugar de la página con el botón derecho del mouse y seleccionando la opción inspeccionar. De esta manera, tenemos acceso a varios elementos.

Para ilustrar, ve cómo queda el DOM:


Podemos capturar varios tipos de elementos, como texto, imágenes, enlaces, entre otros. Para nuestro mensaje, inicialmente buscaremos el enlace al artículo destacado, de modo que las personas del club puedan acceder a él.

El código quedará así:


Observemos lo que tenemos aquí:

  • find_element es una función de la biblioteca BotCity donde busca el elemento en el DOM de la página web a la que accedemos. Tenemos dos parámetros en esta función, el primero es el nombre del selector y el segundo define el tipo de selector. En este caso estamos usando un selector CSS.
  • Con el elemento capturado usaremos la función get_property(‘href’) para extraer el enlace del elemento.

De esta manera, capturamos el enlace del artículo.

Con la misma lógica, buscamos todos los elementos necesarios navegando por el DOM: título del artículo, resumen, portada, nombre y foto del autor. El código con toda la información capturada se ve así:


Ahora podemos armar un mensaje incorporando la información que se capturó del sitio web.

Entendamos este extracto:

  1. Creamos una variable llamada mensaje que será una instancia de EmbeddedMessage con 3 parámetros.
  2. Parámetro título del mensaje que recibe el título del artículo.
  3. Parámetro de descripción del mensaje que recibe el resumen.
  4. Parámetro con el color que quedará visible en el borde de la caja de mensaje.
  5. Definimos un campo con el link para dirigir a los lectores.
  6. Definimos la portada del artículo como ilustración.
  7. Definimos la información de la persona que escribió el artículo.

Finalmente, vamos a instanciar el BotDiscordPlugin, que hará conexión con Discord y enviará el mensaje que preparamos arriba.

  1. Token que tomamos al crear el webhook.
  2. Nombre que damos al robot en Discord.
  3. Instancia del plugin para conexión con Discord.
  4. Envío del mensaje al canal definido en Discord.

La prueba

Después del desarrollo, ejecutaremos el robot localmente para confirmar que toda la información recopilada sea correcta. Para hacer esto, en la terminal, en la raíz del proyecto, donde se encuentra el archivo bot.py, llamamos al siguiente comando:


Para valorar el resultado vamos a Discord, en el servidor del club de lectura y comprobamos el canal elegido, en este caso el canal llamado #artículos. Debe contener un mensaje en este formato, con toda la información actualizada:


Otro modo de hacer la prueba

Además de ejecutarlo localmente llamando al comando, podemos gestionarlo a través de un orquestador, también desde BotCity. En él podemos desplegar el robot, crear una serie de logs que se pueden definir en el código, crear tareas determinando fechas de ejecución, además, podemos definir el robot para que busque un artículo semanalmente.

Como ejemplo, creemos un registro en el código para registrar el título del artículo y la fecha en que se envió al club de lectura. Para hacer esto, incluyamos algunas líneas más de código en el archivo bot.py, antes de que el robot cierre el navegador:


Con la función new_log_entry del maestro, conseguimos definir un registro de log llamado lista_de_articulo_del_club con los valores de fecha, título del artículo y nombre del autor. Al integrarnos con el orquestador, podemos mantener este registro en el portal para realizar un seguimiento de todos los artículos ya leídos y discutidos por el club.

Esta y otras formas de integración se describen en la documentación.

Consideraciones finales

Crear automatizaciones de varios tipos facilita la vida de las personas, transformando el tiempo dedicado a actividades repetitivas en tiempo para ser creativos o realizar otras tareas.

Piensa en cuántas actividades de tu vida diaria se pueden automatizar, mejorando tu calidad de vida, tanto profesional como personal.

💡
Las opiniones y comentarios emitidos en este artículo son propiedad única de su autor y no necesariamente representan el punto de vista de Listopro.

Listopro Community da la bienvenida a todas las razas, etnias, nacionalidades, credos, géneros, orientaciones, puntos de vista e ideologías, siempre y cuando promuevan la diversidad, la equidad, la inclusión y el crecimiento profesional de los profesionales en tecnología.