Ukubhala i-telegraph bot ku-R (ingxenye 2): Ukwengeza ukwesekwa komyalo nezihlungi zemiyalezo ku-bot

В ukushicilelwa kwangaphambilini sithole ukuthi singayakha kanjani i-bot, saqala isibonelo sekilasi Bot futhi wajwayelana nezindlela zokuthumela imiyalezo usebenzisa yona.

Kulesi sihloko ngiqhubeka nalesi sihloko, ngakho-ke ngincoma ukuthi ngiqale ukufunda lesi sihloko kuphela ngemva kokufunda ingxenye yokuqala.

Kulokhu sizobona ukuthi singayivuselela kanjani i-bot yethu futhi sengeze ukwesekwa komyalo kuyo, futhi sijwayelane nekilasi Updater.

Phakathi nalesi sihloko, sizobhala ama-bots amaningana alula, lokhu kokugcina, ngokusekelwe osukwini olunikeziwe kanye nekhodi yezwe, kunquma ukuthi usuku ezweni elinikeziwe luyimpelasonto noma usuku lokusebenza ngokuvumelana nekhalenda lokukhiqiza. Kodwa, njengangaphambili, inhloso ye-athikili ukukujwayeza nge-interface yephakheji telegram.bot ukuxazulula izinkinga zakho.

Ukubhala i-telegraph bot ku-R (ingxenye 2): Ukwengeza ukwesekwa komyalo nezihlungi zemiyalezo ku-bot

Zonke izindatshana ezivela ochungechungeni oluthi “Ukubhala i-telegram bot ngo-R”

  1. Sakha i-bot futhi siyisebenzisela ukuthumela imilayezo ngocingo
  2. Engeza ukwesekwa komyalo nezihlungi zemiyalezo ku-bot

Okuqukethwe

Uma uthanda ukuhlaziya idatha, ungase ube nentshisekelo yami telegram и youtube iziteshi. Iningi lokuqukethwe linikezelwe olimini lwe-R.

  1. Isigaba sokuvuselela
  2. Abaphathi - abaphathi
  3. Engeza umyalo wokuqala ku-bot, isibambi somyalo
  4. Iphrosesa yomlayezo wombhalo nezihlungi
  5. Ukwengeza Imiyalo ngamapharamitha
  6. Qalisa i-bot ngemuva
  7. isiphetho

Isigaba sokuvuselela

Updater yikilasi elenza kube lula kuwe ukuthi uthuthukise i-telegram bot, futhi lisebenzisa ikilasi ngaphansi kwesivalo Dispetcher. Isabelo sekilasi Updater ukuthola izibuyekezo ezivela ku-bot (esihlokweni esandulele sisebenzise indlela ngale njongo getUpdates()), bese uwadlulisela phambili ku Dispetcher.

Ngokuhamba kwayo Dispetcher iqukethe izibambi ozidalile, isb. izinto zekilasi Handler.

Abaphathi - abaphathi

Nabaphathi ongeza kubo Dispetcher ukusabela kwe-bot kumicimbi ehlukahlukene. Ngesikhathi sokubhala lesi sihloko ku telegram.bot Izinhlobo ezilandelayo zezibambi zengeziwe:

  • I-MessageHandler - Isibambi somlayezo
  • I-CommandHandler - Isiphathi somyalo
  • I-CallbackQueryHandler — Isibambi sedatha samakhibhodi athunyelwe esuka ku-Inline
  • I-ErrorHandler - Isibambi sephutha lapho ucela izibuyekezo ku-bot

Engeza umyalo wokuqala ku-bot, isibambi somyalo

Uma ungakaze usebenzise ama-bots ngaphambili futhi ungazi ukuthi uyini umyalo, imiyalo ku-bot kufanele ithunyelwe kusetshenziswa i-slash eya phambili. / njengesiqalo.

Sizoqala ngemiyalo elula, i.e. asifundise i-bot yethu ukusho sawubona ngomyalo /hi.

Ikhodi 1: Ukufundisa i-bot ukubingelela

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

Qalisa isibonelo sekhodi ngenhla, ngemva kokufaka i-'BOT TOKEN YAKHO' nethokheni yangempela oyitholile ngenkathi udala i-bot nge I-BotFather (Ngikhulume ngokudala i-bot ngaphakathi isihloko sokuqala).

Indlela start_polling() class Updater, esetshenziswa ekupheleni kwekhodi, iqala iluphu engapheli yokucela nokucubungula izibuyekezo ezivela ku-bot.

Manje ake sivule iTelegram bese sibhala umyalo wokuqala ku-bot yethu /hi.

Ukubhala i-telegraph bot ku-R (ingxenye 2): Ukwengeza ukwesekwa komyalo nezihlungi zemiyalezo ku-bot

Manje i-bot yethu iyawuqonda umyalo /hi, futhi uyakwazi ukusibingelela.

Ngokohlelo, inqubo yokwakha ibhothi elula kangaka ingaboniswa kanje.

Ukubhala i-telegraph bot ku-R (ingxenye 2): Ukwengeza ukwesekwa komyalo nezihlungi zemiyalezo ku-bot

  1. Dala isibonelo sekilasi Updater;
  2. Sakha izindlela, i.e. imisebenzi ezokwenziwa yi-bot yethu. Esibonelweni sekhodi lokhu kuwumsebenzi say_hello(). Imisebenzi ozoyisebenzisa njengezindlela ze-bot kumele ibe nezimpikiswano ezimbili ezidingekayo - I-bot и buyekeza, kanye nenketho eyodwa - i-args. Ukuphikisana I-bot, lena i-bot yakho, ngosizo lwayo ungaphendula imilayezo, uthumele imilayezo, noma usebenzise noma yiziphi ezinye izindlela ezitholakalayo ku-bot. Ukuphikisana buyekeza yilokhu okutholwe yi-bot kumsebenzisi, empeleni, esikutholile esihlokweni sokuqala sisebenzisa indlela getUpdates(). Ukuphikisana i-args ikuvumela ukuthi ucubungule idatha eyengeziwe ethunyelwe umsebenzisi kanye nomyalo, sizobuyela kulesi sihloko ngokuhamba kwesikhathi;
  3. Sakha abaphathi, i.e. Sihlobanisa izenzo ezithile zabasebenzisi nezindlela ezidalwe esinyathelweni sangaphambilini. Empeleni, isibambi siyi-trigger, umcimbi obiza umsebenzi othile we-bot. Esibonelweni sethu, i-trigger enjalo ithumela umyalo /hi, futhi isetshenziswa yiqembu hi_hendler <- CommandHandler('hi', say_hello). Ukuphikisana komsebenzi wokuqala CommandHandler() ikuvumela ukuthi ucacise umyalo, kithi hi, lapho i-bot izophendula khona. I-agumenti yesibili ikuvumela ukuthi ucacise indlela ye-bot, sizoyibiza indlela say_hello, esizosetshenziswa uma umsebenzisi abize umyalo oshiwo ku-agumenti yokuqala;
  4. Okulandelayo, sengeza isibambi esidaliwe ku-dispatcher yesibonelo sethu sekilasi Updater. Ungangeza izibambi ngezindlela ezimbalwa; esibonelweni esingenhla, ngisebenzise elula, ngisebenzisa uphawu +, i.e. updater <- updater + hi_hendler. Okufanayo kungenziwa ngokusebenzisa indlela add_handler(), okungeyesigaba Dispatcher, ungathola le ndlela kanje: updater$dispatcher$add_handler();
  5. Yethula i-bot usebenzisa umyalo start_polling().

Iphrosesa yomlayezo wombhalo nezihlungi

Sithole ukuthi singayithumela kanjani imiyalo ku-bot, kepha kwesinye isikhathi sidinga i-bot ukuthi ingaphenduli kuphela emiyalweni, kodwa futhi neminye imiyalezo ejwayelekile. Ukuze wenze lokhu udinga ukusebenzisa izibambi zemiyalezo − I-MessageHandler.

Okujwayelekile I-MessageHandler izophendula ngokuphelele yonke imilayezo engenayo. Ngakho-ke, izibambi zemiyalezo zivame ukusetshenziswa kanye nezihlungi. Masifundise i-bot ukuthi sawubona hhayi ngomyalo kuphela /hi, kodwa futhi noma nini elinye lamagama alandelayo livela emyalezweni othunyelwe ku-bot: sawubona, sawubona, salute, hai, bonjour.

Okwamanje ngeke sibhale izindlela ezintsha, ngoba... Sesivele sinendlela i-bot esibingelela ngayo. Okufanele sikwenze ukudala isihlungi esidingekayo nesibambi semiyalezo.

Ikhodi 2: Engeza isibambi somlayezo obhaliwe nesihlungi

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

Qalisa isibonelo sekhodi ngenhla, ngemva kokufaka i-'BOT TOKEN YAKHO' nethokheni yangempela oyitholile ngenkathi udala i-bot nge I-BotFather (Ngikhulume ngokudala i-bot ngaphakathi isihloko sokuqala).

Manje ake sizame ukuthumela i-bot imiyalezo embalwa equkethe amagama okubingelela abhalwe ngaphambili:
Ukubhala i-telegraph bot ku-R (ingxenye 2): Ukwengeza ukwesekwa komyalo nezihlungi zemiyalezo ku-bot

Ngakho-ke, okokuqala, safundisa i-bot ukuthi ingagcini nje ngokubingelela, kodwa ukuphendula ekubingeleleni. Senze lokhu sisebenzisa ingxabano phendula_kumyalezo_ubunikazi, etholakala ngendlela sendMessage(), lapho udinga ukudlulisa khona i-id yomlayezo ofuna ukuwuphendula. Ungathola i-id yomlayezo kanje: update$message$message_id.

Kodwa into esemqoka esiyenzile ukungeza isihlungi ku-bot sisebenzisa umsebenzi BaseFilter():

# создаём фильтры
MessageFilters$hi <- BaseFilter( 

  # анонимная фильтрующая функция
  function(message) {

    # проверяем, встречается ли в тексте сообщения слова приветствия
    grepl(x           = message$text, 
          pattern     = 'привет|здравствуй|салют|хай|бонжур',
          ignore.case = TRUE)
  }

)

Njengoba ungase uqaphele, izihlungi zidinga ukungezwa entweni Izihlungi Zomlayezo, ekuqaleni esevele iqukethe isethi encane yezihlungi ezenziwe ngomumo. Esibonelweni sethu, entweni Izihlungi Zomlayezo sengeze into hi, lesi isihlungi esisha.

Ukuze usebenze BaseFilter() udinga ukudlulisa umsebenzi wokuhlunga. Empeleni, isihlungi siwumsebenzi nje owamukela isibonelo somlayezo bese ubuya TRUE noma FALSE. Esibonelweni sethu, sibhale umsebenzi olula ukuthi, sisebenzisa umsebenzi oyisisekelo grepl() ihlola umbhalo womlayezo futhi uma ufana nenkulumo evamile привет|здравствуй|салют|хай|бонжур izimbuyiselo TRUE.

Okulandelayo sakha isibambi somlayezo hi_txt_hnd <- MessageHandler(say_hello, filters = MessageFilters$hi). Ukuphikisana komsebenzi wokuqala MessageHandler() indlela ezobiza isibambi, futhi impikiswano yesibili isihlungi ezobizwa ngaso. Kithina, lesi isihlungi esisidalile MessageFilters$hi.

Yebo, ekugcineni, sengeza ku-dispatcher isibambi esidaliwe hi_txt_hnd.

updater <- updater + 
             hi_hendler +
             hi_txt_hnd

Njengoba ngibhale ngenhla, ephaketheni telegram.bot futhi into Izihlungi Zomlayezo Sekuvele kunesethi yezihlungi ezakhelwe ngaphakathi ongazisebenzisa:

  • konke - Yonke imilayezo
  • umbhalo — Imiyalezo yombhalo
  • umyalo - Imiyalo, i.e. imiyalezo eqala ngayo /
  • phendula — Imiyalezo eyimpendulo yomunye umyalezo
  • umsindo — Imiyalezo equkethe ifayela elilalelwayo
  • idokhumenti - Imilayezo enombhalo othunyelwe
  • isithombe - Imilayezo enezithombe ezithunyelwe
  • isitika — Imiyalezo enesitika esithunyelwe
  • ividiyo — Imiyalezo enevidiyo
  • izwi - Imiyalezo yezwi
  • othintana naye - Imilayezo equkethe okuqukethwe kwetelegram yomsebenzisi
  • indawo - Imilayezo ene-geolocation
  • indawo - Imiyalezo edlulisiwe
  • umdlalo - Imidlalo

Uma ufuna ukuhlanganisa izihlungi kusibambi esisodwa vele usebenzise uphawu | - njengendlela enengqondo OK, futhi uphawu & njengokunengqondo И. Isibonelo, uma ufuna ukuthi i-bot ishayele ngendlela efanayo lapho ithola ividiyo, isithombe noma idokhumenti, sebenzisa isibonelo esilandelayo ukuze udale isibambi somlayezo:

handler <- MessageHandler(callback, 
  MessageFilters$video | MessageFilters$photo | MessageFilters$document
)

Ukwengeza Imiyalo ngamapharamitha

Sesiyazi ukuthi iyini imiyalo, idalwa kanjani, nokuthi ungayiphoqa kanjani i-bot ukuthi ikhiphe umyalo owufunayo. Kodwa kwezinye izimo, ngaphezu kwegama lomyalo, sidinga ukudlulisa idatha ethile ukuze siyenze.

Ngezansi kunesibonelo se-bot okuthi, uma kubhekwa idethi enikeziwe nezwe, ikubuyisele uhlobo losuku olusuka ekhalendeni lokukhiqiza.

I-bot engezansi isebenzisa i-API yekhalenda lokukhiqiza isdayoff.ru.

Ikhodi 3: I-Bot ebika ngosuku nangezwe

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

Qalisa isibonelo sekhodi ngenhla, ngemva kokufaka i-'BOT TOKEN YAKHO' nethokheni yangempela oyitholile ngenkathi udala i-bot nge I-BotFather (Ngikhulume ngokudala i-bot ngaphakathi isihloko sokuqala).

Sakhe i-bot enendlela eyodwa kuphela ku-arsenal yayo check_date, le ndlela ibizwa ngomyalo wegama elifanayo.

Kodwa, ngaphezu kwegama lomyalo, le ndlela idinga ukuthi ufake amapharamitha amabili, ikhodi yezwe kanye nosuku. Okulandelayo, i-bot ihlola ukuthi ingabe usuku oluthile ezweni elithile luyimpelasonto, usuku olufushanisiwe, noma usuku lokusebenza ngokuvumelana nekhalenda elisemthethweni lokukhiqiza.

Ukuze indlela esiyidalayo yamukele imingcele eyengeziwe kanye nomyalo, sebenzisa i-agumenti pass_args = TRUE emsebenzini CommandHandler(), futhi lapho udala indlela, ngaphezu kwezimpikiswano ezidingekayo I-bot, buyekeza dala ongakhetha kukho - i-args. Indlela edalwe ngale ndlela izokwamukela imingcele oyidlulisela ku-bot ngemuva kwegama lomyalo. Amapharamitha kufanele ahlukaniswe yisikhala; azothunyelwa endleleni njengevektha yombhalo.

Masiqalise futhi sihlole i-bot yethu.

Ukubhala i-telegraph bot ku-R (ingxenye 2): Ukwengeza ukwesekwa komyalo nezihlungi zemiyalezo ku-bot

Qalisa i-bot ngemuva

Isinyathelo sokugcina okudingeka sisiqede ukwethula i-bot ngemuva.

Ukuze wenze lokhu, landela i-algorithm echazwe ngezansi:

  1. Londoloza ikhodi ye-bot kufayela elinesandiso esingu-R. Uma usebenza ku-RStudio, lokhu kwenziwa ngemenyu Ifayela, iqembu Igcine njenge ....
  2. Engeza indlela eya kufolda ye-bin, yona etholakala kufolda ofake kuyo ulimi lwe-R, ku-Path variable, imiyalelo lapha.
  3. Dala ifayela lombhalo elivamile lapho ubhala khona umugqa ongu-1: R CMD BATCH C:UsersAlseyDocumentsmy_bot.R... Esikhundleni se C:UsersAlseyDocumentsmy_bot.R bhala indlela eya kuskripthi sakho se-bot. Ngesikhathi esifanayo, kubalulekile ukuthi azikho izinhlamvu zeCyrillic noma izikhala endleleni, ngoba lokhu kungase kubangele izinkinga uma usebenzisa i-bot. Ilondoloze, bese ubuyisela isandiso sayo ngokuthi txt on bat.
  4. Vula i-Windows Task Scheduler, kunezindlela eziningi zokwenza lokhu, isibonelo, vula noma iyiphi ifolda bese ufaka ikheli. %windir%system32taskschd.msc /s. Ezinye izindlela zokuqalisa zingatholakala lapha.
  5. Kumenyu ephezulu kwesokudla yesihleli, chofoza okuthi "Dala umsebenzi...".
  6. Kuthebhu ethi "Okuvamile", nikeza umsebenzi wakho igama langokwezifiso, bese ushintshela kusimo esithi "Gijima kubo bonke abasebenzisi".
  7. Iya kuthebhu ethi "Izenzo", chofoza okuthi "Dala". Enkambini "Yohlelo noma iskripthi", chofoza "Phequlula", thola edalwe esinyathelweni sesibili bat ifayela bese uchofoza OK.
  8. Chofoza okuthi KULUNGILE futhi, uma kunesidingo, faka iphasiwedi ye-akhawunti yakho yesistimu yokusebenza.
  9. Thola umsebenzi odaliwe kusihleli, sikhethe bese uchofoza inkinobho ethi "Run" ekhoneni elingezansi kwesokudla.

I-bot yethu isebenza ngemuva futhi izosebenza uze umise umsebenzi, noma ucime i-PC yakho noma iseva eyethulwe kuyo.

isiphetho

Kulesi sihloko, sithole ukuthi singabhala kanjani i-bot egcwele engakwazi ukuthumela imilayezo kuphela, kodwa futhi iphendule imilayezo engenayo nemiyalo. Ulwazi oluzuziwe seluvele lwanele ukuxazulula izinkinga zakho eziningi.

Isihloko esilandelayo sizokhuluma ngendlela yokwengeza ikhibhodi ku-bot ukuze uthole umsebenzi ongcono kakhulu.

Bhalisela okwami telegram и youtube iziteshi.

Source: www.habr.com

Engeza amazwana