Rubutun bot na telegram a cikin R (sashe na 2): Ƙara tallafin umarni da matattarar saƙo zuwa bot

В bugu na baya mun gano yadda za a ƙirƙira bot, fara misali na ajin Bot kuma ya saba da hanyoyin aika sakonni ta amfani da shi.

A cikin wannan labarin na ci gaba da wannan batu, don haka ina ba da shawarar fara karanta wannan labarin kawai bayan karantawa bangare na farko.

A wannan karon za mu gano yadda za mu rayar da bot ɗin mu kuma mu ƙara tallafin umarni zuwa gare shi, da kuma saba da ajin. Updater.

A lokacin tafiyar labarin, za mu rubuta bots masu sauƙi da yawa, na ƙarshe zai, bisa ga kwanan wata da lambar ƙasa, ƙayyade ko rana a cikin ƙasar da aka ba ta karshen mako ne ko ranar aiki bisa ga kalandar samarwa. Amma, kamar yadda yake a baya, manufar labarin ita ce fahimtar da ku tare da ƙirar kunshin telegram.bot don magance matsalolin ku.

Rubutun bot na telegram a cikin R (sashe na 2): Ƙara tallafin umarni da matattarar saƙo zuwa bot

Duk labarai daga jerin "Rubutun bot a cikin R"

  1. Muna ƙirƙirar bot kuma muna amfani da shi don aika saƙonni a cikin telegram
  2. Ƙara tallafin umarni da tacewa saƙo zuwa bot

Abubuwa

Idan kuna sha'awar nazarin bayanai, kuna iya sha'awar nawa telegram и youtube tashoshi. Yawancin abun ciki an sadaukar da shi ga yaren R.

  1. Darasi na sabuntawa
  2. Masu kulawa - masu kulawa
  3. Ƙara umarni na farko zuwa bot, mai sarrafa umarni
  4. Mai sarrafa saƙon rubutu da tacewa
  5. Ƙara Umarni tare da Ma'auni
  6. Guda bot a bango
  7. ƙarshe

Darasi na sabuntawa

Updater aji ne wanda ke sauƙaƙa muku haɓaka bot ɗin telegram, kuma yana amfani da ajin a ƙarƙashin hular Dispetcher. Aikin aji Updater shine karɓar sabuntawa daga bot (a cikin labarin da ya gabata mun yi amfani da hanyar don wannan dalili getUpdates()), da kuma tura su gaba zuwa Dispetcher.

Bi da bi Dispetcher ya ƙunshi ma'aikatan da kuka ƙirƙira, watau. abubuwa aji Handler.

Masu kulawa - masu kulawa

Tare da masu sarrafa ka ƙara zuwa Dispetcher halayen bot zuwa abubuwa daban-daban. A lokacin rubuta wannan labarin a telegram.bot An kara nau'ikan masu sarrafa masu zuwa:

  • MessageHandler - Mai sarrafa saƙo
  • CommandHandler - Mai sarrafa umarni
  • CallbackQueryHandler - Mai sarrafa bayanai don maballin madannai da aka aiko daga Layi
  • KuskureHandler - Kuskure mai kula da lokacin neman sabuntawa daga bot

Ƙara umarni na farko zuwa bot, mai sarrafa umarni

Idan baku taɓa amfani da bots ba kuma ba ku san menene umarni ba, to dole ne a aika umarni zuwa bot ta amfani da slash na gaba. / a matsayin prefix.

Za mu fara da umarni masu sauƙi, watau. mu koya wa bot mu ce sannu a kan umarni /hi.

Lambar 1: Koyar da bot don yin gaisuwa

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

Gudanar da misalin lambar da ke sama, bayan maye gurbin 'BOT TOKEN' tare da ainihin alamar da kuka karɓa lokacin ƙirƙirar bot ta hanyar. BotFaye (Na yi magana game da ƙirƙirar bot a ciki labarin farko).

Hanyar start_polling() aji Updater, wanda aka yi amfani da shi a ƙarshen lambar, yana fara madaidaicin madaidaicin buƙatun da sarrafa sabuntawa daga bot.

Yanzu bari mu buɗe Telegram kuma mu rubuta umarni na farko zuwa bot ɗin mu /hi.

Rubutun bot na telegram a cikin R (sashe na 2): Ƙara tallafin umarni da matattarar saƙo zuwa bot

Yanzu bot ɗinmu ya fahimci umarnin /hi, kuma ya san yadda ake gaishe mu.

A cikin tsari, ana iya kwatanta tsarin gina irin wannan bot mai sauƙi kamar haka.

Rubutun bot na telegram a cikin R (sashe na 2): Ƙara tallafin umarni da matattarar saƙo zuwa bot

  1. Ƙirƙiri misali na ajin Updater;
  2. Muna ƙirƙirar hanyoyi, watau. ayyukan da bot ɗinmu zai yi. A cikin misalin lambar wannan aiki ne say_hello(). Ayyukan da za ku yi amfani da su azaman hanyoyin bot dole ne su sami dalilai guda biyu da ake buƙata - bot и update, kuma daya tilas - args. Hujja bot, wannan shine bot ɗin ku, tare da taimakonsa zaku iya ba da amsa ga saƙonni, aika saƙonni, ko amfani da duk wasu hanyoyin da ake samu ga bot. Hujja update wannan shine abin da bot ya karɓa daga mai amfani, a gaskiya, abin da muka karɓa a cikin labarin farko ta amfani da hanyar getUpdates(). Hujja args yana ba ku damar aiwatar da ƙarin bayanan da mai amfani ya aiko tare da umarnin, za mu dawo kan wannan batu kaɗan daga baya;
  3. Muna ƙirƙirar masu aiki, watau. Muna danganta wasu ayyukan mai amfani da hanyoyin da aka ƙirƙira a matakin baya. Mahimmanci, mai kulawa shine faɗakarwa, lamarin da ke kiran wasu aikin bot. A cikin misalinmu, irin wannan abin faɗakarwa shine aika umarni /hi, kuma ƙungiyar ta aiwatar da shi hi_hendler <- CommandHandler('hi', say_hello). Hujjar aikin farko CommandHandler() yana ba ku damar ƙayyade umarni, a cikin yanayinmu hi, wanda bot zai amsa. Hujja ta biyu ta ba ka damar ƙayyade hanyar bot, za mu kira hanyar say_hello, wanda za a kashe idan mai amfani ya kira umarnin da aka ƙayyade a cikin hujja ta farko;
  4. Bayan haka, muna ƙara mai sarrafa ƙirƙira zuwa mai aika misalin ajin mu Updater. Kuna iya ƙara masu sarrafawa ta hanyoyi da yawa; a cikin misalin da ke sama, na yi amfani da mafi sauƙi, ta amfani da alamar +, i.e. updater <- updater + hi_hendler. Hakanan za'a iya yin amfani da hanyar add_handler(), wanda ke cikin aji Dispatcher, zaku iya samun wannan hanyar kamar haka: updater$dispatcher$add_handler();
  5. Kaddamar da bot ta amfani da umarnin start_polling().

Mai sarrafa saƙon rubutu da tacewa

Mun gano yadda ake aika umarni zuwa bot, amma wani lokacin muna buƙatar bot don amsa ba kawai ga umarni ba, har ma da wasu saƙonnin rubutu na yau da kullun. Don yin wannan kuna buƙatar amfani da masu sarrafa saƙo - MessageHandler.

talakawa MessageHandler zai amsa dukkan sakonni masu shigowa gaba daya. Don haka, ana yawan amfani da masu sarrafa saƙo tare da masu tacewa. Bari mu koya wa bot don cewa sannu ba bisa umarni kawai ba /hi, amma kuma duk lokacin da ɗaya daga cikin waɗannan kalmomi suka bayyana a cikin sakon da aka aika zuwa ga bot: hello, hello, gaisuwa, hai, bonjour.

A yanzu ba za mu rubuta wata sabuwar hanya ba, saboda ... Mun riga mun sami hanyar da bot ɗin ke gaishe mu. Duk abin da muke buƙatar yi shine ƙirƙirar tacewa da mai sarrafa saƙon da ake buƙata.

Lambar 2: Ƙara mai sarrafa saƙon rubutu kuma tace

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

Gudanar da misalin lambar da ke sama, bayan maye gurbin 'BOT TOKEN' tare da ainihin alamar da kuka karɓa lokacin ƙirƙirar bot ta hanyar. BotFaye (Na yi magana game da ƙirƙirar bot a ciki labarin farko).

Yanzu bari mu yi ƙoƙarin aika bot ɗin saƙonni da yawa masu ɗauke da kalmomin gaisuwa da aka jera a baya:
Rubutun bot na telegram a cikin R (sashe na 2): Ƙara tallafin umarni da matattarar saƙo zuwa bot

Don haka, da farko, mun koya wa bot ba kawai don yin gaisuwa ba, amma don amsa gaisuwa. Mun yi wannan ta amfani da hujja amsa_ga_sakon_id, wanda ke samuwa a cikin hanyar sendMessage(), wanda kake buƙatar canja wurin id na saƙon da kake son amsawa. Kuna iya samun saƙon id kamar haka: update$message$message_id.

Amma babban abin da muka yi shi ne ƙara tacewa zuwa bot ta amfani da aikin BaseFilter():

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

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

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

)

Kamar yadda ƙila kuka lura, ana buƙatar ƙara tacewa a cikin abun Matatun saƙo, wanda da farko ya ƙunshi ƙaramin saitin abubuwan tacewa. A cikin misalinmu, ga abu Matatun saƙo mun kara wani kashi hi, wannan sabon tace.

Don aiki BaseFilter() kana buƙatar wuce aikin tacewa. Ainihin, tacewa aiki ne kawai wanda ke karɓar misalin saƙo yana dawowa GASKIYA ko KARYA. A cikin misalinmu, mun rubuta aiki mai sauƙi wanda, ta amfani da aikin asali grepl() yana duba saƙon saƙon kuma idan ya dace da maganganun yau da kullun привет|здравствуй|салют|хай|бонжур ya dawo GASKIYA.

Na gaba za mu ƙirƙiri mai sarrafa saƙo hi_txt_hnd <- MessageHandler(say_hello, filters = MessageFilters$hi). Hujjar aikin farko MessageHandler() ita ce hanyar da za ta kira mai sarrafa, kuma hujja ta biyu ita ce tacewa da za a kira shi. A wajenmu, wannan ita ce tacewa da muka kirkira MessageFilters$hi.

To, a ƙarshe, muna ƙara zuwa mai aikawa da mai sarrafa da aka halicce hi_txt_hnd.

updater <- updater + 
             hi_hendler +
             hi_txt_hnd

Kamar yadda na rubuta a sama, a cikin kunshin telegram.bot da abu Matatun saƙo An riga an sami saitin abubuwan tacewa waɗanda za ku iya amfani da su:

  • duk - Duk saƙonni
  • rubutu - Saƙonnin rubutu
  • umarni - Umarni, i.e. sakonnin da suka fara da /
  • amsa - Saƙonni masu amsawa ga wani saƙo
  • audio - Saƙonnin da ke ɗauke da fayil mai jiwuwa
  • daftarin aiki - Saƙonni tare da daftarin aiki da aka aika
  • hoto - Saƙonni tare da hotunan da aka aiko
  • sitika - Saƙonni tare da siti da aka aiko
  • bidiyo - Saƙonni tare da bidiyo
  • murya - Saƙonnin murya
  • lamba - Saƙonni dauke da abun ciki na telegram na mai amfani
  • wuri - Saƙonni tare da yanayin ƙasa
  • wurin - Saƙonnin da aka tura
  • game - Wasanni

Idan kana son haɗa wasu matattara a cikin mai kulawa ɗaya kawai yi amfani da alamar | - a matsayin ma'ana OR, da alama & a matsayin ma'ana И. Misali, idan kuna son bot ya kira hanya iri ɗaya lokacin da ya karɓi bidiyo, hoto ko takarda, yi amfani da misalin mai zuwa don ƙirƙirar mai sarrafa saƙo:

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

Ƙara Umarni tare da Ma'auni

Mun riga mun san menene umarni, yadda ake ƙirƙirar su, da yadda ake tilasta bot don aiwatar da umarnin da ake so. Amma a wasu lokuta, ban da sunan umarni, muna buƙatar wuce wasu bayanai don aiwatar da su.

A ƙasa akwai misalin bot wanda, da aka ba da kwanan wata da ƙasa, yana dawo muku da nau'in rana daga kalandar samarwa.

Bot ɗin da ke ƙasa yana amfani da API ɗin samarwa isdayoff.ru.

Lambar 3: Bot wanda ke ba da rahoto ta kwanan wata da ƙasa

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

Gudanar da misalin lambar da ke sama, bayan maye gurbin 'BOT TOKEN' tare da ainihin alamar da kuka karɓa lokacin ƙirƙirar bot ta hanyar. BotFaye (Na yi magana game da ƙirƙirar bot a ciki labarin farko).

Mun ƙirƙiri bot wanda ke da hanya ɗaya kawai a cikin arsenal check_date, ana kiran wannan hanyar ta umarnin sunan guda.

Amma, ban da sunan umarni, wannan hanyar tana buƙatar shigar da sigogi biyu, lambar ƙasa da kwanan wata. Bayan haka, bot ɗin yana bincika ko ranar da aka bayar a cikin ƙayyadaddun ƙasar shine karshen mako, gajarta rana, ko ranar aiki bisa ga kalandar samarwa na hukuma.

Domin hanyar da muke ƙirƙira don karɓar ƙarin sigogi tare da umarnin, yi amfani da hujja pass_args = TRUE cikin aiki CommandHandler(), da kuma lokacin ƙirƙirar hanya, ban da hujjojin da ake buƙata bot, update ƙirƙirar na zaɓi - args. Hanyar da aka ƙirƙira ta wannan hanyar za ta karɓi sigogin da kuka wuce zuwa bot bayan sunan umarni. Dole ne a raba sigogi da sarari; za a aika su zuwa hanyar azaman vector rubutu.

Bari mu ƙaddamar da gwada bot ɗin mu.

Rubutun bot na telegram a cikin R (sashe na 2): Ƙara tallafin umarni da matattarar saƙo zuwa bot

Guda bot a bango

Mataki na ƙarshe da muke buƙatar kammala shine ƙaddamar da bot a bango.

Don yin wannan, bi algorithm da aka bayyana a ƙasa:

  1. Ajiye lambar bot zuwa fayil tare da tsawo R. Lokacin aiki a cikin RStudio, ana yin wannan ta menu. fayil, tawaga Ajiye Kamar….
  2. Ƙara hanyar zuwa babban fayil ɗin bin, wanda kuma yana cikin babban fayil ɗin da kuka shigar da harshen R, zuwa madaidaicin hanyar, umarnin. a nan.
  3. Ƙirƙiri fayil ɗin rubutu na yau da kullun wanda a ciki ya rubuta layi 1: R CMD BATCH C:UsersAlseyDocumentsmy_bot.R... Madadin haka C: Masu amfaniAlseyDocumentsmy_bot.R rubuta hanyar zuwa rubutun bot ɗin ku. A lokaci guda, yana da mahimmanci cewa babu haruffan Cyrillic ko sarari a hanya, saboda wannan na iya haifar da matsala yayin gudanar da bot. Ajiye shi, kuma maye gurbin kari da shi txt a kan jemage.
  4. Bude Windows Task Scheduler, akwai hanyoyi da yawa don yin hakan, misali, buɗe kowane babban fayil kuma shigar da adireshin %windir%system32taskschd.msc /s. Ana iya samun wasu hanyoyin ƙaddamarwa a nan.
  5. A cikin menu na sama na dama na mai tsarawa, danna "Ƙirƙiri ɗawainiya...".
  6. A shafin "Gabaɗaya", ba aikinku suna na al'ada, kuma canza canjin zuwa yanayin "Run don duk masu amfani".
  7. Je zuwa shafin "Ayyuka", danna "Create". A cikin filin "Shirye-shiryen ko rubutun", danna "Browse", nemo wanda aka kirkira a mataki na biyu jemage fayil kuma danna Ok.
  8. Danna Ok kuma, idan ya cancanta, shigar da kalmar sirri don asusun tsarin aiki.
  9. Nemo aikin da aka ƙirƙira a cikin mai tsarawa, zaɓi shi kuma danna maɓallin "Run" a cikin ƙananan kusurwar dama.

Bot ɗin mu yana gudana a bango kuma zai yi aiki har sai kun dakatar da aikin, ko kashe PC ko uwar garken ku da aka ƙaddamar da shi.

ƙarshe

A cikin wannan labarin, mun gano yadda ake rubuta cikakken bot wanda ba zai iya aika saƙonni kawai ba, har ma da amsa saƙonnin da ke shigowa da umarni. Ilimin da aka samu ya riga ya isa ya magance yawancin matsalolin ku.

Labari na gaba zai yi magana game da yadda ake ƙara madanni zuwa bot don ƙarin aiki mai dacewa.

Biyan kuɗi zuwa nawa telegram и youtube tashoshi.

source: www.habr.com

Add a comment