في المنشور السابق ، اكتشفنا كيفية إنشاء روبوت ، وتهيئة مثيل للفئة Botوالتعرف على طرق إرسال الرسائل باستخدامه.
في هذا المقال أواصل هذا الموضوع ، لذا أوصي ببدء قراءة هذا المقال فقط بعد قراءة الجزء الأول .
هذه المرة سوف نتعرف على كيفية إحياء الروبوت الخاص بنا وإضافة دعم الأوامر إليه ، وكذلك التعرف على الفصل Updater.
في سياق المقالة ، سنكتب عدة برامج روبوت بسيطة ، وستحدد الأخيرة ، وفقًا لتاريخ ورمز بلد معين ، ما إذا كان اليوم في بلد معين هو عطلة نهاية الأسبوع أو يوم عمل وفقًا لتقويم الإنتاج. ولكن ، كما في السابق ، الغرض من هذه المقالة هو تعريفك بواجهة الحزمة telegram.botلحل مشاكلك الخاصة.

جميع المقالات من سلسلة "كتابة روبوت برقية بلغة R"
- نقوم بإنشاء روبوت وإرسال رسائل إلى Telegram معه
- أضف دعم الأوامر وعوامل تصفية الرسائل إلى الروبوت
- كيفية إضافة دعم لوحة المفاتيح إلى الروبوت الخاص بك
- بناء حوار منطقي متسق مع الروبوت
- إدارة حقوق مستخدم الروبوت
المحتوى
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 , .
- , .
- , "".
, , , .
, , . .