Escribir un bot de telegrama en node.js

El código completo se puede encontrar aquí .



Hoy desarrollaremos un bot de telegrama basado en el nodo js que puede mostrar estadísticas de coronavirus infectados en todos los países.



En primer lugar, debe agregar @botFather a la lista de contactos de telegram y escribirle el comando / newBot . A continuación, establecemos el nombre de nuestro bot y, si no está ocupado, creamos un identificador de bot, mediante el cual se puede encontrar.





Eso es todo, nuestro bot de telegram está listo y botfather ha compartido con nosotros la API de Token , gracias a la cual podremos controlar el bot.



Luego, crea un nuevo proyecto, ingresa npm init y agrega el archivo bot.js en el que se desarrollará nuestro bot.



Luego instalaré telegraf , este es uno de los marcos populares para crear bot de telegram. Observamos la documentación del telégrafo, copiamos la configuración inicial del bot en nuestro proyecto y repasamos rápidamente todos los métodos que se indican en el ejemplo:



const { Telegraf } = require('telegraf')
const bot = new Telegraf(process.env.BOT_TOKEN) //  ,   botFather
bot.start((ctx) => ctx.reply('Welcome')) //    /start
bot.help((ctx) => ctx.reply('Send me a sticker')) //    /help
bot.on('sticker', (ctx) => ctx.reply('')) //bot.on     ,      ,       
bot.hears('hi', (ctx) => ctx.reply('Hey there')) // bot.hears    ,    - "hi"
bot.launch() //  


Ponga api token en nuestro ejemplo y zapuctim bot.



node bot


Revisemos el trabajo de nuestro bot:





Ahora averigüemos qué hay en ctx



Para esto, después de declarar la constante del bot, podemos usar log :



ctx.message.from.first_name


Reiniciamos nuestro proyecto, ingresamos el comando / start y en la consola recibiremos un objeto en el que podremos visualizar los datos necesarios del usuario:



{
 "update_id": 375631294,
 "message": {
   "message_id": 11,
   "from": {
     "id": 222222,
     "is_bot": false,
     "first_name": "",
     "username": "Evgenii",
     "language_code": "ru"
   },
   "chat": {
     "id": 386342082,
     "first_name": "",
     "username": "Evgenii",
     "type": "private"
   },
   "date": 1593015188,
   "text": "/start",
   "entities": [
     {
       "offset": 0,
       "length": 6,
       "type": "bot_command"
     }
   ]
 }
}


Nos interesará el objeto del mensaje, del cual podemos obtener el nombre de usuario.



ctx.message.from.first_name


Y el texto que envió al bot:



ctx.message.text


Sabemos lo que hay en ctx y ahora podemos empezar a conectar una api de terceros, con la que podemos obtener estadísticas sobre el coronavirus. Para esto, usaré una biblioteca llamada covid19-api . Vamos a instalarlo en nuestro proyecto e importarlo al archivo bot.js :



const covidApi = require('covid19-api')


A continuación, eliminaremos nuestro controlador de pegatinas y crearemos un nuevo controlador que supervise el texto y envíe una solicitud para obtener los datos del coronavirus mediante el método getReportsByCountries que se encuentra en la documentación de covid19-api :



bot.on('text', async ctx => {
   const covidData = await covidApi.getReportsByCountries(ctx.message.text) //   
   ctx.reply(covidData) //   
})


Comprobemos qué datos obtenemos. Por ejemplo, escribamos a nuestro bot en el telegrama: 'russia':





Genial, tenemos muchos datos. Pero si ingresamos el nombre del país con un error tipográfico, nuestro bot dejará de funcionar y dará un error a la consola:





Para evitar esto, necesitamos crear un controlador de errores y notificar al usuario que dicho país no existe. También haremos una pequeña refactorización del código y haremos nuestro bot más amigable, cambiaremos la salida del mensaje que es enviado por el comando / start , configuraremos la visualización correcta de los datos estadísticos y crearemos una constante en un archivo separado que contendrá una lista de todos los países en inglés y la mostrará. al usar el comando / help .



Como resultado, obtenemos el código:



const { Telegraf } = require('telegraf');
const covidApi = require('covid19-api');
const COUNTRIES_LIST = require('./const')
const bot = new Telegraf('1170363720:AAFJ4ALJebB8Luh5kt1DStmYYqV3TparhKc')
bot.start( ctx => ctx.reply(`
    ${ctx.from.first_name}!
      .
          .
          /help."
`))
bot.help( ctx => ctx.reply(COUNTRIES_LIST)) //           covid19-api
bot.on('text', async (ctx) => {
   try {
       const userText = ctx.message.text
       const covidData = await covidApi.getReportsByCountries(userText)
       const countryData = covidData[0][0]
       const formatData = `
           : ${countryData.country},
           : ${countryData.cases},
           : ${countryData.deaths},
           : ${countryData.recovered}`
       ctx.reply(formatData)
   } catch(e) {
       ctx.reply('   ,       /help')
   }
})
bot.launch()


Que funciona como necesitamos:





¡Felicidades! Hemos completado la configuración de nuestro bot de telegramas, que muestra estadísticas de pacientes con coronavirus.



All Articles