Eyi ni nkan kẹta ninu jara “Kikọ bot telegram ni R”. Ninu awọn atẹjade ti tẹlẹ, a kọ bii o ṣe le ṣẹda bot telegram kan, firanṣẹ awọn ifiranṣẹ nipasẹ rẹ, awọn aṣẹ ṣafikun ati awọn asẹ ifiranṣẹ si bot. Nitorinaa, ṣaaju ki o to bẹrẹ kika nkan yii, Mo ṣeduro gaan pe ki o ka , nitori Nibi Emi kii yoo gbe lori awọn ipilẹ ti a ṣalaye tẹlẹ ti ile bot.
Ninu nkan yii, a yoo ni ilọsiwaju lilo ti bot wa nipa fifi bọtini itẹwe kun, eyiti yoo jẹ ki wiwo bot ni oye ati rọrun lati lo.

Gbogbo awọn nkan lati inu jara “Kikọ bot telegram ni R”
Awọn akoonu
Ti o ba nifẹ si itupalẹ data, o le nifẹ ninu mi и awọn ikanni. Pupọ julọ akoonu jẹ igbẹhin si ede R.
3.1.
3.2.
3.3.
Awọn oriṣi awọn bọtini itẹwe wo ni bot telegram ṣe atilẹyin?
Ni akoko kikọ yii telegram.bot gba ọ laaye lati ṣẹda awọn oriṣi awọn bọtini itẹwe meji:
- Fesi - Akọkọ, bọtini itẹwe deede, eyiti o wa labẹ nronu titẹ ọrọ ifiranṣẹ. Iru bọtini itẹwe kan nfi ọrọ ranṣẹ si bot, ati bi ọrọ yoo firanṣẹ ọrọ ti a kọ sori bọtini funrararẹ.
- Inline – Keyboard ti o ni nkan ṣe pẹlu ifiranṣẹ bot kan pato. Bọtini yii firanṣẹ data bot ti o ni nkan ṣe pẹlu bọtini ti a tẹ; Ati iru awọn bọtini ti wa ni ilọsiwaju nipasẹ CallbackQueryHandler.
Ni ibere fun bot lati ṣii bọtini itẹwe, o jẹ dandan nigbati fifiranṣẹ ifiranṣẹ nipasẹ ọna naa sendMessage(), kọja keyboard ti o ṣẹda tẹlẹ bi ariyanjiyan reply_markup.
Ni isalẹ a yoo wo ọpọlọpọ awọn apẹẹrẹ.
Àtẹ bọ́tìnnì fèsì
Gẹgẹbi Mo ti kowe loke, eyi ni bọtini itẹwe iṣakoso bot akọkọ.
Apeere ti ṣiṣẹda bọtini itẹwe idahun lati iranlọwọ osise
bot <- Bot(token = "TOKEN")
chat_id <- "CHAT_ID"
# Create Custom Keyboard
text <- "Aren't those custom keyboards cool?"
RKM <- ReplyKeyboardMarkup(
keyboard = list(
list(KeyboardButton("Yes, they certainly are!")),
list(KeyboardButton("I'm not quite sure")),
list(KeyboardButton("No..."))
),
resize_keyboard = FALSE,
one_time_keyboard = TRUE
)
# Send Custom Keyboard
bot$sendMessage(chat_id, text, reply_markup = RKM)Eyi ti o wa loke jẹ apẹẹrẹ lati iranlọwọ osise ti package telegram.bot. Lati ṣẹda keyboard, lo iṣẹ naa ReplyKeyboardMarkup(), eyiti o gba atokọ ti awọn atokọ ti awọn bọtini ti o ṣẹda nipasẹ iṣẹ naa KeyboardButton().
Kini idi ninu ReplyKeyboardMarkup() Ṣe o nilo lati kọja kii ṣe atokọ kan, ṣugbọn atokọ ti awọn atokọ? Otitọ ni pe o kọja atokọ akọkọ, ati ninu rẹ o ṣalaye awọn ila kọọkan ti awọn bọtini ni awọn atokọ lọtọ, nitori O le gbe awọn bọtini pupọ si ọna kan.
Ariyanjiyan resize_keyboard gba ọ laaye lati yan iwọn to dara julọ ti awọn bọtini itẹwe, ati ariyanjiyan one_time_keyboard gba ọ laaye lati tọju keyboard lẹhin titẹ bọtini kọọkan.
Jẹ ki a kọ bot ti o rọrun ti yoo ni awọn bọtini 3:
- Iwiregbe ID - Beere iwiregbe ID ti ibaraẹnisọrọ pẹlu bot
- Orukọ mi - Beere orukọ rẹ
- Wiwọle mi - Beere orukọ olumulo rẹ ni telegram
Koodu 1: Bot ti o rọrun pẹlu bọtini itẹwe idahun
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()Ṣ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 ).
Lẹhin ifilọlẹ, fun bot aṣẹ kan /start, nitori Eyi ni deede ohun ti a ṣalaye lati ṣe ifilọlẹ keyboard naa.

Ti o ba jẹ pe ni akoko yii o ṣoro fun ọ lati ṣagbejade apẹẹrẹ koodu ti a fun, pẹlu ṣiṣẹda awọn ọna, awọn asẹ ati awọn olutọju, lẹhinna o yẹ ki o pada si ọkan ti tẹlẹ. , ninu eyiti Mo ṣe apejuwe gbogbo eyi ni awọn alaye.
A ṣẹda awọn ọna 4:
- bẹrẹ - Lọlẹ awọn keyboard
- chat_id - Beere iwiregbe ID
- my_name - Beere orukọ rẹ
- my_username - Beere wiwọle rẹ
Lati tako Awọn Asẹ Ifiranṣẹ ṣafikun awọn asẹ ifiranṣẹ 3 ti o da lori ọrọ wọn:
- chat_id - Awọn ifiranṣẹ pẹlu ọrọ
"Чат ID" - orukọ - Awọn ifiranṣẹ pẹlu ọrọ
"Моё имя" - orukọ olumulo - Awọn ifiranṣẹ pẹlu ọrọ
"Мой логин"
Ati pe a ṣẹda awọn olutọju 4 ti, ti o da lori awọn aṣẹ ti a fun ati awọn asẹ, yoo ṣiṣẹ awọn ọna ti a pato.
# создаём обработчики
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)Awọn keyboard funrararẹ ti ṣẹda inu ọna naa start() egbe ReplyKeyboardMarkup().
RKM <- ReplyKeyboardMarkup(
keyboard = list(
list(KeyboardButton("Чат ID")),
list(KeyboardButton("Моё имя")),
list(KeyboardButton("Мой логин"))
),
resize_keyboard = FALSE,
one_time_keyboard = TRUE
)Ninu ọran wa, a gbe gbogbo awọn bọtini labẹ ara wa, ṣugbọn a le ṣeto wọn ni ọna kan nipa ṣiṣe awọn ayipada si atokọ awọn atokọ bọtini. Nitori Lara kan inu bọtini itẹwe ni a ṣẹda nipasẹ atokọ itẹ-ẹi ti awọn bọtini, lẹhinna lati le ṣafihan awọn bọtini wa ni ọna kan a nilo lati atunkọ apakan ti koodu fun kikọ bọtini itẹwe bii eyi:
RKM <- ReplyKeyboardMarkup(
keyboard = list(
list(
KeyboardButton("Чат ID"),
KeyboardButton("Моё имя"),
KeyboardButton("Мой логин")
)
),
resize_keyboard = FALSE,
one_time_keyboard = TRUE
)
A fi keyboard ranṣẹ si iwiregbe ni lilo ọna naa sendMessage(), ninu ariyanjiyan reply_markup.
bot$sendMessage(update$message$chat_id,
text = 'Выберите команду',
reply_markup = RKM)Àtẹ bọ́tìnnì inú
Bi mo ti kowe loke, awọn Inline keyboard ti so si kan pato ifiranṣẹ. O nira diẹ sii lati ṣiṣẹ pẹlu ju bọtini itẹwe akọkọ lọ.
Ni ibẹrẹ, o nilo lati ṣafikun ọna kan si bot lati pe bọtini itẹwe Inline.
Lati dahun si bọtini Inline tẹ, o tun le lo ọna bot answerCallbackQuery(), eyi ti o le ṣe afihan ifitonileti kan ni wiwo telegram si olumulo ti o tẹ bọtini Inline.
Awọn data ti a firanṣẹ lati bọtini Inline kii ṣe ọrọ, nitorinaa lati ṣe ilana rẹ o nilo lati ṣẹda olutọju pataki kan nipa lilo aṣẹ naa CallbackQueryHandler().
Awọn koodu fun kikọ ohun Inline keyboard eyi ti o ti fi fun ni osise iranlọwọ ti awọn package telegram.bot.
Koodu fun kikọ Inline keyboard lati osise iranlọwọ
# Initialize bot
bot <- Bot(token = "TOKEN")
chat_id <- "CHAT_ID"
# Create Inline Keyboard
text <- "Could you type their phone number, please?"
IKM <- InlineKeyboardMarkup(
inline_keyboard = list(
list(
InlineKeyboardButton(1),
InlineKeyboardButton(2),
InlineKeyboardButton(3)
),
list(
InlineKeyboardButton(4),
InlineKeyboardButton(5),
InlineKeyboardButton(6)
),
list(
InlineKeyboardButton(7),
InlineKeyboardButton(8),
InlineKeyboardButton(9)
),
list(
InlineKeyboardButton("*"),
InlineKeyboardButton(0),
InlineKeyboardButton("#")
)
)
)
# Send Inline Keyboard
bot$sendMessage(chat_id, text, reply_markup = IKM)O nilo lati kọ bọtini itẹwe Inline nipa lilo aṣẹ naa InlineKeyboardMarkup(), lori ilana kanna bi keyboard Fesi. IN InlineKeyboardMarkup() o jẹ dandan lati kọja atokọ ti awọn atokọ ti awọn bọtini Inline, bọtini kọọkan kọọkan ni a ṣẹda nipasẹ iṣẹ naa InlineKeyboardButton().
Bọtini laini le boya kọja diẹ ninu data si bot nipa lilo ariyanjiyan kan callback_data, tabi ṣii eyikeyi oju-iwe HTML ti a sọ nipa lilo ariyanjiyan url.
Abajade yoo jẹ atokọ ninu eyiti ipin kọọkan tun jẹ atokọ ti awọn bọtini Inline ti o nilo lati ni idapo sinu ila kan.
Nigbamii ti a yoo wo awọn apẹẹrẹ pupọ ti awọn bot pẹlu awọn bọtini Inline.
Apeere ti bot ti o rọrun pẹlu atilẹyin fun awọn bọtini InLine
Ni akọkọ, a yoo kọ bot kan fun idanwo kiakia fun covid-19. Nipa aṣẹ /test, yoo fi bọtini itẹwe ranṣẹ si ọ pẹlu awọn bọtini meji, da lori bọtini ti o tẹ yoo fi ifiranṣẹ ranṣẹ pẹlu awọn abajade idanwo rẹ.
Koodu 2: Bot ti o rọrun julọ pẹlu bọtini itẹwe 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()Ṣ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 ).
Esi:

A ṣẹda awọn ọna meji:
- igbeyewo - Lati firanṣẹ si iwiregbe lori awọn bọtini itẹwe Inline
- idahun_cb - Lati ṣe ilana data ti a firanṣẹ lati keyboard.
Awọn data ti yoo firanṣẹ lati bọtini kọọkan jẹ pato ninu ariyanjiyan callback_data, nigba ṣiṣẹda bọtini kan. O le gba data ti a firanṣẹ lati bọtini nipa lilo ikole update$callback_query$data, inu ọna idahun_cb.
Fun bot lati fesi si Inline keyboard, ọna idahun_cb ni ilọsiwaju nipasẹ olutọju pataki kan: CallbackQueryHandler(answer_cb). Eyi ti o nṣiṣẹ ọna ti a sọ pato nigbati bọtini Inline ti tẹ. Olutọju CallbackQueryHandler gba awọn ariyanjiyan meji:
callback- Ọna ti o nilo lati ṣiṣẹpattern- Ṣe àlẹmọ nipasẹ data ti o so mọ bọtini nipa lilo ariyanjiyancallback_data.
Gẹgẹ bẹ, lilo ariyanjiyan pattern A le kọ ọna lọtọ fun titẹ bọtini kọọkan:
Koodu 3: Awọn ọna lọtọ fun bọtini Inline kọọkan
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()Ṣ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 ).
Bayi a ti kọ 2 lọtọ ọna i.e. ọkan ọna, fun kọọkan bọtini tẹ, ati ki o lo awọn ariyanjiyan pattern, nigba ṣiṣẹda awọn olutọju wọn:
query_handler_yes <- CallbackQueryHandler(answer_cb_yes, pattern = 'yes')
query_handler_no <- CallbackQueryHandler(answer_cb_no, pattern = 'no')Ilana koodu dopin idahun_cb egbe bot$answerCallbackQuery(callback_query_id = update$callback_query$id), eyiti o sọ fun bot pe a ti gba data lati ori keyboard inline.
Apeere ti bot ti o jabo oju ojo lọwọlọwọ fun ilu ti o yan
Jẹ ki a gbiyanju lati kọ bot kan ti o beere data oju ojo.
Awọn kannaa ti awọn oniwe-ise yoo jẹ bi wọnyi. Ni ibẹrẹ nipasẹ ẹgbẹ /start o pe bọtini itẹwe akọkọ, eyiti o ni bọtini “Ojo” kan ṣoṣo. Nipa tite bọtini yii iwọ yoo gba ifiranṣẹ kan pẹlu bọtini itẹwe Inline lati yan ilu ti o fẹ lati wa oju ojo lọwọlọwọ. Yan ọkan ninu awọn ilu ati gba oju ojo lọwọlọwọ.
Ninu apẹẹrẹ koodu yii a yoo lo ọpọlọpọ awọn idii afikun:
httr- package kan fun ṣiṣẹ pẹlu awọn ibeere HTTP, lori ipilẹ eyiti iṣẹ pẹlu eyikeyi API ti kọ. Ninu ọran wa a yoo lo API ọfẹ .stringr- package kan fun ṣiṣẹ pẹlu ọrọ, ninu ọran wa a yoo lo lati ṣe ifilọlẹ ifiranṣẹ kan nipa oju ojo ni ilu ti o yan.
Koodu 4: Bot kan ti o ṣe ijabọ oju ojo lọwọlọwọ fun ilu ti o yan
library(telegram.bot)
library(httr)
library(stringr)
# создаём экземпляр класса Updater
updater <- Updater('ТОКЕН ВАШЕГО БОТА')
# создаём методы
## метод для запуска основной клавиатуры
start <- function(bot, update) {
# создаём клавиатуру
RKM <- ReplyKeyboardMarkup(
keyboard = list(
list(
KeyboardButton("Погода")
)
),
resize_keyboard = TRUE,
one_time_keyboard = TRUE
)
# отправляем клавиатуру
bot$sendMessage(update$message$chat_id,
text = 'Выберите команду',
reply_markup = RKM)
}
## Метод вызова Inine клавиатуры
weather <- function(bot, update) {
IKM <- InlineKeyboardMarkup(
inline_keyboard = list(
list(
InlineKeyboardButton(text = 'Москва', callback_data = 'New York,us'),
InlineKeyboardButton(text = 'Санкт-Петербург', callback_data = 'Saint Petersburg'),
InlineKeyboardButton(text = 'Нью-Йорк', callback_data = 'New York')
),
list(
InlineKeyboardButton(text = 'Екатеринбург', callback_data = 'Yekaterinburg,ru'),
InlineKeyboardButton(text = 'Берлин', callback_data = 'Berlin,de'),
InlineKeyboardButton(text = 'Париж', callback_data = 'Paris,fr')
),
list(
InlineKeyboardButton(text = 'Рим', callback_data = 'Rome,it'),
InlineKeyboardButton(text = 'Одесса', callback_data = 'Odessa,ua'),
InlineKeyboardButton(text = 'Киев', callback_data = 'Kyiv,fr')
),
list(
InlineKeyboardButton(text = 'Токио', callback_data = 'Tokyo'),
InlineKeyboardButton(text = 'Амстердам', callback_data = 'Amsterdam,nl'),
InlineKeyboardButton(text = 'Вашингтон', callback_data = 'Washington,us')
)
)
)
# Send Inline Keyboard
bot$sendMessage(chat_id = update$message$chat_id,
text = "Выберите город",
reply_markup = IKM)
}
# метод для сообщения погоды
answer_cb <- function(bot, update) {
# получаем из сообщения город
city <- update$callback_query$data
# отправляем запрос
ans <- GET('https://api.openweathermap.org/data/2.5/weather',
query = list(q = city,
lang = 'ru',
units = 'metric',
appid = '4776568ccea136ffe4cda9f1969af340'))
# парсим ответ
result <- content(ans)
# формируем сообщение
msg <- str_glue("{result$name} погода:n",
"Текущая температура: {result$main$temp}n",
"Скорость ветра: {result$wind$speed}n",
"Описание: {result$weather[[1]]$description}")
# отправляем информацию о погоде
bot$sendMessage(chat_id = update$from_chat_id(),
text = msg)
bot$answerCallbackQuery(callback_query_id = update$callback_query$id)
}
# создаём фильтры
## сообщения с текстом Погода
MessageFilters$weather <- BaseFilter(function(message) {
# проверяем текст сообщения
message$text == "Погода"
}
)
# создаём обработчики
h_start <- CommandHandler('start', start)
h_weather <- MessageHandler(weather, filters = MessageFilters$weather)
h_query_handler <- CallbackQueryHandler(answer_cb)
# добавляем обработчики в диспетчер
updater <- updater +
h_start +
h_weather +
h_query_handler
# запускаем бота
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 ).
Bi abajade, bot wa yoo ṣiṣẹ nkan bii eyi:

Sikematiki, bot yii le ṣe afihan bii eyi:

A ti ṣẹda awọn ọna mẹta ti o wa ninu bot oju ojo wa:
- ibere - Lọlẹ akọkọ bot keyboard
- ojo - Lọlẹ Inline keyboard lati yan ilu kan
- idahun_cb - Ọna akọkọ ti o beere oju ojo lati API fun ilu ti a fun ati firanṣẹ si iwiregbe.
Ọna ibere a ṣe ifilọlẹ pẹlu aṣẹ naa /start, eyiti o jẹ imuse nipasẹ olutọju CommandHandler('start', start).
Lati ṣiṣe ọna kan ojo a ṣẹda àlẹmọ ti orukọ kanna:
# создаём фильтры
## сообщения с текстом Погода
MessageFilters$weather <- BaseFilter(function(message) {
# проверяем текст сообщения
message$text == "Погода"
}
)Ati pe a pe ọna yii pẹlu oluṣakoso ifiranṣẹ atẹle: MessageHandler(weather, filters = MessageFilters$weather).
Ati ni ipari, ọna akọkọ wa idahun_cb fesi si titẹ awọn bọtini Inline, eyiti o jẹ imuse nipasẹ olutọju pataki kan: CallbackQueryHandler(answer_cb).
Inu ọna kan idahun_cb, a ka data ti a firanṣẹ lati ori itẹwe ki o kọ si oniyipada kan city: city <- update$callback_query$data. Lẹhinna a beere data oju ojo lati API, ṣe ipilẹṣẹ ati firanṣẹ ifiranṣẹ kan, ati nikẹhin lo ọna naa answerCallbackQuery Lati le sọ fun bot pe a ṣe ilana titẹ bọtini Inline.
Apeere ti bot ti o ṣafihan atokọ ti awọn nkan tuntun pẹlu awọn ọna asopọ si Ipele pàtó kan lati .
Mo ṣafihan bot yii lati fihan ọ bi o ṣe le ṣafihan awọn bọtini Inline ti o yori si awọn oju-iwe wẹẹbu.
Imọye ti bot yii jẹ iru ti iṣaaju; /start. Nigbamii ti, bot fun wa ni atokọ ti awọn ibudo 6 lati yan lati, a yan ibudo ti a nifẹ si, ati gba awọn atẹjade 5 aipẹ julọ lati Hub ti a yan.
Bi o ṣe yeye, ninu ọran yii a nilo lati gba atokọ ti awọn nkan, ati fun eyi a yoo lo package pataki kan habR, eyiti o fun ọ laaye lati beere awọn nkan lati Habra ati diẹ ninu awọn iṣiro lori wọn ni R.
Fi sori ẹrọ package habR ṣee ṣe nikan lati github, fun eyiti iwọ yoo nilo afikun package devtools. Lati fi sori ẹrọ, lo koodu ni isalẹ.
install.packages('devtools')
devtools::install_github('selesnow/habR')Bayi jẹ ki a wo koodu fun kikọ bot ti a ṣalaye loke:
Koodu 5: Bot kan ti o ṣafihan atokọ ti awọn nkan aipẹ julọ lori Ipele ti o yan
library(telegram.bot)
library(habR)
# создаём экземпляр класса Updater
updater <- Updater('ТОКЕН ВАШЕГО БОТА')
# создаём методы
## метод для запуска основной клавиатуры
start <- function(bot, update) {
# создаём клавиатуру
RKM <- ReplyKeyboardMarkup(
keyboard = list(
list(
KeyboardButton("Список статей")
)
),
resize_keyboard = TRUE,
one_time_keyboard = TRUE
)
# отправляем клавиатуру
bot$sendMessage(update$message$chat_id,
text = 'Выберите команду',
reply_markup = RKM)
}
## Метод вызова Inine клавиатуры
habs <- function(bot, update) {
IKM <- InlineKeyboardMarkup(
inline_keyboard = list(
list(
InlineKeyboardButton(text = 'R', callback_data = 'R'),
InlineKeyboardButton(text = 'Data Mining', callback_data = 'data_mining'),
InlineKeyboardButton(text = 'Data Engineering', callback_data = 'data_engineering')
),
list(
InlineKeyboardButton(text = 'Big Data', callback_data = 'bigdata'),
InlineKeyboardButton(text = 'Python', callback_data = 'python'),
InlineKeyboardButton(text = 'Визуализация данных', callback_data = 'data_visualization')
)
)
)
# Send Inline Keyboard
bot$sendMessage(chat_id = update$message$chat_id,
text = "Выберите Хаб",
reply_markup = IKM)
}
# метод для сообщения погоды
answer_cb <- function(bot, update) {
# получаем из сообщения город
hub <- update$callback_query$data
# сообщение о том, что данные по кнопке получены
bot$answerCallbackQuery(callback_query_id = update$callback_query$id,
text = 'Подождите несколько минут, запрос обрабатывается')
# сообщение о том, что надо подождать пока бот получит данные
mid <- bot$sendMessage(chat_id = update$from_chat_id(),
text = "Подождите несколько минут пока, я соберу данные по выбранному Хабу")
# парсим Хабр
posts <- head(habr_hub_posts(hub, 1), 5)
# удаляем сообщение о том, что надо подождать
bot$deleteMessage(update$from_chat_id(), mid$message_id)
# формируем список кнопок
keys <- lapply(1:5, function(x) list(InlineKeyboardButton(posts$title[x], url = posts$link[x])))
# формируем клавиатуру
IKM <- InlineKeyboardMarkup(
inline_keyboard = keys
)
# отправляем информацию о погоде
bot$sendMessage(chat_id = update$from_chat_id(),
text = paste0("5 наиболее свежих статей из Хаба ", hub),
reply_markup = IKM)
}
# создаём фильтры
## сообщения с текстом Погода
MessageFilters$hubs <- BaseFilter(function(message) {
# проверяем текст сообщения
message$text == "Список статей"
}
)
# создаём обработчики
h_start <- CommandHandler('start', start)
h_hubs <- MessageHandler(habs, filters = MessageFilters$hubs)
h_query_handler <- CallbackQueryHandler(answer_cb)
# добавляем обработчики в диспетчер
updater <- updater +
h_start +
h_hubs +
h_query_handler
# запускаем бота
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 ).
Bi abajade, a yoo gba abajade yii:

A ṣe koodu lile atokọ ti Awọn ibudo ti o wa fun yiyan ni ọna naa habs:
## Метод вызова Inine клавиатуры
habs <- function(bot, update) {
IKM <- InlineKeyboardMarkup(
inline_keyboard = list(
list(
InlineKeyboardButton(text = 'R', callback_data = 'r'),
InlineKeyboardButton(text = 'Data Mining', callback_data = 'data_mining'),
InlineKeyboardButton(text = 'Data Engineering', callback_data = 'data_engineering')
),
list(
InlineKeyboardButton(text = 'Big Data', callback_data = 'bigdata'),
InlineKeyboardButton(text = 'Python', callback_data = 'python'),
InlineKeyboardButton(text = 'Визуализация данных', callback_data = 'data_visualization')
)
)
)
# Send Inline Keyboard
bot$sendMessage(chat_id = update$message$chat_id,
text = "Выберите Хаб",
reply_markup = IKM)
}A gba atokọ ti awọn nkan lati Ipele pàtó kan pẹlu aṣẹ naa habr_hub_posts(), lati package habR. Ni akoko kanna, a tọka si pe a ko nilo atokọ ti awọn nkan fun gbogbo akoko, ṣugbọn nikan ni oju-iwe akọkọ ti awọn nkan 20 wa. Lati awọn Abajade tabili lilo pipaṣẹ head() A fi awọn oke 5 nikan silẹ, eyiti o jẹ awọn nkan to ṣẹṣẹ julọ.
# парсим Хабр
posts <- head(habr_hub_posts(hub, 1), 5)Imọye naa jọra pupọ si bot ti tẹlẹ, ṣugbọn ninu ọran yii a ṣe agbekalẹ bọtini itẹwe Inline pẹlu atokọ ti awọn nkan ni agbara ni lilo iṣẹ naa. lapply().
# формируем список кнопок
keys <- lapply(1:5, function(x) list(InlineKeyboardButton(posts$title[x], url = posts$link[x])))
# формируем клавиатуру
IKM <- InlineKeyboardMarkup(
inline_keyboard = keys
)A fi akọle nkan sii sinu ọrọ bọtini posts$title[x], ati ninu ariyanjiyan url ọna asopọ si nkan: url = posts$link[x].
Nigbamii ti, a ṣẹda àlẹmọ, awọn olutọju ati ṣe ifilọlẹ bot wa.
ipari
Bayi awọn bot ti o kọ yoo jẹ irọrun diẹ sii lati lo, nitori otitọ pe wọn yoo ṣakoso lati keyboard, dipo nipa titẹ awọn aṣẹ. Ni o kere ju, nigbati ibaraenisepo pẹlu bot nipasẹ foonuiyara kan, keyboard yoo jẹ irọrun ilana lilo rẹ ni pataki.
Ninu nkan ti o tẹle a yoo ro bi o ṣe le kọ ijiroro ọgbọn kan pẹlu bot ati ṣiṣẹ pẹlu awọn apoti isura data.
orisun: www.habr.com
