Scribens telegraphum autocinetum in R (parte 2): addito imperio auxilio et nuntio columellae ad bot

В prior publication nos figuratum quomodo creare automatum, initialized instantia classium Bot adsuescebat rationibus mittendis uti.

In hoc articulo hunc locum pergo, ut commendo initium hunc articulum legere solum post lectionem in prima parte,.

Hoc tempore figurabimus quomodo autocinetum nostrum reviviscere et ei subsidium iubere addere, ac etiam genus cognoscere. Updater.

Per circulum articuli scribemus plura simplicia automata, haec voluntas, ex dato codice ac patria, determinabit utrum dies in aliqua regione sit volutpat vel dies profestus secundum calendarium productionem. Sed, ut prius, propositum est articulum interface te consuescere telegram.bot solve problems tua.

Scribens telegraphum autocinetum in R (parte 2): addito imperio auxilio et nuntio columellae ad bot

Articuli omnes ex serie "Scribere telegraphum bot in R"

  1. Nos creare automati et utimur eo ut mittere nuntios in telegraphum
  2. Adde imperium subsidium et nuntium Filtra ad bot

contentus

Si vos es interested in Analysis analysi, fortasse interesse in my telegraphum и YouTube rivos. Pleraque contenti r lingua dedicata est.

  1. Genus Updater
  2. Tracto - tracto
  3. Ad primum imperium addere automati, imperium tracto
  4. Nuntius processus text et Filtra
  5. Addere mandata Morbi
  6. Curre bot in background
  7. conclusio,

Genus Updater

Updater genus est quo facilius tibi telegraphum enucleandum facit et classis sub cucullo utitur Dispetcher. Classis assignationem Updater accipere updates ex automati (precedente articulo usi sumus modum huius consilii getUpdates()) , et transferre ulterius ad Dispetcher.

Et rursus: Dispetcher auriculas continet, quas creavit, i.e. classis obiecti Handler.

Tracto - tracto

Cum tracto addere to Dispetcher bot reactiones ad varios casus. In tempore scribens hunc articulum telegram.bot Sequentia genera tracto addita sunt:

  • MessageHandler - Nuntius tracto
  • CommandHandler - Imperii tracto
  • CallbackQueryHandler - Data tracto pro Claviaturae missae ab Inline
  • ErrorHandler - Error tracto updates cum petens ab bot

Ad primum imperium addere automati, imperium tracto

Si nunquam antea usus est, nec quid mandatum sit, tunc iubet automata mittenda utendo deinceps exacuere. / ut in praepositione.

Simplicibus mandatis incipiemus, i.e. s doceamus nostrum bot dicere salve in command /hi.

Code I: docentes bot dicere salve

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

Exemplum supra codicem currite, postquam reposuit 'BOT SIGNUM VERUM' cum signo reali quod accepistis cum creando bot via BotFather (Locutus sum de creando bot in primum articulum).

modum start_polling() class Updaterquae ad calcem codicis adhibetur, ansam petendi et processus updates ex autocineto incipit infinita.

Nunc Telegramma aperiamus et primum mandatum nostro bot . scribamus /hi.

Scribens telegraphum autocinetum in R (parte 2): addito imperio auxilio et nuntio columellae ad bot

Nunc nostrum imperium intelligit /hiac scit salutatum.

Schematically, processus aedificationis tam simplex autocineti depingi potest hoc modo.

Scribens telegraphum autocinetum in R (parte 2): addito imperio auxilio et nuntio columellae ad bot

  1. Create instantia classium Updater;
  2. Creamus modos, i.e. quae munera nostra bot facient. In codice exempli gratia haec functio est say_hello(). Munera quae modi modi uteris in autocineto debent habere duo argumenta quae requiruntur. bot и updateet ad libitum - args. Argumentum bot, hoc est autocinetum tuum, cuius ope potes respondere nuntiis, nuntiis mittere, vel quibuslibet aliis modis quae automati uti possunt. Argumentum update haec automata ab utente recepta sunt, etenim ea quae in primo articulo utendo methodo recepimus getUpdates(). Argumentum args sino vos ut aliqua additional notitia ab utente missa una cum praecepto processuri, ad hunc locum paulo post revertemur;
  3. Tractatores creamus : i.e. Aliquos actiones usoris coniungimus cum modis ad priorem gradum creatis. Essentialiter, tracto felis est, eventus qui vocat munus bot. In exemplo nostro, talis felis praecepti mittit /hiet in quadrigis hi_hendler <- CommandHandler('hi', say_hello). Primum munus argumentum CommandHandler() permittit vobis mandatum specificare in nostro casu hiad quod respondebit bot. Secunda ratio permittit ut methodum bot definias, nos modum vocabimus say_helloquod fiet, si utens praecepto in primo argumento vocaverit;
  4. Deinde addimus instantias nostrae classis tractatorem creatum Updater. Tractatores pluribus modis addere potes, in exemplo supra simplicissimo usus sum uno signo +, ie updater <- updater + hi_hendler. Idem fieri potest utendi methodo add_handler()quod pertinet ad classem Dispatcherreperire potes hunc modum; updater$dispatcher$add_handler();
  5. Bot usus est ad launch mandatum start_polling().

Nuntius processus text et Filtra

Informati sumus quomodo mandata automati mitteremus, sed interdum opus est autocineto ut non solum mandatis, sed etiam quibusdam nuntiis textui regularibus respondeamus. Hoc facere debes ut tracto nuntium MessageHandler.

Ordinarius MessageHandler respondebit absolute omnes epistulae advenientis. Tractatores ergo nuntius saepe simul cum odio usa est. Docemus bot dicere salve non solum in imperio /hised etiam quoties aliquid ex his verbis apparet in nuntio bot misso: salve, salve, saluta, hai, bonjour.

Nunc enim novos modos non scribemus, quia... Iam habemus rationem qua bot nos salutat. Omnes nos facere necesse est ut colum ac nuntium tractorem crearent.

Codicis II: Adde textum nuntium tracto et sparguntur

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

Exemplum supra codicem currite, postquam reposuit 'BOT SIGNUM VERUM' cum signo reali quod accepistis cum creando bot via BotFather (Locutus sum de creando bot in primum articulum).

Nunc conemur mittere botones aliquot epistulas continentes verba salutationis antea commemorata:
Scribens telegraphum autocinetum in R (parte 2): addito imperio auxilio et nuntio columellae ad bot

Imprimis igitur docuimus bot non solum salve dicere, sed ad salutem respondere. Nos hoc argumento utens reply_to_message_id, quod est in promptu per modum sendMessage()in quem debes transferre id nuntii, cui respondere vis. Potes nuntium id sic: update$message$message_id.

Praecipuum autem nos fecimus filtrum addere in automati functione utendo BaseFilter():

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

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

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

)

Ut notasse licet, Filtra obiecto additae sunt MessageFiltersquae initio iam parvam tabulam paratae filamenta continet. In exemplo nostro, ad rem MessageFilters nos addita elementum hi, filtrum novum est.

Ad munus BaseFilter() munus colum transire debes. Filtrum essentialiter munus est quod nuntium instantia accipit et redit VERUM aut FALSUS. In exemplo nostro munus simplex scripsimus, munere fundamentali adhibito grepl() nuntium impedit textum et iusto expressio congruit привет|здравствуй|салют|хай|бонжур redit VERUM.

Deinde creare nuntium tracto hi_txt_hnd <- MessageHandler(say_hello, filters = MessageFilters$hi). Primum munus argumentum MessageHandler() est modus, qui vocabit tractorem, et secunda ratio est qua vocabitur colum. In nobis, hoc colum creavimus MessageFilters$hi.

Bene in fine addimus mittentem tractatorem creatum hi_txt_hnd.

updater <- updater + 
             hi_hendler +
             hi_txt_hnd

Ut supra scripsi, in sarcina telegram.bot et object MessageFilters Iam copia est in columsionibus constructis quibus uti potes:

  • omnes - omnes epistulae
  • text - text nuntiis
  • command — mandatis, i.e. nuntia ut satus /
  • respondeo - Mandata quae responsa sunt ad alium nuntium
  • audio - Messages continens audio file
  • document - Messages cum missum documentum
  • photo - Messages cum missis imaginibus
  • obice - Messages cum missis obice
  • video - Messages with video
  • vox - vox nuntiis
  • contactus - Mandata continentes telegraphum usoris
  • location - Messages with geolocation
  • visneto - Tractum epistulae
  • ludo - Ludi

Si vis aliquas coniungere Filtra in uno tracto tantum utere signo | - ut logice VELEt signum & ut logica И. Exempli gratia, si vis automata eandem methodum appellare cum video, imaginem vel documentum accipit, hoc exemplo utere ut nuntium tracto creandum:

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

Addere mandata Morbi

Iam scimus quae praecepta sint, quomodo creare, et quomodo cogere imperium ad optatum exequendum. In quibusdam autem, praeter nomen praecepti, quaedam notitia ad exequendum opus est.

Infra exemplum habetur quod, dato die et patria, ad te redit ratio diei a calendario productionis.

Bot infra calendario productione utitur API isdayoff.ru.

Code III: Bot qui refert ad tempus et villam

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

Exemplum supra codicem currite, postquam reposuit 'BOT SIGNUM VERUM' cum signo reali quod accepistis cum creando bot via BotFather (Locutus sum de creando bot in primum articulum).

Nos automaton creavimus qui unam tantum methodum habet in armamentario suo check_datequae ratio eiusdem nominis imperio appellatur.

Sed, praeter nomen praecepti, haec methodus duos parametros inire postulat, regionem codicem et diem. Deinde autocinetum inhibet utrum dies datus in determinato territorio sit volutpat, dies abbreviatus vel dies profestus secundum calendarium officiale productionis.

Ut pro methodo quam nos parametri adiectis accipiamus una cum imperio, argumento utimur pass_args = TRUE in munus CommandHandler()methodo creando, praeter argumenta inquisita bot, update ad libitum creare unum - args. Modus hoc modo creatus parametros accipiet ut ad autocinetum post nomen imperium transeas. Parametri spatio separandi sunt, methodo tamquam vector textus mittentur.

Lorem ac probemus nostri automati.

Scribens telegraphum autocinetum in R (parte 2): addito imperio auxilio et nuntio columellae ad bot

Curre bot in background

Postremum gradum opus perficere est botones in curriculo mittere.

Ad hoc sequens algorithmus infra descriptum;

  1. Servo codicem bot ad fasciculum cum extensione R. Quando in RStudio laborat, hoc fit per menu file, team Serva sicut ....
  2. Iter adde ad bin folder, quod vicissim situm est in folder quo linguam R instituisti, ad Path variabilis, instructiones. hic.
  3. Facere iusto textum lima in quo scribe 1 linea: R CMD BATCH C:UsersAlseyDocumentsmy_bot.R... Instead of * C:UsersAlseyDocumentsmy_bot.R scribe iter ad script bot. Eodem tempore interest nullas esse notas cyrillianas vel spatia per viam, quia hoc potest causare problems cum bot currit. Serva eam, et ejus extensionem restitue cum txt on bat.
  4. Aperi Fenestra Task Scheduler, multae modi ad hoc faciendum, exempli gratia, cuilibet folder aperi et in electronicam intrant %windir%system32taskschd.msc /s. Aliae modi Lorem inveniri possunt hic.
  5. In suprema tabula dextra schedulae preme "Opus crea...".
  6. In "generali" tab, da negotium tuum pro nomine consuetudinis, et transitum ad "curre pro omnibus usoribus" statum.
  7. Vade ad tab "Actus", preme "Cre". In agro "Programmatis seu scripto", preme "Percurrere", creatum in secundo gradu reperi bat file and click OK.
  8. Preme OK et, si opus est, tesseram tuam in ratione operandi rationi tuae inscribe.
  9. Negotium creatum in schedula reperi, elige illud et preme "curre" pyga in angulo dextro inferiore.

Bot nostra in curriculo currit et opus erit usque dum negotium obstruas, aut PC aut servo tuo averte in quo deducebatur.

conclusio,

In hoc articulo figurati sumus quomodo scribere plena automata mobilia qui non solum nuntios mittere, sed etiam nuntiis mandatisque advenientibus respondemus. Cognitio quaesita iam satis est ad solvendas maximas quaestiones tuas.

Proximus articulus loquetur quomodo claviaturae bot ad opus commodius adde.

Subscribe to my telegraphum и YouTube rivos.

Source: www.habr.com

Add a comment