Ho ngola bot ea thelekramo ho R (karolo ea 2): Ho eketsa tšehetso ea litaelo le li-filters tsa molaetsa ho bot.

В phatlalatso e fetileng re fumane mokhoa oa ho theha bot, ra qala mohlala oa sehlopha Bot ’me a tloaelane le mekhoa ea ho romela melaetsa ka eona.

Sehloohong sena ke tsoela pele ka sehlooho sena, kahoo ke khothalletsa ho qala ho bala sehlooho sena feela ka mor'a ho bala karolo ea pele.

Lekhetlong lena re tla bona mokhoa oa ho hlasimolla bot ea rona le ho eketsa tšehetso ea litaelo ho eona, hape re tloaelane le sehlopha. Updater.

Nakong ea sehlooho sena, re tla ngola li-bots tse 'maloa tse bonolo, tsa morao-rao, ho latela letsatsi le khoutu ea naha, li tla etsa qeto ea hore na letsatsi naheng e fanoeng ke mafelo-beke kapa letsatsi la ho sebetsa ho latela almanaka ea tlhahiso. Empa, joalo ka pele, sepheo sa sengoloa ke ho u tseba ka sebopeho sa sephutheloana telegram.bot ho rarolla mathata a hao.

Ho ngola bot ea thelekramo ho R (karolo ea 2): Ho eketsa tšehetso ea litaelo le li-filters tsa molaetsa ho bot.

Lingoliloeng tsohle tse tsoang letotong la "Ho ngola bot ea thelekramo ka R"

  1. Re theha bot mme re e sebelisa ho romella melaetsa ka thelekramo
  2. Kenya tšehetso ea litaelo le li-filters tsa melaetsa ho bot

Tse ka hare

Haeba u thahasella tlhahlobo ea data, u ka 'na ua thahasella ea ka thelekramo и mang youtube dikanale. Boholo ba litaba bo nehetsoe puong ea R.

  1. Sehlopha sa ho ntlafatsa
  2. Basebelisi - batšoasi
  3. Kenya taelo ea pele ho bot, molaoli oa taelo
  4. Sesebelisoa sa melaetsa ea mongolo le li-filters
  5. Ho eketsa Litaelo ka Parameters
  6. Matha bot ka morao
  7. fihlela qeto e

Sehlopha sa ho ntlafatsa

Updater ke sehlopha se etsang hore ho be bonolo ho uena ho hlahisa bot ea thelekramo, 'me e sebelisa sehlopha ka tlas'a hood Dispetcher. Mosebetsi oa sehlopha Updater ke ho fumana lintlafatso ho tsoa bot (sengolong se fetileng re sebelisitse mokhoa ona molemong ona getUpdates()), le ho li fetisetsa ho feta ho Dispetcher.

Ka lehlakoreng le leng Dispetcher e na le batshwari bao o ba entseng, i.e. dintho tsa sehlopha Handler.

Basebelisi - batšoasi

Ka li-handers tseo u li eketsang Dispetcher karabelo ea bot liketsahalong tse fapaneng. Ka nako ea ho ngola sengoloa sena ho telegram.bot Ho ekelitsoe mefuta e latelang ea bahatelli:

  • MessageHandler - Molaetsa oa molaetsa
  • CommandHandler - Sebapali sa taelo
  • CallbackQueryHandler - Sesebelisoa sa data bakeng sa likonopo tse rometsoeng ho tsoa ho Inline
  • ErrorHandler - Sesebelisoa sa phoso ha u kopa lintlafatso ho tsoa bot

Kenya taelo ea pele ho bot, molaoli oa taelo

Haeba ha o so ka o sebelisa bots pele mme o sa tsebe hore na taelo ke eng, joale litaelo ho bot li tlameha ho romelloa ho sebelisoa slash ea pele. / joalo ka sehlongoapele.

Re tla qala ka litaelo tse bonolo, i.e. ha re rute bot ea rona ho lumelisa ka taelo /hi.

Khouto 1: Ho ruta bot ho dumedisa

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

Etsa mohlala oa khoutu ka holimo, ka mor'a hore u nkele 'BOT TOKEN' sebaka ka letšoao la sebele leo u le fumaneng ha u theha bot ka. Ntate Ntate (Ke buile ka ho theha bot ho sehlooho sa pele).

Mokhoa start_polling() класса Updater, e sebelisoang qetellong ea khoutu, e qala leqhubu le sa feleng la ho kopa le ho sebetsana le lisebelisoa tse tsoang bot.

Joale ha re bule Telegraph ebe re ngola taelo ea pele ho bot ea rona /hi.

Ho ngola bot ea thelekramo ho R (karolo ea 2): Ho eketsa tšehetso ea litaelo le li-filters tsa molaetsa ho bot.

Joale bot ea rona e utloisisa taelo /hi, ’me o tseba ho re lumelisa.

Ka mokhoa o hlophisitsoeng, mokhoa oa ho haha ​​​​bot e bonolo joalo o ka hlalosoa ka tsela e latelang.

Ho ngola bot ea thelekramo ho R (karolo ea 2): Ho eketsa tšehetso ea litaelo le li-filters tsa molaetsa ho bot.

  1. Etsa mohlala oa sehlopha Updater;
  2. Re theha mekhoa, i.e. mesebetsi eo bot ea rona e tla e etsa. Mohlala oa khoutu sena ke ts'ebetso say_hello(). Mesebetsi eo u tla e sebelisa e le mekhoa ea bot e tlameha ho ba le mabaka a mabeli a hlokahalang - bot, и update lam, le khetho e le 'ngoe - args. Khang bot,, ena ke bot ea hau, ka thuso ea eona u ka araba melaetsa, u romela melaetsa, kapa ua sebelisa mekhoa e meng e fumanehang ho bot. Khang update lam sena ke seo bot e se fumaneng ho mosebedisi, ha e le hantle, seo re se fumaneng sehloohong sa pele re sebelisa mokhoa getUpdates(). Khang args e o lumella ho sebetsana le data e eketsehileng e rometsoeng ke mosebelisi hammoho le taelo, re tla khutlela sehloohong sena hamorao;
  3. Re theha bahlokomeli, i.e. Re amahanya liketso tse ling tsa basebelisi le mekhoa e entsoeng mohatong o fetileng. Ha e le hantle, motho ea sebetsang ke sesosa, ketsahalo e bitsang mosebetsi o itseng oa bot. Mohlala oa rona, sesosa se joalo ke ho romela taelo /hi, mme e kenngwa tshebetsong ke sehlopha hi_hendler <- CommandHandler('hi', say_hello). Phehisano ea tšebetso ea pele CommandHandler() e o lumella ho hlakisa taelo, molemong oa rona hi, eo bot e tla arabela ho eona. Khang ea bobeli e u lumella ho hlalosa mokhoa oa bot, re tla bitsa mokhoa oo say_hello, e tla phethoa haeba mosebelisi a bitsitse taelo e boletsoeng khang ea pele;
  4. Ka mor'a moo, re kenyelletsa sebatli se bōpiloeng ho "dispatcher" ea mohlala oa sehlopha sa rona Updater. O ka eketsa li-handers ka litsela tse 'maloa; mohlaleng o ka holimo, ke sebelisitse e bonolo ka ho fetisisa, ke sebelisa letšoao +, e.g. updater <- updater + hi_hendler. Ho ka etsoa se tšoanang ka mokhoa oo add_handler(), eo e leng ea sehlopha Dispatcher, u ka fumana mokhoa ona ka tsela ena: updater$dispatcher$add_handler();
  5. Qala bot u sebelisa taelo start_polling().

Sesebelisoa sa melaetsa ea mongolo le li-filters

Re fumane mokhoa oa ho romela litaelo ho bot, empa ka linako tse ling re hloka bot ho arabela eseng feela ho litaelo, empa hape le melaetsa e meng e tloaelehileng ea mongolo. Ho etsa sena o hloka ho sebelisa li-messenger tsa melaetsa − MessageHandler.

ba tloaelehileng MessageHandler e tla araba ka ho feletseng melaetsa eohle e kenang. Ka hona, hangata batho ba sebetsanang le melaetsa ba sebelisoa hammoho le li-filters. Ha re rute bot ho lumelisa eseng feela ka taelo /hi, empa hape neng kapa neng ha le leng la mantsoe a latelang le hlaha molaetseng o rometsoeng bot: hello, hello, salute, hai, bonjour.

Hajoale ha re na ho ngola mekhoa e mecha, hobane ... Re se re ntse re e-na le mokhoa oo bot e re lumelisang ka oona. Seo re hlokang ho se etsa feela ke ho theha sefe se hlokahalang le sebatli sa melaetsa.

Khoutu 2: Eketsa setshwari sa molaetsa wa mongolo le sefe

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

Etsa mohlala oa khoutu ka holimo, ka mor'a hore u nkele 'BOT TOKEN' sebaka ka letšoao la sebele leo u le fumaneng ha u theha bot ka. Ntate Ntate (Ke buile ka ho theha bot ho sehlooho sa pele).

Joale ha re leke ho romella bot melaetsa e mengata e nang le mantsoe a litumeliso a thathamisitsoeng pejana:
Ho ngola bot ea thelekramo ho R (karolo ea 2): Ho eketsa tšehetso ea litaelo le li-filters tsa molaetsa ho bot.

Kahoo, pele ho tsohle, re ile ra ruta bot eseng feela ho lumelisa, empa ho arabela tumeliso. Re entse sena re sebelisa likhang reply_to_message_id, e fumanehang ka mokhoa sendMessage(), eo u hlokang ho fetisetsa id ea molaetsa oo u batlang ho arabela ho oona. U ka fumana id ea molaetsa tjena: update$message$message_id.

Empa ntho e ka sehloohong eo re e entseng e ne e le ho kenya filthara ho bot re sebelisa ts'ebetso BaseFilter():

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

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

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

)

Joalokaha e ka 'na eaba u hlokometse, li-filters li hloka ho kenngoa ho ntho eo MelaetsaFilters, eo qalong e seng e e-na le lihlopha tse nyenyane tsa li-filters tse lokiselitsoeng. Mohlala oa rona, ho ntho MelaetsaFilters re kentse element hi, sena ke sefe se secha.

Ho sebetsa BaseFilter() o hloka ho fetisa ts'ebetso ea filthara. Ha e le hantle, filthara ke ts'ebetso e amohelang mohlala oa molaetsa ebe e khutla 'NETE kapa BA BOHATA. Mohlala oa rona, re ngotse mosebetsi o bonolo oo, ho sebelisa mosebetsi oa motheo grepl() e hlahloba mongolo oa molaetsa le haeba o lumellana le polelo e tloaelehileng привет|здравствуй|салют|хай|бонжур kgutlisetso 'NETE.

Ka mor'a moo re theha mochine oa melaetsa hi_txt_hnd <- MessageHandler(say_hello, filters = MessageFilters$hi). Phehisano ea tšebetso ea pele MessageHandler() ke mokhoa o tla bitsa moetsi, 'me khang ea bobeli ke sefe eo e tla bitsoa ka eona. Tabeng ea rona, sena ke sefe eo re e entseng MessageFilters$hi.

Hantle, qetellong, re eketsa ho dispatcher mochine o bōpiloeng hi_txt_hnd.

updater <- updater + 
             hi_hendler +
             hi_txt_hnd

Joalokaha ke ngotse ka holimo, ka har'a sephutheloana telegram.bot le ho hanyetsa MelaetsaFilters Ho se ho na le li-filters tse hahelletsoeng tseo u ka li sebelisang:

  • kaofela - Melaetsa eohle
  • mongolo — Melaetsa ya mongolo
  • taelo - Litaelo, i.e. melaetsa e qalang ka /
  • araba — Melaetsa e arabang molaetsa o mong
  • audio — Melaetsa e nang le faele ea molumo
  • tokomane - Melaetsa e nang le tokomane e rometsoeng
  • foto - Melaetsa e nang le litšoantšo tse rometsoeng
  • sticker — Melaetsa e nang le setikara se rometsoeng
  • video — Melaetsa e nang le video
  • lentsoe - Melaetsa ea lentsoe
  • lebitso - Melaetsa e nang le litaba tsa thelekramo tsa mosebelisi
  • sebaka — Melaetsa e nang le geolocation
  • sebaka - Melaetsa e fetisitsoeng
  • papali - Lipapali

Haeba u batla ho kopanya li-filters ho sesebelisoa se le seng feela sebelisa letšoao | - e le ntho e utloahalang Kapa, le ho saena & ka tsela e utloahalang И. Mohlala, haeba u batla hore bot e letse ka mokhoa o ts'oanang ha e amohela video, setšoantšo kapa tokomane, sebelisa mohlala o latelang ho theha sebatli sa molaetsa:

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

Ho eketsa Litaelo ka Parameters

Re se re ntse re tseba hore na litaelo ke life, mokhoa oa ho li theha, le mokhoa oa ho qobella bot ho phethahatsa taelo eo u e batlang. Empa maemong a mang, ntle le lebitso la taelo, re hloka ho fetisa data ho e phetha.

Ka tlase ke mohlala oa bot eo, ha ho fanoe ka letsatsi le naha e fanoeng, e u khutlisetsang mofuta oa letsatsi ho tsoa almanakeng ea tlhahiso.

Bot e ka tlase e sebelisa almanaka ea tlhahiso ea API isdayoff.ru.

Khoutu 3: Bot e tlalehang ho latela letsatsi le naha

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

Etsa mohlala oa khoutu ka holimo, ka mor'a hore u nkele 'BOT TOKEN' sebaka ka letšoao la sebele leo u le fumaneng ha u theha bot ka. Ntate Ntate (Ke buile ka ho theha bot ho sehlooho sa pele).

Re thehile bot e nang le mokhoa o le mong feela pokellong ea eona ea lihlomo check_date, mokhoa ona o bitsoa ka taelo ea lebitso le tšoanang.

Empa, ntle le lebitso la taelo, mokhoa ona o hloka hore o kenye mekhahlelo e 'meli, khoutu ea naha le letsatsi. Ka mor'a moo, bot e hlahloba hore na letsatsi le fanoeng naheng e boletsoeng ke mafelo-beke, letsatsi le khutsufalitsoeng, kapa letsatsi la ho sebetsa ho latela almanaka ea molao ea tlhahiso.

E le hore mokhoa oo re o bōpang o amohele liparamente tse eketsehileng hammoho le taelo, sebelisa khang pass_args = TRUE mosebetsing CommandHandler(), le ha u theha mokhoa, ho phaella ho likhang tse hlokahalang bot,, update lam etsa khetho - args. Mokhoa o entsoeng ka tsela ena o tla amohela litekanyo tseo u li fetisetsang ho bot ka mor'a lebitso la taelo. Litekanyetso li tlameha ho aroloa ke sebaka; li tla romelloa ho mokhoa joalo ka vector ea mongolo.

Ha re qaleng le ho leka bot ea rona.

Ho ngola bot ea thelekramo ho R (karolo ea 2): Ho eketsa tšehetso ea litaelo le li-filters tsa molaetsa ho bot.

Matha bot ka morao

Mohato oa ho qetela oo re hlokang ho o phetha ke ho qala bot ka morao.

Ho etsa sena, latela algorithm e hlalositsoeng ka tlase:

  1. Boloka khoutu ea bot ho faele e nang le katoloso ea R. Ha u sebetsa ho RStudio, sena se etsoa ka menu faele, sehlopha Boloka joalo ka ....
  2. Eketsa tsela ho foldara ea bin, eo le eona e leng foldareng eo u kentseng puo ea R ho eona, ho phapano ea Path, litaelo. mona.
  3. Theha faele e tloaelehileng ea mongolo moo u ngolang mola o le mong: R CMD BATCH C:UsersAlseyDocumentsmy_bot.R... Sebakeng seo C:UsersAlseyDocumentsmy_bot.R ngola tsela ea bot script ea hau. Ka nako e ts'oanang, ke habohlokoa hore ha ho na litlhaku kapa libaka tsa Cyrillic tseleng, hobane sena se ka baka mathata ha o tsamaisa bot. E boloke, 'me u fetole katoloso ea eona ka txt mabapi le Bat.
  4. Bula Windows Task Scheduler, ho na le mekhoa e mengata ea ho etsa sena, mohlala, bula foldara efe kapa efe ebe u kenya atereseng. %windir%system32taskschd.msc /s. Mekhoa e meng ea ho qala e ka fumanoa mona.
  5. Ho menu e kaholimo ho le letona la kemiso, tobetsa "Etsa mosebetsi ...".
  6. Ho "Kakaretso", fa mosebetsi oa hau lebitso la tloaelo, 'me u fetole phetoho ho boemo ba "Run for all users".
  7. Eya ho "Actions" tab ya, tobetsa "Etsa". Sebakeng sa "Lenaneo kapa script", tobetsa "Browse", fumana e entsoeng mohatong oa bobeli Bat file ebe o tobetsa OK.
  8. Tobetsa OK 'me, ha ho hlokahala, kenya phasewete bakeng sa akhaonto ea hau ea tsamaiso.
  9. Fumana mosebetsi o entsoeng ho kemiso, e khethe ebe o tobetsa konopo ea "Run" k'honeng e ka tlase ho le letona.

Bot ea rona e sebetsa ka morao mme e tla sebetsa ho fihlela o emisa mosebetsi, kapa o tima komporo ea hau kapa seva eo e qalisoang ho eona.

fihlela qeto e

Sehloohong sena, re fumane mokhoa oa ho ngola bot e feletseng e ke keng ea romela melaetsa feela, empa hape e arabela melaetsa le litaelo tse kenang. Tsebo e fumanoeng e se e lekane ho rarolla boholo ba mathata a hau.

Sengoloa se latelang se tla bua ka mokhoa oa ho eketsa keyboard ho bot bakeng sa mosebetsi o bonolo haholoanyane.

Ngolisa ho ea ka thelekramo и mang youtube dikanale.

Source: www.habr.com

Eketsa ka tlhaloso