A’ sgrìobhadh bot teileagram ann an R (pàirt 2): A’ cur taic àithne agus sìoltachain teachdaireachd ris a’ bhot

В fhoillseachadh roimhe dh'obraich sinn a-mach mar a chruthaicheas sinn bot, thòisich sinn air eisimpleir den chlas Bot agus dh'fhàs e eòlach air na dòighean air teachdaireachdan a chuir ga chleachdadh.

Anns an artaigil seo tha mi a 'leantainn air a' chuspair seo, agus mar sin tha mi a 'moladh tòiseachadh air an artaigil seo a leughadh dìreach às deidh a leughadh a ’chiad phàirt.

An turas seo obraichidh sinn a-mach mar as urrainn dhuinn ar bot ath-bheothachadh agus taic àithne a chuir ris, agus cuideachd eòlas fhaighinn air a’ chlas Updater.

Rè an artaigil, sgrìobhaidh sinn grunn bhotan sìmplidh, bidh an tè mu dheireadh, stèidhichte air ceann-latha sònraichte agus còd dùthcha, a ’dearbhadh an e deireadh-seachdain no latha obrach a th’ ann an latha ann an dùthaich sònraichte a rèir a ’mhìosachain riochdachaidh. Ach, mar roimhe, is e adhbhar an artaigil eòlas a thoirt dhut air eadar-aghaidh a’ phacaid telegram.bot gus na duilgheadasan agad fhèin fhuasgladh.

A’ sgrìobhadh bot teileagram ann an R (pàirt 2): A’ cur taic àithne agus sìoltachain teachdaireachd ris a’ bhot

A h-uile artaigil bhon t-sreath "A 'sgrìobhadh teileagram bot ann an R"

  1. Bidh sinn a’ cruthachadh bot agus ga chleachdadh gus teachdaireachdan a chuir ann an teileagram
  2. Cuir taic àithne agus sìoltachain teachdaireachd ris a’ bot

Clàr-innse

Ma tha ùidh agad ann am mion-sgrùdadh dàta, is dòcha gu bheil ùidh agad ann an mo telegram и youtube seanailean. Tha a’ mhòr-chuid den t-susbaint coisrigte don chànan R.

  1. Clas luchdadh a-nuas
  2. Luchd-làimhseachaidh - luchd-làimhseachaidh
  3. Cuir a’ chiad àithne ris a’ bot, inneal-làimhseachaidh àithne
  4. Pròiseasar teachdaireachd teacsa agus sìoltachain
  5. A’ cur Òrdughan le Paramadairean ris
  6. Ruith am bot air a’ chùl
  7. co-dhùnadh

Clas luchdadh a-nuas

Updater na chlas a tha ga dhèanamh nas fhasa dhut bot teileagram a leasachadh, agus a chleachdas a’ chlas fon chochall Dispetcher. Sònrachadh clas Updater airson ùrachaidhean fhaighinn bhon bot (san artaigil roimhe chleachd sinn am modh airson an adhbhair seo getUpdates()), agus cuir thairis iad gu Dispetcher.

Agus an uair sin Dispetcher anns a bheil an luchd-làimhseachaidh a chruthaich thu, i.e. stuthan clas Handler.

Luchd-làimhseachaidh - luchd-làimhseachaidh

Le luchd-làimhseachaidh a chuireas tu ris Dispetcher ath-bheachdan bot gu diofar thachartasan. Aig àm sgrìobhaidh an artaigil seo a-steach telegram.bot Chaidh na seòrsaichean làimhseachaidh a leanas a chur ris:

  • MessageHandler - Làimhseachadh teachdaireachd
  • CommandHandler - Neach-làimhseachaidh àithne
  • CallbackQueryHandler - Làimhseachadh dàta airson meur-chlàran air an cur bho Inline
  • ErrorHandler - Làimhseachadh mearachd nuair a dh’ iarras tu ùrachaidhean bhon bot

Cuir a’ chiad àithne ris a’ bot, inneal-làimhseachaidh àithne

Mura h-eil thu air botaichean a chleachdadh a-riamh roimhe agus nach eil fios agad dè a th’ ann an àithne, feumar òrdughan chun bot a chuir a-steach a’ cleachdadh slash air adhart / mar ro-leasachan.

Tòisichidh sinn le òrdughan sìmplidh, i.e. ionnsaichidh sinn ar bot a ràdh hello air àithne /hi.

Còd 1: A 'teagasg a' bhot gus a ràdh 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()

Ruith an eisimpleir còd gu h-àrd, às deidh dhut an fhìor chomharran a fhuair thu nuair a chruthaich thu am bot a chuir an àite ‘YOUR BOT TOKEN’ Bot-Athair (Bhruidhinn mi mu bhith a’ cruthachadh bot a-staigh chiad artaigil).

Modh start_polling() clas Updater, a tha air a chleachdadh aig deireadh a’ chòd, a’ tòiseachadh lùb gun chrìoch de bhith ag iarraidh agus a’ giullachd ùrachaidhean bhon bot.

A-nis fosgail Telegram agus sgrìobh a’ chiad àithne chun bot againn /hi.

A’ sgrìobhadh bot teileagram ann an R (pàirt 2): A’ cur taic àithne agus sìoltachain teachdaireachd ris a’ bhot

A-nis tha am bot againn a’ tuigsinn an àithne /hi, agus tha fios aige mar a chuireas e fàilte oirnn.

Gu sgeamaigeach, faodar pròiseas togail bot cho sìmplidh a nochdadh mar a leanas.

A’ sgrìobhadh bot teileagram ann an R (pàirt 2): A’ cur taic àithne agus sìoltachain teachdaireachd ris a’ bhot

  1. Cruthaich eisimpleir den chlas Updater;
  2. Bidh sinn a’ cruthachadh dhòighean, i.e. gnìomhan a choileanas ar bot. Anns an eisimpleir còd tha seo na ghnìomh say_hello(). Feumaidh dà argamaid riatanach a bhith aig na gnìomhan a chleachdas tu mar dhòighean bot - bot и -ùrachadh, agus aon roghainn - argan. Argumaid bot, seo am bot agad, le a chuideachadh faodaidh tu teachdaireachdan a fhreagairt, teachdaireachdan a chuir, no dòighean sam bith eile a tha rim faighinn leis a’ bot a chleachdadh. Argumaid -ùrachadh is e seo a fhuair am bot bhon neach-cleachdaidh, gu dearbh, na fhuair sinn anns a ’chiad artaigil a’ cleachdadh an dòigh getUpdates(). Argumaid argan leigeil leat dàta a bharrachd a chuir an neach-cleachdaidh a-steach còmhla ris an àithne, tillidh sinn chun chuspair seo beagan nas fhaide air adhart;
  3. Bidh sinn a’ cruthachadh luchd-làimhseachaidh, i.e. Bidh sinn a 'ceangal cuid de ghnìomhan luchd-cleachdaidh leis na dòighean a chaidh a chruthachadh aig a' cheum roimhe. Gu bunaiteach, tha inneal-làimhseachaidh na bhrosnachadh, tachartas a dh ’ainmicheas gnìomh bot air choireigin. Anns an eisimpleir againn, tha inneal-brosnachaidh mar sin a’ cur àithne /hi, agus tha e air a bhuileachadh leis an sgioba hi_hendler <- CommandHandler('hi', say_hello). A 'chiad argamaid gnìomh CommandHandler() a’ leigeil leat àithne a shònrachadh, nar cùis hi, ris am freagair am bot. Leigidh an dàrna argamaid dhut an dòigh bot a shònrachadh, canaidh sinn am modh say_hello, a thèid a chur gu bàs ma ghairm an cleachdaiche an àithne a chaidh a shònrachadh sa chiad argamaid;
  4. An ath rud, cuiridh sinn an inneal-làimhseachaidh cruthaichte ris an neach-cuairteachaidh den eisimpleir clas againn Updater. Faodaidh tu luchd-làimhseachaidh a chuir ris ann an grunn dhòighean; san eisimpleir gu h-àrd, chleachd mi am fear as sìmplidh, a’ cleachdadh an t-soidhne +i.e. updater <- updater + hi_hendler. Faodar an aon rud a dhèanamh a 'cleachdadh an dòigh-obrach add_handler(), a bhuineas don chlas Dispatcher, gheibh thu an dòigh seo mar seo: updater$dispatcher$add_handler();
  5. Cuir air bhog am bot a 'cleachdadh an àithne start_polling().

Pròiseasar teachdaireachd teacsa agus sìoltachain

Dh'obraich sinn a-mach mar a chuireas sinn òrdughan chun bot, ach uaireannan feumaidh sinn am bot gus freagairt chan ann a-mhàin ri òrdughan, ach cuideachd ri cuid de theachdaireachdan teacsa àbhaisteach. Gus seo a dhèanamh feumaidh tu luchd-làimhseachaidh teachdaireachd a chleachdadh - Fear-làimhseachaidh Teachdaireachd.

àbhaisteach Fear-làimhseachaidh Teachdaireachd freagraidh e gu tur a h-uile teachdaireachd a thig a-steach. Mar sin, bidh luchd-làimhseachaidh teachdaireachd gu tric air an cleachdadh còmhla ri sìoltachain. Ionnsaichidh sinn am bot a bhith ag ràdh hello chan ann a-mhàin air àithne /hi, ach cuideachd nuair a nochdas aon de na faclan a leanas anns an teachdaireachd a chaidh a chuir chun bot: hello, hello, salute, hai, bonjour.

Airson a-nis cha sgrìobh sinn dòighean ùra sam bith, oir ... Tha dòigh againn mu thràth leis am bi am bot a’ cur fàilte oirnn. Chan eil againn ach an criathrag agus an inneal-làimhseachaidh teachdaireachd a tha a dhìth a chruthachadh.

Còd 2: Cuir inneal-làimhseachaidh teachdaireachd teacsa agus criathrag ris

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

Ruith an eisimpleir còd gu h-àrd, às deidh dhut an fhìor chomharran a fhuair thu nuair a chruthaich thu am bot a chuir an àite ‘YOUR BOT TOKEN’ Bot-Athair (Bhruidhinn mi mu bhith a’ cruthachadh bot a-staigh chiad artaigil).

A-nis feuchaidh sinn ri grunn theachdaireachdan a chuir chun bot anns a bheil na faclan fàilte a chaidh ainmeachadh roimhe:
A’ sgrìobhadh bot teileagram ann an R (pàirt 2): A’ cur taic àithne agus sìoltachain teachdaireachd ris a’ bhot

Mar sin, an toiseach, theagaisg sinn don bot chan ann a-mhàin a bhith ag ràdh hello, ach gus fàilte a chuir. Rinn sinn seo a’ cleachdadh na h-argamaid freagair_to_message_id, a tha ri fhaighinn sa mhodh sendMessage(), anns am feum thu id na teachdaireachd ris a bheil thu airson freagairt a ghluasad. Gheibh thu id na teachdaireachd mar seo: update$message$message_id.

Ach b’ e am prìomh rud a rinn sinn criathrag a chuir ris a’ bot a’ cleachdadh a’ ghnìomh BaseFilter():

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

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

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

)

Mar is dòcha gu bheil thu air mothachadh, feumar sìoltachain a chuir ris an nì MessageFilters, anns a bheil seata beag de shìoltachain deiseil an toiseach. Anns an eisimpleir againn, don nì MessageFilters chuir sinn eileamaid ris hi, is e criathrag ùr a tha seo.

Gus obrachadh BaseFilter() feumaidh tu a dhol seachad air a’ ghnìomh sìoltachain. Gu bunaiteach, chan eil ann an criathrag ach gnìomh a gheibh eisimpleir teachdaireachd agus a thilleas CEART no CEÀRR. Anns an eisimpleir againn, sgrìobh sinn gnìomh sìmplidh a tha, a 'cleachdadh a' ghnìomh bunaiteach grepl() thoir sùil air teacsa na teachdaireachd agus ma tha e a rèir an abairt àbhaisteach привет|здравствуй|салют|хай|бонжур a' tilleadh CEART.

An uairsin cruthaichidh sinn inneal-làimhseachaidh teachdaireachd hi_txt_hnd <- MessageHandler(say_hello, filters = MessageFilters$hi). A 'chiad argamaid gnìomh MessageHandler() is e an dòigh a chanas an neach-làimhseachaidh, agus is e an dàrna argamaid an criathrag leis an tèid a ghairm. Anns a ’chùis againn, is e seo an sìoltachan a chruthaich sinn MessageFilters$hi.

Uill, aig a’ cheann thall, bidh sinn a’ cur ris an neach-cuairteachaidh an inneal-làimhseachaidh cruthaichte hi_txt_hnd.

updater <- updater + 
             hi_hendler +
             hi_txt_hnd

Mar a sgrìobh mi gu h-àrd, anns a’ phacaid telegram.bot agus nì MessageFilters Tha seata de shìoltachain togte ann mu thràth as urrainn dhut a chleachdadh:

  • uile - A h-uile teachdaireachd
  • teacsa - teachdaireachdan teacsa
  • àithne — àitheantan, i.e. teachdaireachdan a thòisicheas le /
  • freagairt - Teachdaireachdan a tha nam freagairt do theachdaireachd eile
  • claisneachd - Teachdaireachdan anns a bheil faidhle claisneachd
  • sgrìobhainn - Teachdaireachdan le sgrìobhainn a chaidh a chuir
  • dealbh - Teachdaireachdan le dealbhan air an cur
  • stiogair - Teachdaireachdan le stiogair air a chuir
  • bhidio - Teachdaireachdan le bhidio
  • guth - Teachdaireachdan gutha
  • fios - Teachdaireachdan anns a bheil susbaint teileagram an neach-cleachdaidh
  • àite - Teachdaireachdan le geolocation
  • àite - Teachdaireachdan air an cur air adhart
  • geama - Geamannan

Ma tha thu airson cuid de shìoltachain a chur còmhla ann an aon inneal-làimhseachaidh dìreach cleachd an soidhne | - mar loidsigeach NO, agus soidhne & cho loidsigeach И. Mar eisimpleir, ma tha thu airson gun cuir am bot fios air an aon dòigh nuair a gheibh e bhidio, ìomhaigh no sgrìobhainn, cleachd an eisimpleir a leanas gus inneal-làimhseachaidh teachdaireachd a chruthachadh:

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

A’ cur Òrdughan le Paramadairean ris

Tha fios againn mu thràth dè na h-òrdughan a th’ ann, mar a chruthaicheas tu iad, agus mar a bheir sinn air a’ bot an àithne a tha thu ag iarraidh a chuir an gnìomh. Ach ann an cuid de chùisean, a bharrachd air an ainm àithne, feumaidh sinn beagan dàta a thoirt seachad airson a chuir gu bàs.

Gu h-ìosal tha eisimpleir de bhot a bheir, le ceann-latha agus dùthaich ainmichte, an seòrsa latha bhon mhìosachan riochdachaidh dhut.

Bidh am bot gu h-ìosal a’ cleachdadh an API mìosachain riochdachaidh isdayoff.ru.

Còd 3: Bot a tha ag aithris a rèir ceann-latha agus dùthaich

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

Ruith an eisimpleir còd gu h-àrd, às deidh dhut an fhìor chomharran a fhuair thu nuair a chruthaich thu am bot a chuir an àite ‘YOUR BOT TOKEN’ Bot-Athair (Bhruidhinn mi mu bhith a’ cruthachadh bot a-staigh chiad artaigil).

Chruthaich sinn bot aig nach eil ach aon dòigh san arsenal aige check_date, tha am modh seo air a ghairm leis an àithne den aon ainm.

Ach, a bharrachd air an ainm àithne, tha an dòigh seo ag iarraidh gun cuir thu a-steach dà pharamadair, an còd dùthcha agus an ceann-latha. An ath rud, bidh am bot a’ sgrùdadh an e deireadh-seachdain, latha nas giorra, no latha obrach a th’ ann an latha sònraichte san dùthaich ainmichte a rèir a’ mhìosachain riochdachaidh oifigeil.

Airson an dòigh a chruthaicheas sinn gus gabhail ri paramadairean a bharrachd còmhla ris an àithne, cleachd an argamaid pass_args = TRUE ann an gnìomh CommandHandler(), agus nuair a thathar a’ cruthachadh modh, a bharrachd air na h-argamaidean a tha a dhìth bot, -ùrachadh cruthaich fear roghainneil - argan. Gabhaidh an dòigh a chaidh a chruthachadh san dòigh seo ris na paramadairean a thèid thu chun bot às deidh an ainm àithne. Feumaidh na crìochan a bhith air an sgaradh le àite; thèid an cur chun dòigh mar vectar teacsa.

Nach cuir sinn air bhog agus deuchainn ar bot.

A’ sgrìobhadh bot teileagram ann an R (pàirt 2): A’ cur taic àithne agus sìoltachain teachdaireachd ris a’ bhot

Ruith am bot air a’ chùl

Is e an ceum mu dheireadh a dh'fheumas sinn a choileanadh am bot a chuir air bhog air a 'chùl.

Gus seo a dhèanamh, lean an algorithm a tha air a mhìneachadh gu h-ìosal:

  1. Sàbhail an còd bot gu faidhle leis an leudachadh R. Nuair a bhios tu ag obair ann an RStudio, thèid seo a dhèanamh tron ​​​​chlàr File, sgioba Sàbhail Mar ....
  2. Cuir an t-slighe ris a’ phasgan biona, a tha e fhèin suidhichte sa phasgan anns an do chuir thu a-steach an cànan R, gu caochladair Path, stiùireadh an seo.
  3. Cruthaich faidhle teacsa àbhaisteach anns am bi loidhne 1 a’ sgrìobhadh: R CMD BATCH C:UsersAlseyDocumentsmy_bot.R. An àite C:UsersAlseyDocumentsmy_bot.R sgrìobh an t-slighe chun sgriobt bot agad. Aig an aon àm, tha e cudromach nach eil caractaran Cyrillic no beàrnan air an t-slighe, oir faodaidh seo duilgheadasan adhbhrachadh nuair a ruitheas tu am bot. Sàbhail e, agus cuir a leudachadh na àite txt air ialtag.
  4. Fosgail Windows Task Scheduler, tha iomadh dòigh ann air seo a dhèanamh, mar eisimpleir, fosgail pasgan sam bith agus cuir a-steach an seòladh %windir%system32taskschd.msc /s. Gheibhear dòighean cur air bhog eile an seo.
  5. Anns a 'chlàr gu h-àrd air an làimh dheis den chlàr-ama, cliog "Cruthaich gnìomh ...".
  6. Air an taba “Coitcheann”, thoir ainm àbhaisteach don ghnìomh agad, agus atharraich an tionndadh chun stàit “Ruith airson a h-uile neach-cleachdaidh”.
  7. Rach gu "Gnìomhan" tab, briog air "Cruthaich". Anns an raon "Prògram no sgriobt", briog air "Rùraich", lorg am fear a chaidh a chruthachadh san dàrna ceum ialtag faidhle agus cliog air OK.
  8. Cliog air OK agus, ma tha sin riatanach, cuir a-steach am facal-faire airson do chunntas siostam obrachaidh.
  9. Lorg an gnìomh cruthaichte anns a’ chlàr-ama, tagh e agus cliog air a’ phutan “Run” san oisean gu h-ìosal air an làimh dheis.

Bidh am bot againn a’ ruith air a’ chùl agus obraichidh e gus an cuir thu stad air a’ ghnìomh, no gus an cuir thu dheth do PC no frithealaiche air an deach a chuir air bhog.

co-dhùnadh

San artaigil seo, dh’ obraich sinn a-mach mar a sgrìobhas tu bot làn-chuimseach nach urrainn a-mhàin teachdaireachdan a chuir, ach cuideachd freagairt a thoirt do theachdaireachdan agus òrdughan a tha a ’tighinn a-steach. Tha an t-eòlas a fhuair thu mu thràth gu leòr airson a’ mhòr-chuid de na duilgheadasan agad fhuasgladh.

Bruidhnidh an ath artaigil air mar a chuireas tu meur-chlàr ris a ’bot airson obair nas goireasaiche.

Subscribe to my telegram и youtube seanalan.

Source: www.habr.com

Cuir beachd ann