で前のポスト、私たちは、ボットを作成する方法を考え出したクラスのインスタンスを初期化Botし、それを使用してメッセージを送信する方法を熟知してしまいました。
この記事では、このトピックを続けているので、最初の部分を読んだ後でのみ、この記事を読み始めることをお勧めします。
今回は、ボットを復活させてコマンドサポートを追加する方法を理解し、クラスについて理解しUpdaterます。
記事の中で、いくつかの簡単なボットを作成します。後者は、特定の日付と国コードに従って、特定の国の日が週末であるか、生産カレンダーに従って就業日であるかを判別します。ただし、以前と同様に、この記事の目的はtelegram.bot、独自の問題を解決するためのパッケージインターフェイスについて理解することです。

シリーズ「R言語で電報ボットを書く」のすべての記事
- ボットを作成し、それを使用してテレグラムにメッセージを送信します
- コマンドサポートとメッセージフィルターをボットに追加します
- ボットにキーボードサポートを追加する方法
- ボットとの一貫した論理的な対話の構築
- ボットのユーザー権利管理
コンテンツ
Updater
Updater — , , Dispetcher. Updater , ( getUpdates()), Dispetcher.
Dispetcher , .. Handler.
Handlers —
Dispetcher . telegram.bot :
- MessageHandler —
- CommandHandler —
- CallbackQueryHandler — Inline
- ErrorHandler —
,
, , , / .
, .. /hi.
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(), ' ' , BotFather ( ).
start_polling() Updater, , .
, /hi.

/hi, .
.

-
Updater; - , .. .
say_hello(). , — bot update, — args. bot, , , , . update , , ,getUpdates(). args , ; - , .. - . , - .
/hi,hi_hendler <- CommandHandler('hi', say_hello).CommandHandler(),hi, . ,say_hello, ; -
Updater. , ,+, ..updater <- updater + hi_hendler.add_handler(),Dispatcher, :updater$dispatcher$add_handler(); -
start_polling().
, , , - , . — MessageHandler.
MessageHandler . . /hi, , : , , , , .
- , .. . .
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(), ' ' , BotFather ( ).
, :

, , . reply_to_message_id, sendMessage(), id . id : update$message$message_id.
, — BaseFilter():
#
MessageFilters$hi <- BaseFilter(
#
function(message) {
# ,
grepl(x = message$text,
pattern = '||||',
ignore.case = TRUE)
}
)
, MessageFilters, . MessageFilters hi, .
BaseFilter() . , — , TRUE FALSE. , , grepl() , |||| TRUE.
hi_txt_hnd <- MessageHandler(say_hello, filters = MessageFilters$hi). MessageHandler() — , , — . MessageFilters$hi.
, , hi_txt_hnd.
updater <- updater +
hi_hendler +
hi_txt_hnd
, telegram.bot MessageFilters , :
- all —
- text —
- command — , ..
/ - reply — ,
- audio —
- document —
- photo —
- sticker —
- video —
- voice —
- contact —
- location —
- venue —
- game —
| — , & . , , :
handler <- MessageHandler(callback,
MessageFilters$video | MessageFilters$photo | MessageFilters$document
)
, , . , .
, .
API isdayoff.ru.
library(telegram.bot)
# Updater
updater <- Updater(' ')
#
##
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(), ' ' , BotFather ( ).
, check_date, .
, , , . , , .
, pass_args = TRUE CommandHandler(), , bot, update — args. , . , .
, .

— .
:
- R. RStudio File, Save As....
- bin, R Path, .
- , 1 :
R CMD BATCH C:\Users\Alsey\Documents\my_bot.R. C:\Users\Alsey\Documents\my_bot.R . , , .. . , txt bat. - Windows, ,
%windir%\system32\taskschd.msc /s. . - " ...".
- "" , " ".
- "", "". " " "", bat , .
- , .
- , "".
, , , .
, , . .