189 - Un bot antispam para Telegram
Como implementar un bot antispam para Telegram, con todas las tecnologías que te he ido contando aquí. Docker, Git, SQLite, Grafana, Ansible y Python.
En el episodio 75 del podcast ya te hablé sobre acabar con el spam utilizando un bot. La cuestión es que desde un tiempo a esta parte, la cantidad de spam ha aumentado, y no solo esto, sino que algunos de estos pseudo bots, tienen una actitud, cuanto menos, sospechosa. En aquel entonces, lo implementé en un VPS, utilizando PHP. En esta ocasión quería hacerlo de una forma mas automatizada, mas segura. Simplemente, quería utilizar todas las tecnologías que te he ido contando de aquel entonces hasta aquí.
Así, en este episodio del podcast, te voy a contar como levantar un bot antispam para Telegram. Como instalarlo y monitorizarlo.
Un bot antispam para Telegram
¿Porque implementar un bot antispam?
Como te decía en la introducción el objetivo era montar un bot antispam para Telegram. Seguramente te estarás preguntando, ¿porque implementar un bot antispam?. ¿Seguro que habrá otros?¿Porque no instalar uno de los que hay disponibles?.
Lo cierto es que aunque esté disponible el código fuente, nada te puede asegurar que el código disponible sea el que está en el servidor. Un bot que registra todo lo que sucede en un grupo, no me gusta. Soy consciente, que todas mis conversaciones en Telegram versan sobre lo mismo, Linux, pero no me gusta.
Por otro lado, he probado diferentes bots, y ninguno he conseguido que funcionara. Así, ¿que mejor solución que implementar mi propio bot antispam?
Sobre las tecnologías
Indicarte que aunque yo he hecho el despliegue en un VPS, tu lo puedes hacer perfectamente en tu Raspberry, siempre y cuando la IP de tu casa no esté nateada. Aunque tengas una IP dinámica, siempre puedes recurrir a una DNS dinámica, porque en general, no tendrás una IP fija.
A mi me gusta la solución del VPS, porque siempre le puedo dar mas uso, y lo tengo siempre disponible para esto y para otras cosas. Sin embargo, como te digo, la solución de la Raspberry, es también una buena solución.
Python
En el episodio 75, te hablé sobre el bot que implementé en PHP. Sin embargo, en este caso, he optado por otro lenguaje de programación… mi amado Python. ¿Porque en Python?. El bot no es nada complejo, y no debe serlo. Por otro lado, debería ser sencillo de mantener, porque al fin y al cabo dependemos de la REST API de Telegram. Todo esto, lo cumple a la perfección.
Docker
Uno de los problemas con los que te puedes encontrar es a la hora de que todo funcione correctamente. Es dicho de en mi equipo funciona. Esta es una de las razones para la existencia de Docker. Con esta solución, simplemente se trata de levantar el contenedor y a funcionar.
Sqlite
Para guardar todos los datos utilizo una base de datos SQLite. Lo cierto es que no guardo muchos datos, pero, una base de datos es algo realmente sencillo de utilizar. Cómodo y práctico.
Actualmente solo está guardando el número de identificación de Telegram. Ni nombre de usuario ni nick. Pero el objetivo, es que ni siquiera guarde el número de identificación, o que mas bien guarde el hash de este número de identificación.
Grafana
Para completar el círculo quiero guardar los datos estadísticos en la combinación de Influxdb y Grafana. Se trata simplemente de guardar datos estadísticos. Número de mensajes por intervalo de tiempo, entradas y salidas, número de bots. Y por supuesto representarlo en Grafana.
Toda esta información, ¿para que? Simplemente por ver el comportamiento de los bots, y el comportamiento de nosotros. Ver cuando enviamos mas mensajes, si hay alguna relación de causalidad de los mensajes, con el spam. Igualmente, quiero saber cuando hay mas spam, a lo largo del día, de la semana o del mes.
Git
Por supuesto para tener el bot documentado, y no tener problemas con las diferentes versiones del mismo, utilizo el control de versiones Git. Esto me permite no solo tenerlo bajo control, sino también, poderlo compartir contigo a través de GitHub.
Ansible
Esto me ha quedado en el tintero, pero lo tengo que preparar y documentar para las próximas ocasiones en las que tenga que utilizar este bot u otros.
Y es que para automatizar todo el proceso de despliegue puedes utilizar Ansible. De esta manera el playbook, será capaz de descargarte desde Git el repositorio, desplegarlo en un VPS o en una Raspberry o donde tu quieras y por último levantar el contenedor Docker.
Como funciona el bot antispam
El funcionamiento de este bot es realmente sencillo. Cuando entra un nuevo usuario, le hace una pregunta. Simplemente tiene que elegir el pingüino entre una colección de animales. En total 8 animales. ¿Porque un pingüino? Ya te puedes imaginar.
Aquí puede pasar dos cosas, o bien que el recién llegado responda a la pregunta, o bien que no responda. Si después de un tiempo de cortesía, el nuevo usuario no ha contestado, directamente lo expulsa del grupo. Por el contrario, si contesta y se equivoca, lo expulsa. Por último, si contesta y acierta, simplemente no hace nada.
Bueno, esto no es correcto del todo, porque en cualquier caso, lo que hace es guardar los datos en una base de datos de SQLite, como he dicho anteriormente. En esta base de datos se guarda el número de identificación del usuario y un valor que indica si es un bot o no lo es.
La lógica de funcionamiento la puedes encontrar en el siguiente diagrama de flujo.
Por supuesto, si ves cualquier error, o tienes cualquier idea para mejorarlo, no dudes en decirlo.
Conclusiones
Como ves se trata de una idea, y un funcionamiento sencillo, que puede evitar actualmente tanto ese spam que es tan molesto, como por otro lado, esos bots durmientes que se quedan en tus grupos, y que no sabes a que se dedican.
Como verás, actualmente falta algo de información en este artículo. Al menos, la dirección del repositorio donde se encuentra el código fuente, y por supuesto las instrucciones. No te preocupes. En breve, lo publicaré. Lo cierto es que quiero asegurarme de que todo funciona correctamente antes de hacer una destroza en algún que otro grupo, expulsando a todos los usuarios del mismo, o impidiendo que otros usuarios puedan acceder al grupo.
Espero que te haya gustado este nuevo episodio del podcast. Si puedes, te agradecería una valoración en iVoox y/o en Apple Podcast.
Imagen de portada de Eric Krull en Unsplash