node.jsでテレグラムボットを作成する

完全なコードはここにあります



今日は、すべての国で感染したコロナウイルスの統計を表示できるノードjsに基づくテレグラムボットを開発します。



まず、テレグラムの連絡先リストに@botFatherを追加し、それに/ newBotコマンドを書き込む必要があります次に、ボットの名前を設定し、ビジーでない場合は、ボットIDを見つけます。





これで、テレグラムボットの準備が整い、botfatherがToken APIを共有してくれので、ボットを制御できるようになります。



次に、新しいプロジェクトを作成し、npm initと入力して、ボットが開発されるbot.jsファイルを追加します。



次に、telegrafをインストールします。これは、テレグラムボットを作成するための一般的なフレームワークの1つです。電信のドキュメントを見て、ボットの初期構成をプロジェクトにコピーし、例に示されているすべての方法をすばやく実行します。



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


入れトークンAPIの例とzapuctimボットに。



node bot


ボットの動作を確認しましょう。





ここで、ctxに何があるかを理解しましょう



。これには、ボット定数を宣言した後、logを使用できます



ctx.message.from.first_name


プロジェクトを再起動し、/ startコマンドを入力すると、コンソールに、必要なユーザーデータを表示できるオブジェクトが表示されます。



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


ユーザー名を取得できるメッセージオブジェクトに関心があります



ctx.message.from.first_name


そして彼がボットに送ったテキスト:



ctx.message.text


ctxに 何があるかがわかったので、サードパーティのapiへの接続を開始できます。これにより、コロナウイルスの統計を取得できます。このために、covid19-apiというライブラリを使用しますそれをプロジェクトにインストールして、bot.jsファイルにインポートしましょう



const covidApi = require('covid19-api')


次に、ステッカーハンドラーを削除し、テキストを追跡し、covid19-apiドキュメントにあるgetReportsByCountriesメソッドを使用してコロナウイルスデータを取得する要求を送信する新しいハンドラーを作成します



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


取得したデータを確認しましょう。たとえば、電報でボットに書き込みましょう: 'ロシア':





すばらしいです。たくさんのデータがあります。しかし、タイプミスで国の名前を入力すると、ボットは動作を停止し、コンソールにエラーを表示します。





これを回避するには、エラーハンドラーを作成し、そのような国が存在しないことをユーザーに通知する必要があります。また、コードを少しリファクタリングしてボットをより使いやすくし、/ startコマンドによって送信されるメッセージの出力を変更し、統計データの正しい表示を設定し、英語のすべての国のリストを含む別のファイルに定数を作成して表示します。/ helpコマンドを使用する場合



その結果、次のコードが得られます。



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


必要に応じて機能します。





おめでとう!コロナウイルス患者の統計を表示するテレグラムボットの構成が完了しました。



All Articles