ProHoster > Блог > Maamulka > Qorista bot telegram ee R (qaybta 3): Sida loogu daro taageerada kiiboodhka bot
Qorista bot telegram ee R (qaybta 3): Sida loogu daro taageerada kiiboodhka bot
Tani waa maqaalkii saddexaad ee taxanaha "Qoritaanka bot telegram ee R". Daabacaadadii hore, waxaan ku baranay sida loo sameeyo bot telegram, u dir fariimaha iyada oo loo marayo, amarrada iyo filtarrada fariinta lagu daro bot-ka. Sidaa darteed, ka hor inta aanad bilaabin akhrinta maqaalkan, waxaan aad ugu talinayaa inaad akhrido hore, sababtoo ah Halkan kuma sii joogi doono aasaaskii hore ee lagu sharraxay ee dhismaha bot.
Maqaalkan, waxaanu hagaajin doonaa isticmaalka bot-kayaga anagoo ku darayna kiiboodhka, kaas oo ka dhigi doona interface bot mid dareen leh oo sahlan in la isticmaalo.
Dhammaan maqaallada taxanaha ah "Qoritaanka bot telegram ee R"
Haddii aad xiisaynayso falanqaynta xogta, waxaa laga yaabaa inaad xiisaynayso aniga telegram и youtube kanaalada. Inta badan waxa ku jira waxa u heellan luqadda R.
Waqtiga qoraalkan telegram.bot Waxay kuu ogolaanaysaa inaad abuurto laba nooc oo kiiboodhka ah:
Jawaab - Kiiboodhka ugu weyn, ee caadiga ah, kaas oo ku yaal hoosta guddiga gelinta qoraalka. Keyboard-ka noocan oo kale ah wuxuu si fudud ugu diraa fariin qoraal ah bot-ka, qoraal ahaana wuxuu u diri doonaa qoraalka ku qoran badhanka laftiisa.
Inline - kiiboodhka la xidhiidha fariin gaar ah oo bot ah. Kiiboodhkani waxa uu soo diraa xogta bot-ka ee la xidhiidha badhanka la riixay, xogtani waxa ay ka duwanaan kartaa qoraalka ku qoran badhanka laftiisa. Oo badhamada noocan oo kale ah ayaa lagu farsameeyaa CallbackQueryHandler.
Si bot-ku u furo kumbuyuutarka, waa lagama maarmaan marka fariin loo dirayo habka sendMessage(), u gudbi kiiboodhka hore loo abuuray dood ahaan reply_markup.
Hoos waxaan ku eegi doonaa dhawr tusaale.
Kiiboodhka ka jawaab
Sida aan kor ku qoray, kani waa kiiboodhka ugu weyn ee kantaroolka bot.
Tusaale ahaan abuurista kiiboodhka jawaabta ee caawimada rasmiga ah
Kor ku xusan waa tusaale ka yimid caawimaadda rasmiga ah ee xirmada telegram.bot. Si aad u abuurto kiiboodhka, isticmaal shaqada ReplyKeyboardMarkup(), taas oo iyaduna qaadata liiska badhamada ay samaysay shaqadu KeyboardButton().
Maxay tahay sababta ReplyKeyboardMarkup() Ma u baahan tahay inaad dhaafto liis oo keliya, laakiin liiska liisaska? Xaqiiqdu waxay tahay inaad gudubto liiska ugu muhiimsan, oo aad ku qeexdo saf kasta oo badhamada liisaska kala duwan, sababtoo ah Waxaad ku dhejin kartaa dhowr badhan hal saf.
dood resize_keyboard Waxay kuu ogolaaneysaa inaad si toos ah u doorato cabbirka ugu fiican ee badhamada kiiboodhka, iyo doodda one_time_keyboard Waxay kuu ogolaanaysaa inaad qariso kiiboodhka ka dib batoon kasta oo la riixo.
Gelitaankayga - Codso magacaaga isticmaale ee telegram
Koodhka 1: Bot fudud oo leh kiiboodhka jawaabta
library(telegram.bot)
# создаём экземпляр класса Updater
updater <- Updater('ТОКЕН ВАШЕГО БОТА')
# создаём методы
## метод для запуска клавиатуры
start <- function(bot, update) {
# создаём клавиатуру
RKM <- ReplyKeyboardMarkup(
keyboard = list(
list(KeyboardButton("Чат ID")),
list(KeyboardButton("Моё имя")),
list(KeyboardButton("Мой логин"))
),
resize_keyboard = FALSE,
one_time_keyboard = TRUE
)
# отправляем клавиатуру
bot$sendMessage(update$message$chat_id,
text = 'Выберите команду',
reply_markup = RKM)
}
## метод возвразающий id чата
chat_id <- function(bot, update) {
bot$sendMessage(update$message$chat_id,
text = paste0("Чат id этого диалога: ", update$message$chat_id),
parse_mode = "Markdown")
}
## метод возвращающий имя
my_name <- function(bot, update) {
bot$sendMessage(update$message$chat_id,
text = paste0("Вас зовут ", update$message$from$first_name),
parse_mode = "Markdown")
}
## метод возвращающий логин
my_username <- function(bot, update) {
bot$sendMessage(update$message$chat_id,
text = paste0("Ваш логин ", update$message$from$username),
parse_mode = "Markdown")
}
# создаём фильтры
## сообщения с текстом Чат ID
MessageFilters$chat_id <- BaseFilter(function(message) {
# проверяем текст сообщения
message$text == "Чат ID"
}
)
## сообщения с текстом Моё имя
MessageFilters$name <- BaseFilter(function(message) {
# проверяем текст сообщения
message$text == "Моё имя"
}
)
## сообщения с текстом Мой логин
MessageFilters$username <- BaseFilter(function(message) {
# проверяем текст сообщения
message$text == "Мой логин"
)
# создаём обработчики
h_start <- CommandHandler('start', start)
h_chat_id <- MessageHandler(chat_id, filters = MessageFilters$chat_id)
h_name <- MessageHandler(my_name, filters = MessageFilters$name)
h_username <- MessageHandler(my_username, filters = MessageFilters$username)
# добавляем обработчики в диспетчер
updater <- updater +
h_start +
h_chat_id +
h_name +
h_username
# запускаем бота
updater$start_polling()
Orod tusaalaha koodka sare, ka dib markii aad ku bedesho 'BOT TOKENKA' calaamada dhabta ah ee aad heshay markii aad samaynaysay bot-ka BotAabbe (Waxaan ka hadlay abuurista bot maqaalka koowaad).
Ka dib markaad bilowdo, sii bot amar /start, sababtoo ah Tani waa sida saxda ah ee aan u qeexnay inaan furno kiiboodhka.
Haddii hadda ay kugu adag tahay inaad kala qaybiso tusaalaha koodhka la bixiyay, iyadoo la abuurayo habab, filtarrada iyo maamulayaasha, markaa waa inaad ku noqotaa kii hore. maqaal, taas oo aan ku sifeeyay waxaas oo dhan si faahfaahsan.
Waxaan abuurnay 4 hab:
bilow - Fur kumbuyuutarka
chat_id - Codso aqoonsiga wada sheekaysiga
my_name - Codso magacaaga
my_username - Codso galidaada
In la diido Filters Message ku daray 3 fariimo filtarrada ku salaysan qoraalkooda:
chat_id - Fariimo qoraal ah "Чат ID"
magac - Farriimo qoraal ah "Моё имя"
username - Farriimo qoraal ah "Мой логин"
Oo waxaan abuurnay 4 maamulayaal, oo ku saleysan amarada la bixiyay iyo filtarrada, waxay fulin doonaan hababka la cayimay.
Xaaladeena, waxaan dhignay dhammaan badhamada midba midka kale, laakiin waxaan ku habeyn karnaa hal saf annagoo isbeddel ku samaynayna liiska badhanka. Sababtoo ah hal saf oo ku dhex jira kiiboodhka waxa lagu dhex abuuraa liis buul ah oo badhanno ah, ka dib si aanu badhamadayada ugu soo bandhigno hal saf waxaan u baahanahay in aan dib u qorno qayb ka mid ah code-ka lagu dhisayo kiiboodhka sidan oo kale.
Waxaad u baahan tahay inaad dhisto kiiboodhka khadka tooska ah adoo isticmaalaya amarka InlineKeyboardMarkup(), isla mabda'a kiiboodhka jawaabta. IN InlineKeyboardMarkup() Waa lagama maarmaan in la gudbiyo liiska liisaska badhanka Inline, badhan kasta oo shakhsi ah ayaa abuuray shaqada InlineKeyboardButton().
Badhanka dhexda ah ayaa ama u gudbin kara xogta bot-ka isagoo isticmaalaya dood callback_data, ama fur bog kasta oo HTML ah oo lagu cayimay adoo isticmaalaya doodda url.
Natiijadu waxay noqon doontaa liis ay element kasta sidoo kale waa liiska badhamada Inline ee u baahan in la isku daro hal saf.
Tusaale bot fudud oo taageero u ah badhamada InLine
Marka hore, waxaanu u qori doonaa bot si loogu baadho Covid-19. Amarka /test, waxay kuu soo diri doontaa kiiboodhka laba badhan, iyadoo ku xidhan badhanka la riixo waxay kuu soo diri doontaa fariin ay ku jirto natiijada tijaabadaada.
Koodhka 2: Botka ugu fudud ee leh kiiboodhka khadka
library(telegram.bot)
# создаём экземпляр класса Updater
updater <- Updater('ТОКЕН ВАШЕГО БОТА')
# метод для отправки InLine клавиатуры
test <- function(bot, update) {
# создаём InLine клавиатуру
IKM <- InlineKeyboardMarkup(
inline_keyboard = list(
list(
InlineKeyboardButton("Да", callback_data = 'yes'),
InlineKeyboardButton("Нет", callback_data = 'no')
)
)
)
# Отправляем клавиатуру в чат
bot$sendMessage(update$message$chat_id,
text = "Вы болете коронавирусом?",
reply_markup = IKM)
}
# метод для обработки нажатия кнопки
answer_cb <- function(bot, update) {
# полученные данные с кнопки
data <- update$callback_query$data
# получаем имя пользователя, нажавшего кнопку
uname <- update$effective_user()$first_name
# обработка результата
if ( data == 'no' ) {
msg <- paste0(uname, ", поздравляю, ваш тест на covid-19 отрицательный.")
} else {
msg <- paste0(uname, ", к сожалени ваш тест на covid-19 положительный.")
}
# Отправка сообщения
bot$sendMessage(chat_id = update$from_chat_id(),
text = msg)
# сообщаем боту, что запрос с кнопки принят
bot$answerCallbackQuery(callback_query_id = update$callback_query$id)
}
# создаём обработчики
inline_h <- CommandHandler('test', test)
query_handler <- CallbackQueryHandler(answer_cb)
# добавляем обработчики в диспетчер
updater <- updater + inline_h + query_handler
# запускаем бота
updater$start_polling()
Orod tusaalaha koodka sare, ka dib markii aad ku bedesho 'BOT TOKENKA' calaamada dhabta ah ee aad heshay markii aad samaynaysay bot-ka BotAabbe (Waxaan ka hadlay abuurista bot maqaalka koowaad).
Natiijada:
Waxaan abuurnay laba hab:
imtixaanka - Si aad u dirto si aad ugu sheekeysato kiiboodhka khadka tooska ah
jawaab_cb - Si loo habeeyo xogta laga soo diray kiiboodhka.
Xogta laga soo diri doono badhan kasta waxay ku qeexan tahay doodda callback_data, marka la abuurayo badhan. Waxaad ka heli kartaa xogta laga soo diray badhanka adigoo isticmaalaya dhismaha update$callback_query$data, gudaha habka jawaab_cb.
Si bot-ku uga falceliyo kiiboodhka khadka, habka jawaab_cb waxaa farsameeyay gacanle gaar ah: CallbackQueryHandler(answer_cb). Kaas oo socodsiiya habka la cayimay marka badhanka Inline-ka la riixo. Xakameeyaha CallbackQueryHandler waxay qaadataa laba doodood:
callback - Habka loo baahan yahay in la socodsiiyo
pattern - Ku shaandhayso xogta ku xidhan badhanka adoo isticmaalaya dood callback_data.
Sida waafaqsan, isticmaalka doodda pattern Waxaan u qori karnaa hab gaar ah oo lagu riixayo badhan kasta:
Xeerka 3: Hababka kala soocida badhan kasta oo khadka
library(telegram.bot)
# создаём экземпляр класса Updater
updater <- Updater('ТОКЕН ВАШЕГО БОТА')
# метод для отправки InLine клавиатуры
test <- function(bot, update) {
# создаём InLine клавиатуру
IKM <- InlineKeyboardMarkup(
inline_keyboard = list(
list(
InlineKeyboardButton("Да", callback_data = 'yes'),
InlineKeyboardButton("Нет", callback_data = 'no')
)
)
)
# Отправляем клавиатуру в чат
bot$sendMessage(update$message$chat_id,
text = "Вы болете коронавирусом?",
reply_markup = IKM)
}
# метод для обработки нажатия кнопки Да
answer_cb_yes <- function(bot, update) {
# получаем имя пользователя, нажавшего кнопку
uname <- update$effective_user()$first_name
# обработка результата
msg <- paste0(uname, ", к сожалени ваш текст на covid-19 положительный.")
# Отправка сообщения
bot$sendMessage(chat_id = update$from_chat_id(),
text = msg)
# сообщаем боту, что запрос с кнопки принят
bot$answerCallbackQuery(callback_query_id = update$callback_query$id)
}
# метод для обработки нажатия кнопки Нет
answer_cb_no <- function(bot, update) {
# получаем имя пользователя, нажавшего кнопку
uname <- update$effective_user()$first_name
msg <- paste0(uname, ", поздравляю, ваш текст на covid-19 отрицательный.")
# Отправка сообщения
bot$sendMessage(chat_id = update$from_chat_id(),
text = msg)
# сообщаем боту, что запрос с кнопки принят
bot$answerCallbackQuery(callback_query_id = update$callback_query$id)
}
# создаём обработчики
inline_h <- CommandHandler('test', test)
query_handler_yes <- CallbackQueryHandler(answer_cb_yes, pattern = 'yes')
query_handler_no <- CallbackQueryHandler(answer_cb_no, pattern = 'no')
# добавляем обработчики в диспетчер
updater <- updater +
inline_h +
query_handler_yes +
query_handler_no
# запускаем бота
updater$start_polling()
Orod tusaalaha koodka sare, ka dib markii aad ku bedesho 'BOT TOKENKA' calaamada dhabta ah ee aad heshay markii aad samaynaysay bot-ka BotAabbe (Waxaan ka hadlay abuurista bot maqaalka koowaad).
Hadda waxaan qornay 2 hab oo kala duwan i.e. hal hab, ee badhan kasta riix, oo loo isticmaalo doodda pattern, marka la abuurayo maamulayaashooda:
httr - xirmo loogu talagalay la shaqeynta codsiyada HTTP, taas oo ku saleysan shaqada API kasta la dhisay. Xaaladeena waxaan isticmaali doonaa API-ga bilaashka ah openweathermap.org.
stringr - xirmo loogu talagalay la shaqeynta qoraalka, xaaladdeenna waxaan u isticmaali doonnaa si aan u abuurno farriin ku saabsan cimilada magaalada la doortay.
Xeerka 4: Bot ka warbixinaya cimilada hadda ee magaalada la doortay
Iyo dhamaadka, habkayaga ugu weyn jawaab_cb waxay ka falcelisaa marka la riixo badhamada Inline-ka, kaas oo uu fuliyo hawlwadeen gaar ah: CallbackQueryHandler(answer_cb).
Gudaha hab jawaab_cb, waxaanu akhrinay xogta laga soo diray kiiboodhka waxaanu u qoraynaa doorsoome city: city <- update$callback_query$data. Kadibna waxaanu ka codsanaa xogta cimilada API-ga, abuurnaa oo dirnaa fariin, oo ugu dambeyntii isticmaal habka answerCallbackQuery si aan u ogaysiiyo bot-ka in aanu farsamaynay dhagsii badhanka Inline-ka.
Tusaalaha bot-ka ee soo bandhigaya liiska maqaalladii ugu dambeeyay ee leh xiriirinta Hubka la cayimay www.habr.com.
Waxaan soo bandhigay bot-kan si aan ku tuso sida loo muujiyo badhamada Inline-ka ee u horseedaya bogagga shabakadda.
Macnaha bot-kani waxa uu la mid yahay kii hore; marka hore waxaanu ku bilaabaynaa kiiboodhka ugu muhiimsan ee amarka /start. Marka xigta, botku wuxuu na siinayaa liis ah 6 hub oo aan ka dooran karno, waxaanu dooranaa xuddunta aan xiisayno, waxaanan ka helnaa 5 daabacaad ee ugu dambeeyay Hub la doortay.
Sida aad fahamsan tahay, kiiskan waxaan u baahanahay inaan helno liiska maqaallada, taasna waxaan u isticmaali doonaa xirmo gaar ah habR, kaas oo kuu ogolaanaya inaad ka codsato maqaallada Habra iyo tirokoobyada iyaga ku saabsan ee R.
Ku rakib xirmo habR kaliya suurtagal ka ah github, kaas oo aad u baahan doonto xirmo dheeraad ah devtools. Si aad u rakibto, isticmaal koodka hoose.