Escrevendo um bot de telegrama em node.js

O código completo pode ser encontrado aqui .



Hoje vamos desenvolver um bot de telegrama baseado em node js que pode exibir estatísticas de coronavírus infectados em todos os países.



Em primeiro lugar, você precisa adicionar @botFather à lista de contatos de telegramas e escrever o comando / newBot nela . Em seguida, definimos o nome do nosso bot e, se não estiver ocupado, criamos um identificador de bot, pelo qual ele pode ser encontrado.





Isso é tudo, nosso bot de telegrama está pronto e o botfather compartilhou conosco a Token API , com a qual poderemos controlar o bot.



Em seguida, criaremos um novo projeto, entraremos npm init e adicionaremos o arquivo bot.js no qual nosso bot será desenvolvido.



Então instalarei o telegraf - este é um dos frameworks populares para a criação de bot de telegramas. Vemos a documentação do telégrafo, copiamos a configuração inicial do bot em nosso projeto e rapidamente examinamos todos os métodos indicados no exemplo:



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() //  


Coloque o token da API em nosso exemplo e o bot zapuctim.



node bot


Vamos verificar o trabalho do nosso bot:





Agora vamos descobrir o que está em ctx.



Para isso, depois de declarar a constante do bot, podemos usar log :



ctx.message.from.first_name


Reinicie nosso projeto, digite o comando / start e no console temos um objeto no qual podemos visualizar os dados do usuário necessários:



{
 "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"
     }
   ]
 }
}


Estaremos interessados ​​no objeto de mensagem, a partir do qual podemos obter o nome de usuário



ctx.message.from.first_name


E o texto que ele enviou para o bot:



ctx.message.text


Sabemos o que está em ctx e agora podemos começar a conectar uma API de terceiros, com a qual podemos obter estatísticas sobre o coronavírus. Para isso, usarei uma biblioteca chamada covid19-api . Vamos instalá-lo em nosso projeto e importá-lo para o arquivo bot.js :



const covidApi = require('covid19-api')


A seguir, removeremos nosso manipulador de adesivos e faremos um novo manipulador que monitora o texto e envia uma solicitação para obter os dados do coronavírus usando o método getReportsByCountries encontrado na documentação covid19-api :



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


Vamos verificar quais dados obtemos. Por exemplo, vamos escrever para o nosso bot no telegrama: 'russia':





Ótimo, temos muitos dados. Mas se digitarmos o nome do país com um erro de digitação, nosso bot irá parar de funcionar e dar um erro ao console:





Para evitar isso, precisamos fazer um manipulador de erros e notificar o usuário de que tal país não existe. Também faremos uma pequena refatoração do código e tornaremos nosso bot mais amigável, alteraremos a saída da mensagem enviada pelo comando / start , configuraremos a exibição correta de dados estatísticos e criaremos uma constante em um arquivo separado que conterá uma lista de todos os países em inglês e a exibirá ao usar o comando / help .



Como resultado, obtemos o 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 queremos:





Parabéns! Concluímos a configuração do nosso bot de telegramas, que exibe estatísticas de pacientes com coronavírus.



All Articles