ProHoster > Блог > Whakahaerenga > Te tuhi i te karetao waea i roto i te R (waahanga 2): Te taapiri i te tautoko whakahau me nga whiriwhiringa karere ki te karetao
Te tuhi i te karetao waea i roto i te R (waahanga 2): Te taapiri i te tautoko whakahau me nga whiriwhiringa karere ki te karetao
В Tuhinga o mua I whakaaro matou me pehea te hanga karetao, i arawhitia he tauira o te karaehe Bot me te mohio ki nga tikanga tuku karere ma te whakamahi.
I roto i tenei tuhinga ka haere tonu ahau i tenei kaupapa, no reira ka tūtohu ahau kia timata koe ki te panui i tenei tuhinga i muri i te panui te waahanga tuatahi.
I tenei wa ka whakaaro tatou me pehea te whakaora i to tatou bot me te taapiri i te tautoko whakahau ki a ia, me te mohio ano ki te akomanga Updater.
I te wa o te tuhinga, ka tuhia e matou etahi bots ngawari, ko te mea whakamutunga, i runga i te ra me te waehere whenua, ka whakatau mena he wiki te ra i tetahi whenua, he ra mahi ranei e ai ki te maramataka whakaputa. Engari, pera i mua, ko te kaupapa o te tuhinga ko te whakamohio ia koe ki te atanga o te kete telegram.bot ki te whakaoti i ou ake raruraru.
Nga tuhinga katoa mai i te raupapa "Te tuhi i te karetao waea ki R"
Updater he karaehe e ngawari ake ana ki a koe ki te whakawhanake i te karetao waea, me te whakamahi i te karaehe i raro i te awhi Dispetcher. Taumahi akomanga Updater Ko te whiwhi whakahōutanga mai i te karetao (i te tuhinga o mua i whakamahia e matou te tikanga mo tenei kaupapa getUpdates()), ka whakawhiti atu ki Dispetcher.
I tona hurihanga Dispetcher kei roto ko nga kaikawe i hanga e koe, ara. taonga akomanga Handler.
Kaihautu - kaikawe
Me nga kaihautu ka taapirihia e koe Dispetcher tauhohenga bot ki nga momo huihuinga. I te wa i tuhia ai tenei tuhinga i roto i telegram.bot Ko nga momo kaihautu e whai ake nei kua taapirihia:
MessageHandler — Kaihautu Karere
CommandHandler — Kaihautu whakahau
CallbackQueryHandler — Kaihautu Raraunga mo nga papapātuhi i tukuna mai i Roraina
ErrorHandler - Kaihautu hapa i te tono whakahōutanga mai i te karetao
Tāpirihia te whakahau tuatahi ki te karetao, te kaiwhakahaere whakahau
Mena kaore koe i whakamahi i nga karetao i mua atu karekau koe e mohio he aha te whakahau, katahi ka tukuna nga whakahau ki te karetao ma te whakamahi i te rītaha whakamua / hei prefix.
Ka timata tatou ki nga whakahau ngawari, i.e. kia ako tatou i to tatou bot ki te oha i runga i te whakahau /hi.
Waehere 1: Te whakaako i te karetao ki te oha
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()
Whakahaerehia te tauira waehere i runga ake nei, i muri i te whakakapi i te 'TOKEN BOT TOKEN' ki te tohu pono i riro i a koe i te wa e hanga ana i te karetao ma Matua Matua (I korero ahau mo te hanga karetao ki roto tuhinga tuatahi).
Tikanga start_polling() akomanga Updater, e whakamahia ana i te mutunga o te waehere, ka timata i te waahi mutunga kore o te tono me te tukatuka i nga whakahou mai i te bot.
Inaianei me whakatuwhera a Telegram ka tuhi i te whakahau tuatahi ki ta maatau bot /hi.
Inaianei kua mohio to tatou bot ki te whakahau /hi, e mohio ana ki te oha ki a matou.
Ko te tikanga, ka taea te whakaatu i te tikanga o te hanga karetao ngawari penei.
Waihangahia he tauira o te akomanga Updater;
Ka hangaia e matou nga tikanga, i.e. nga mahi ka mahia e to maatau bot. I roto i te tauira waehere he mahi tenei say_hello(). Ko nga mahi ka whakamahia e koe hei tikanga bot me rua nga tohenga e hiahiatia ana - BOT и whakahou, me tetahi kowhiri - Tuhinga o mua. Tohenga BOT, Ko to bot tenei, me tana awhina ka taea e koe te whakautu ki nga karere, te tuku karere, te whakamahi ranei i etahi atu tikanga e waatea ana ki te bot. Tohenga whakahou koinei te mea i riro mai i te karetao mai i te kaiwhakamahi, inaa, ko ta matou i whiwhi i te tuhinga tuatahi ma te whakamahi i te tikanga getUpdates(). Tohenga Tuhinga o mua ka taea e koe te tukatuka i nga raraunga taapiri i tukuna e te kaiwhakamahi me te whakahau, ka hoki mai ano matou ki tenei kaupapa i muri mai;
Ka hangaia e matou nga kaihautu, i.e. Ka honoa e matou etahi mahi a te kaiwhakamahi me nga tikanga i hangaia i te taahiraa o mua. Ko te mea nui, ko te kaikawe he keu, he huihuinga e kii ana i etahi mahi bot. I roto i ta maatau tauira, ko taua keu te tuku whakahau /hi, ka whakatinanahia e te roopu hi_hendler <- CommandHandler('hi', say_hello). Tohenga mahi tuatahi CommandHandler() ka taea e koe ki te whakapūtā he whakahau, i roto i to tatou take hi, ka whakautu te bot. Ko te tautohetohe tuarua ka taea e koe te tohu i te tikanga bot, ka karangahia e matou te tikanga say_hello, ka mahia mena ka karangahia e te kaiwhakamahi te whakahau i tohua i te tohenga tuatahi;
I muri mai, ka taapirihia e matou te kaihautu i hangaia ki te kaikawe o ta maatau akomanga Updater. Ka taea e koe te taapiri i nga kaikawe i roto i nga huarahi maha; i roto i te tauira i runga ake nei, i whakamahia e au te mea ngawari, ma te whakamahi i te tohu +, i.e. updater <- updater + hi_hendler. Ka taea ano te mahi ma te whakamahi i te tikanga add_handler(), no te karaehe Dispatcher, ka kitea e koe tenei tikanga penei: updater$dispatcher$add_handler();
Whakarewahia te karetao ma te whakamahi i te whakahau start_polling().
Tukatuka karere kuputuhi me nga whiriwhiringa
I whakaaro matou me pehea te tuku whakahau ki te karetao, engari i etahi wa ka hiahia matou ki te karetao ki te whakautu kaua ki nga whakahau anake, engari ki etahi karere kuputuhi auau. Hei mahi i tenei me whakamahi koe i nga kaikawe karere − Kaihautu Karere.
noa Kaihautu Karere ka whakautu ki nga karere taumai katoa. Na reira, ka whakamahia nga kaikawe karere me nga whiriwhiringa. Me whakaako te karetao ki te oha ehara i te whakahau anake /hi, engari ina puta tetahi o nga kupu e whai ake nei i roto i te karere i tukuna ki te bot: tena koe, tena koe, tena koe, hai, bonjour.
Inaianei e kore matou e tuhi tikanga hou, na te mea... Kei a matou he tikanga e mihi ai te karetao ki a matou. Ko nga mea katoa hei mahi maatau ko te hanga i te tātari me te kaikawe karere e hiahiatia ana.
Waehere 2: Tāpirihia he kaikawe karere kuputuhi me te tātari
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()
Whakahaerehia te tauira waehere i runga ake nei, i muri i te whakakapi i te 'TOKEN BOT TOKEN' ki te tohu pono i riro i a koe i te wa e hanga ana i te karetao ma Matua Matua (I korero ahau mo te hanga karetao ki roto tuhinga tuatahi).
Inaianei me ngana ki te tuku i te karetao etahi karere kei roto nga kupu mihi kua whakarārangihia i mua ake nei:
Na, ko te tuatahi, i whakaakona te karetao kia kaua e oha noa, engari ki te whakautu ki te mihi. I mahia e matou ma te whakamahi i te tautohetohe whakautu_ki_karere_id, e wātea ana i roto i te tikanga sendMessage(), ka hiahia koe ki te whakawhiti i te id o te karere e hiahia ana koe ki te whakautu. Ka taea e koe te tiki i te id karere penei: update$message$message_id.
Engari ko te mea nui i mahia e matou ko te taapiri i tetahi tātari ki te karetao ma te whakamahi i te mahi BaseFilter():
# создаём фильтры
MessageFilters$hi <- BaseFilter(
# анонимная фильтрующая функция
function(message) {
# проверяем, встречается ли в тексте сообщения слова приветствия
grepl(x = message$text,
pattern = 'привет|здравствуй|салют|хай|бонжур',
ignore.case = TRUE)
}
)
Kua kite pea koe, me taapiri nga whiriwhiringa ki te ahanoa MessageFilters, i te tuatahi kei roto he huinga iti o nga whiriwhiringa kua rite. I roto i to tatou tauira, ki te ahanoa MessageFilters i tapiritia e matou he huānga hi, he tātari hou tenei.
Ki te mahi BaseFilter() me tuku e koe te mahi tātari. Ko te tikanga, he mahi noa te tātari ka whiwhi tauira karere ka hoki mai Tuhinga ranei FALSE. I roto i to maatau tauira, i tuhia e matou he mahi ngawari, ma te whakamahi i te mahi taketake grepl() ka taki i te tuhinga o te karere me te mea e rite ana ki te korero o ia wa привет|здравствуй|салют|хай|бонжур hoki mai Tuhinga.
I muri mai ka hanga e matou he kaikawe korero hi_txt_hnd <- MessageHandler(say_hello, filters = MessageFilters$hi). Tohenga mahi tuatahi MessageHandler() Ko te tikanga ka karanga i te kaihautu, ko te tohenga tuarua ko te tātari e kiia ai. I a maatau, koinei te tātari i hangaia e matou MessageFilters$hi.
Ana, i te mutunga, ka taapirihia e matou ki te kaikawe te kaihautu i hangaia hi_txt_hnd.
updater <- updater +
hi_hendler +
hi_txt_hnd
Ka rite ki taku tuhituhi i runga ake nei, i roto i te kete telegram.bot me te whakahee MessageFilters He huinga whiriwhiringa hanga-roto ka taea e koe te whakamahi:
katoa — Karere katoa
kuputuhi — Karere kuputuhi
whakahau — Commands, i.e. karere ka timata ki /
whakautu — Nga Karere he whakautu ki tetahi atu karere
ororongo — Nga Karere kei roto he konae oro
tuhinga — Nga Karere me te tuhinga kua tukuna
whakaahua - Karere me nga whakaahua kua tukuna
whakapiri — Karere me te whakapiri whakapiri
ataata — Karere me te ataata
reo - Karere reo
whakapā - Nga Karere kei roto nga korero waea a te kaiwhakamahi
wāhi - Karere me te geolocation
te waahi - Nga Karere Whakamua
kēmu — Games
Mena kei te pirangi koe ki te whakakotahi i etahi whiriwhiringa ki tetahi kaihautu me whakamahi noa i te tohu | - hei arorau Or, me te haina & rite arorau И. Hei tauira, ki te hiahia koe ki te karetao ki te karanga i te tikanga ano ka whiwhi ia i tetahi ataata, whakaahua, tuhinga ranei, whakamahia te tauira e whai ake nei hei hanga i tetahi kaikawe karere:
Kua mohio tatou he aha nga whakahau, me pehea te hanga, me pehea te akiaki i te bot ki te whakatutuki i te whakahau e hiahiatia ana. Engari i etahi wa, hei taapiri i te ingoa whakahau, me tuku etahi raraunga hei mahi.
Kei raro nei he tauira o te karetao, i homai he ra me te whenua, ka whakahoki mai ki a koe te momo ra mai i te maramataka whakaputa.
Ka whakamahia e te karetao i raro te API maramataka whakaputa isdayoff.ru.
Waehere 3: Bot e whakaatu ana i te ra me te whenua
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()
Whakahaerehia te tauira waehere i runga ake nei, i muri i te whakakapi i te 'TOKEN BOT TOKEN' ki te tohu pono i riro i a koe i te wa e hanga ana i te karetao ma Matua Matua (I korero ahau mo te hanga karetao ki roto tuhinga tuatahi).
I hanga e matou he karetao he kotahi noa te tikanga kei roto i tana taonga check_date, ka karangahia tenei tikanga e te whakahau o taua ingoa.
Engari, hei taapiri i te ingoa whakahau, ko tenei tikanga me whakauru koe kia rua nga taapiri, te waehere whenua me te ra. Whai muri, ka tirohia e te karetao mena he wiki te ra i te whenua kua tohua, he ra poto, he ra mahi ranei e ai ki te maramataka whakaputa mana.
Kia taea ai e te tikanga ka hangaia e matou te whakaae ki etahi taapiri me te whakahau, whakamahia te tautohe pass_args = TRUE i roto i te mahi CommandHandler(), me te wa e hanga ana i tetahi tikanga, i tua atu i nga tautohetohe e hiahiatia ana BOT, whakahou hanga he kōwhiringa - Tuhinga o mua. Ko te tikanga i hangaia penei ka whakaae ki nga tawhā ka tukuna e koe ki te bot i muri i te ingoa whakahau. Ko nga tawhā me wehe ma te mokowā, ka tukuna ki te tikanga hei vector kuputuhi.
Ka whakarewahia, ka whakamatau i ta tatou karetao.
Whakahaerehia te karetao ki muri
Ko te mahi whakamutunga hei whakaoti ko te whakarewa i te karetao ki muri.
Ki te mahi i tenei, whai i te algorithm e whakaahuatia ana i raro nei:
Tiakina te waehere bot ki tetahi konae me te toronga R. I te wa e mahi ana i RStudio, ka mahia tenei ma te tahua kōnae, kapa Tiaki Hei ....
Tāpirihia te ara ki te kōpaki ipu, kei roto i te kōpaki i whakauruhia e koe te reo R, ki te taurangi Ara, nga tohutohu konei.
Waihangahia he konae kupu tuhi 1 rarangi: R CMD BATCH C:UsersAlseyDocumentsmy_bot.R... Engari o C:UsersAlseyDocumentsmy_bot.R tuhia te ara ki to tuhinga karetao. I te wa ano, he mea nui kia kore he tohu Cyrillic, he waahi ranei i te huarahi, no te mea ka raru pea tenei i te wa e whakahaere ana te bot. Tiakina, ka whakakapi i tona toronga ki TXT i runga i potae.
Whakatuwherahia te Kaihōtaka Mahi Windows, he maha nga huarahi hei mahi i tenei, hei tauira, whakatuwhera tetahi kōpaki ka uru ki te wahitau %windir%system32taskschd.msc /s. Ka kitea etahi atu tikanga whakarewa konei.
I te tahua matau o runga o te kaihōtaka, pawhiria "Waihanga mahi...".
I runga i te ripa "General", hoatu he ingoa ritenga mo to mahi, ka huri i te whakawhiti ki te ahua "Run for all users".
Haere ki te ripa "Mahinga", pawhiria te "Waihanga". I roto i te mara "Pataka, tuhinga ranei", panui "Tirotiro", kimihia te mea i hangaia i te waahanga tuarua potae kōnae ka pāwhiri OK.
Patohia te OK a, ki te tika, whakauruhia te kupuhipa mo to putea punaha whakahaere.
Kimihia te mahi i hangaia i roto i te raarangi, tohua ka paato i te paatene "Oma" i te kokonga matau o raro.
Ka rere to tatou karetao ki muri ka mahi kia mutu ra ano i a koe te mahi, whakawetohia ranei to PC me to tūmau i whakarewahia ai.
mutunga
I roto i tenei tuhinga, i whakaarohia e matou me pehea te tuhi i te karetao katoa e kore e taea te tuku karere anake, engari ano hoki te whakautu ki nga karere me nga whakahau taumai. Ko nga matauranga kua riro mai kua ranea hei whakaoti i te nuinga o o raru.
Ko te tuhinga e whai ake nei ka korero mo te taapiri i te papapātuhi ki te karetao kia pai ake te mahi.