Schreiben eines Telegrammbot auf node.js

Den vollständigen Code finden Sie hier .



Heute werden wir einen Telegramm-Bot auf dem Knoten js entwickeln, der Statistiken über in allen Ländern infizierte Coronaviren anzeigen kann.



Zunächst müssen Sie @botFather zur Telegramm-Kontaktliste hinzufügen und den Befehl / newBot darauf schreiben . Als nächstes legen wir den Namen unseres Bots fest und wenn er nicht beschäftigt ist, finden wir eine Bot-ID, anhand derer er gefunden werden kann.





Das ist alles, unser Telegramm-Bot ist fertig und Botfather hat uns die Token-API zur Verfügung gestellt , dank derer wir den Bot steuern können.



Erstellen Sie als Nächstes ein neues Projekt, geben Sie npm init ein und fügen Sie die Datei bot.js hinzu, in der unser Bot entwickelt wird.



Dann werde ich Telegraf installieren - dies ist eines der beliebtesten Frameworks zum Erstellen von Telegramm-Bot. Wir sehen uns die Telegraphen-Dokumentation an, kopieren die ursprüngliche Bot-Konfiguration in unser Projekt und gehen schnell alle im Beispiel angegebenen Methoden durch:



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


Setzen Sie API-Token in unser Beispiel und Zapuctim Bot.



node bot


Lassen Sie uns die Arbeit unseres Bots überprüfen:





Lassen Sie uns nun herausfinden, was in ctx liegt.



Nachdem wir die Bot-Konstante deklariert haben, können wir log verwenden :



ctx.message.from.first_name


Starten Sie unser Projekt neu, geben Sie den Befehl / start ein und in der Konsole erhalten wir ein Objekt, in dem wir die erforderlichen Benutzerdaten anzeigen können:



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


Wir werden an dem Nachrichtenobjekt interessiert sein, von dem wir den Benutzernamen erhalten können



ctx.message.from.first_name


Und der Text, den er an den Bot geschickt hat:



ctx.message.text


Wir wissen, was in ctx steckt, und jetzt können wir eine Drittanbieter-API verbinden, mit der wir Statistiken über Coronavirus abrufen können. Dafür werde ich eine Bibliothek namens covid19-api verwenden . Lassen Sie es uns in unser Projekt installieren und in die Datei bot.js importieren :



const covidApi = require('covid19-api')


Als Nächstes entfernen wir unseren Sticker-Handler und erstellen einen neuen Handler, der den Text verfolgt und eine Anforderung zum Abrufen der Coronavirus-Daten mithilfe der in der covid19-api- Dokumentation enthaltenen Methode getReportsByCountries sendet :



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


Lassen Sie uns überprüfen, welche Daten wir erhalten. Schreiben wir zum Beispiel im Telegramm an unseren Bot: 'russia':





Großartig, wir haben viele Daten. Wenn wir jedoch den Namen des Landes mit einem Tippfehler eingeben, funktioniert unser Bot nicht mehr und gibt der Konsole einen Fehler:





Um dies zu vermeiden, müssen wir einen Fehlerbehandler erstellen und den Benutzer darüber informieren, dass ein solches Land nicht existiert. Wir werden auch eine kleine Umgestaltung des Codes vornehmen und unseren Bot benutzerfreundlicher machen, die Ausgabe der vom Befehl / start gesendeten Nachricht ändern , die korrekte Anzeige von Statistikdaten einrichten und eine Konstante in einer separaten Datei erstellen, die eine Liste aller Länder in Englisch enthält und diese anzeigt bei Verwendung des Befehls / help .



Als Ergebnis erhalten wir den 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()


Welches funktioniert wie wir brauchen:





Herzliche Glückwünsche! Wir haben die Konfiguration unseres Telegramm-Bots abgeschlossen, der Statistiken von Patienten mit Coronavirus anzeigt.



All Articles