В اڳوڻي اشاعت اسان اهو معلوم ڪيو ته هڪ بوٽ ڪيئن ٺاهيو، ڪلاس جو هڪ مثال شروع ڪيو Bot ۽ ان کي استعمال ڪندي پيغام موڪلڻ جي طريقن سان واقف ٿيو.
هن آرٽيڪل ۾ آئون هن موضوع کي جاري رکي ٿو، تنهنڪري آئون هن مضمون کي پڙهڻ کان پوء پڙهڻ شروع ڪرڻ جي صلاح ڏيان ٿو پهريون حصو.
هن ڀيري اسان اهو معلوم ڪنداسين ته اسان جي بوٽن کي ڪيئن بحال ڪجي ۽ ان ۾ ڪمانڊ سپورٽ شامل ڪجي، ۽ ڪلاس کان به واقف ٿينداسين. Updater.
مضمون جي دوران، اسان ڪيترن ئي سادي بوٽن کي لکنداسين، بعد ۾، ڏنل تاريخ ۽ ملڪ جي ڪوڊ جي بنياد تي، اهو طئي ڪندو ته ڇا ڏنل ملڪ ۾ هڪ ڏينهن هفتيوار آهي يا پيداوار جي ڪئلينڊر جي مطابق ڪم ڪندڙ ڏينهن. پر، جيئن اڳ ۾، مضمون جو مقصد توهان کي پيڪيج انٽرفيس سان واقف ڪرڻ آهي telegram.bot پنهنجا مسئلا حل ڪرڻ لاءِ.
جيڪڏهن توهان اڳي ڪڏهن به بوٽ استعمال نه ڪيو آهي ۽ توهان کي خبر ناهي ته هڪ حڪم ڇا آهي، پوءِ بوٽ کي حڪم لازمي طور تي موڪليا وڃن اڳتي سليش استعمال ڪندي. / هڪ اڳڀرائي جي طور تي.
اسان سادي حڪمن سان شروع ڪنداسين، يعني. اچو ته اسان جي بوٽ کي حڪم تي هيلو چوڻ سيکاريو /hi.
ڪوڊ 1: بوٽ کي هيلو چوڻ سيکاريو
library(telegram.bot)
# создаём экземпляр класса Updater
updater <- Updater('ТОКЕН ВАШЕГО БОТА')
# Пишем метод для приветсвия
say_hello <- function(bot, update) {
# Имя пользователя с которым надо поздароваться
user_name <- update$message$from$first_name
# Отправка приветственного сообщения
bot$sendMessage(update$message$chat_id,
text = paste0("Моё почтение, ", user_name, "!"),
parse_mode = "Markdown")
}
# создаём обработчик
hi_hendler <- CommandHandler('hi', say_hello)
# добаляем обработчик в диспетчер
updater <- updater + hi_hendler
# запускаем бота
updater$start_polling()
مٿي ڏنل ڪوڊ جو مثال هلايو، 'Your BOT TOKEN' کي تبديل ڪرڻ کان پوءِ حقيقي ٽوڪن سان جيڪو توهان حاصل ڪيو هو جڏهن بوٽ ٺاهيندي بوٽو ايفٽر (مان هڪ بوٽ ٺاهڻ بابت ڳالهايو پهريون مضمون).
طريقو start_polling() класса Updater، جيڪو ڪوڊ جي آخر ۾ استعمال ڪيو ويندو آهي، بوٽ مان اپڊيٽ جي درخواست ۽ پروسيسنگ جو هڪ لامحدود لوپ شروع ٿئي ٿو.
ھاڻي اسان جو بوٽ سمجھي ٿو حڪم /hi، ۽ ڄاڻي ٿو ته اسان کي ڪيئن سلام ڪجي.
اسڪيمي طور تي، اهڙي سادي بوٽ جي تعمير جي عمل کي هيٺ ڏنل بيان ڪري سگهجي ٿو.
ڪلاس جو هڪ مثال ٺاهيو Updater;
اسان طريقا ٺاهيندا آهيون، يعني. افعال جيڪي اسان جو بوٽ انجام ڏيندو. ڪوڊ مثال ۾ هي هڪ فنڪشن آهي say_hello(). فنڪشن جيڪي توھان استعمال ڪندا bot طريقن جي طور تي ٻن گھربل دليلن جا ھجن - بوٽ и ڪاري، ۽ هڪ اختياري - دليل. دليل بوٽ، هي توهان جو بوٽ آهي، ان جي مدد سان توهان پيغامن جا جواب ڏئي سگهو ٿا، پيغام موڪلي سگهو ٿا، يا بوٽ وٽ موجود ڪي ٻيا طريقا استعمال ڪري سگهو ٿا. دليل ڪاري اھو اھو آھي جيڪو بوٽ صارف کان حاصل ڪيو، حقيقت ۾، جيڪو اسان حاصل ڪيو آھي پھرئين مضمون ۾ طريقو استعمال ڪندي getUpdates(). دليل دليل توهان کي ڪمانڊ سان گڏ صارف پاران موڪليل اضافي ڊيٽا کي پروسيس ڪرڻ جي اجازت ڏئي ٿي، اسان ٿوري دير بعد هن موضوع تي واپس ڪنداسين؛
اسان هينڊلر ٺاهيندا آهيون، يعني اسان ڪجھ استعمال ڪندڙ عملن کي اڳوڻي قدم تي ٺاهيل طريقن سان ڳنڍيندا آهيون. لازمي طور تي، هڪ سنڀاليندڙ هڪ ٽرگر آهي، هڪ واقعو جيڪو ڪجهه بوٽ فنڪشن کي سڏيندو آهي. اسان جي مثال ۾، اهڙي ٽرگر هڪ حڪم موڪلي رهيو آهي /hi، ۽ ٽيم پاران لاڳو ڪيو ويو آهي hi_hendler <- CommandHandler('hi', say_hello). پهريون فنڪشن دليل CommandHandler() اسان جي صورت ۾، توهان کي حڪم بيان ڪرڻ جي اجازت ڏئي ٿي hi، جنهن تي بوٽ جواب ڏيندو. ٻيو دليل توهان کي بوٽ جو طريقو بيان ڪرڻ جي اجازت ڏئي ٿو، اسان طريقي کي سڏينداسين say_hello، جنهن تي عمل ڪيو ويندو جيڪڏهن صارف پهريون دليل ۾ بيان ڪيل حڪم کي سڏيو؛
اڳيون، اسان ٺاهيل هينڊلر کي اسان جي ڪلاس مثال جي موڪليندڙ کي شامل ڪيو Updater. توھان ھينڊلر کي ڪيترن ئي طريقن سان شامل ڪري سگھو ٿا؛ مٿي ڏنل مثال ۾، مون استعمال ڪيو سادو ھڪڙو، نشاني استعمال ڪندي +، i.e. updater <- updater + hi_hendler. ساڳيو طريقو استعمال ڪندي ڪري سگهجي ٿو add_handler()، جيڪو طبقي سان تعلق رکي ٿو Dispatcher، توهان هن طريقي سان ڳولي سگهو ٿا: updater$dispatcher$add_handler();
حڪم استعمال ڪندي بوٽ لانچ ڪريو start_polling().
ٽيڪسٽ پيغام پروسيسر ۽ فلٽر
اسان اهو معلوم ڪيو ته بوٽن ڏانهن ڪمانڊ ڪيئن موڪليا وڃن، پر ڪڏهن ڪڏهن اسان کي بوٽ جي ضرورت هوندي آهي ته هو نه رڳو حڪمن جو جواب ڏئي، پر ڪجهه باقاعده ٽيڪسٽ پيغامن کي پڻ. هن کي ڪرڻ لاءِ توهان کي ميسيج هينڊلر استعمال ڪرڻ جي ضرورت آهي - ميسيج هينڊلر.
عام ميسيج هينڊلر بلڪل سڀني ايندڙ پيغامن جو جواب ڏيندو. تنهن ڪري، پيغام هلائيندڙ اڪثر ڪري فلٽرن سان گڏ استعمال ٿيندا آهن. اچو ته بوٽ کي هيلو چوڻ سيکاريون نه رڳو حڪم تي /hi، پر جڏهن به هيٺين لفظن مان ڪو هڪ bot ڏانهن موڪليل پيغام ۾ ظاهر ٿئي ٿو: هيلو، هيلو، سلام، هاءِ، بونجور.
في الحال اسان ڪو به نئون طريقو نه لکنداسين، ڇاڪاڻ ته... اسان وٽ اڳ ۾ ئي ھڪڙو طريقو آھي جنھن ذريعي بوٽ اسان کي سلام ڪري ٿو. اسان سڀني کي ڪرڻ جي ضرورت آهي گهربل فلٽر ۽ پيغام سنڀاليندڙ ٺاهي.
ڪوڊ 2: ٽيڪسٽ ميسيج ھينڊلر ۽ فلٽر شامل ڪريو
library(telegram.bot)
# создаём экземпляр класса Updater
updater <- Updater('ТОКЕН ВАШЕГО БОТА')
# Пишем метод для приветсвия
## команда приветвия
say_hello <- function(bot, update) {
# Имя пользователя с которым надо поздароваться
user_name <- update$message$from$first_name
# Отправляем приветсвенное сообщение
bot$sendMessage(update$message$chat_id,
text = paste0("Моё почтение, ", user_name, "!"),
parse_mode = "Markdown",
reply_to_message_id = update$message$message_id)
}
# создаём фильтры
MessageFilters$hi <- BaseFilter(function(message) {
# проверяем, встречается ли в тексте сообщения слова: привет, здравствуй, салют, хай, бонжур
grepl(x = message$text,
pattern = 'привет|здравствуй|салют|хай|бонжур',
ignore.case = TRUE)
}
)
# создаём обработчик
hi_hendler <- CommandHandler('hi', say_hello) # обработчик команды hi
hi_txt_hnd <- MessageHandler(say_hello, filters = MessageFilters$hi)
# добаляем обработчики в диспетчер
updater <- updater +
hi_hendler +
hi_txt_hnd
# запускаем бота
updater$start_polling()
مٿي ڏنل ڪوڊ جو مثال هلايو، 'Your BOT TOKEN' کي تبديل ڪرڻ کان پوءِ حقيقي ٽوڪن سان جيڪو توهان حاصل ڪيو هو جڏهن بوٽ ٺاهيندي بوٽو ايفٽر (مان هڪ بوٽ ٺاهڻ بابت ڳالهايو پهريون مضمون).
ھاڻي اچو ته ڪوشش ڪريون ته بوٽ کي ڪيترائي نياپا موڪلڻ جي جن ۾ اڳ ۾ ڏنل سلامي لفظ شامل آھن:
تنهن ڪري، سڀ کان پهريان، اسان بوٽ کي سيکاريو نه رڳو هيلو چوڻ، پر سلام جو جواب ڏيڻ. اسان اهو دليل استعمال ڪندي ڪيو جواب_کي_پيغام_id، جيڪو طريقو ۾ موجود آهي sendMessage()، جنهن ۾ توهان کي پيغام جي سڃاڻپ کي منتقل ڪرڻ جي ضرورت آهي جنهن تي توهان جواب ڏيڻ چاهيو ٿا. توھان حاصل ڪري سگھوٿا پيغام جي سڃاڻپ ھن طرح: update$message$message_id.
پر بنيادي شيء جيڪا اسان ڪئي هئي اها فنڪشن استعمال ڪندي بوٽ ۾ فلٽر شامل ڪيو ويو BaseFilter():
# создаём фильтры
MessageFilters$hi <- BaseFilter(
# анонимная фильтрующая функция
function(message) {
# проверяем, встречается ли в тексте сообщения слова приветствия
grepl(x = message$text,
pattern = 'привет|здравствуй|салют|хай|бонжур',
ignore.case = TRUE)
}
)
جيئن توهان محسوس ڪيو هوندو، فلٽر کي اعتراض ۾ شامل ڪرڻ جي ضرورت آهي ميسيج فلٽر، جنهن جي شروعات ۾ اڳ ۾ ئي تيار ڪيل فلٽرن جو هڪ ننڍڙو سيٽ شامل آهي. اسان جي مثال ۾، اعتراض ڏانهن ميسيج فلٽر اسان هڪ عنصر شامل ڪيو hi، هي هڪ نئون فلٽر آهي.
ڪم ڪرڻ BaseFilter() توهان کي فلٽر فنڪشن پاس ڪرڻ جي ضرورت آهي. لازمي طور تي، هڪ فلٽر صرف هڪ فنڪشن آهي جيڪو پيغام وصول ڪري ٿو مثال ۽ واپسي سچ يا فالس. اسان جي مثال ۾، اسان هڪ سادي فنڪشن لکيو آهي، جيڪو بنيادي فنڪشن استعمال ڪندي grepl() پيغام جي متن کي چيڪ ڪري ٿو ۽ جيڪڏهن اهو باقاعده اظهار سان ملندو آهي привет|здравствуй|салют|хай|бонжур واپسي سچ.
اڳيون اسان هڪ پيغام سنڀاليندڙ ٺاهيندا آهيون hi_txt_hnd <- MessageHandler(say_hello, filters = MessageFilters$hi). پهريون فنڪشن دليل MessageHandler() اهو طريقو آهي جيڪو هينڊلر کي سڏيندو، ۽ ٻيو دليل اهو فلٽر آهي جنهن جي ذريعي ان کي سڏيو ويندو. اسان جي صورت ۾، هي فلٽر آهي جيڪو اسان ٺاهيو آهي MessageFilters$hi.
خير، آخر ۾، اسان ڊسپيچر ۾ شامل ڪيو ٺاهيل هينڊلر hi_txt_hnd.
رابطو - پيغام جيڪي صارف جي ٽيليگرام مواد تي مشتمل آهن
جڳھ - جاگرافيائي جڳھ سان پيغام
جڳھ - موڪليل پيغام
راند- راند
جيڪڏھن توھان چاھيو ٿا ڪجھ فلٽر ھڪڙي ھينڊلر ۾ گڏ ڪريو صرف نشاني استعمال ڪريو | - هڪ منطقي طور يا، ۽ نشاني & منطقي طور И. مثال طور، جيڪڏهن توهان چاهيو ٿا ته بوٽ ساڳئي طريقي سان ڪال ڪري جڏهن اهو هڪ وڊيو، تصوير يا دستاويز وصول ڪري، پيغام هينڊلر ٺاهڻ لاءِ هيٺ ڏنل مثال استعمال ڪريو:
اسان اڳ ۾ ئي ڄاڻون ٿا ته ڪهڙا حڪم آهن، انهن کي ڪيئن ٺاهيو وڃي، ۽ بوٽ کي ڪيئن مجبور ڪيو وڃي مطلوب حڪم تي عمل ڪرڻ لاء. پر ڪجهه حالتن ۾، حڪم جي نالي کان علاوه، اسان کي ان کي عمل ڪرڻ لاء ڪجهه ڊيٽا منتقل ڪرڻ جي ضرورت آهي.
هيٺ ڏنل هڪ بوٽ جو هڪ مثال آهي، جيڪا ڏنل تاريخ ۽ ملڪ ڏني وئي آهي، توهان کي پيداوار جي ڪئلينڊر مان ڏينهن جو قسم موٽائي ٿو.
هيٺ ڏنل بوٽ استعمال ڪري ٿو پيداوار ڪئلينڊر API isdayoff.ru.
ڪوڊ 3: بوٽ جيڪو تاريخ ۽ ملڪ طرفان رپورٽ ڪري ٿو
library(telegram.bot)
# создаём экземпляр класса Updater
updater <- Updater('1165649194:AAFkDqIzQ6Wq5GV0YU7PmEZcv1gmWIFIB_8')
# Пишем метод для приветсвия
## команда приветвия
check_date <- function(bot, update, args) {
# входящие данные
day <- args[1] # дата
country <- args[2] # страна
# проверка введённых параметров
if ( !grepl('\d{4}-\d{2}-\d{2}', day) ) {
# Send Custom Keyboard
bot$sendMessage(update$message$chat_id,
text = paste0(day, " - некорреткная дата, введите дату в формате ГГГГ-ММ-ДД"),
parse_mode = "Markdown")
} else {
day <- as.Date(day)
# переводим в формат POSIXtl
y <- format(day, "%Y")
m <- format(day, "%m")
d <- format(day, "%d")
}
# страна для проверки
## проверяем задана ли страна
## если не задана устанавливаем ru
if ( ! country %in% c('ru', 'ua', 'by', 'kz', 'us') ) {
# Send Custom Keyboard
bot$sendMessage(update$message$chat_id,
text = paste0(country, " - некорретктный код страны, возможнные значения: ru, by, kz, ua, us. Запрошены данные по России."),
parse_mode = "Markdown")
country <- 'ru'
}
# запрос данных из API
# компоновка HTTP запроса
url <- paste0("https://isdayoff.ru/api/getdata?",
"year=", y, "&",
"month=", m, "&",
"day=", d, "&",
"cc=", country, "&",
"pre=1&",
"covid=1")
# получаем ответ
res <- readLines(url)
# интрепретация ответа
out <- switch(res,
"0" = "Рабочий день",
"1" = "Нерабочий день",
"2" = "Сокращённый рабочий день",
"4" = "covid-19",
"100" = "Ошибка в дате",
"101" = "Данные не найдены",
"199" = "Ошибка сервиса")
# отправляем сообщение
bot$sendMessage(update$message$chat_id,
text = paste0(day, " - ", out),
parse_mode = "Markdown")
}
# создаём обработчик
date_hendler <- CommandHandler('check_date', check_date, pass_args = TRUE)
# добаляем обработчик в диспетчер
updater <- updater + date_hendler
# запускаем бота
updater$start_polling()
مٿي ڏنل ڪوڊ جو مثال هلايو، 'Your BOT TOKEN' کي تبديل ڪرڻ کان پوءِ حقيقي ٽوڪن سان جيڪو توهان حاصل ڪيو هو جڏهن بوٽ ٺاهيندي بوٽو ايفٽر (مان هڪ بوٽ ٺاهڻ بابت ڳالهايو پهريون مضمون).
اسان ھڪڙو بوٽ ٺاھيو آھي جنھن جي هٿيارن ۾ صرف ھڪڙو طريقو آھي check_date، اهو طريقو ساڳئي نالي جي حڪم سان سڏيو ويندو آهي.
پر، حڪم جي نالي کان علاوه، هي طريقو توهان کي ٻه پيٽرولر داخل ڪرڻ جي ضرورت آهي، ملڪ جو ڪوڊ ۽ تاريخ. اڳيون، بوٽ چيڪ ڪري ٿو ته ڇا مخصوص ملڪ ۾ ڏنل ڏينهن هفتيوار، ننڍو ڏينهن، يا سرڪاري پيداوار جي ڪئلينڊر جي مطابق ڪم ڪندڙ ڏينهن آهي.
انهي طريقي جي لاءِ جيڪو اسان ٺاهيندا آهيون ڪمانڊ سان گڏ اضافي پيرا ميٽرز کي قبول ڪرڻ لاءِ، استعمال ڪريو دليل pass_args = TRUE فنڪشن ۾ CommandHandler(), ۽ جڏهن هڪ طريقو ٺاهي، گهربل دليلن کان علاوه بوٽ, ڪاري هڪ اختياري ٺاهيو - دليل. هن طريقي سان ٺاهيل طريقو انهن پيرا ميٽرز کي قبول ڪندو جيڪي توهان بوٽ ڏانهن موڪليندا آهيو حڪم جي نالي کان پوءِ. پيرا ميٽرز کي اسپيس جي ذريعي الڳ ڪيو وڃي؛ اهي هڪ ٽيڪسٽ ویکٹر طور طريقي سان موڪليا ويندا.
اچو ته اسان جي بوٽ کي لانچ ۽ جانچيو.
پس منظر ۾ بوٽ کي هلايو
آخري قدم جيڪو اسان کي مڪمل ڪرڻ جي ضرورت آهي اهو پس منظر ۾ بوٽ لانچ ڪرڻ آهي.
هن کي ڪرڻ لاء، هيٺ بيان ڪيل الگورتھم جي پيروي ڪريو: