كتابة روبوت برقية باستخدام node.js

يمكن العثور على الكود الكامل هنا .



سنقوم اليوم بتطوير روبوت برقية يعتمد على العقدة js التي يمكنها عرض إحصائيات عن المصابين بفيروس كورونا في جميع البلدان.



بادئ ذي بدء ، تحتاج إلى إضافة botFather إلى قائمة جهات اتصال telegram وكتابة الأمر / newBot إليها . بعد ذلك ، قمنا بتعيين اسم الروبوت الخاص بنا ، وإذا لم يكن مشغولاً ، فقد توصلنا إلى معرّف الروبوت الذي يمكن العثور عليه من خلاله.





هذا كل شيء ، برنامج telegram bot جاهز وقد شاركنا botfather واجهة برمجة تطبيقات Token ، والتي بفضلها سنتمكن من التحكم في



الروبوت . بعد ذلك ، أنشئ مشروعًا جديدًا ، وأدخل npm init وأضف ملف bot.js الذي سيتم تطوير الروبوت الخاص بنا فيه.



ثم أقوم بتثبيت telegraf - هذا أحد الأطر الشائعة لإنشاء برنامج telegram bot. ننظر إلى وثائق التلغراف ، وننسخ إعداد الروبوت الأولي في مشروعنا ونتابع بسرعة جميع الطرق المشار إليها في المثال:



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 bot.



node bot


دعنا نتحقق من عمل الروبوت الخاص بنا:





الآن دعنا نتعرف على ما يكمن في ctx



لهذا ، بعد التصريح عن ثابت bot ، يمكننا استخدام 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 والآن يمكننا البدء في توصيل واجهة برمجة تطبيقات تابعة لجهة خارجية ، والتي يمكننا من خلالها الحصول على إحصائيات حول فيروس كورونا. لهذا سأستخدم مكتبة تسمى covid19-api . دعنا نثبته في مشروعنا ونستورده إلى ملف bot.js :



const covidApi = require('covid19-api')


بعد ذلك ، سنزيل معالج الملصقات الخاص بنا ونصنع معالجًا جديدًا يتتبع النص ويرسل طلبًا للحصول على بيانات فيروس كورونا باستخدام طريقة getReportsByCountries الموجودة في وثائق covid19-api :



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


دعنا نتحقق من البيانات التي نحصل عليها. على سبيل المثال ، لنكتب إلى الروبوت الخاص بنا في البرقية: "russia":





رائع ، لدينا الكثير من البيانات. ولكن إذا أدخلنا اسم البلد بخطأ إملائي ، فسيتوقف الروبوت الخاص بنا عن العمل ويعطي خطأ لوحدة التحكم:





لتجنب ذلك ، نحتاج إلى إنشاء معالج أخطاء وإخطار المستخدم بأن مثل هذه الدولة غير موجودة. سنقوم أيضًا بإعادة هيكلة صغيرة للرمز ونجعل الروبوت الخاص بنا أكثر ملاءمة ، وتغيير إخراج الرسالة التي يتم إرسالها بواسطة الأمر / 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()


الذي يعمل كما نريد:





تهانينا! لقد أكملنا تكوين برنامج telegram bot الخاص بنا ، والذي يعرض إحصاءات مرضى فيروس كورونا.



All Articles