Desarrollando un Bot para Telegram
Tags: javascript, node, api, codigodefinde
Published: 2022-06-25 22:11:27

## Objetivos del proyecto:

 - Etapa 1: Desarrollar y probar nuestro bot en local.
 - Etapa 2: Publicarlo por medio de Heroku.
&nbsp;
&nbsp;

Pero antes de arrancar... ✋

### ¿Qué son los Bots de Telegram?
¿Escuchaste algo de esto? Si es tu primera vez, te lo resumo así nomás: 
&nbsp;
Son  **aplicaciones de terceros que se ejecutan dentro de la aplicación de mensajería**. 
No necesitas instalarlos ni hacer nada diferente para poder utilizarlos, ya que se utilizan como si estuvieras interactuando con una persona real (Es decír, buscando el nombre del bot en el buscador de la app como harías con cualquier usuario: *@nombreDelBot*). 
Hay más: Son multiplataforma, y los podes usar en la versión de *Telegram* del sistema operativo que quieras.

Ahora, a nivel dev: Funcionan con una [API de Telegram](https://core.telegram.org/bots)

&nbsp;
&nbsp;

🎌 ¿Intro lista? 
¡Manos a la obra con nuestro primer proyecto de fin de semana! 👇👇

## Requisitos

 1. [NodeJs](https://nodejs.org/en/download/)
 2. npm instalado
 3. Algún editor de código, yo voy a utilizar el siempre confiable  [Visual Studio Code](https://code.visualstudio.com/download)
 4. Obvio pero también, tener una cuenta en Telegram.
 5. [Telegraf](https://telegraf.js.org/). Esta librería será la que utilizaremos para crear el bot, específicamente con Js.


## Paso a Paso

### 1. Damos de alta nuestro Bot
Abrimos Telegram y vamos a utilizar el Bot "Padre": **botFather**. Esta cuenta es la administradora de todos los bots, por lo que podrás administrar los tuyos interactuando con ella.
Como dato particular, el nombre del bot debe terminar con "bot". (¿Ya pensaste un nombre marketinero? 😎)

Una vez en el chat con botFather, basta con hacer /newbot y setear el nombre. Eso es todo.
Nos devolverá un token que necesitaremos luego en nuestro código. De todas formas, podemos volver y chequearlo.

🎁 En mi caso, voy a hacer un bot que me recuerde los días que cumple años cada miembro de mi familia. Luego intentaré desarrollar uno que les haga regalos y no tenga que gastar.


### 2. Primeras lineas
En nuestra carpeta preferida de proyectos, creamos una nueva con el nombre del bot/proyecto. 
En mi caso: CumplesDeLaFliaBot

Nos ubicamos dentro de la carpeta y abrimos linea de comandos: 

    npm init 
    
    npm install telegraf

Creamos un archivo .js; Por ejemplo: *bot.js*.
Aquí tendremos la lógica del bot.

```javascript
const Telegraf = require('telegraf');
    
const bot = new Telegraf('tokenProvistoPorBotFather');
```

Empezamos con utilizar métodos de Telegraf, en este caso .command para mostrar un saludo personalizado cuando se inicia el bot (vamos a estar capturando el "start" propio de cuando se inicia la conversación)


```javascript
 bot.command('start', ctx => {
	    console.log(ctx.from)
	    bot.telegram.sendMessage(ctx.chat.id, '¿Otra vez olvidaste los cumpleaños?', {
	    })
    })
```

### 3. Seteamos nuestro bot en Telegram
Esta sección es necesaria sólo si queres utilizar los [comandos](https://core.telegram.org/bots#commands) -una especie de accesos rápidos- que te provee botFather. 
Para esto vamos a Telegram nuevamente:

*/mybots:* Recuperar la lista de bots propios y seleccionar el necesario.
*/setcommands:* Setear comandos que queremos utilizar.

En mi caso sería (Recordar que tenemos que responder en formato **command** - **Description**). Donde *command es el comando que vamos a capturar* y *description es lo que ve el usuario*.

> genaro - Genaro   
> vito - Vito

✅ Listo, volvemos a Visual Studio Code.

### 4. Capturando comandos del usuario.
En esta parte vamos a capturar -> devolver. Recordá que podes llamar a una función y hacer lo-que-quieras en ella, y devolver el resultado. Por ejemplo, en otro bot que desarrollé, mandando un parámetro de tipo int a una función, recorría un array de objetos y devolvía uno específico. Anyways.. 


```javascript
 //esperamos el command /genaro y devolvemos la fecha en formato string (dd/mm)
    bot.command('/genaro', ctx  => {
	    bot.telegram.sendMessage(ctx.chat.id, '17/09');
	})

    //esperamos el command /vito y devolvemos la fecha en formato string (dd/mm)
    bot.command('/vito', ctx  => {
	    bot.telegram.sendMessage(ctx.chat.id, '11/04');
   	})

	//lanzamos nuestro bot
    bot.launch();
```
    



### 5. Probando nuestro bot en local
Una vez finalizado nuestro código (o durante el desarrollo, porqué no), abrimos terminal y escribimos:

    node bot.js

Teniendo Telegram abierto, y si seteamos todo de manera correcta: ¡Ya estamos listos para empezar a testear nuestro bot! 🏄
 
Próximos episodios de esta maravillosa serie:

 - Utilizar nodemon para ver cambios en tiempo real, mientras desarrollamos.
 - Subir nuestro bot a Heroku y dejarlo operativo en Telegram.

&nbsp;
&nbsp;
&nbsp;
¿Te sirvió el post? 
Copate compartiendo y 

[![Invitame un café en cafecito.app](https://cdn.cafecito.app/imgs/buttons/button_6.svg)](https://cafecito.app/enzotrucchi)