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.