سنقوم اليوم بتطوير روبوت برقية يعتمد على العقدة 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 الخاص بنا ، والذي يعرض إحصاءات مرضى فيروس كورونا.