Im vorherigen Beitrag haben wir herausgefunden, wie ein Bot erstellt wird, eine Instanz der Klasse initialisiert und uns Botmit den Methoden zum Senden von Nachrichten vertraut gemacht.
In diesem Artikel setze ich dieses Thema fort. Ich empfehle daher, diesen Artikel erst nach dem Lesen des ersten Teils zu lesen .
Dieses Mal werden wir herausfinden, wie wir unseren Bot wiederbeleben und BefehlsunterstĂŒtzung hinzufĂŒgen sowie die Klasse kennenlernen können Updater.
Im Verlauf des Artikels werden wir mehrere einfache Bots schreiben, wobei letztere gemÀà einem bestimmten Datum und LÀndercode bestimmen, ob ein Tag in einem bestimmten Land ein Wochenende oder ein Arbeitstag gemÀà dem Produktionskalender ist. Der Zweck dieses Artikels besteht jedoch nach wie vor darin, Sie mit der Paketschnittstelle telegram.botzur Lösung Ihrer eigenen Probleme vertraut zu machen .

Alle Artikel aus der Reihe "Schreiben eines Telegrammbot in der Sprache R"
- Wir erstellen einen Bot und senden damit Nachrichten an das Telegramm
- FĂŒgen Sie dem Bot BefehlsunterstĂŒtzung und Nachrichtenfilter hinzu
- So fĂŒgen Sie Ihrem Bot TastaturunterstĂŒtzung hinzu
- Aufbau eines konsistenten, logischen Dialogs mit dem Bot
- Verwaltung der Bot-Benutzerrechte
Inhalt
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 , .
- , .
- , "".
, , , .
, , . .