Kulemba telegalamu bot mu R (gawo 2): Kuwonjezera thandizo lamalamulo ndi zosefera mauthenga ku bot

В chofalitsidwa cham'mbuyo tinapeza momwe tingapangire bot, tinayambitsa chitsanzo cha kalasi Bot ndipo anadziwa njira zotumizira mauthenga pogwiritsa ntchito.

M'nkhaniyi ndikupitiriza mutuwu, kotero ndikupangira kuyamba kuwerenga nkhaniyi pokhapokha nditawerenga gawo loyamba.

Nthawi ino tiwona momwe tingatsitsimutsire bot yathu ndikuwonjezera thandizo lalamulo kwa iyo, komanso kudziwana ndi kalasi. Updater.

M'kati mwa nkhaniyi, tidzalemba ma bots angapo osavuta, omalizawo, kutengera tsiku lomwe adapatsidwa ndi nambala ya dziko, adziwe ngati tsiku m'dziko lomwe laperekedwa ndilo sabata kapena tsiku logwira ntchito molingana ndi kalendala yopanga. Koma, monga kale, cholinga cha nkhaniyi ndikukudziwitsani za mawonekedwe a phukusi telegram.bot kuthetsa mavuto anu.

Kulemba telegalamu bot mu R (gawo 2): Kuwonjezera thandizo lamalamulo ndi zosefera mauthenga ku bot

Zolemba zonse zakuti "Kulemba telegalamu bot mu R"

  1. Timapanga bot ndikugwiritsa ntchito kutumiza mauthenga pa telegalamu
  2. Onjezani thandizo lamalamulo ndi zosefera za mauthenga ku bot

Zamkatimu

Ngati mukufuna kusanthula deta, mungakhale ndi chidwi changa uthengawo и Youtube njira. Zambiri mwazomwe zimaperekedwa ku chilankhulo cha R.

  1. Updater class
  2. Othandizira - othandizira
  3. Onjezani lamulo loyamba ku bot, chowongolera
  4. Purosesa ya mameseji ndi zosefera
  5. Kuwonjezera Malamulo ndi Parameters
  6. Thamangani bot kumbuyo
  7. Pomaliza

Updater class

Updater ndi kalasi yomwe imakupangitsani kukhala kosavuta kuti mupange telegalamu bot, ndikugwiritsa ntchito kalasi pansi pa hood Dispetcher. Ntchito ya m'kalasi Updater ndikulandila zosintha kuchokera ku bot (m'nkhani yapitayi tidagwiritsa ntchito njirayi getUpdates()), ndi kuwasamutsa patsogolo ku Dispetcher.

Panthawi yake Dispetcher ili ndi zogwirira zomwe mudapanga, i.e. kalasi zinthu Handler.

Othandizira - othandizira

Ndi othandizira omwe mumawonjezera Dispetcher machitidwe a bot ku zochitika zosiyanasiyana. Panthawi yolemba nkhaniyi mu telegram.bot Mitundu yotsatirayi ya othandizira awonjezedwa:

  • MessageHandler - Wothandizira Mauthenga
  • CommandHandler - Woyang'anira Command
  • CallbackQueryHandler - Wothandizira ma data pamakiyibodi otumizidwa kuchokera ku Inline
  • ErrorHandler - Wothandizira zolakwika popempha zosintha kuchokera ku bot

Onjezani lamulo loyamba ku bot, chowongolera

Ngati simunagwiritsepo ntchito bots kale ndipo simukudziwa kuti lamulo ndi chiyani, ndiye kuti malamulo ku bot ayenera kutumizidwa pogwiritsa ntchito slash kutsogolo. / monga chiyambi.

Tidzayamba ndi malamulo osavuta, i.e. tiyeni tiphunzitse bot wathu kunena moni polamula /hi.

Khodi 1: Kuphunzitsa bot kunena moni

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

Thamangani chitsanzo cha code pamwambapa, mutasintha 'BOT TOKEN YAKO' ndi chizindikiro chenicheni chomwe mudalandira popanga bot kudzera. Abambo (Ndinayankhula za kupanga bot mkati nkhani yoyamba).

Njira start_polling() kalasi Updater, yomwe imagwiritsidwa ntchito kumapeto kwa kachidindoyo, imayamba kubwereza kosalekeza kopempha ndi kukonza zosintha kuchokera ku bot.

Tsopano tiyeni titsegule Telegalamu ndikulemba lamulo loyamba ku bot yathu /hi.

Kulemba telegalamu bot mu R (gawo 2): Kuwonjezera thandizo lamalamulo ndi zosefera mauthenga ku bot

Tsopano bot yathu imamvetsetsa lamulo /hi, ndipo amadziwa kutipatsa moni.

Mwadongosolo, njira yopangira bot yosavuta yotere imatha kuwonetsedwa motere.

Kulemba telegalamu bot mu R (gawo 2): Kuwonjezera thandizo lamalamulo ndi zosefera mauthenga ku bot

  1. Pangani chitsanzo cha kalasi Updater;
  2. Timalenga njira, i.e. ntchito zomwe bot yathu idzachita. Mu code chitsanzo ichi ndi ntchito say_hello(). Ntchito zomwe mudzagwiritse ntchito ngati njira za bot ziyenera kukhala ndi mfundo ziwiri zofunika - Bot и pomwe, ndi chimodzi mwazosankha - args. Kukangana Bot, iyi ndi bot yanu, ndi chithandizo chake mungathe kuyankha mauthenga, kutumiza mauthenga, kapena kugwiritsa ntchito njira zina zomwe zilipo ku bot. Kukangana pomwe izi ndi zomwe bot adalandira kuchokera kwa wogwiritsa ntchito, kwenikweni, zomwe talandira m'nkhani yoyamba pogwiritsa ntchito njira getUpdates(). Kukangana args amakulolani kuti muthe kukonza deta yowonjezereka yotumizidwa ndi wogwiritsa ntchito pamodzi ndi lamulo, tidzabwereranso ku mutuwu pang'ono;
  3. Timalenga ogwira ntchito, i.e. Timagwirizanitsa zochita zina za ogwiritsa ntchito ndi njira zomwe zidapangidwa m'mbuyomu. Kwenikweni, chothandizira ndichoyambitsa, chochitika chomwe chimatcha ntchito ya bot. Mu chitsanzo chathu, choyambitsa choterechi ndikutumiza lamulo /hi, ndipo imayendetsedwa ndi gulu hi_hendler <- CommandHandler('hi', say_hello). Mkangano woyamba wa ntchito CommandHandler() amakulolani kuti mutchule lamulo, kwa ife hi, komwe bot idzayankha. Mtsutso wachiwiri umakupatsani mwayi wofotokozera njira ya bot, tidzayitcha njirayo say_hello, yomwe idzachitidwa ngati wogwiritsa ntchito aitana lamulo lotchulidwa mkangano woyamba;
  4. Kenako, timawonjezera chothandizira chopangidwa ku dispatcher ya kalasi yathu Updater. Mutha kuwonjezera othandizira m'njira zingapo; mu chitsanzo pamwambapa, ndidagwiritsa ntchito yosavuta, pogwiritsa ntchito chikwangwani +, i.e. updater <- updater + hi_hendler. Zomwezo zikhoza kuchitika pogwiritsa ntchito njira add_handler(), amene ali a kalasi Dispatcher, mungapeze njira iyi motere: updater$dispatcher$add_handler();
  5. Yambitsani bot pogwiritsa ntchito lamulo start_polling().

Purosesa ya mameseji ndi zosefera

Tinaganizira momwe tingatumizire malamulo ku bot, koma nthawi zina timafunika bot kuti tiyankhe osati malamulo okha, komanso mauthenga ena okhazikika. Kuti muchite izi muyenera kugwiritsa ntchito zowongolera mauthenga - MessageHandler.

wamba MessageHandler adzayankha mwamtheradi mauthenga onse obwera. Chifukwa chake, owongolera mauthenga nthawi zambiri amagwiritsidwa ntchito limodzi ndi zosefera. Tiyeni tiphunzitse bot kunena moni osati polamula /hi, komanso nthawi iliyonse pamene limodzi la mawu otsatirawa likuwonekera mu uthenga wotumizidwa ku bot: moni, moni, moni, hai, bonjour.

Pakadali pano sitilemba njira zatsopano, chifukwa... Tili ndi kale njira yomwe bot imatilonjera. Zomwe tikuyenera kuchita ndikupanga fyuluta yofunikira ndi chothandizira mauthenga.

Khodi 2: Onjezani chogwirizira meseji ndi fyuluta

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

Thamangani chitsanzo cha code pamwambapa, mutasintha 'BOT TOKEN YAKO' ndi chizindikiro chenicheni chomwe mudalandira popanga bot kudzera. Abambo (Ndinayankhula za kupanga bot mkati nkhani yoyamba).

Tsopano tiyeni tiyese kutumiza bot mauthenga angapo omwe ali ndi mawu opatsa moni omwe atchulidwa kale:
Kulemba telegalamu bot mu R (gawo 2): Kuwonjezera thandizo lamalamulo ndi zosefera mauthenga ku bot

Kotero, choyamba, tinaphunzitsa bot osati kungonena moni, koma kuyankha moni. Tinachita izi pogwiritsa ntchito mkangano reply_to_message_id, yomwe imapezeka mu njira sendMessage(), momwe muyenera kusamutsa id ya uthenga womwe mukufuna kuyankha. Mutha kupeza id ya meseji motere: update$message$message_id.

Koma chinthu chachikulu chomwe tidachita ndikuwonjezera fyuluta ku bot pogwiritsa ntchito ntchitoyi BaseFilter():

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

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

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

)

Monga momwe mwawonera, zosefera ziyenera kuwonjezeredwa ku chinthucho MessageFilters, yomwe poyamba ili ndi zosefera zazing'ono zopangidwa kale. Mu chitsanzo chathu, ku chinthu MessageFilters tawonjezera chinthu hi, iyi ndi fyuluta yatsopano.

Kugwira ntchito BaseFilter() muyenera kudutsa ntchito fyuluta. Kwenikweni, fyuluta ndi ntchito yomwe imalandira uthenga ndikubwerera WOONA kapena ZONYENGA. Mu chitsanzo chathu, tinalemba ntchito yosavuta yomwe, pogwiritsa ntchito ntchito yoyambira grepl() imayang'ana mawu a uthengawo ndipo ngati ikugwirizana ndi mawu okhazikika привет|здравствуй|салют|хай|бонжур zobwerera WOONA.

Kenako timapanga chothandizira uthenga hi_txt_hnd <- MessageHandler(say_hello, filters = MessageFilters$hi). Mkangano woyamba wa ntchito MessageHandler() ndiyo njira yomwe idzayitanire wothandizira, ndipo mkangano wachiwiri ndi fyuluta yomwe idzatchulidwe. Kwa ife, iyi ndiye fyuluta yomwe tidapanga MessageFilters$hi.

Chabwino, pamapeto pake, timawonjezera ku dispatcher chogwirizira chopangidwa hi_txt_hnd.

updater <- updater + 
             hi_hendler +
             hi_txt_hnd

Monga ndalemba pamwambapa, mu phukusi telegram.bot ndi chinthu MessageFilters Pali kale zosefera zomangidwira zomwe mungagwiritse ntchito:

  • onse - Mauthenga onse
  • meseji - Mauthenga
  • lamulo - Malamulo, i.e. mauthenga omwe amayamba nawo /
  • yankhani - Mauthenga omwe ndi yankho ku uthenga wina
  • audio - Mauthenga omwe ali ndi fayilo yomvera
  • chikalata - Mauthenga okhala ndi chikalata chotumizidwa
  • chithunzi - Mauthenga okhala ndi zithunzi zotumizidwa
  • chomata - Mauthenga okhala ndi chomata chotumizidwa
  • kanema - Mauthenga okhala ndi kanema
  • mawu - Mauthenga a mawu
  • kukhudzana - Mauthenga omwe ali ndi telegalamu ya wogwiritsa ntchito
  • malo - Mauthenga okhala ndi geolocation
  • malo - Mauthenga otumizidwa
  • masewera - Masewera

Ngati mukufuna kuphatikiza zosefera mu chogwirira chimodzi ingogwiritsani ntchito chizindikirocho | - monga zomveka OR, ndi chizindikiro & monga zomveka И. Mwachitsanzo, ngati mukufuna bot kuyimba njira yomweyo ikalandira kanema, chithunzi kapena chikalata, gwiritsani ntchito chitsanzo chotsatirachi kuti mupange chothandizira uthenga:

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

Kuwonjezera Malamulo ndi Parameters

Tikudziwa kale kuti ndi malamulo ati, momwe mungawalenge, komanso momwe mungakakamize bot kuti ipereke lamulo lomwe mukufuna. Koma nthawi zina, kuwonjezera pa dzina la lamulo, tifunika kudutsa deta kuti tichite.

Pansipa pali chitsanzo cha bot yomwe, kupatsidwa tsiku ndi dziko, imakubwezerani mtundu watsiku kuchokera pa kalendala yopanga.

Bot pansipa imagwiritsa ntchito kalendala yopanga API isdayoff.ru.

Khodi 3: Bot yomwe imafotokoza tsiku ndi dziko

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

Thamangani chitsanzo cha code pamwambapa, mutasintha 'BOT TOKEN YAKO' ndi chizindikiro chenicheni chomwe mudalandira popanga bot kudzera. Abambo (Ndinayankhula za kupanga bot mkati nkhani yoyamba).

Tinapanga bot yomwe ili ndi njira imodzi yokha mu zida zake check_date, njira iyi imatchedwa ndi lamulo la dzina lomwelo.

Koma, kuwonjezera pa dzina la lamulo, njirayi ikufuna kuti mulowetse magawo awiri, nambala ya dziko ndi tsiku. Kenako, bot imayang'ana ngati tsiku lomwe laperekedwa m'dziko lotchulidwalo ndi sabata, tsiku lofupikitsidwa, kapena tsiku logwira ntchito malinga ndi kalendala yovomerezeka.

Kuti njira yomwe timapanga ivomereze magawo owonjezera pamodzi ndi lamulo, gwiritsani ntchito mkangano pass_args = TRUE mu ntchito CommandHandler(), ndi popanga njira, kuwonjezera pa mfundo zofunika Bot, pomwe pangani imodzi - args. Njira yopangidwa motere idzavomereza magawo omwe mumadutsa ku bot pambuyo pa dzina la lamulo. Magawo amayenera kulekanitsidwa ndi danga; adzatumizidwa ku njira ngati vekitala yamawu.

Tiyeni tiyambitse ndikuyesa bot yathu.

Kulemba telegalamu bot mu R (gawo 2): Kuwonjezera thandizo lamalamulo ndi zosefera mauthenga ku bot

Thamangani bot kumbuyo

Gawo lomaliza lomwe tiyenera kumaliza ndikuyambitsa bot kumbuyo.

Kuti muchite izi, tsatirani algorithm yomwe ili pansipa:

  1. Sungani bot code ku fayilo ndi yowonjezera R. Pamene mukugwira ntchito mu RStudio, izi zimachitika kudzera mumenyu file, timu Sungani Monga ....
  2. Onjezani njira yopita ku chikwatu cha bin, chomwe chili mufoda yomwe mudayika chilankhulo cha R, kupita ku Path variable, malangizo. apa.
  3. Pangani fayilo yokhazikika yolemba mzere umodzi: R CMD BATCH C:UsersAlseyDocumentsmy_bot.R... M'malo mwa C:UsersAlseyDocumentsmy_bot.R lembani njira yopita ku bot script yanu. Panthawi imodzimodziyo, ndikofunikira kuti palibe zilembo za Cyrillic kapena malo panjira, chifukwa izi zitha kuyambitsa zovuta mukamagwiritsa ntchito bot. Sungani, ndikusintha chowonjezera chake ndi txt pa mleme.
  4. Tsegulani Windows Task Scheduler, pali njira zambiri zochitira izi, mwachitsanzo, tsegulani chikwatu chilichonse ndikulowetsa adilesi. %windir%system32taskschd.msc /s. Njira zina zoyambira zitha kupezeka apa.
  5. Pamwamba kumanja kwa scheduler, dinani "Pangani ntchito ...".
  6. Pa tabu ya "General", perekani dzina lantchito yanu, ndikusintha kusinthana kukhala "Thamangani kwa ogwiritsa ntchito onse".
  7. Pitani ku tabu "Zochita", dinani "Pangani". Mugawo la "Pulogalamu kapena script", dinani "Sakatulani", pezani yomwe idapangidwa mu gawo lachiwiri mleme fayilo ndikudina OK.
  8. Dinani Chabwino ndipo, ngati kuli kofunikira, lowetsani mawu achinsinsi pa akaunti yanu yogwiritsira ntchito.
  9. Pezani zomwe zidapangidwa mu scheduler, sankhani ndikudina "Thamangani" batani lakumunsi kumanja.

Bot yathu imayendetsa kumbuyo ndipo idzagwira ntchito mpaka mutayimitsa ntchitoyi, kapena kuzimitsa PC yanu kapena seva yomwe idakhazikitsidwa.

Pomaliza

M'nkhaniyi, taganizirani momwe tingalembere bot yodzaza ndi zonse zomwe sizingangotumiza mauthenga, komanso kuyankha mauthenga obwera ndi malamulo. Chidziwitso chomwe mwapeza ndichokwanira kale kuthetsa mavuto anu ambiri.

Nkhani yotsatira ifotokoza momwe mungawonjezere kiyibodi ku bot kuti mugwire ntchito yabwino.

Lembani ku wanga uthengawo и Youtube njira.

Source: www.habr.com

Kuwonjezera ndemanga