¿Cómo crear un bot de Telegram en NodeJS?

¿Cómo crear un bot de Telegram en NodeJS?

¿Qué es NodeJS?

NodeJS es un entorno en tiempo de ejecución multiplataforma, de código abierto, para la capa del servidor basado en el lenguaje de programación ECMAScript, asíncrono, con I/O (entrada/salida) de datos en una arquitectura orientada a eventos y basado en el motor V8 de Google.

¿Qué necesitamos para empezar con el desarrollo de nuestro bot de Telegram en NodeJS?

Lo primero de todo y más importante es descargar NodeJs desde su página web oficial: https://nodejs.org/es/

⚠️ Importante: Recomiendo que os descarguéis la versión LTS que es la versión más estable.

Una vez tenemos NodeJS instalado en nuestro sistema operativo procedemos a crear una carpeta, por ejemplo en el escritorio, en mi caso le voy a llamar a la carpeta test-bot.

Para empezar a preparar nuestro proyecto debemos abrimos la carpeta que hemos creados y pulsamos ctrl+shift (en el caso de estar en Windows) y con el ratón hacemos click derecho dentro de la carpeta y os debería aparecer la opción de abrir con CMD o Powershell. En el caso de Linux debemos abrir la terminal y ponernos en la ruta donde se encuentra la carpeta de nuestro proyecto.

Abrir Powershell en Windows

Otra opción en el caso de Windows es abrir CMD y poner cd + la ruta de la carpeta:

//Ejemplo: 
cd C:\Users\dpefe\Desktop\test-bot

Para empezar a preparar el proyecto debemos ejecutar el siguiente comando:

npm init -y

Ejecutando el comando anterior se no crea un archivo llamado package.json. El contenido del archivo debería tener una estructura simalar a esta:

 {
   "name": "test-bot",
   "version": "1.0.0",
   "description": "Bot para telegram en nodejs",
   "main": "bot.js",
   "scripts": {
     "test": "echo \"Error: no test specified\" && exit 1"
   },
   "author": "Tecnonucleous",
   "license": "ISC"
 }

¿Qué es y para qué sirve el archivo "package.json"?

En este archivo, que debe estar en la raíz del proyecto, sirve para reflejar la configuración de nuestro proyecto en NodeJS tales como:

  • Nombre del proyecto.
  • Autor.
  • Versión.
  • Dependencias.
  • Scripts.
  • Repositorio Git.
  • Motor de Node.

Modificamos el "package.json"

Una vez generando de forma automática el "package.json" tenemos que realizar una modificación que no es obligatorio pero si es conveniente en el apartado "scripts" ya que nos sirve para establecer comandos de inicio de nuestro bot, en este caso creamos un comando llamado "start" dentro del apartado scripts del json que ejecuta el archivo index.js (lo crearemos más adelante). El resultado de la modificación debería ser similar al siguiente:

 {
   "name": "test-bot",
   "version": "1.0.0",
   "description": "Bot para telegram en nodejs",
   "main": "bot.js",
   "scripts": {
     "start": "node index.js"
   }
   "author": "Tecnonucleous",
   "license": "ISC"
 }

Esto nos permite que en vez de tener que escribir en la terminal "node index.js" podamos escribir "npm start" obteniendo el mismo resultado.

Instalación de la librería node-telegram-bot-api

Una vez acabamos de editar el archivo "package.json" procedemos a instalar una librería escrita en NodeJS que nos permitirá crear bots de Telegram usando este mismo lenguaje. Su instalación es realmente sencilla, solo debemos ejecutar el siguiente comando en la consola:

npm install --save node-telegram-bot-api

Instalando librería node-telegram-bot-api

Una vez tenemos esto creamos un archivo llamado bot.js o como lo queráis llamar. Si lo llamáis index.js no tendréis que modificar el package.json, en caso contrario en la sección de Scripts remplazar index.js por el nombre del archivo .js que creasteis. Dentro de este archivo vamos a meter todo el programa del bot:

// Importamos la librería node-telegram-bot-api 
const TelegramBot = require('node-telegram-bot-api');

// Creamos una constante que guarda el Token de nuestro Bot de Telegram que previamente hemos creado desde el bot @BotFather
const token = 'Introduce-LA-API-KEY';

// Create a bot that uses 'polling' to fetch new updates
const bot = new TelegramBot(token, {polling: true});

// ⚠️ Después de este comentario es donde ponemos la lógica de nuestro bot donde podemos crear los comandos y eventos para darle funcionalidades a nuestro bot

// Implementación de la primera funcionalidad: Cuando mandamos el mensaje "Hola" reconoce tú nombre y genera un input tipo "Hola Daniel"

bot.onText(/^\hola/, (msg) => {
     bot.sendMessage(msg.chat.id, "Hola  " + msg.from.first_name);
 });

⚠️Importante recuerda remplazar "Introduce-LA-API-KEY" por tu propia API KEY

Para ejecutar el bot una vez tenemos el archivo bot.js configurado solo tenemos que poner en la terminal:

npm start

En el caso de que no tengamos configurado en el apartado Scripts del fichero package.json con el comando start podemos ejecutarlo poniendo en la terminal node nombre_archivo.js (En mi caso es: node bot.js).

Una vez ejecutado el comando anterior obtendremos por la terminal un resultado similar al siguiente:

activar-bot

Una vez que el bot se está ejecutando vamos a Telegram y hablamos con el por privado. El saludo del bot también funciona si lo metes en un grupo.

El resultado sería el siguiente:

pepebits-test-hola

Cada vez que le llega la palabra hola, manda un mensaje con la palabra Hola + el nombre del usuario. En próximos tutoriales ampliaremos y explicaremos nuevas funciones.

Enlaces de interes