Dans le post précédent, nous avons compris comment créer un bot, initialisé une instance de la classe Bot
et nous nous sommes familiarisés avec les méthodes d'envoi de messages en l'utilisant.
Dans cet article, je continue ce sujet, je recommande donc de commencer à lire cet article uniquement après avoir lu la première partie .
Cette fois, nous allons découvrir comment faire revivre notre bot et y ajouter la prise en charge des commandes, ainsi que faire connaissance avec la classe Updater
.
Au cours de l'article, nous écrirons plusieurs bots simples, ces derniers détermineront, selon une date et un code pays donnés, si une journée dans un pays donné est un week-end ou une journée de travail selon le calendrier de production. Mais, comme auparavant, le but de cet article est de vous familiariser avec l'interface du package telegram.bot
pour résoudre vos propres problèmes.
Tous les articles de la série "Ecrire un robot de télégramme en langage R"
- Nous créons un bot et envoyons des messages au télégramme en l'utilisant
- Ajouter la prise en charge des commandes et des filtres de messages au bot
- Comment ajouter la prise en charge du clavier Ă votre bot
- Construire un dialogue cohérent et logique avec le bot
- Gestion des droits des utilisateurs du bot
Contenu
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 , .
- , .
- , "".
, , , .
, , . .