Sau tus xov tooj bot hauv R (ib ntu 2): Ntxiv kev txhawb nqa thiab cov lus lim rau bot

В yav dhau los tshaj tawm peb xav paub yuav ua li cas los tsim ib tug bot, pib ib qho piv txwv ntawm chav kawm Bot thiab tau paub txog cov txheej txheem ntawm kev xa lus siv nws.

Hauv tsab xov xwm no kuv txuas ntxiv cov ncauj lus no, yog li kuv xav kom pib nyeem cov ntawv no tsuas yog tom qab nyeem ntawv thawj ntu.

Lub sijhawm no peb yuav txheeb xyuas yuav ua li cas rov kho peb cov bot thiab ntxiv kev txhawb nqa rau nws, thiab kuj tau paub nrog cov chav kawm Updater.

Thaum lub sij hawm ntawm tsab xov xwm, peb yuav sau ob peb yam yooj yim bots, lub tom kawg yuav, raws li ib tug muab hnub tim thiab lub teb chaws chaws, txiav txim seb ib hnub twg nyob rau hauv ib lub teb chaws muab yog ib lub lis piam los yog hnub ua hauj lwm raws li lub ntau lawm calendar. Tab sis, raws li ua ntej, lub hom phiaj ntawm tsab xov xwm yog kom paub koj nrog lub pob interface telegram.bot los daws koj cov teeb meem.

Sau tus xov tooj bot hauv R (ib ntu 2): Ntxiv kev txhawb nqa thiab cov lus lim rau bot

Tag nrho cov ntawv los ntawm koob "Sau ib lub xov tooj bot hauv R"

  1. Peb tsim ib lub bot thiab siv nws los xa cov lus hauv telegram
  2. Ntxiv cov lus txhawb nqa thiab cov lus lim rau bot

Txheem

Yog tias koj txaus siab rau cov ntaub ntawv tsom xam, tej zaum koj yuav txaus siab rau kuv telegram и youtube cov channel. Cov ntsiab lus feem ntau yog mob siab rau R hom lus.

  1. Updater chav kawm
  2. Handlers - handlers
  3. Ntxiv thawj qhov kev hais kom ua rau bot, hais kom ua tus tuav
  4. Text message processors thiab lim
  5. Ntxiv Commands nrog Parameters
  6. Khiav lub bot hauv keeb kwm yav dhau
  7. xaus

Updater chav kawm

Updater yog ib chav kawm uas ua rau nws yooj yim dua rau koj los tsim lub telegram bot, thiab siv cov chav kawm hauv qab hood Dispetcher. Chav kawm Updater yog kom tau txais kev hloov tshiab los ntawm bot (hauv tsab xov xwm dhau los peb tau siv txoj hauv kev rau lub hom phiaj no getUpdates()), thiab hloov lawv mus ntxiv rau Dispetcher.

Nyob rau hauv nws lem Dispetcher muaj cov handlers koj tsim, i.e. cov khoom hauv chav kawm Handler.

Handlers - handlers

Nrog handlers koj ntxiv rau Dispetcher bot tshuaj tiv thaiv rau ntau yam xwm txheej. Thaum lub sij hawm sau ntawv no nyob rau hauv telegram.bot Cov nram qab no hom handlers tau ntxiv:

  • MessageHandler — Cov lus tuav
  • CommandHandler - Cov lus txib tuav
  • CallbackQueryHandler - Cov ntaub ntawv tuav rau cov keyboards xa los ntawm Inline
  • ErrorHandler - Tus neeg ua haujlwm yuam kev thaum thov hloov tshiab los ntawm bot

Ntxiv thawj qhov kev hais kom ua rau bot, hais kom ua tus tuav

Yog tias koj tsis tau siv bots ua ntej thiab tsis paub tias qhov kev hais kom ua yog dab tsi, ces cov lus txib rau bot yuav tsum raug xa mus siv lub cim rau pem hauv ntej. / ua prefix.

Peb yuav pib nrog cov lus txib yooj yim, i.e. cia peb qhia peb bot hais nyob zoo rau ntawm kev hais kom ua /hi.

Code 1: Qhia tus bot kom hais nyob zoo

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

Khiav tus lej piv txwv saum toj no, tom qab hloov 'koj BOT TOKEN' nrog lub token tiag koj tau txais thaum tsim lub bot ntawm BotFather (Kuv tham txog kev tsim bot hauv thawj tsab xov xwm).

Txujci start_polling() chav kawm Updater, uas yog siv thaum kawg ntawm tus lej, pib lub voj tsis kawg ntawm kev thov thiab ua cov hloov tshiab los ntawm bot.

Tam sim no cia peb qhib Telegram thiab sau thawj cov lus txib rau peb bot /hi.

Sau tus xov tooj bot hauv R (ib ntu 2): Ntxiv kev txhawb nqa thiab cov lus lim rau bot

Tam sim no peb bot nkag siab cov lus txib /hi, thiab paub yuav ua li cas tos txais peb.

Schematically, cov txheej txheem ntawm lub tsev xws li ib tug yooj yim bot yuav depicted raws li nram no.

Sau tus xov tooj bot hauv R (ib ntu 2): Ntxiv kev txhawb nqa thiab cov lus lim rau bot

  1. Tsim ib qho piv txwv ntawm chav kawm Updater;
  2. Peb tsim cov txheej txheem, i.e. cov haujlwm uas peb bot yuav ua. Hauv qhov piv txwv code qhov no yog qhov ua haujlwm say_hello(). Cov haujlwm uas koj yuav siv raws li bot txoj kev yuav tsum muaj ob qhov kev sib cav - bot и update, thiab ib qho kev xaiv - args. Kev sib cav bot, qhov no yog koj tus bot, nrog nws pab koj tuaj yeem teb cov lus, xa lus, lossis siv lwm txoj hauv kev muaj rau bot. Kev sib cav update qhov no yog qhov bot tau txais los ntawm tus neeg siv, qhov tseeb, qhov peb tau txais hauv thawj tsab xov xwm siv txoj kev getUpdates(). Kev sib cav args tso cai rau koj ua cov ntaub ntawv ntxiv xa los ntawm tus neeg siv nrog rau cov lus txib, peb yuav rov qab mus rau lub ncauj lus no me ntsis tom qab;
  3. Peb tsim handlers, i.e. Peb koom nrog qee tus neeg siv cov kev ua nrog cov txheej txheem tsim ntawm cov kauj ruam dhau los. Qhov tseem ceeb, tus handler yog qhov tshwm sim, ib qho kev tshwm sim uas hu rau qee qhov haujlwm bot. Hauv peb qhov piv txwv, xws li qhov ua rau xa cov lus txib /hi, thiab yog siv los ntawm pab neeg hi_hendler <- CommandHandler('hi', say_hello). Thawj qhov kev sib cav CommandHandler() tso cai rau koj los qhia ib qho lus txib, hauv peb rooj plaub hi, uas bot yuav teb. Qhov kev sib cav thib ob tso cai rau koj los qhia txog bot txoj kev, peb yuav hu rau txoj kev say_hello, uas yuav raug tua yog tias tus neeg siv hu ua cov lus txib uas tau teev tseg hauv thawj qhov kev sib cav;
  4. Tom ntej no, peb ntxiv tus tsim handler rau tus neeg xa khoom ntawm peb chav kawm piv txwv Updater. Koj tuaj yeem ntxiv cov neeg ua haujlwm hauv ntau txoj hauv kev; hauv qhov piv txwv saum toj no, kuv siv qhov yooj yim tshaj plaws, siv lub cim +, i.e. updater <- updater + hi_hendler. Tib yam tuaj yeem ua tiav siv txoj kev add_handler(), uas belongs rau chav kawm Dispatcher, koj tuaj yeem pom txoj kev zoo li no: updater$dispatcher$add_handler();
  5. Tua tawm lub bot siv cov lus txib start_polling().

Text message processors thiab lim

Peb xav paub yuav ua li cas xa cov lus txib mus rau bot, tab sis qee zaum peb xav tau lub bot los teb tsis yog rau cov lus txib, tab sis kuj rau qee cov ntawv nyeem tsis tu ncua. Txhawm rau ua qhov no koj yuav tsum siv cov lus tuav − MessageHandler.

zoo tib yam MessageHandler yuav teb rau tag nrho cov lus tuaj. Yog li ntawd, cov lus handlers feem ntau siv ua ke nrog cov lim dej. Cia peb qhia tus bot kom hais nyob zoo tsis yog ntawm cov lus txib xwb /hi, tab sis kuj thaum twg ib qho ntawm cov lus hauv qab no tshwm nyob rau hauv cov lus xa mus rau bot: nyob zoo, nyob zoo, salute, hai, bonjour.

Txog tam sim no peb yuav tsis sau ib txoj hauv kev tshiab, vim ... Peb twb muaj ib txoj kev uas tus bot txais tos peb. Txhua yam peb yuav tsum tau ua yog tsim cov lim thiab cov lus tuav.

Code 2: Ntxiv cov ntawv nyeem thiab lim

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

Khiav tus lej piv txwv saum toj no, tom qab hloov 'koj BOT TOKEN' nrog lub token tiag koj tau txais thaum tsim lub bot ntawm BotFather (Kuv tham txog kev tsim bot hauv thawj tsab xov xwm).

Tam sim no cia peb sim xa cov bot ob peb cov lus uas muaj cov lus caw uas tau teev tseg ua ntej:
Sau tus xov tooj bot hauv R (ib ntu 2): Ntxiv kev txhawb nqa thiab cov lus lim rau bot

Yog li, ua ntej tshaj plaws, peb tau qhia tus bot tsis yog hais nyob zoo xwb, tab sis los teb rau kev txais tos. Peb tau ua qhov no los ntawm kev sib cav teb_to_message_id, uas muaj nyob rau hauv txoj kev sendMessage(), nyob rau hauv uas koj yuav tsum tau hloov lub id ntawm cov lus uas koj xav teb. Koj tuaj yeem tau txais cov lus id zoo li no: update$message$message_id.

Tab sis qhov tseem ceeb tshaj plaws uas peb tau ua yog ntxiv lub lim rau bot siv cov haujlwm BaseFilter():

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

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

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

)

Raws li koj tau pom, cov ntxaij lim dej yuav tsum tau ntxiv rau qhov khoom MessageFilters, uas thaum xub thawj twb muaj ib txheej me me ntawm cov lim dej npaj txhij. Hauv peb qhov piv txwv, rau qhov khoom MessageFilters peb ntxiv ib lub ntsiab hi, qhov no yog lim tshiab.

Ua haujlwm BaseFilter() koj yuav tsum dhau lub lim dej. Qhov tseem ceeb, lub lim tsuas yog ib txoj haujlwm uas tau txais cov lus piv txwv thiab rov qab los TRUE los yog cuav. Hauv peb qhov piv txwv, peb tau sau ib qho kev ua haujlwm yooj yim uas, siv cov haujlwm yooj yim grepl() tshawb xyuas cov ntawv xov xwm thiab yog tias nws phim cov lus qhia tsis tu ncua привет|здравствуй|салют|хай|бонжур rov qab TRUE.

Tom ntej no peb tsim cov lus handler hi_txt_hnd <- MessageHandler(say_hello, filters = MessageFilters$hi). Thawj qhov kev sib cav MessageHandler() yog txoj kev uas yuav hu rau tus tuav, thiab qhov kev sib cav thib ob yog cov lim uas nws yuav raug hu. Hauv peb cov ntaub ntawv, qhov no yog cov lim peb tsim MessageFilters$hi.

Zoo, thaum kawg, peb ntxiv rau tus xa khoom tus neeg tsim khoom hi_txt_hnd.

updater <- updater + 
             hi_hendler +
             hi_txt_hnd

Raws li kuv tau sau saum toj no, hauv pob telegram.bot thiab khoom MessageFilters Muaj twb yog ib txheej ntawm built-in lim uas koj siv tau:

  • tag nrho — Tag nrho cov lus
  • ntawv nyeem — Text messages
  • lus txib — Commands, i.e. cov lus uas pib nrog /
  • teb — Cov lus teb rau lwm cov lus
  • suab — Cov lus uas muaj cov ntaub ntawv suab
  • document — Cov lus nrog ib tug xa daim ntawv
  • Diam duab - Cov lus nrog cov duab xa tuaj
  • sticker — Cov lus nrog ib daim ntawv xa tuaj
  • video — Cov lus nrog video
  • suab - Suab lus
  • tiv tauj — Cov lus uas muaj tus neeg siv cov ntsiab lus telegram
  • qhov chaw - Cov lus nrog geolocation
  • venue — Forwarded messages
  • game — Kev ua si

Yog tias koj xav muab qee cov ntxaij lim dej hauv ib tus neeg tuav tsuas yog siv lub cim | - raws li kev xav Los yog, thiab kos npe & raws li kev xav И. Piv txwv li, yog tias koj xav kom bot hu tib txoj kev thaum nws tau txais video, duab lossis cov ntaub ntawv, siv cov piv txwv hauv qab no los tsim cov lus tuav:

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

Ntxiv Commands nrog Parameters

Peb twb paub lawm hais tias dab tsi yog commands, yuav ua li cas los tsim lawv, thiab yuav ua li cas yuam tus bot kom ua raws li cov lus txib uas xav tau. Tab sis qee zaum, ntxiv rau lub npe hais kom ua, peb yuav tsum dhau qee cov ntaub ntawv los ua nws.

Hauv qab no yog ib qho piv txwv ntawm bot uas, muab hnub tim thiab lub teb chaws, xa rov qab rau koj hom hnub los ntawm daim ntawv qhia hnub ntau lawm.

Cov bot hauv qab no siv daim ntawv qhia hnub API ntau lawm ib isdayoff.ru.

Code 3: Bot uas qhia los ntawm hnub tim thiab lub tebchaws

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

Khiav tus lej piv txwv saum toj no, tom qab hloov 'koj BOT TOKEN' nrog lub token tiag koj tau txais thaum tsim lub bot ntawm BotFather (Kuv tham txog kev tsim bot hauv thawj tsab xov xwm).

Peb tsim ib tug bot uas tsuas muaj ib txoj kev nyob rau hauv nws arsenal check_date, hom no yog hu los ntawm cov lus txib ntawm tib lub npe.

Tab sis, ntxiv rau lub npe hais kom ua, txoj kev no xav kom koj nkag mus rau ob qhov tsis muaj, lub teb chaws chaws thiab hnub tim. Tom ntej no, bot tshuaj xyuas seb ib hnub twg hauv lub tebchaws tau teev tseg yog hnub so, hnub luv luv, lossis hnub ua haujlwm raws li daim ntawv qhia hnub ua haujlwm.

Nyob rau hauv kev txiav txim rau txoj kev peb tsim los txais cov tsis ntxiv nrog rau cov lus txib, siv qhov kev sib cav pass_args = TRUE hauv kev ua haujlwm CommandHandler(), thiab thaum tsim ib txoj kev, ntxiv rau cov kev sib cav yuav tsum tau bot, update tsim ib qho kev xaiv xaiv - args. Cov txheej txheem tsim nyob rau hauv txoj kev no yuav lees txais cov kev txwv uas koj dhau mus rau bot tom qab lub npe hais kom ua. Cov kev txwv yuav tsum tau muab cais los ntawm qhov chaw; lawv yuav raug xa mus rau txoj kev ua cov ntawv vector.

Cia peb pib thiab sim peb bot.

Sau tus xov tooj bot hauv R (ib ntu 2): Ntxiv kev txhawb nqa thiab cov lus lim rau bot

Khiav lub bot hauv keeb kwm yav dhau

Cov kauj ruam kawg peb yuav tsum ua kom tiav yog tso lub bot hauv keeb kwm yav dhau.

Txhawm rau ua qhov no, ua raws li algorithm tau piav qhia hauv qab no:

  1. Txuag lub bot code rau ib cov ntaub ntawv nrog extension R. Thaum ua hauj lwm hauv RStudio, qhov no yog ua tiav los ntawm cov ntawv qhia zaub mov cov ntaub ntawv, pab Txuag Raws Li ....
  2. Ntxiv txoj hauv kev mus rau hauv daim nplaub tshev, uas nyob rau hauv lem yog nyob rau hauv lub nplaub tshev uas koj ntsia R hom lus, mus rau txoj kev sib txawv, cov lus qhia S, SѓS,.
  3. Tsim ib cov ntawv nyeem ib txwm nyob rau hauv uas sau 1 kab: R CMD BATCH C:UsersAlseyDocumentsmy_bot.R... Hloov ntawm C:UsersAlseyDocumentsmy_bot.R sau txoj hauv kev rau koj daim ntawv bot. Tib lub sijhawm, nws yog ib qho tseem ceeb uas tsis muaj Cyrillic cim lossis qhov chaw nyob ntawm txoj kev, vim qhov no yuav ua rau muaj teeb meem thaum khiav lub bot. Txuag nws, thiab hloov nws qhov txuas ntxiv nrog txt rau puav.
  4. Qhib Windows Task Scheduler, muaj ntau txoj hauv kev los ua qhov no, piv txwv li, qhib ib lub nplaub tshev thiab nkag mus rau qhov chaw nyob %windir%system32taskschd.msc /s. Lwm txoj kev tso tawm tuaj yeem pom S, SѓS,.
  5. Hauv cov ntawv qhia zaub mov saum toj kawg nkaus ntawm tus teem sijhawm, nyem "Tsim ua haujlwm ...".
  6. Ntawm "General" tab, muab koj txoj haujlwm rau lub npe kev cai, thiab hloov pauv mus rau "Khiav rau txhua tus neeg siv" xeev.
  7. Mus rau "Actions" tab, nyem "Tsim". Hauv "Kev Pabcuam lossis tsab ntawv" teb, nyem "Xaiv", nrhiav tus tsim nyob rau theem thib ob puav file thiab nias OK.
  8. Nyem OK thiab, yog tias tsim nyog, sau tus password rau koj tus account operating system.
  9. Nrhiav cov haujlwm tsim nyob rau hauv lub sijhawm teem sijhawm, xaiv nws thiab nyem lub pob "Khiav" nyob rau sab xis sab xis.

Peb bot khiav hauv keeb kwm yav dhau thiab yuav ua haujlwm kom txog thaum koj tso tseg txoj haujlwm, lossis tua koj lub PC lossis server uas nws tau pib.

xaus

Nyob rau hauv tsab xov xwm no, peb xav txog yuav ua li cas sau ib tug tag nrho-fledged bot uas tsis tau tsuas yog xa cov lus, tab sis kuj teb rau cov lus tuaj thiab cov lus txib. Cov kev paub uas tau txais yog twb txaus los daws koj cov teeb meem feem ntau.

Kab lus tom ntej yuav tham txog yuav ua li cas ntxiv cov keyboard rau bot kom ua haujlwm yooj yim dua.

Subscribe rau kuv telegram и youtube cov channel.

Tau qhov twg los: www.hab.com

Ntxiv ib saib