Qorista bot telegram ee R (qaybta 2): Ku darida taageerada amarka iyo filtarrada fariinta bot-ka

В daabacaad hore Waxaan ogaanay sida loo abuuro bot, oo aan bilownay tusaale fasalka Bot oo la bartay hababka farriimaha loo diro iyadoo la isticmaalayo.

Maqaalkan waxaan sii wadaa mawduucan, markaa waxaan ku talinayaa in la bilaabo akhrinta maqaalkan kaliya ka dib markaad akhrido qaybta koowaad.

Markan waxaan ogaan doonaa sida loo soo nooleeyo bot-keena oo aan ugu darno taageerada amarka, iyo sidoo kale inaan la socono fasalka Updater.

Inta lagu jiro koorsada maqaalka, waxaan ku qori doonaa dhowr bots fudud, kan dambe, oo ku saleysan taariikhda la siiyay iyo code-ka dalka, ayaa go'aamin doona in maalinta waddan la siiyay ay tahay dhammaadka wiigga ama maalin shaqo sida waafaqsan jadwalka wax soo saarka. Laakiin, sidii hore, ujeeddada maqaalku waa in lagu baro interface-ka xirmada telegram.bot si aad u xalliso dhibaatooyinkaaga.

Qorista bot telegram ee R (qaybta 2): Ku darida taageerada amarka iyo filtarrada fariinta bot-ka

Dhammaan maqaallada taxanaha ah "Qoritaanka bot telegram ee R"

  1. Waxaan abuurnaa bot waxaana u isticmaalnaa si aan farriimaha ugu dirno telegram
  2. Ku dar taageerada amarka iyo filtarrada fariinta bot-ka

Tusmo

Haddii aad xiisaynayso falanqaynta xogta, waxaa laga yaabaa inaad xiisaynayso aniga telegram и youtube kanaalada. Inta badan waxa ku jira waxa u heellan luqadda R.

  1. fasalka Updater
  2. Gacan-qaadayaasha - gacan-qabayaal
  3. Ku dar amarka ugu horreeya bot, maamulaha amarka
  4. Farsamaynta qoraalka iyo filtarrada
  5. Ku-darka amarada leh Parameters
  6. Ku orod bot-ka gadaal
  7. gunaanad

fasalka Updater

Updater waa fasal kuu fududaynaya inaad horumariso bot telegram, oo isticmaala fasalka hoostiisa Dispetcher. Shaqada fasalka Updater waa in laga helo cusboonaysiinta bot (maqaalkii hore waxaan u isticmaalnay habka ujeedadan getUpdates()), oo u sii gudbi Dispetcher.

Markeeda Dispetcher waxaa ku jira maamulayaasha aad abuurtay, i.e. walxaha fasalka Handler.

Gacan-qaadayaasha - gacan-qabayaal

Gacan-qablayaal aad ku darto Dispetcher falcelinta bot ee dhacdooyin kala duwan. Waqtiga qorista maqaalkan in telegram.bot Noocyada soo socda ee maamulayaasha ayaa lagu daray:

  • MessageHandler - Farriinta gacanta ku haysa
  • CommandHandler - Maamulaha taliska
  • CallbackQueryHandler - Maamulaha xogta kiiboodhka laga soo diray khadka
  • ErrorHandler - Khaladaadka maamulaha marka uu codsanayo cusbooneysiinta bot-ka

Ku dar amarka ugu horreeya bot, maamulaha amarka

Haddii aadan waligaa isticmaalin bots oo aadan aqoon waxa amarku yahay, markaas amarada bot-ka waa in lagu soo diraa iyadoo la isticmaalayo jeex hore. / horgale ahaan.

Waxaan ku bilaabi doonaa amarro fudud, i.e. aynu barno bot-kayaga si ay u salaamaan amarka /hi.

Xeerka 1: Barista bot si loo yiraahdo hello

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

Orod tusaalaha koodka sare, ka dib markii aad ku bedesho 'BOT TOKENKA' calaamada dhabta ah ee aad heshay markii aad samaynaysay bot-ka BotAabbe (Waxaan ka hadlay abuurista bot maqaalka koowaad).

Habka start_polling() fasalka Updater, kaas oo la isticmaalo dhamaadka koodka, wuxuu bilaabaa wareeg aan dhamaad lahayn oo codsi ah iyo habaynta cusboonaysiinta bot.

Hadda aan furno Telegram oo aan ku qorno amarka ugu horreeya ee bot-kayaga /hi.

Qorista bot telegram ee R (qaybta 2): Ku darida taageerada amarka iyo filtarrada fariinta bot-ka

Hadda bot-kayagu wuu fahmay amarka /hi, oo yaqaan sida loo salaamo.

Nidaam ahaan, habka loo dhisayo bot fudud ayaa loo sawiri karaa sida soo socota.

Qorista bot telegram ee R (qaybta 2): Ku darida taageerada amarka iyo filtarrada fariinta bot-ka

  1. Samee tusaale fasalka Updater;
  2. Waxaan abuurnaa habab, i.e. hawlaha uu bot-kayagu qaban doono. Tusaalaha koodka tani waa shaqo say_hello(). Hawlaha aad isticmaali doonto sida hababka bot waa inay lahaadaan laba doodood oo loo baahan yahay - robot и updateiyo hal ikhtiyaar - qaanso. Dood robot, Kani waa bot-kaaga, iyada oo caawinteeda waxaad ka jawaabi kartaa fariimaha, diri kartaa fariimaha, ama isticmaali kartaa hab kasta oo kale oo uu heli karo bot. Dood update tani waa waxa bot-ku uu ka helay isticmaalaha, dhab ahaantii, waxa aan ku helnay maqaalkii ugu horeeyay ee isticmaalaya habka getUpdates(). Dood qaanso wuxuu kuu ogolaanayaa inaad socodsiiso xogta dheeraadka ah ee uu soo diray isticmaaluhu iyadoo la raacayo amarka, waxaan ku soo laaban doonaa mawduucan wax yar ka dib;
  3. Waxaan abuurnaa maamulayaal, i.. Waxaan ku xidhxidhnaa qaar ka mid ah falalka isticmaalaha hababka lagu abuuray tallaabadii hore. Asal ahaan, maamule waa kiciye, dhacdo u yeerta qaar ka mid ah shaqada bot. Tusaalahayaga, kicinta noocan oo kale ah ayaa diraya amar /hi, waxaana fuliya kooxda hi_hendler <- CommandHandler('hi', say_hello). Doodda shaqada koowaad CommandHandler() waxay kuu ogolaanaysaa inaad sheegto amar, xaaladdeena hi, kaas oo botku ka jawaabi doono. Doodda labaad waxay kuu ogolaaneysaa inaad qeexdo habka bot, waxaan wici doonaa habka say_hello, kaas oo la fulin doono haddii isticmaaluhu u yeero amarka lagu qeexay doodda koowaad;
  4. Marka xigta, waxaan ku darnaa maamulaha la abuuray soo diriyaha tusaalaha fasalkayaga Updater. Waxaad ku dari kartaa maamuleyaal dhowr siyaabood; Tusaalaha kore, waxaan isticmaalay midka ugu fudud, anigoo isticmaalaya calaamadda +, i.e. updater <- updater + hi_hendler. Isla sidaas oo kale ayaa la samayn karaa iyadoo la adeegsanayo habka add_handler(), kaas oo ka tirsan fasalka Dispatcher, waxaad ka heli kartaa habkan sidan: updater$dispatcher$add_handler();
  5. Bilow bot-ka adoo isticmaalaya amarka start_polling().

Farsamaynta qoraalka iyo filtarrada

Waxaan ogaanay sida loogu diro amarrada bot, laakiin mararka qaarkood waxaan u baahanahay bot si aan uga jawaabno kaliya amarrada, laakiin sidoo kale qaar ka mid ah fariimaha qoraalka caadiga ah. Si aad tan u samayso waxaad u baahan tahay inaad adeegsato maamulayaasha fariimaha - MessageHandler.

caadiga ah MessageHandler wuxuu ka jawaabi doonaa gabi ahaanba dhammaan fariimaha soo socda. Sidaa darteed, hagayaasha fariinta ayaa inta badan lala isticmaalaa filtarrada. Aan barno bot-ka inuu dhaho hello ma aha oo kaliya amarka /hi, laakiin sidoo kale mar kasta oo mid ka mid ah ereyadan soo socda ay ka soo baxaan farriinta loo diray bot: hello, hello, salute, hai, bonjour.

Hadda ma qori doono habab cusub, sababtoo ah... Waxaan horeyba u haysanay hab uu botku nagu salaamo. Waxa kaliya ee aan u baahanahay inaan sameyno waa abuurista shaandhada loo baahan yahay iyo maamulaha fariinta.

Xeerka 2: Ku dar maamulaha fariinta qoraalka iyo shaandheynta

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

Orod tusaalaha koodka sare, ka dib markii aad ku bedesho 'BOT TOKENKA' calaamada dhabta ah ee aad heshay markii aad samaynaysay bot-ka BotAabbe (Waxaan ka hadlay abuurista bot maqaalka koowaad).

Hadda aan isku dayno inaan dirno bot-ka dhowr fariimo oo ay ku jiraan ereyada salaanta ee hore loo taxay:
Qorista bot telegram ee R (qaybta 2): Ku darida taageerada amarka iyo filtarrada fariinta bot-ka

Markaa, ugu horreyntii, waxaan barnay bot-ka ma aha oo kaliya in la salaamo, laakiin in uu ka jawaabo salaan. Waxaan samaynay tan anagoo adeegsanayna doodda uga jawaab_fariinta_id, kaas oo lagu heli karo habka sendMessage(), kaas oo aad u baahan tahay inaad ku wareejiso aqoonsiga fariinta aad rabto inaad uga jawaabto. Waxaad heli kartaa id fariinta sida tan: update$message$message_id.

Laakiin waxa ugu muhiimsan ee aan sameynay waxay ahayd inaan ku darno shaandhada bot-ka iyadoo la adeegsanayo shaqada BaseFilter():

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

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

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

)

Sida laga yaabo inaad dareentay, filtarrada ayaa loo baahan yahay in lagu daro shayga Filters Message, kaas oo markii horeba ka kooban shaandhooyin yar oo diyaarsan. Tusaalahayaga, ilaa shayga Filters Message waxaan ku darnay curiye hi, kani waa filtar cusub.

Si aad u shaqeyso BaseFilter() waxaad u baahan tahay inaad ka gudubto shaqada shaandhada. Asal ahaan, filtarku waa uun hawl hesha tusaale farriin ah oo soo noqda RUN ama BEEN. Tusaalahayaga, waxaan ku qornay hawl fudud, iyadoo la adeegsanayo shaqada aasaasiga ah grepl() hubi qoraalka fariinta iyo haddii ay u dhigma odhaahda caadiga ah привет|здравствуй|салют|хай|бонжур soo noqda RUN.

Marka xigta waxaan abuurnaa maamule fariinta hi_txt_hnd <- MessageHandler(say_hello, filters = MessageFilters$hi). Doodda shaqada koowaad MessageHandler() waa habka loogu yeeri doono maamulaha, doodda labaadna waa shaandhada loogu yeeri doono. Xaaladeena, tani waa filtarka aan abuurnay MessageFilters$hi.

Hagaag, dhamaadka, waxaan ku darnaa soo diraha maamulaha la abuuray hi_txt_hnd.

updater <- updater + 
             hi_hendler +
             hi_txt_hnd

Sida aan kor ku qoray, xirmada telegram.bot iyo shay Filters Message Waxaa hore u jiray shaandhooyin gudaha ku dhex jira oo aad isticmaali karto:

  • dhammaan - Dhammaan fariimaha
  • qoraal - fariimaha qoraalka ah
  • amar - Amarro, i.e. fariimaha ku bilaabma /
  • jawaab - Farriimo jawaab u ah fariin kale
  • maqal - Farriimo ka kooban faylal maqal ah
  • dukumeenti - Farriimo leh dukumeenti la diray
  • sawir - Farriimo leh sawirro la soo diray
  • sticker - Farriimaha dhejiska la soo diray
  • muuqaal - Farriimo leh muuqaal
  • codka - fariimaha codka
  • xiriirka - Farriimaha ka kooban nuxurka telegram ee isticmaalaha
  • goobta - Fariimaha leh geolocation
  • goobta - fariimaha la gudbiyay
  • ciyaarta - Ciyaaraha

Haddii aad rabto inaad ku darto filtarrada qaar hal maamule kaliya isticmaal calaamadda | - sida macquul ah Ama, oo saxiix & sida macquulka ah И. Tusaale ahaan, haddii aad rabto in botku u waco isla habka marka uu helo muuqaal, muuqaal ama dukumeenti, isticmaal tusaalaha soo socda si aad u abuurto maamule fariin:

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

Ku-darka amarada leh Parameters

Waxaan horey u ognahay amarrada ay yihiin, sida loo abuuro, iyo sida loogu qasbo bot inuu fuliyo amarka la rabo. Laakiin xaaladaha qaarkood, marka lagu daro magaca amarka, waxaan u baahanahay inaan gudbino xoogaa xog ah si aan u fulino.

Hoos waxaa ku yaal tusaale bot ah, oo la siiyay taariikh iyo waddan, dib kuugu soo celiya nooca maalinta ee jadwalka wax soo saarka.

Botka hoose wuxuu isticmaalaa API kalandarka wax soo saarka isdayoff.ru.

Xeerka 3: Bot kaas oo ka warbixinaya taariikhda iyo dalka

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

Orod tusaalaha koodka sare, ka dib markii aad ku bedesho 'BOT TOKENKA' calaamada dhabta ah ee aad heshay markii aad samaynaysay bot-ka BotAabbe (Waxaan ka hadlay abuurista bot maqaalka koowaad).

Waxaan abuurnay bot kaas oo leh hal hab oo kaliya oo ku jira arsenalkiisa check_date, Habkan waxaa loogu yeeraa amarka isla magaca.

Laakiin, marka lagu daro magaca amarka, habkani wuxuu kaa rabaa inaad geliso laba qaybood, lambarka waddanka iyo taariikhda. Marka xigta, bot-ku wuxuu hubiyaa in maalinta la siiyay waddanka la cayimay ay tahay sabtida axada, maalin la soo gaabiyo, ama maalin shaqo iyadoo loo eegayo jadwalka wax soo saarka ee rasmiga ah.

Si habka aan u abuurno si aan u aqbalno xaddidaadyo dheeraad ah oo ay weheliso amarka, isticmaal doodda pass_args = TRUE shaqaynaysa CommandHandler(), iyo marka la abuurayo hab, marka lagu daro doodaha loo baahan yahay robot, update samee mid ikhtiyaari ah - qaanso. Habka loo sameeyay habkan ayaa aqbali doona xuduudaha aad u gudbiso bot ka dib magaca amarka. Halbeegyada waa in lagu kala saaraa meel bannaan, waxaana loo diri doonaa habka qaab qoraal ahaan.

Aan bilowno oo tijaabino bot-keena.

Qorista bot telegram ee R (qaybta 2): Ku darida taageerada amarka iyo filtarrada fariinta bot-ka

Ku orod bot-ka gadaal

Talaabada ugu dambeysa ee aan u baahanahay si aan u dhamaystirno waa in aan ku bilowno bot-ka gadaasha.

Si tan loo sameeyo, raac algorithm ee hoos lagu sharraxay:

  1. Ku keydi koodhka bot-ka fayl wata kordhinta R. Markaad ka shaqaynayso RStudio, tan waxa lagu sameeyaa menu-ka file, kooxda Kaydi Sida ....
  2. Ku dar dariiqa galka qashinka, kaas oo isna ku yaal galka aad ku rakibtay luqadda R, doorsoomiyaha Waddada, tilmaamaha halkan.
  3. Samee faylka qoraalka caadiga ah kaas oo ku qora 1 sadar: R CMD BATCH C:UsersAlseyDocumentsmy_bot.R... Halkii C: UsersAlseyDocumentsmy_bot.R u qor jidka loo maro qoraalkaaga bot. Isla mar ahaantaana, waxaa muhiim ah in aysan jirin jilayaasha Cyrillic ama meelo bannaan oo jidka ah, sababtoo ah tani waxay sababi kartaa dhibaatooyin marka la wado bot-ka. Badbaadi, oo ku beddel kordhinteeda txt on fiidmeerta.
  4. Fur Jadwalka Hawlaha Windows, waxaa jira siyaabo badan oo tan loo sameeyo, tusaale ahaan, fur gal kasta oo geli ciwaanka %windir%system32taskschd.msc /s. Hababka kale ee furitaanka ayaa la heli karaa halkan.
  5. Liiska sare ee midig ee jadwaleeyaha, dhagsii "Create task...".
  6. Tabka "Guud", sii hawshaada magac gaar ah, oo beddelka u beddel gobolka "Run for all users".
  7. Tag tab "Actions", guji "Create". Goobta "Barnaamijka ama qoraalka", dhagsii "Browse", ka hel midka lagu sameeyay tallaabada labaad fiidmeerta faylka oo guji OK.
  8. Guji OK oo, haddii loo baahdo, geli erayga sirta ah ee koontada nidaamka hawlgalka.
  9. Ka hel hawsha la abuuray ee jadwalaha, dooro oo guji badhanka "Run" ee ku yaal geeska midig ee hoose.

Botgeena wuxuu ku shaqeeyaa gadaal wuxuuna shaqeyn doonaa ilaa aad joojiso hawsha, ama aad damiso PC-gaaga ama server-kaaga kaas oo lagu bilaabay.

gunaanad

Maqaalkan, waxaan ogaanay sida loo qoro bot buuxa oo aan kaliya diri karin fariimaha, laakiin sidoo kale ka jawaabi kara farriimaha soo socda iyo amarrada. Aqoonta aad heshay ayaa durba ku filan inay xalliso inta badan dhibaatooyinkaaga.

Maqaalka soo socda ayaa ka hadli doona sida loogu daro kiiboodhka bot-ka si loo helo shaqo ku habboon.

Subscribe ii telegram и youtube kanaalada.

Source: www.habr.com

Add a comment