Empecé a crear un bot de telegram más bien por curiosidad ya que su utilidad no creo que le valga a mucha gente XD. En esta entrada anoto algunas pautas y links para la creación de bots usando python.
El bot en principio permite utilizar los comandos /cs y /hots para enviar un mensaje con mentions (x.ej: @pepito) al grupo en que se encuentra. La finalidad es que los usuarios mencionados reciban una notificación aunque tengan el grupo silenciado. En mi grupo de colegas se suelen hacer estas menciones para convocar partida a algún juego, de ahí que se hayan implementado estas llamadas directamente con mensaje para 2 videojuegos diferentes.
El bot permite a los usuarios unirse o salirse de las menciones usando, por ejemplo: /joincs y /leavecs. Funciona incluso con usuarios que NO tienen activo un @alias para las menciones.
Se utiliza Mongo para guardar los grupos de usuarios que quieren ser mencionados. Las colecciones creadas en la base de datos van referidas al grupo de telegram en el que reside el bot, y su creación es automática cuando se une algún usuario.
Me gustaría implementar la creación de calls con /nombre personalizado por parte de los usuarios de cada grupo de telegram, así como temporizar las mentions, elegir los mensajes y más cositas. Pero esto será dentro de unas semanas.
Por el momento, anoto algunas pautas para la creación de bots:
Creación
Conviene empezar por crear un nuevo bot en telegram:
https://core.telegram.org/bots#botfather
La forma de interactuar con telegram será a través de api y, en la creación del bot en este paso, habremos recibido un token que tendremos que usar en nuestras peticiones.
Extra (apis)
Para saber los métodos implementados y sus parámetros, tendremos que consultar la documentación de la api oficial de bots de telegram (enlace al final del párrafo). Esto nos sirve para saber cómo hay que preguntarle las cosas a la api. Hay buenos ejemplos de cantidad de llamadas:
https://core.telegram.org/bots/api
Una forma rápida de probar estas llamadas es utilizar directamente el navegador, o una aplicación como Postman, que facilita mucho la construcción de llamadas “a mano” al desglosar los parámetros, vemos un ejemplo en Postman de llamada a la api de steam, donde arriba tenemos la URL, seguida por los parámetros que la forman, claramente separados uno a uno por clave y valor, y abajo el resultado devuelto en formato Json.
Python, libs y apis
Para nuestra aplicación he utilizado 2 apis diferentes.
La api oficial la utilizamos a través de esta librería de python (python-telegram-bot), esta librería tiene algunas funciones que nos facilitarán interactuar con la api y gracias a ella será sencillo implementar nuestro programa, interesa ver los ejemplos del enlace:
https://github.com/python-telegram-bot/python-telegram-bot
Podemos hacer gran catidad de cosas con ésta librería que utiliza por defecto la api oficial y seguramente resulta suficiente para muchas aplicaciones.
Sin embargo, la api oficial tiene ciertas limitaciones y estas son cubiertas por otra api no-oficial, que puede hacer prácticamente todo lo que puede hacer un usuario real que interactúa directamente con el chat. En nuestro caso, lo que NO puede hacer la api oficial es referenciar un nombre/texto a un determinado usuario, crear un link. Es posible llamar a usuarios que tienen un username escribiendo simplemente @alias, pero cuando éstos no tienen un alias elegido, no podemos mencionarlos mediante la api oficial, mientras que utilizando telegram como usuarios, sabemos que sí podemos mencionarlos ya que se genera un enlace al usuario al escribir su nombre o el nombre con el que tenemos guardado el contacto. La API de pwrtelegram permite hacer esto y mucho más.
La api NO-oficial:
https://pwrtelegram.xyz
Por no rehacer, he mantenido llamadas a ambas, de hecho, a la API no-oficial solamente la llamamos para enviar mensajes que contengan “mentions” a usuarios, y se está usando totalmente a pelo, es decir, se construye la url concatenando strings y se hace get usando la librería requests.
Ejemplo
(habrá que introducir el token nuestro que nos hayan dado al crear el bot!)
Ejemplo para el siguiente método que escribe el mensaje ‘HEY YOU’ con link al usuario con ID 101374607 en el chat con ID 98123871 (estos datos de IDs se deben haber obtenido previamente, si has echado un ojo a los ejemplos de la librería python-telegram-bit, seguro que sabes como obtener estos datos!) :
Url construida del ejemplo (método sendmessage cuyos parámetros son: char_id, text, parse_mode y mtproto):
https://api.pwrtelegram.xyz/bot39518XXXX:xxxxXXxAQUITUTOKENXxxxXxXxxxxXxxxxx/sendmessage?chat_id=98123871&text=<a href=”mention:101374607″>HEY YOU</a>&parse_mode=HTML&mtproto=true
Tras ejecutarse el bot mandará el mensaje al chat, el mensaje (HEY YOU) se podrá clickar y accederíamos al perfil del usuario con el ID de la mention (recibiría notificación con éste mensaje).
Recursos
La documentación de la api oficial resulta algo liosa, y he encontrado mucho más útil los consejos y publicaciones del canal de telegram de pwrtelegram directamente. Buscad el canal en telegram como @pwrtelegram y, por otro lado, un canal para uso de los bots de telegram con python:
https://t.me/pythontelegrambotgroup
Estos 2 canales, junto con la información de la librería python-telegram-bot, han resultado serme de mucha utilidad.
Mi bot
Para acabar…
En telegram se puede encontrar mi bot buscando @uborzbot
Dejo link al código: Link a git!