Is é seo an tríú alt sa tsraith "Ag scríobh bot teileagram i R". I bhfoilseacháin roimhe seo, d'fhoghlaim muid conas bot teileagraim a chruthú, teachtaireachtaí a sheoladh tríd, orduithe agus scagairí teachtaireachtaí a chur leis an bot. Mar sin, sula dtosaíonn tú ag léamh an ailt seo, molaim go mór duit léamh , mar Anseo ní bheidh mé ag plé leis na bunghnéithe a ndearnadh cur síos orthu roimhe seo maidir le tógáil bot.
San Airteagal seo, feabhsóimid inúsáidteacht ár bot trí mhéarchlár a chur leis, rud a fhágfaidh go mbeidh comhéadan an bot iomasach agus éasca le húsáid.

Gach alt ón tsraith "Ag scríobh bot teileagraim i R"
Ábhar
Má tá suim agat in anailís sonraí, b'fhéidir go mbeadh suim agat i mo chuid и cainéil. Tá an chuid is mó den ábhar tiomnaithe don teanga R.
3.1.
3.2.
3.3.
Cé na cineálacha méarchláir a thacaíonn an bot teileagram?
Tráth na scríbhneoireachta seo telegram.bot ligeann duit dhá chineál méarchláir a chruthú:
- Freagra - An príomh-, méarchlár rialta, atá suite faoi an painéal ionchur téacs teachtaireacht. Seolann méarchlár den sórt sin ach teachtaireacht téacs chuig an bot, agus mar an téacs seolfaidh sé an téacs atá scríofa ar an gcnaipe féin.
- Inlíne - Méarchlár nasctha le teachtaireacht bot ar leith. Seolann an méarchlár seo na sonraí bot a bhaineann leis an gcnaipe brúite; d'fhéadfadh go mbeadh difríocht idir na sonraí seo agus an téacs atá scríofa ar an gcnaipe féin. Agus déantar cnaipí den sórt sin a phróiseáil tríd Glao ar aisQueryHandler.
D'fhonn an bot a oscailt an méarchlár, tá sé riachtanach nuair a teachtaireacht a sheoladh tríd an modh sendMessage(), pas a fháil ar an méarchlár a cruthaíodh roimhe seo mar argóint reply_markup.
Anseo thíos féachfaimid ar roinnt samplaí.
Freagra méarchlár
Mar a scríobh mé thuas, is é seo an príomh-mhéarchláir rialaithe bot.
Sampla de chruthú méarchlár Freagra ón gcúnamh oifigiúil
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)Is sampla é an méid thuas ó chúnamh oifigiúil an phacáiste telegram.bot. Chun méarchlár a chruthú, bain úsáid as an fheidhm ReplyKeyboardMarkup(), a thógann ina dhiaidh sin liosta de na liostaí de na cnaipí a chruthaíonn an fheidhm KeyboardButton().
Cén fáth i ReplyKeyboardMarkup() An gá duit pas a fháil ní hamháin ar liosta, ach ar liosta liostaí? Is é an bhfíric go bhfuil tú pas a fháil sa phríomh-liosta, agus ann tú a shainiú gach sraith de cnaipí i liostaí ar leith, mar gheall ar Is féidir leat roinnt cnaipí a chur i sraith amháin.
Argóint resize_keyboard is féidir leat a roghnú go huathoibríoch ar an méid is fearr de na cnaipí méarchláir, agus an argóint one_time_keyboard ligeann duit an méarchlár a cheilt tar éis gach brúigh cnaipe.
Scríobhaimis bot simplí a mbeidh 3 chnaipe aige:
- ID Comhrá - Iarr ID comhrá an chomhphlé le bot
- M'ainm - Iarr d'ainm
- Mo logáil isteach - Iarr ar d'ainm úsáideora i teileagram
Cód 1: Bot simplí le méarchlár Freagra
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()Rith an sampla cód thuas, tar éis duit an fíorchomhartha a fuair tú agus an bot á chruthú agat a chur in ionad 'YOUR BOT TOKEN' BotAthair (Labhair mé faoi bot a chruthú i ).
Tar éis é a sheoladh, tabhair ordú don bot /start, mar Is é seo go díreach an rud a shainigh muid chun an méarchlár a sheoladh.

Más deacair duit an sampla cód a thugtar a pharsáil i láthair na huaire, le cruthú modhanna, scagairí agus láimhseálaithe, ba cheart duit filleadh ar an gceann roimhe seo , inar chuir mé síos go mion ar seo go léir.
Chruthaíomar 4 mhodh:
- tús - Seoladh an méarchlár
- chat_id — Iarr ID comhrá
- my_name — Iarr d'ainm
- my_username — Iarr ar do logáil isteach
Chun agóid MessageFilters cuireadh 3 scagairí teachtaireachta leis bunaithe ar a dtéacs:
- chat_id — Teachtaireachtaí le téacs
"Чат ID" - ainm - Teachtaireachtaí le téacs
"Моё имя" - ainm úsáideora - Teachtaireachtaí le téacs
"Мой логин"
Agus chruthaigh muid 4 láimhseálaí a dhéanfaidh, bunaithe ar orduithe agus scagairí tugtha, na modhanna sonraithe a fhorghníomhú.
# создаём обработчики
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)Cruthaítear an méarchlár féin taobh istigh den mhodh start() an fhoireann ReplyKeyboardMarkup().
RKM <- ReplyKeyboardMarkup(
keyboard = list(
list(KeyboardButton("Чат ID")),
list(KeyboardButton("Моё имя")),
list(KeyboardButton("Мой логин"))
),
resize_keyboard = FALSE,
one_time_keyboard = TRUE
)Inár gcás, chuireamar na cnaipí go léir faoina chéile, ach is féidir linn iad a shocrú i sraith amháin trí athruithe a dhéanamh ar liosta na liostaí cnaipí. Mar Cruthaítear sraith amháin taobh istigh den mhéarchlár trí liosta neadaithe cnaipí, ansin d’fhonn ár cnaipí a thaispeáint i sraith amháin ní mór dúinn cuid den chód a athscríobh chun an méarchlár a thógáil mar seo:
RKM <- ReplyKeyboardMarkup(
keyboard = list(
list(
KeyboardButton("Чат ID"),
KeyboardButton("Моё имя"),
KeyboardButton("Мой логин")
)
),
resize_keyboard = FALSE,
one_time_keyboard = TRUE
)
Seoltar an méarchlár chuig an gcomhrá ag baint úsáide as an modh sendMessage(), san argóint reply_markup.
bot$sendMessage(update$message$chat_id,
text = 'Выберите команду',
reply_markup = RKM)Méarchlár inlíne
Mar a scríobh mé thuas, tá an méarchlár Inlíne ceangailte le teachtaireacht ar leith. Tá sé rud beag níos deacra oibriú leis ná an príomhmhéarchlár.
Ar dtús, ní mór duit modh a chur leis an bot chun an méarchlár Inlíne a ghlaoch.
Chun freagra a thabhairt ar chliceáil cnaipe Inlíne, is féidir leat an modh bot a úsáid freisin answerCallbackQuery(), ar féidir leo fógra a thaispeáint sa chomhéadan teileagram don úsáideoir a bhrúnn an cnaipe Inlíne.
Ní téacs iad na sonraí a sheoltar ón gcnaipe Inlíne, mar sin chun é a phróiseáil ní mór duit láimhseálaí speisialta a chruthú ag baint úsáide as an ordú CallbackQueryHandler().
An cód le haghaidh tógáil méarchlár Inlíne a thugtar i gcabhair oifigiúil an phacáiste telegram.bot.
Cód le haghaidh tógáil méarchlár inlíne ón gcabhair oifigiúil
# 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)Ní mór duit méarchlár Inlíne a thógáil ag baint úsáide as an ordú InlineKeyboardMarkup(), ar an bprionsabal céanna leis an méarchlár Freagra. IN InlineKeyboardMarkup() tá sé riachtanach chun pas a fháil ar liosta de na liostaí de na cnaipí Inlíne, tá gach cnaipe aonair cruthaithe ag an fheidhm InlineKeyboardButton().
Is féidir le cnaipe inlíne roinnt sonraí a chur ar aghaidh chuig an bot ag baint úsáide as argóint callback_data, nó oscail aon leathanach HTML sonraithe ag baint úsáide as an argóint url.
Is é an toradh a bheidh air seo ná liosta ina mbeidh liosta de na cnaipí Inlíne ar gach eilimint freisin nach mór iad a chomhcheangal i sraith amháin.
Ansin féachfaimid ar roinnt samplaí de róbónna le cnaipí Inlíne.
Sampla de bot simplí le tacaíocht do chnaipí InLine
Ar dtús, scríobhfaimid bot le haghaidh tástála sainráite le haghaidh covid-19. De réir ordú /test, seolfaidh sé méarchlár duit le dhá chnaipe, ag brath ar an gcnaipe brúite cuirfidh sé teachtaireacht chugat le torthaí do thástála.
Cód 2: An bot is simplí le méarchlár Inlíne
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()Rith an sampla cód thuas, tar éis duit an fíorchomhartha a fuair tú agus an bot á chruthú agat a chur in ionad 'YOUR BOT TOKEN' BotAthair (Labhair mé faoi bot a chruthú i ).
Toradh:

Chruthaíomar dhá mhodh:
- tástáil — A sheoladh chuig comhrá méarchlár Inlíne
- freagra_cb — Chun sonraí a sheoltar ón méarchlár a phróiseáil.
Tá na sonraí a sheolfar ó gach cnaipe sonraithe san argóint callback_data, nuair a chruthaítear cnaipe. Is féidir leat na sonraí a seoladh a fháil ón gcnaipe ag baint úsáide as an tógáil update$callback_query$data, taobh istigh den mhodh freagra_cb.
Chun go bhfreagróidh an bot don mhéarchlár Inlíne, modh freagra_cb próiseáilte ag láimhseálaí speisialta: CallbackQueryHandler(answer_cb). A ritheann an modh sonraithe nuair a bhíonn an cnaipe Inlíne chliceáil. Láimhseálaí Glao ar aisQueryHandler Bíonn dhá argóint:
callback— An modh is gá a rithpattern— Scag le sonraí atá ceangailte den chnaipe ag úsáid argóintcallback_data.
Dá réir sin, ag baint úsáide as an argóint pattern Is féidir linn modh ar leith a scríobh chun gach cnaipe a bhrú:
Cód 3: Modhanna ar leith do gach cnaipe Inlíne
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()Rith an sampla cód thuas, tar éis duit an fíorchomhartha a fuair tú agus an bot á chruthú agat a chur in ionad 'YOUR BOT TOKEN' BotAthair (Labhair mé faoi bot a chruthú i ).
Anois tá 2 mhodh ar leith scríofa againn i.e. modh amháin, le haghaidh gach brúigh cnaipe, agus d'úsáid an argóint pattern, agus a láimhseálaithe á gcruthú:
query_handler_yes <- CallbackQueryHandler(answer_cb_yes, pattern = 'yes')
query_handler_no <- CallbackQueryHandler(answer_cb_no, pattern = 'no')Críochnaíonn cód modha freagra_cb an fhoireann bot$answerCallbackQuery(callback_query_id = update$callback_query$id), a insíonn don bot go bhfuil sonraí ón méarchlár inlíne faighte.
Sampla de bot a thuairiscíonn an aimsir reatha do chathair roghnaithe
Déanaimis iarracht bot a scríobh a iarrann sonraí aimsire.
Is mar seo a leanas a bheidh loighic a cuid oibre. Ar dtús ag an bhfoireann /start glaonn tú ar an bpríomhmhéarchlár, nach bhfuil ach cnaipe “Aimsir” amháin aige. Trí chliceáil ar an gcnaipe seo gheobhaidh tú teachtaireacht leis an méarchlár Inlíne chun an chathair a bhfuil tú ag iarraidh a fháil amach cén aimsir reatha a roghnú. Roghnaigh ceann amháin de na cathracha agus faigh an aimsir reatha.
Sa chód-shampla seo úsáidfimid roinnt pacáistí breise:
httr— pacáiste chun oibriú le hiarratais HTTP, ar a mbonn a dhéantar obair le haon API. Inár gcás úsáidfimid an API saor in aisce .stringr— pacáiste chun oibriú le téacs, inár gcás féin úsáidfimid é chun teachtaireacht a ghiniúint faoin aimsir sa chathair roghnaithe.
Cód 4: Bot a thuairiscíonn an aimsir reatha don chathair roghnaithe
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()Rith an sampla cód thuas, tar éis duit an fíorchomhartha a fuair tú agus an bot á chruthú agat a chur in ionad 'YOUR BOT TOKEN' BotAthair (Labhair mé faoi bot a chruthú i ).
Mar thoradh air sin, oibreoidh ár bot rud éigin mar seo:

Go scéimreach, is féidir an bot seo a léiriú mar seo:

Tá 3 mhodh cruthaithe againn atá ar fáil laistigh dár bot aimsire:
- tús - Seoladh an príomh-mhéarchláir bot
- aimsir — Seoladh méarchlár Inlíne chun cathair a roghnú
- freagra_cb — An príomh-mhodh a iarrann an aimsir ón API do chathair ar leith agus a sheolann chuig an gcomhrá é.
Modh tús seolann muid é leis an ordú /start, a chuireann an láimhseálaí i bhfeidhm CommandHandler('start', start).
Modh a rith aimsir chruthaigh muid scagaire den ainm céanna:
# создаём фильтры
## сообщения с текстом Погода
MessageFilters$weather <- BaseFilter(function(message) {
# проверяем текст сообщения
message$text == "Погода"
}
)Agus tugaimid an modh seo leis an láimhseálaí teachtaireachta seo a leanas: MessageHandler(weather, filters = MessageFilters$weather).
Agus sa deireadh, ár modh is mó freagra_cb imoibríonn sé le cnaipí Inlíne a bhrú, a chuireann láimhseálaí speisialta i bhfeidhm: CallbackQueryHandler(answer_cb).
Taobh istigh de mhodh freagra_cb, léimid na sonraí a sheoltar ón méarchlár agus scríobhaimid chuig athróg é city: city <- update$callback_query$data. Ansin iarraimid sonraí aimsire ón API, ginimid agus seolaimid teachtaireacht, agus ar deireadh úsáidimid an modh answerCallbackQuery d'fhonn a chur in iúl don bot gur phróiseáileamar cliceáil ar an gcnaipe Inlíne.
Sampla de bhota a thaispeánann liosta de na hailt is déanaí le naisc chuig an Mol sonraithe ó .
Cuirim an bot seo i láthair chun a thaispeáint duit conas cnaipí Inlíne as a dtagann leathanaigh ghréasáin a thaispeáint.
Tá loighic an bot seo cosúil leis an gceann roimhe seo; ar dtús cuirimid an príomh-mhéarchláir leis an ordú /start. Ansin, tugann an bot liosta de 6 mhoil dúinn le roghnú astu, roghnóimid an mol a bhfuil suim againn ann, agus faighimid na 5 fhoilseachán is déanaí ón Mol roghnaithe.
De réir mar a thuigeann tú, sa chás seo ní mór dúinn liosta earraí a fháil, agus le haghaidh seo úsáidfimid pacáiste speisialta habR, a ligeann duit ailt a iarraidh ó Habra agus roinnt staitisticí orthu in R.
Paicéad Ustanovit habR ach is féidir ó github, a mbeidh pacáiste breise de dhíth ort devtools. Chun é a shuiteáil, bain úsáid as an gcód thíos.
install.packages('devtools')
devtools::install_github('selesnow/habR')Anois breathnaímid ar an gcód chun an bot a thuairiscítear thuas a thógáil:
Cód 5: Bot a thaispeánann liosta de na hailt is déanaí ar an Mol roghnaithe
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()Rith an sampla cód thuas, tar éis duit an fíorchomhartha a fuair tú agus an bot á chruthú agat a chur in ionad 'YOUR BOT TOKEN' BotAthair (Labhair mé faoi bot a chruthú i ).
Mar thoradh air sin, gheobhaidh muid an toradh seo:

Rinneamar cód crua ar an liosta Mol atá ar fáil le roghnú ar an modh 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)
}Faighimid liosta alt ón Mol sonraithe leis an ordú habr_hub_posts(), ón bpacáiste habR. Ag an am céanna, tugaimid le fios nach bhfuil liosta alt de dhíth orainn don am ar fad, ach an chéad leathanach ar a bhfuil 20 alt suite. Ón tábla mar thoradh ag baint úsáide as an ordú head() Ní fhágaimid ach na 5 barr, arb iad na hailt is déanaí iad.
# парсим Хабр
posts <- head(habr_hub_posts(hub, 1), 5)Tá an loighic an-chosúil leis an bot roimhe seo, ach sa chás seo ginimid méarchlár Inlíne le liosta alt go dinimiciúil ag baint úsáide as an bhfeidhm lapply().
# формируем список кнопок
keys <- lapply(1:5, function(x) list(InlineKeyboardButton(posts$title[x], url = posts$link[x])))
# формируем клавиатуру
IKM <- InlineKeyboardMarkup(
inline_keyboard = keys
)Cuirimid teideal an ailt isteach sa téacs cnaipe posts$title[x], agus san argóint url nasc chuig an alt: url = posts$link[x].
Ansin, cruthaímid scagaire, láimhseálaithe agus cuirimid ár bot ar bun.
Conclúid
Anois beidh na róbónna a scríobhann tú i bhfad níos áisiúla le húsáid, mar gheall ar an bhfíric go ndéanfar iad a rialú ón méarchlár, seachas trí orduithe a chur isteach. Ar a laghad, agus tú ag idirghníomhú le bot trí fhón cliste, déanfaidh an méarchlár an próiseas úsáide a shimpliú go suntasach.
Sa chéad alt eile déanfaimid amach conas agallamh loighciúil a thógáil le bot agus oibriú le bunachair shonraí.
Foinse: will.com
