Menulis bot telegram menggunakan node.js

Kode lengkapnya dapat ditemukan di sini .



Hari ini kami akan mengembangkan bot telegram berdasarkan node js yang dapat menampilkan statistik infeksi virus corona di semua negara.



Pertama-tama, Anda perlu menambahkan @botFather ke daftar kontak telegram dan menulis perintah / newBot padanya . Selanjutnya, kami menetapkan nama bot kami dan, jika tidak sibuk, kami membuat pengenal bot yang dapat digunakan untuk menemukannya.





Itu saja, bot telegram kami sudah siap dan botfather telah membagikan kepada kami API Token , berkat itu kami akan dapat mengontrol bot.



Selanjutnya, buat proyek baru, masukkan npm init dan tambahkan file bot.js di mana bot kami akan dikembangkan.



Kemudian saya akan menginstal telegraf - ini adalah salah satu kerangka kerja populer untuk membuat bot telegram. Kami melihat dokumentasi telegraf, menyalin pengaturan bot awal ke dalam proyek kami dan dengan cepat melalui semua metode yang ditunjukkan dalam contoh:



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


Letakkan token api di contoh kami dan bot zapuctim.



node bot


Mari kita periksa pekerjaan bot kita:





Sekarang mari kita cari tahu apa yang ada di ctx



Untuk ini, setelah mendeklarasikan bot konstan, kita bisa menggunakan log :



ctx.message.from.first_name


Mulai ulang proyek kami, masukkan / mulai perintah dan di konsol kami akan menerima objek di mana kami dapat melihat data pengguna yang diperlukan:



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


Kami akan tertarik dengan objek pesan, dari mana kami bisa mendapatkan nama pengguna



ctx.message.from.first_name


Dan teks yang dia kirim ke bot:



ctx.message.text


Kami tahu apa yang ada di ctx dan sekarang kami dapat mulai menghubungkan api pihak ketiga, yang dengannya kami bisa mendapatkan statistik tentang virus corona. Untuk ini saya akan menggunakan perpustakaan yang disebut covid19-api . Mari instal ke dalam proyek kita dan impor ke file bot.js :



const covidApi = require('covid19-api')


Selanjutnya, kami akan menghapus penangan stiker kami dan membuat penangan baru yang memantau teks dan mengirimkan permintaan untuk mendapatkan data virus corona menggunakan metode getReportsByCountries yang ditemukan dalam dokumentasi covid19-api :



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


Mari kita periksa data apa yang kita dapatkan. Sebagai contoh, mari kita menulis ke bot kita di telegram: 'russia':





Bagus, kami punya banyak data. Tetapi jika kita memasukkan nama negara dengan kesalahan ketik, bot kita akan berhenti berfungsi dan memberikan kesalahan pada konsol:





Untuk menghindari hal ini, kita perlu membuat penanganan kesalahan dan memberi tahu pengguna bahwa negara seperti itu tidak ada. Kami juga akan membuat refactoring kecil kode dan membuat bot kami lebih bersahabat, mengubah output pesan yang dikirim oleh / start perintah , mengatur tampilan data statistik yang benar dan membuat konstanta dalam file terpisah yang akan berisi daftar semua negara dalam bahasa Inggris dan akan menampilkannya saat menggunakan perintah / help .



Hasilnya, kami mendapatkan kode:



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


Yang berfungsi sesuai kebutuhan kita:





Selamat! Kami telah menyelesaikan konfigurasi bot telegram kami, yang menampilkan statistik pasien dengan virus corona.



All Articles