Telegram bots en golang (II)

¡Hola Nómadas! ¿Con ganas de programar vuestro propio bot de Telegram?

En el artículo anterior vimos cómo crear nuestro primer bot hablando con otro bot, @BotFather. Hoy os explicaremos como estructurar el directorio del código fuente y como empezar a programarlo. Todo esto que parece muy complicado realmente es muy sencillo, ahora lo veréis.

Golang

Seguro que la mayoría de vosotros conocéis Go habéis hecho pequeños y grandes programas, pero para los nómadas que se estén iniciando en Go, vamos a darles unas pautas muy rápidas de como usarlo. Después ya nos meteremos directo al grano con el código.

Nociones básicas de Golang

La verdad que esto da par una entrada completa, pero ahora, por el momento daremos unas pequeñas directrices de como funciona Go.

Seguramente quien esté leyendo esta entrada ya conozca el lenguaje de programación Golang. También es posible que hasta ya haya hecho algunos programas y pruebas pero, para los que no, os explicamos un poco qué es Go.

La verdad que Go es un lenguaje de programación bastante nuevo, en concreto del 2009, y es en estos últimos años cuando está cogiendo bastante fuerza. Es un lenguaje de programación compilado, concurrente, imperativo, estructurado, orientado a objetos (de una manera bastante especial) y con recolector de basura. Actualmente está disponible en formato binario para los sistemas operativos Windows, GNU/Linux, FreeBSD y Mac OS X, pudiendo también ser instalado en estos y en otros sistemas con el código fuente.

Carácteristicas de Go

  • Go usa una sintaxis parecida a C, por lo que los programadores que hayan usado dicho lenguaje se sienten muy cómodos con él.
  • Go usa tipado estático (statically typed) y es tan eficiente como C.
  • Go tiene muchas de las características y facilidad de lenguajes dinámicos como Python
  • Aún siendo un lenguaje diseñado para la programación de sistemas, provee de un recolector de basura, reflexión y otras capacidades de alto nivel que lo convierten en un lenguaje muy potente.
  • Go admite el paradigma de programación orientada a objetos (Habría que matizar está característica, pero ahora no viene el caso).
Te puede interesar  ¿Qué es un CMS?

Si nos vamos a lo más técnico, y así sabremos como usar los códigos fuente que vienen a continuación, Go mantiene una estructura de directorios donde se almacena el código fuente de nuestros programas, los binarios compilados y los paquetes que vamos a ir generando.

Estructura básica del directorio de trabajo

Básicamente se trata de definir la variable de entorno $GOPATH en vuestro entorno. Ésta debe de apuntar a un directorio desde el cual Go creara toda la estructura de ficheros y directorios básica y nosotros rellenaremos con nuestro código.

Si queréis más información sobre como se organiza la estructura de directorios de un proyecto en Go podéis ver la documentación oficial [EN] https://golang.org/doc/code.html.

Nuestro primer Bot

La API de Telegram es muy sencilla y fácil de utilizar, básicamente se basa en peticiones HTTP de tipo GET o POST, por lo tanto, podríamos interactuar con la API usando la librería net/http de Go. Pero también podemos usar una librería de más alto nivel que nos permita interactuar con Telegram de una forma mucho más cómoda. Hay varias librerías sobre Telegram en Github, nosotros nos quedamos con go-telegram-bot-api/telegram-bot-api.

Para empezar usaremos el ejemplo que nos proponen los desarrolladores de la librería. Dentro de nuestro proyecto Go creamos un fichero main.go con el siguiente contenido:

Para que este código funcione solo tendremos que cambiar la palabra «MyAwesomeBotToken» por el token que nos proporcionó @BotFather cuando registramos el Bot. Una vez añadido el token solo quedará compilar el código con el comando go build main.go o también podemos usar go run main.go para compilar y ejecutar directamente el programa. Para los que no se defienden en Go, la parte de la compilación se trata de abrir una consola o cmd y navegar al directorio donde hemos guardado el código fuente ejemplo, recordad que éste debe de estar dentro del directorio $GOPATH siguiendo la estructura indicada previamente. Desde allí es donde se ejecutaran las ordenes indicadas anteriormente.

Te puede interesar  DEP, el gestor de librerías y vendoring de Go

¿Qué veremos por la pantalla? Pues en principio nada. Primero tendremos que iniciar el Bot o hablar con él. En nuestro caso hemos iniciado el Bot con el comando /start y este es el resultado:

Mensajes del Bot por la consola

El código que hemos usado ha transformado nuestro Bot en un «bot echo», esto significa que la funcionalidad de nuestro Bot es la de responder a nuestro mensaje con nuestro propio mensaje. Se suele utilizar como punto de partida en muchos escenarios donde la arquitectura es cliente-servidor. Si nos paramos a leer con detenimiento los mensajes devueltos por nuestro bot en la pantalla de nuestra consola podremos ver el flujo de los mensajes, quién envía qué, quién responde qué y a quién, etc. Hemos resaltado pequeñas partes de la salida de nuestro Bot en color rojo, pero desde cibernómadas os recomendamos que os detengáis un momento y reviséis los mensajes escritos en la consola por el Bot.

Volvamos al código, éste puede ser dividido en tres partes, esto puede que sea básico para los que ya habéis trabajado con Go, pero lo explicamos para que todos lo podamos entender.

La primera línea es para declarar el paquete donde se encuentra el archivo que estamos editando. En este caso al solo haber un fichero (main.go) lo tenemos que declarar como el paquete «main». Así Go sabe por donde tiene que comenzar a ejecutar nuestro programa.

Las líneas de la 3 a la 7  declaramos las librerías que vamos a usar. Por un lado está «log» para mostrar mensajes por pantalla y «gopkg.in/telegram-bot-api.v4» para utilizar la API de Telegram.

Te puede interesar  Go con Gin, el mega tutorial (III)

Por último de la línea 9 hasta el final, la línea 36, es donde se desarrolla o implementa el código del Bot propiamente dicho.

En la línea 10 creamos una instancia de la librería de Telegram. Para realizar tal instancia, debemos pasar como argumento el token que identifica y da acceso a nuestro token a interactuar con la API de Telegram. En las líneas 11-13 comprobamos que no haya ningún error, si lo hay terminamos la ejecución de forma inmediata.

Continuamos estableciendo el modo de depuración en la línea 15. La línea 17 se imprime un simple mensaje por la pantalla para ver como está yendo la ejecución.

Para continuar con la ejecución del Bot y poder interactuar tenemos que indicar desde cuando queremos recibir las notificaciones. Por eso en la línea 19 pasamos el ID de mensaje 0, así recibiremos la notificaciones no recibidas desde el mensaje 0. También se establece un timeout de 60 segundos.

La siguiente instrucción bot.GetUpdatesChan(u) no ofrece un chan de Go desde el cual iremos obteniendo los mensajes que lleguen al Bot.

Por último a partir de la línea 24 entramos en un bucle bloqueante. Este bucle realizara una iteración cada vez que el Bot reciba una notificación. Las acción de dentro del bucle son:

  1. Comprobar que el mensaje no esté vacío, línea 25-27.
  2. Mostrar el usuario que envía el mensaje junto con el contenido del mensaje por la pantalla. Línea 29.
  3. Crear un mensaje para ser enviado. Es necesario indicar como parámetro a qué chat será enviado y el mensaje que se quiere enviar. Línea 32.
  4. En al línea 33 se indica que el mensaje se corresponde con una respuesta al mensaje del usuario (update.Message.MessageID).
  5. Por último en la línea 36 se indica al Bot que envíe el mensaje.

Con todo esto terminamos la entrada de hoy, que sino se hará muy pesada.

¡¡¡Saludos nómadas!!!

Telegram bots en golang (II)
Etiquetado en:         

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *