ProHoster > Блог > Isakoso > Kikọ bot telegram ni R (apakan 2): Fifi atilẹyin aṣẹ ati awọn asẹ ifiranṣẹ si bot
Kikọ bot telegram ni R (apakan 2): Fifi atilẹyin aṣẹ ati awọn asẹ ifiranṣẹ si bot
В ti tẹlẹ atejade a ṣayẹwo bi o ṣe le ṣẹda bot, ti ipilẹṣẹ apẹẹrẹ ti kilasi naa Bot o si di faramọ pẹlu awọn ọna ti fifiranṣẹ awọn ifiranṣẹ lilo o.
Ninu nkan yii Mo tẹsiwaju koko yii, nitorinaa Mo ṣeduro bẹrẹ lati ka nkan yii nikan lẹhin kika apakan akọkọ.
Ni akoko yii a yoo ṣawari bawo ni a ṣe le sọji bot wa ati ṣafikun atilẹyin aṣẹ si rẹ, ati tun faramọ kilasi naa Updater.
Lakoko ti nkan naa, a yoo kọ ọpọlọpọ awọn bot ti o rọrun, igbehin yoo, da lori ọjọ ti a fun ati koodu orilẹ-ede, pinnu boya ọjọ kan ni orilẹ-ede ti a fun ni ipari ose tabi ọjọ iṣẹ ni ibamu si kalẹnda iṣelọpọ. Ṣugbọn, bi tẹlẹ, idi ti nkan naa ni lati mọ ọ pẹlu wiwo package telegram.bot lati yanju awọn iṣoro ti ara rẹ.
Gbogbo awọn nkan lati inu jara “Kikọ bot telegram ni R”
Updater ni a kilasi ti o mu ki o rọrun fun o lati se agbekale a telegram bot, ati ki o nlo awọn kilasi labẹ awọn Hood Dispetcher. Kilasi iṣẹ iyansilẹ Updater ni lati gba awọn imudojuiwọn lati bot (ninu nkan ti tẹlẹ a lo ọna fun idi eyi getUpdates()), ati gbe wọn siwaju si Dispetcher.
Leteto Dispetcher ni awọn olutọju ti o ṣẹda, i.e. awọn nkan kilasi Handler.
Handlers - handlers
Pẹlu awọn olutọju ti o ṣe afikun si Dispetcher bot aati si orisirisi awọn iṣẹlẹ. Ni akoko kikọ nkan yii ni telegram.bot Awọn oriṣi awọn olutọju atẹle wọnyi ti ṣafikun:
MessageHandler - Olutọju ifiranṣẹ
CommandHandler - Olutọju aṣẹ
CallbackQueryHandler - Olutọju data fun awọn bọtini itẹwe ti a firanṣẹ lati Inline
ErrorHandler - Olutọju aṣiṣe nigba ti o beere awọn imudojuiwọn lati bot
Ṣafikun aṣẹ akọkọ si bot, olutọju aṣẹ
Ti o ko ba ti lo awọn bot tẹlẹ ati pe o ko mọ kini aṣẹ jẹ, lẹhinna awọn aṣẹ si bot gbọdọ wa ni fifiranṣẹ ni lilo slash siwaju / bi ìpele.
A yoo bẹrẹ pẹlu awọn aṣẹ ti o rọrun, i.e. jẹ ki a kọ wa bot lati sọ hello lori pipaṣẹ /hi.
Koodu 1: Nkọ bot lati sọ hello
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()
Ṣiṣe apẹẹrẹ koodu loke, lẹhin ti o rọpo 'BOT TOKEN rẹ' pẹlu ami-ami gidi ti o gba nigbati o ṣẹda bot nipasẹ Bàbá Bàbá (Mo ti sọrọ nipa ṣiṣẹda bot ni akọkọ article).
Ọna start_polling() kilasi Updater, eyi ti o ti lo ni opin ti awọn koodu, bẹrẹ ohun ailopin lupu ti bere ati processing awọn imudojuiwọn lati bot.
Bayi jẹ ki a ṣii Telegram ki o kọ aṣẹ akọkọ si bot wa /hi.
Bayi bot wa loye aṣẹ naa /hi, ó sì mọ bí a ṣe ń kí wa.
Sikematiki, ilana ti kikọ iru bot ti o rọrun le ṣe afihan bi atẹle.
Ṣẹda apẹẹrẹ ti kilasi naa Updater;
A ṣẹda awọn ọna, i.e. awọn iṣẹ ti bot wa yoo ṣe. Ninu apẹẹrẹ koodu eyi jẹ iṣẹ kan say_hello(). Awọn iṣẹ ti iwọ yoo lo bi awọn ọna bot gbọdọ ni awọn ariyanjiyan meji ti o nilo - bot и imudojuiwọn, ati ọkan iyan - ọfa. Ariyanjiyan bot, Eyi ni bot rẹ, pẹlu iranlọwọ rẹ o le dahun si awọn ifiranṣẹ, firanṣẹ awọn ifiranṣẹ, tabi lo awọn ọna miiran ti o wa si bot. Ariyanjiyan imudojuiwọn eyi ni ohun ti bot gba lati ọdọ olumulo, ni otitọ, ohun ti a gba ni nkan akọkọ nipa lilo ọna naa getUpdates(). Ariyanjiyan ọfa gba ọ laaye lati ṣe ilana afikun data ti olumulo ranṣẹ pẹlu aṣẹ, a yoo pada si koko yii diẹ diẹ;
A ṣẹda awọn olutọju, i.e. A ṣepọ diẹ ninu awọn iṣe olumulo pẹlu awọn ọna ti a ṣẹda ni igbesẹ ti tẹlẹ. Ni pataki, olutọju kan jẹ okunfa, iṣẹlẹ ti o pe diẹ ninu iṣẹ bot. Ninu apẹẹrẹ wa, iru okunfa kan ni fifiranṣẹ aṣẹ kan /hi, ati pe o jẹ imuse nipasẹ ẹgbẹ hi_hendler <- CommandHandler('hi', say_hello). Iṣẹ ariyanjiyan akọkọ CommandHandler() gba ọ laaye lati pato aṣẹ kan, ninu ọran wa hi, eyiti bot yoo dahun. Awọn ariyanjiyan keji gba ọ laaye lati pato ọna bot, a yoo pe ọna naa say_hello, eyi ti yoo ṣiṣẹ ti olumulo ba pe aṣẹ ti o pato ninu ariyanjiyan akọkọ;
Nigbamii, a ṣafikun oluṣakoso ti a ṣẹda si olupin ti apẹẹrẹ kilasi wa Updater. O le ṣafikun awọn olutọju ni awọn ọna pupọ; ni apẹẹrẹ loke, Mo lo ọkan ti o rọrun julọ, ni lilo ami naa +, i.e. updater <- updater + hi_hendler. Bakan naa le ṣee ṣe nipa lilo ọna naa add_handler(), eyi ti o jẹ ti awọn kilasi Dispatcher, o le wa ọna yii bi eleyi: updater$dispatcher$add_handler();
Lọlẹ awọn bot lilo awọn pipaṣẹ start_polling().
Ifọrọranṣẹ isise ati Ajọ
A ṣe ayẹwo bi a ṣe le fi awọn aṣẹ ranṣẹ si bot, ṣugbọn nigbami a nilo bot lati dahun kii ṣe si awọn aṣẹ nikan, ṣugbọn tun si diẹ ninu awọn ifọrọranṣẹ deede. Lati ṣe eyi o nilo lati lo awọn oluṣakoso ifiranṣẹ - IfiranṣẹHandler.
Deede IfiranṣẹHandler yoo dahun si Egba gbogbo awọn ifiranṣẹ ti nwọle. Nitorinaa, awọn oluṣakoso ifiranṣẹ nigbagbogbo lo papọ pẹlu awọn asẹ. Jẹ ki a kọ bot lati sọ hello kii ṣe lori aṣẹ nikan /hi, sugbon tun nigbakugba ti ọkan ninu awọn wọnyi ọrọ han ninu ifiranṣẹ ranṣẹ si awọn bot: hello, hello, salute, hai, bonjour.
Fun bayi a kii yoo kọ awọn ọna tuntun, nitori… A ti ni ọna kan nipa eyiti bot n kí wa. Gbogbo ohun ti a nilo lati ṣe ni ṣẹda àlẹmọ ti a beere ati oluṣakoso ifiranṣẹ.
Koodu 2: Ṣafikun oluṣakoso ifọrọranṣẹ ati àlẹmọ
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()
Ṣiṣe apẹẹrẹ koodu loke, lẹhin ti o rọpo 'BOT TOKEN rẹ' pẹlu ami-ami gidi ti o gba nigbati o ṣẹda bot nipasẹ Bàbá Bàbá (Mo ti sọrọ nipa ṣiṣẹda bot ni akọkọ article).
Bayi jẹ ki a gbiyanju lati firanṣẹ awọn ifiranṣẹ bot pupọ ti o ni awọn ọrọ ikini ti a ṣe akojọ tẹlẹ:
Nitorinaa, akọkọ, a kọ bot kii ṣe lati sọ hello, ṣugbọn lati dahun si ikini kan. A ṣe eyi nipa lilo ariyanjiyan fesi_to_message_id, eyi ti o wa ni ọna sendMessage(), sinu eyiti o nilo lati gbe id ti ifiranṣẹ si eyiti o fẹ dahun. O le gba id ifiranṣẹ bi eleyi: update$message$message_id.
Ṣugbọn ohun akọkọ ti a ṣe ni ṣafikun àlẹmọ si bot nipa lilo iṣẹ naa BaseFilter():
# создаём фильтры
MessageFilters$hi <- BaseFilter(
# анонимная фильтрующая функция
function(message) {
# проверяем, встречается ли в тексте сообщения слова приветствия
grepl(x = message$text,
pattern = 'привет|здравствуй|салют|хай|бонжур',
ignore.case = TRUE)
}
)
Bi o ṣe le ti ṣe akiyesi, awọn asẹ nilo lati ṣafikun si ohun naa Awọn Asẹ Ifiranṣẹ, eyiti o wa lakoko ti o ti ni ipilẹ kekere ti awọn asẹ ti a ti ṣetan. Ninu apẹẹrẹ wa, si nkan naa Awọn Asẹ Ifiranṣẹ a fi kun ohun ano hi, Eyi jẹ àlẹmọ tuntun.
Lati ṣiṣẹ BaseFilter() o nilo lati kọja iṣẹ àlẹmọ. Ni pataki, àlẹmọ jẹ iṣẹ kan ti o gba apẹẹrẹ ifiranṣẹ kan ati pada TÒÓTỌ tabi eke. Ninu apẹẹrẹ wa, a kọ iṣẹ ti o rọrun ti, lilo iṣẹ ipilẹ grepl() ṣayẹwo ọrọ ifiranṣẹ ati ti o ba baamu ikosile deede привет|здравствуй|салют|хай|бонжур pada TÒÓTỌ.
Nigbamii ti a ṣẹda oluṣakoso ifiranṣẹ hi_txt_hnd <- MessageHandler(say_hello, filters = MessageFilters$hi). Iṣẹ ariyanjiyan akọkọ MessageHandler() ni ọna ti yoo pe olutọju naa, ati pe ariyanjiyan keji jẹ àlẹmọ nipasẹ eyiti yoo pe. Ninu ọran wa, eyi ni àlẹmọ ti a ṣẹda MessageFilters$hi.
O dara, ni ipari, a ṣafikun si dispatcher oluṣakoso ti a ṣẹda hi_txt_hnd.
updater <- updater +
hi_hendler +
hi_txt_hnd
Bi mo ti kowe loke, ninu awọn package telegram.bot ati nkan Awọn Asẹ Ifiranṣẹ Ajọ ti a ṣe sinu tẹlẹ ti wa ti o le lo:
gbogbo - Gbogbo awọn ifiranṣẹ
ọrọ - Awọn ifọrọranṣẹ
pipaṣẹ - Awọn aṣẹ, i.e. awọn ifiranṣẹ ti o bẹrẹ pẹlu /
fesi - Awọn ifiranṣẹ ti o jẹ idahun si ifiranṣẹ miiran
ohun - Awọn ifiranṣẹ ti o ni faili ohun ohun
iwe - Awọn ifiranṣẹ pẹlu iwe ti a firanṣẹ
Fọto - Awọn ifiranṣẹ pẹlu awọn aworan ti a firanṣẹ
sitika - Awọn ifiranṣẹ pẹlu sitika ti a firanṣẹ
fidio - Awọn ifiranṣẹ pẹlu fidio
ohùn - Awọn ifiranṣẹ ohun
olubasọrọ - Awọn ifiranṣẹ ti o ni akoonu telegram olumulo
ipo - Awọn ifiranṣẹ pẹlu geolocation
ibi isere - Awọn ifiranṣẹ ti a firanṣẹ siwaju
ere - Games
Ti o ba fẹ lati darapọ diẹ ninu awọn asẹ ni olutọju kan kan lo ami naa | - bi mogbonwa TABI, ati ami & bi mogbonwa И. Fun apẹẹrẹ, ti o ba fẹ ki bot pe ọna kanna nigbati o ba gba fidio, aworan tabi iwe, lo apẹẹrẹ atẹle lati ṣẹda oluṣakoso ifiranṣẹ:
A ti mọ iru awọn aṣẹ jẹ, bii o ṣe le ṣẹda wọn, ati bii o ṣe le fi ipa mu bot lati ṣiṣẹ aṣẹ ti o fẹ. Ṣugbọn ni awọn igba miiran, ni afikun si orukọ aṣẹ, a nilo lati kọja diẹ ninu awọn data lati ṣiṣẹ.
Ni isalẹ jẹ apẹẹrẹ ti bot ti, fi fun ọjọ ti a fun ati orilẹ-ede, da pada fun ọ ni iru ọjọ lati kalẹnda iṣelọpọ.
Koodu 3: Bot ti o ṣe ijabọ nipasẹ ọjọ ati orilẹ-ede
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()
Ṣiṣe apẹẹrẹ koodu loke, lẹhin ti o rọpo 'BOT TOKEN rẹ' pẹlu ami-ami gidi ti o gba nigbati o ṣẹda bot nipasẹ Bàbá Bàbá (Mo ti sọrọ nipa ṣiṣẹda bot ni akọkọ article).
A ṣẹda bot kan ti o ni ọna kan nikan ni Asenali rẹ check_date, Ọna yii ni a npe ni nipasẹ aṣẹ ti orukọ kanna.
Ṣugbọn, ni afikun si orukọ aṣẹ, ọna yii nilo ki o tẹ awọn aye meji sii, koodu orilẹ-ede ati ọjọ naa. Nigbamii ti, bot ṣayẹwo boya ọjọ ti a fun ni orilẹ-ede ti a sọ pato jẹ ipari ose, ọjọ kuru, tabi ọjọ iṣẹ ni ibamu si kalẹnda iṣelọpọ osise.
Ni ibere fun ọna ti a ṣẹda lati gba afikun awọn paramita pẹlu aṣẹ, lo ariyanjiyan naa pass_args = TRUE ni iṣẹ CommandHandler(), ati nigba ṣiṣẹda ọna kan, ni afikun si awọn ariyanjiyan ti a beere bot, imudojuiwọn ṣẹda aṣayan aṣayan - ọfa. Ọna ti a ṣẹda ni ọna yii yoo gba awọn paramita ti o kọja si bot lẹhin orukọ aṣẹ. Awọn paramita gbọdọ jẹ niya nipasẹ aaye kan; wọn yoo firanṣẹ si ọna bi fekito ọrọ.
Jẹ ki a ṣe ifilọlẹ ati idanwo bot wa.
Ṣiṣe awọn bot ni abẹlẹ
Igbesẹ ti o kẹhin ti a nilo lati pari ni lati ṣe ifilọlẹ bot ni abẹlẹ.
Lati ṣe eyi, tẹle algorithm ti a ṣalaye ni isalẹ:
Fi koodu bot pamọ si faili pẹlu itẹsiwaju R. Nigbati o ba ṣiṣẹ ni RStudio, eyi ni a ṣe nipasẹ akojọ aṣayan. faili, egbe Fipamọ Bi ....
Ṣafikun ọna si folda bin, eyiti o wa ninu folda ninu eyiti o fi ede R sii, si oniyipada Ọna, awọn ilana nibi.
Ṣẹda faili ọrọ deede ninu eyiti o kọ laini 1: R CMD BATCH C:UsersAlseyDocumentsmy_bot.R. Dipo C: Awọn olumuloAlseyDocumentsmy_bot.R kọ ọna si iwe afọwọkọ bot rẹ. Ni akoko kanna, o ṣe pataki pe ko si awọn ohun kikọ Cyrillic tabi awọn aaye ni ọna, nitori eyi le fa awọn iṣoro nigbati o nṣiṣẹ bot. Fipamọ, ki o rọpo itẹsiwaju rẹ pẹlu txt on adan.
Ṣii Iṣeto Iṣẹ-ṣiṣe Windows, awọn ọna pupọ lo wa lati ṣe eyi, fun apẹẹrẹ, ṣii folda eyikeyi ki o tẹ adirẹsi sii %windir%system32taskschd.msc /s. Awọn ọna ifilọlẹ miiran le ṣee rii nibi.
Ni apa ọtun oke ti oluṣeto, tẹ "Ṣẹda iṣẹ-ṣiṣe...".
Lori taabu “Gbogbogbo”, fun iṣẹ-ṣiṣe rẹ ni orukọ aṣa, ki o yipada si ipo “Ṣiṣe fun gbogbo awọn olumulo”.
Lọ si taabu "Awọn iṣẹ", tẹ "Ṣẹda". Ni aaye "Eto tabi iwe afọwọkọ", tẹ "Ṣawakiri", wa eyi ti o ṣẹda ni ipele keji adan faili ki o tẹ O DARA.
Tẹ O DARA ati, ti o ba jẹ dandan, tẹ ọrọ igbaniwọle sii fun akọọlẹ ẹrọ iṣẹ rẹ.
Wa iṣẹ-ṣiṣe ti a ṣẹda ninu oluṣeto, yan ki o tẹ bọtini “Ṣiṣe” ni igun apa ọtun isalẹ.
Bot wa nṣiṣẹ ni abẹlẹ ati pe yoo ṣiṣẹ titi ti o fi da iṣẹ naa duro, tabi pa PC tabi olupin rẹ lori eyiti o ti ṣe ifilọlẹ.
ipari
Ninu àpilẹkọ yii, a ṣe akiyesi bi a ṣe le kọ bot ti o ni kikun ti ko le firanṣẹ nikan, ṣugbọn tun dahun si awọn ifiranṣẹ ti nwọle ati awọn aṣẹ. Imọ ti o gba ti to lati yanju pupọ julọ awọn iṣoro rẹ.
Nkan ti o tẹle yoo sọrọ nipa bii o ṣe le ṣafikun keyboard si bot fun iṣẹ irọrun diẹ sii.