Ecrire un robot de télégramme en utilisant node.js

Le code complet peut ĂȘtre trouvĂ© ici .



Aujourd'hui, nous allons dĂ©velopper un robot de tĂ©lĂ©gramme basĂ© sur le nƓud js qui peut afficher des statistiques sur les coronavirus infectĂ©s dans tous les pays.



Tout d'abord, vous devez ajouter @botFather Ă  la liste de contacts du tĂ©lĂ©gramme et y Ă©crire la commande / newBot . Ensuite, nous dĂ©finissons le nom de notre bot et, s'il n'est pas occupĂ©, nous trouvons un identifiant de bot par lequel il peut ĂȘtre trouvĂ©.





C'est tout, notre bot de tĂ©lĂ©gramme est prĂȘt et botfather a partagĂ© avec nous l'API Token , grĂące Ă  laquelle nous pourrons contrĂŽler le bot.



Ensuite, créez un nouveau projet, entrez npm init et ajoutez le fichier bot.js dans lequel notre bot sera développé.



Ensuite, je vais installer telegraf - c'est l'un des frameworks populaires pour créer un bot de télégramme. Nous regardons la documentation du télégraphe, copions la configuration initiale du bot dans notre projet et passons rapidement en revue toutes les méthodes indiquées dans l'exemple:



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


Mettez le jeton api dans notre exemple et le bot zapuctim.



node bot


VĂ©rifions le travail de notre bot:





Voyons maintenant ce qui se trouve dans ctx



Pour cela, aprÚs avoir déclaré la constante du bot, nous pouvons utiliser log :



ctx.message.from.first_name


Redémarrez notre projet, entrez la commande / start et dans la console, nous obtiendrons un objet dans lequel nous pouvons afficher les données utilisateur nécessaires:



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


Nous serons intéressés par l'objet message, à partir duquel nous pouvons obtenir le nom d'utilisateur



ctx.message.from.first_name


Et le texte qu'il a envoyé au bot:



ctx.message.text


Nous savons ce qu'il y a dans ctx et nous pouvons maintenant commencer à connecter une API tierce, avec laquelle nous pouvons obtenir des statistiques sur le coronavirus. Pour cela, j'utiliserai une bibliothÚque appelée covid19-api . Installons- le dans notre projet et importons-le dans le fichier bot.js :



const covidApi = require('covid19-api')


Ensuite, nous supprimerons notre gestionnaire d'autocollants et créerons un nouveau gestionnaire qui suit le texte et envoie une demande pour obtenir les données de coronavirus à l'aide de la méthode getReportsByCountries trouvée dans la documentation covid19-api :



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


Vérifions quelles données nous obtenons. Par exemple, écrivons à notre bot dans le télégramme: 'russia':





Super, nous avons beaucoup de données. Mais si nous saisissons le nom du pays avec une faute de frappe, notre bot cessera de fonctionner et donnera une erreur à la console:





Pour éviter cela, nous devons créer un gestionnaire d'erreurs et informer l'utilisateur qu'un tel pays n'existe pas. Nous allons également faire une petite refactorisation du code et rendre notre bot plus convivial, modifier la sortie du message envoyé par la commande / start , configurer l'affichage correct des données statistiques et créer une constante dans un fichier séparé qui contiendra une liste de tous les pays en anglais et l'affichera lors de l'utilisation de la commande / help .



En conséquence, nous obtenons le code:



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


Ce qui fonctionne selon nos besoins:





Toutes nos félicitations! Nous avons terminé la configuration de notre robot de télégramme, qui affiche les statistiques des patients atteints de coronavirus.



All Articles