Thaum lub sijhawm sau ntawv no telegram.bot tso cai rau koj los tsim ob hom keyboards:
Teb - Lub ntsiab lus tseem ceeb, cov keyboard tsis tu ncua, uas nyob hauv qab ntawm cov lus nkag hauv vaj huam sib luag. Xws li cov keyboard tsuas yog xa cov ntawv xa mus rau bot, thiab raws li cov ntawv nyeem nws yuav xa cov ntawv sau rau ntawm lub pob nws tus kheej.
Inline - Keyboard cuam tshuam nrog cov lus tshwj xeeb bot. Cov keyboard no xa cov ntaub ntawv bot cuam tshuam nrog lub khawm nias; cov ntaub ntawv no yuav txawv ntawm cov ntawv sau ntawm lub pob nws tus kheej. Thiab cov nyees khawm zoo li no tau ua tiav CallbackQueryHandler.
Txhawm rau kom bot qhib cov keyboard, nws yog qhov tsim nyog thaum xa lus los ntawm txoj kev sendMessage(), hla cov keyboard tsim yav dhau los ua kev sib cav reply_markup.
Hauv qab no peb yuav saib ob peb yam piv txwv.
Teb cov keyboard
Raws li kuv tau sau saum toj no, qhov no yog lub ntsiab bot tswj keyboard.
Tham ID - Thov tham ID ntawm kev sib tham nrog bot
Kuv lub npe - Thov koj lub npe
Kuv tus ID nkag mus - Thov koj tus username hauv telegram
Code 1: Yooj yim bot nrog teb cov keyboard
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()
Khiav tus lej piv txwv saum toj no, tom qab hloov 'koj BOT TOKEN' nrog lub token tiag koj tau txais thaum tsim lub bot ntawm BotFather (Kuv tham txog kev tsim bot hauv thawj tsab xov xwm).
Tom qab tso tawm, muab cov lus txib rau bot /start, vim Qhov no yog raws nraim qhov peb tau hais kom tso tawm cov keyboard.
Yog tias tam sim no nws nyuaj rau koj los txheeb xyuas qhov piv txwv muab code, nrog rau kev tsim cov txheej txheem, cov ntxaij lim dej thiab cov neeg ua haujlwm, ces koj yuav tsum rov qab mus rau yav dhau los. Tshooj, nyob rau hauv uas kuv piav tag nrho cov no nyob rau hauv kom meej.
Peb tsim 4 txoj kev:
pib - Tua tawm cov keyboard
chat_id — Thov chat ID
my_name — Thov koj lub npe
my_username - Thov koj tus ID nkag mus
Los tawm tsam MessageFilters ntxiv 3 cov ntawv lim raws li lawv cov ntawv:
chat_id — Cov lus nrog cov ntawv "Чат ID"
npe - Cov lus nrog cov ntawv "Моё имя"
username — Cov lus nrog cov ntawv "Мой логин"
Thiab peb tau tsim 4 tus neeg tuav haujlwm uas, raws li cov lus txib thiab cov ntxaij lim dej tau muab, yuav ua tiav cov txheej txheem teev tseg.
Cov keyboard raug xa mus rau kev sib tham siv txoj kev sendMessage(), hauv kev sib cav reply_markup.
bot$sendMessage(update$message$chat_id,
text = 'Выберите команду',
reply_markup = RKM)
Inline keyboard
Raws li kuv tau sau saum toj no, Inline keyboard yog khi rau cov lus tshwj xeeb. Nws yog qhov nyuaj me ntsis los ua haujlwm nrog ntau dua li cov keyboard tseem ceeb.
Thaum pib, koj yuav tsum tau ntxiv ib txoj hauv kev rau bot hu rau Inline keyboard.
Ua ntej, peb yuav sau ib lub bot rau kev kuaj mob rau covid-19. Los ntawm kev hais kom ua /test, nws yuav xa koj cov keyboard nrog ob lub nyees khawm, nyob ntawm lub pob nyem nws yuav xa koj cov lus nrog cov txiaj ntsig ntawm koj qhov kev sim.
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()
Khiav tus lej piv txwv saum toj no, tom qab hloov 'koj BOT TOKEN' nrog lub token tiag koj tau txais thaum tsim lub bot ntawm BotFather (Kuv tham txog kev tsim bot hauv thawj tsab xov xwm).
Tshwm sim:
Peb tsim ob txoj kev:
xeem - Xa mus tham Inline keyboard
teb_cb - Ua cov ntaub ntawv xa los ntawm cov keyboard.
Cov ntaub ntawv uas yuav raug xa los ntawm txhua lub pob yog teev nyob rau hauv qhov kev sib cav callback_data, thaum tsim ib lub pob. Koj tuaj yeem tau txais cov ntaub ntawv xa los ntawm lub pob uas siv qhov tsim update$callback_query$data, hauv txoj kev teb_cb.
Rau bot kom hnov mob rau Inline keyboard, txoj kev teb_cb ua tiav los ntawm ib tug tshwj xeeb handler: CallbackQueryHandler(answer_cb). Uas khiav txoj kev teev tseg thaum lub khawm Inline yog clicked. Tus tuav CallbackQueryHandler siv ob qhov kev sib cav:
callback - Txoj kev uas yuav tsum tau ua
pattern - Lim los ntawm cov ntaub ntawv uas yog khi rau lub pob siv qhov kev sib cav callback_data.
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()
Khiav tus lej piv txwv saum toj no, tom qab hloov 'koj BOT TOKEN' nrog lub token tiag koj tau txais thaum tsim lub bot ntawm BotFather (Kuv tham txog kev tsim bot hauv thawj tsab xov xwm).
Tam sim no peb tau sau 2 txoj kev sib cais i.e. ib txoj kev, rau txhua lub khawm nias, thiab siv qhov kev sib cav pattern, thaum tsim lawv handlers:
Txoj kev cai xaus teb_cb pab bot$answerCallbackQuery(callback_query_id = update$callback_query$id), uas qhia rau bot tias cov ntaub ntawv los ntawm cov keyboard inline tau txais.
Ib qho piv txwv ntawm bot uas qhia txog huab cua tam sim no rau lub nroog xaiv
Cia peb sim sau ib lub bot uas thov cov ntaub ntawv huab cua.
Lub logic ntawm nws txoj haujlwm yuav ua raws li hauv qab no. Pib los ntawm pab neeg /start koj hu rau lub ntsiab keyboard, uas muaj tsuas yog ib qho "Huab cua" khawm. Los ntawm txhaj rau ntawm lub pob no koj yuav tau txais cov lus nrog Inline keyboard xaiv lub nroog uas koj xav paub txog huab cua tam sim no. Xaiv ib lub nroog thiab tau txais huab cua tam sim no.
Hauv qhov piv txwv code no peb yuav siv ob peb pob ntxiv:
httr - ib pob rau kev ua haujlwm nrog HTTP thov, raws li kev ua haujlwm nrog API tsim. Hauv peb qhov xwm txheej peb yuav siv API pub dawb openweathermap.org.
stringr - ib pob rau kev ua hauj lwm nrog cov ntawv nyeem, nyob rau hauv peb cov ntaub ntawv peb yuav siv nws los tsim cov lus hais txog huab cua nyob rau hauv lub nroog xaiv.
Code 4: Ib lub bot uas qhia txog huab cua tam sim no rau lub nroog xaiv
Khiav tus lej piv txwv saum toj no, tom qab hloov 'koj BOT TOKEN' nrog lub token tiag koj tau txais thaum tsim lub bot ntawm BotFather (Kuv tham txog kev tsim bot hauv thawj tsab xov xwm).
Yog li ntawd, peb bot yuav ua haujlwm zoo li no:
Schematically, qhov no bot tuaj yeem piav qhia zoo li no:
Tam sim no cia saib cov cai rau kev tsim lub bot tau piav qhia saum toj no:
Code 5: Ib qho bot uas qhia cov npe ntawm cov kab lus tsis ntev los no ntawm Hub xaiv
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()
Khiav tus lej piv txwv saum toj no, tom qab hloov 'koj BOT TOKEN' nrog lub token tiag koj tau txais thaum tsim lub bot ntawm BotFather (Kuv tham txog kev tsim bot hauv thawj tsab xov xwm).
Raws li qhov tshwm sim, peb yuav tau txais qhov txiaj ntsig no: