Ndi mitundu yanji ya kiyibodi yomwe telegraph bot imathandizira?
Pa nthawi yolemba izi telegram.bot amakulolani kupanga mitundu iwiri ya kiyibodi:
Yankhani - Kiyibodi yayikulu, yokhazikika, yomwe ili pansi pa gulu lolowetsa mawu. Kiyibodi yotereyi imangotumiza meseji ku bot, ndipo monga mawuwo imatumiza zolemba zomwe zalembedwa pa batani lokha.
Inline - Kiyibodi yolumikizidwa ndi uthenga wina wa bot. Kiyibodi iyi imatumiza data ya bot yolumikizidwa ndi batani lopanikizidwa; izi zitha kusiyana ndi zomwe zalembedwa pa batani lomwe. Ndipo mabatani oterowo amakonzedwa CallbackQueryHandler.
Kwa ife, tinayika mabatani onse pansi pa wina ndi mzake, koma tikhoza kuwakonza pamzere umodzi mwa kusintha mndandanda wa mndandanda wa mabatani. Chifukwa Mzere umodzi mkati mwa kiyibodi umapangidwa kudzera pamndandanda wa mabatani omwe ali pachisa, ndiye kuti tiwonetse mabatani athu pamzere umodzi tiyenera kulembanso gawo la code yomanga kiyibodi motere:
Kiyibodi imatumizidwa kumacheza pogwiritsa ntchito njira sendMessage(), mu mkangano reply_markup.
bot$sendMessage(update$message$chat_id,
text = 'Выберите команду',
reply_markup = RKM)
Kiyibodi yapaintaneti
Monga ndalemba pamwambapa, kiyibodi ya Inline imamangiriridwa ku uthenga wina. Ndizovuta kwambiri kugwira ntchito kuposa kiyibodi yayikulu.
Poyamba, muyenera kuwonjezera njira ku bot kuti muyitane kiyibodi ya Inline.
Kuti muyankhe pakadina batani la Inline, mutha kugwiritsanso ntchito njira ya bot answerCallbackQuery(), yomwe imatha kuwonetsa zidziwitso mu mawonekedwe a telegalamu kwa wogwiritsa ntchito akanikizira batani la Inline.
Muyenera kupanga kiyibodi ya Inline pogwiritsa ntchito lamulo InlineKeyboardMarkup(), pa mfundo yofanana ndi Yankho kiyibodi. MU InlineKeyboardMarkup() m'pofunika kudutsa mndandanda wa mindandanda ya Inline mabatani, aliyense batani amapangidwa ndi ntchito InlineKeyboardButton().
Batani lapakati limatha kupititsa deta ku bot pogwiritsa ntchito mkangano callback_data, kapena tsegulani tsamba lililonse la HTML lotchulidwa pogwiritsa ntchito mkangano url.
Zotsatira zake zidzakhala mndandanda womwe chinthu chilichonse chilinso mndandanda wa mabatani a Inline omwe amayenera kuphatikizidwa mumzere umodzi.
Kenako tiwona zitsanzo zingapo za bots okhala ndi mabatani a Inline.
Chitsanzo cha bot yosavuta yothandizidwa ndi mabatani a InLine
Choyamba, tilemba bot kuti tiyese kuyesa Covid-19. Mwa kulamula /test, idzakutumizirani kiyibodi yokhala ndi mabatani awiri, kutengera batani lomwe lakanidwa idzakutumizirani uthenga ndi zotsatira za kuyesa kwanu.
Khodi 2: Boti yosavuta kwambiri yokhala ndi kiyibodi ya Inline
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()
Thamangani chitsanzo cha code pamwambapa, mutasintha 'BOT TOKEN YAKO' ndi chizindikiro chenicheni chomwe mudalandira popanga bot kudzera. Abambo (Ndinayankhula za kupanga bot mkati nkhani yoyamba).
Zotsatira:
Tinapanga njira ziwiri:
mayeso - Kutumiza ku macheza a Inline kiyibodi
yankho_cb - Kukonza zomwe zatumizidwa kuchokera ku kiyibodi.
Deta yomwe idzatumizidwa kuchokera ku batani lililonse imatchulidwa mu mkangano callback_data, popanga batani. Mutha kulandira deta yotumizidwa kuchokera ku batani pogwiritsa ntchito kumanga update$callback_query$data, mkati mwa njira yankho_cb.
Kuti bot igwirizane ndi kiyibodi ya Inline, njira yankho_cb kukonzedwa ndi wothandizira wapadera: CallbackQueryHandler(answer_cb). Zomwe zimayendetsa njira yodziwika pamene batani la Inline likudina. Wothandizira CallbackQueryHandler zimatenga mfundo ziwiri:
callback - Njira yomwe iyenera kuyendetsedwa
pattern - Sefa ndi data yomwe imamangiriridwa ku batani pogwiritsa ntchito mkangano callback_data.
Lingaliro la ntchito yake lidzakhala motere. Poyamba ndi timu /start mumatcha kiyibodi yayikulu, yomwe ili ndi batani limodzi lokha la "Nyengo". Mukadina batani ili mudzalandira uthenga wokhala ndi kiyibodi ya Inline kuti musankhe mzinda womwe mukufuna kudziwa momwe nyengo ilili. Sankhani umodzi mwamizinda ndikupeza nyengo yomwe ilipo.
Muchitsanzo cha code iyi tidzagwiritsa ntchito zina zowonjezera:
httr - phukusi logwirira ntchito ndi zopempha za HTTP, pamaziko omwe ntchito ndi API iliyonse imamangidwa. Kwa ife tidzagwiritsa ntchito API yaulere openweathermap.org.
stringr - phukusi logwirira ntchito ndi zolemba, kwa ife tidzagwiritsa ntchito kupanga uthenga wokhudza nyengo mumzinda wosankhidwa.
Khodi 4: Boti yomwe imafotokoza zanyengo ya mzinda womwe wasankhidwa
Thamangani chitsanzo cha code pamwambapa, mutasintha 'BOT TOKEN YAKO' ndi chizindikiro chenicheni chomwe mudalandira popanga bot kudzera. Abambo (Ndinayankhula za kupanga bot mkati nkhani yoyamba).
Zotsatira zake, bot yathu igwira ntchito motere:
Mwadongosolo, bot iyi ikhoza kuwonetsedwa motere:
Tapanga njira zitatu zopezeka mkati mwa bot yathu yanyengo:
chiyambi - Yambitsani kiyibodi yayikulu ya bot
Pogoda - Yambitsani kiyibodi ya Inline kuti musankhe mzinda
yankho_cb - Njira yayikulu yomwe imapempha nyengo kuchokera ku API ya mzinda womwe wapatsidwa ndikutumiza kumacheza.
Njira chiyambi timayiyambitsa ndi lamulo /start, yomwe imayendetsedwa ndi wothandizira CommandHandler('start', start).
Kuchita njira Pogoda tinapanga fyuluta ya dzina lomwelo:
# создаём фильтры
## сообщения с текстом Погода
MessageFilters$weather <- BaseFilter(function(message) {
# проверяем текст сообщения
message$text == "Погода"
}
)
Ndipo timayitcha njira iyi ndi chothandizira mauthenga awa: MessageHandler(weather, filters = MessageFilters$weather).
Ndipo pamapeto, njira yathu yaikulu yankho_cb zimatengera kukanikiza mabatani a Inline, komwe kumakhazikitsidwa ndi chogwirizira chapadera: CallbackQueryHandler(answer_cb).
M'kati mwa njira yankho_cb, timawerenga zomwe zatumizidwa kuchokera ku kiyibodi ndikuzilemba ku variable city: city <- update$callback_query$data. Kenaka timapempha deta ya nyengo kuchokera ku API, kupanga ndi kutumiza uthenga, ndipo potsiriza mugwiritse ntchito njirayo answerCallbackQuery kuti tidziwitse bot kuti takonza dinani batani la Inline.
Chitsanzo cha bot chomwe chimawonetsa mndandanda wazolemba zaposachedwa zokhala ndi maulalo opita ku Hub yotchulidwa kuchokera www.habr.com.
Ndikupereka bot iyi kuti ndikuwonetseni momwe mungasonyezere mabatani a Inline omwe amatsogolera masamba.
Lingaliro la bot iyi ndi lofanana ndi lapitalo; poyambirira timayambitsa kiyibodi yayikulu ndi lamulo /start. Kenako, bot imatipatsa mndandanda wa ma hubs 6 oti tisankhe, timasankha malo omwe timakonda, ndikulandila zofalitsa 5 zaposachedwa kwambiri kuchokera ku Hub yosankhidwa.
Monga mukumvetsetsa, mu nkhani iyi tifunika kupeza mndandanda wa nkhani, ndipo chifukwa cha ichi tidzagwiritsa ntchito phukusi lapadera habR, zomwe zimakupatsani mwayi wopempha zolemba kuchokera kwa Habra ndi ziwerengero zina mu R.
Mfundoyi ndi yofanana kwambiri ndi bot yapitayi, koma pamenepa timapanga kiyibodi ya Inline yokhala ndi mndandanda wa zolemba pogwiritsa ntchito ntchitoyi. lapply().