Ke kākau ʻana i kahi bot telegram ma R (mahele 3): Pehea e hoʻohui ai i ke kākoʻo keyboard i kahi bot

ʻO kēia ke kolu o ka ʻatikala ma ka moʻo "Kākau i kahi bot telegram ma R". Ma nā paʻi mua, ua aʻo mākou i ka hana ʻana i kahi bot telegram, hoʻouna i nā memo ma o ia mea, hoʻohui i nā kauoha a me nā kānana memo i ka bot. No laila, ma mua o kou hoʻomaka ʻana e heluhelu i kēia ʻatikala, makemake nui wau e heluhelu mua, no ka mea Ma ʻaneʻi ʻaʻole wau e noʻonoʻo hou i nā kumu kumu o ka kūkulu ʻana i ka bot.

Ma kēia ʻatikala, e hoʻomaikaʻi mākou i ka hoʻohana ʻana o kā mākou bot ma ka hoʻohui ʻana i kahi kīpē, e hoʻolilo i ka interface bot intuitive a maʻalahi hoʻi e hoʻohana.

Ke kākau ʻana i kahi bot telegram ma R (mahele 3): Pehea e hoʻohui ai i ke kākoʻo keyboard i kahi bot

ʻO nā ʻatikala āpau mai ka moʻo "Kākau i kahi bot telegram ma R"

  1. Hana mākou i kahi bot a hoʻohana iā ia e hoʻouna i nā leka ma ke kelepona
  2. Hoʻohui i ke kākoʻo kauoha a me nā kānana memo i ka bot
  3. Pehea e hoʻohui ai i ke kākoʻo keyboard i kahi bot

Nā mea

Inā makemake ʻoe i ka ʻikepili ʻikepili, makemake paha ʻoe i kaʻu telegram и Ukulele nā kahawai. Hoʻolaʻa ʻia ka hapa nui o nā mea i ka ʻōlelo R.

  1. He aha nā ʻano kīpē i kākoʻo ʻia e ka bot telegram?
  2. Pane keyboard
  3. Papa kuhikuhi laina
    3.1. He laʻana o ka bot maʻalahi me ke kākoʻo no nā pihi InLine
    3.2. He laʻana o ka bot e hōʻike ana i ke ʻano o kēia manawa no ke kūlanakauhale i koho ʻia
    3.3. He laʻana o ka bot e hōʻike ana i kahi papa inoa o nā ʻatikala hou loa me nā loulou i ka Hub i kuhikuhi ʻia mai habr.com
  4. hopena

He aha nā ʻano kīpē i kākoʻo ʻia e ka bot telegram?

I ka manawa o keia kakau ana telegram.bot hiki iā ʻoe ke hana i ʻelua ʻano kīpē:

  • Pane - ʻO ka papa keyboard maʻamau, aia ma lalo o ka papa hoʻokomo kikokikona memo. Hoʻouna wale ʻia kēlā ʻano kīpē i kahi leka i ka bot, a ma ke ʻano he kikokikona e hoʻouna i ka kikokikona i kākau ʻia ma ke pihi ponoʻī.
  • Inline - Pili ʻia ka papa keyboard me kahi memo bot. Hoʻouna kēia kīpī i ka ʻikepili bot e pili ana i ke pihi i kaomi ʻia; ʻokoʻa paha kēia ʻikepili mai ka kikokikona i kākau ʻia ma ke pihi ponoʻī. A ua hana ʻia ia mau pihi ma o CallbackQueryHandler.

I mea e wehe ai ka bot i ka papa keyboard, pono ia i ka hoʻouna ʻana i kahi leka ma o ke ʻano sendMessage(), e hāʻawi i ka papa keyboard i hana mua ʻia ma ke ʻano he hoʻopaʻapaʻa reply_markup.

Ma lalo mākou e nānā i kekahi mau laʻana.

Pane keyboard

E like me kaʻu i kākau ai ma luna nei, ʻo ia ka papa kuhikuhi bot control.

ʻO kahi laʻana o ka hana ʻana i kahi kīpē pane mai ke kōkua kūhelu

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)

ʻO ka mea i luna nei he laʻana mai ke kōkua kūhelu o ka pūʻolo telegram.bot. No ka hana ʻana i kahi keyboard, e hoʻohana i ka hana ReplyKeyboardMarkup(), e lawe i ka papa inoa o nā pihi i hana ʻia e ka hana KeyboardButton().

No ke aha i loko ReplyKeyboardMarkup() Pono ʻoe e hāʻawi i kahi papa inoa wale nō, akā i kahi papa inoa o nā papa inoa? ʻO ka mea ʻoiaʻiʻo ke hele nei ʻoe i ka papa inoa nui, a i loko o laila ʻoe e wehewehe i kēlā me kēia lālani o nā pihi i nā papa inoa ʻokoʻa, no ka mea Hiki iā ʻoe ke kau i kekahi mau pihi ma ka lālani hoʻokahi.

Hoopaapaa resize_keyboard hiki iā ʻoe ke koho maʻalahi i ka nui kūpono o nā pihi keyboard, a me ka hoʻopaʻapaʻa one_time_keyboard hiki iā ʻoe ke hūnā i ke kīpē ma hope o kēlā me kēia pihi pihi.

E kākau mākou i kahi bot maʻalahi e loaʻa nā pihi 3:

  • Kāleka ID - Noi i ka ID kamaʻilio o ke kamaʻilio me ka bot
  • Ko'u inoa - E noi i kou inoa
  • ʻO koʻu komo ʻana - E noi i kou inoa inoa ma ke kelepona

Code 1: ʻO ka bot maʻalahi me ka keyboard pane

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()

E holo i ka laʻana code ma luna, ma hope o ka hoʻololi ʻana iā 'YOUR BOT TOKEN' me ka hōʻailona maoli i loaʻa iā ʻoe i ka hana ʻana i ka bot ma Hoike (Ua kamaʻilio wau e pili ana i ka hana ʻana i kahi bot i loko ʻatikala mua).

Ma hope o ka hoʻomaka ʻana, e hāʻawi i ka bot i ke kauoha /start, no ka mea ʻO kēia ka mea a mākou i wehewehe ai e hoʻomaka i ka keyboard.

Ke kākau ʻana i kahi bot telegram ma R (mahele 3): Pehea e hoʻohui ai i ke kākoʻo keyboard i kahi bot

Inā i kēia manawa paʻakikī iā ʻoe e hoʻokaʻawale i ke code code i hāʻawi ʻia, me ka hana ʻana i nā ʻano, nā kānana a me nā mea lawelawe, a laila pono ʻoe e hoʻi i ka mea ma mua. 'ōlelo, kahi aʻu i wehewehe ai i kēia mau mea a pau.

Ua hana mākou i 4 mau ala:

  • hoʻomaka — E hoʻomaka i ka papa keyboard
  • chat_id — Noi kamaʻilio ID
  • my_name — Noi i kou inoa
  • my_username - Noi i kou komo ʻana

E kue MessageFilters ua hoʻohui i nā kānana memo 3 e pili ana i kā lākou kikokikona:

  • chat_id — Nā memo me ka kikokikona "Чат ID"
  • inoa — Nā memo me ka kikokikona "Моё имя"
  • inoa inoa — Nā memo me ka kikokikona "Мой логин"

A ua hana mākou i 4 mau mea lawelawe, e pili ana i nā kauoha a me nā kānana i hāʻawi ʻia, e hoʻokō i nā ʻano i kuhikuhi ʻia.

# создаём обработчики
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)

Hoʻokumu ʻia ka keyboard ponoʻī i loko o ke ʻano start() hui ReplyKeyboardMarkup().

RKM <- ReplyKeyboardMarkup(
    keyboard = list(
      list(KeyboardButton("Чат ID")),
      list(KeyboardButton("Моё имя")),
      list(KeyboardButton("Мой логин"))
    ),
    resize_keyboard = FALSE,
    one_time_keyboard = TRUE
)

I kā mākou hihia, ua kau mākou i nā pihi āpau ma lalo o kekahi, akā hiki iā mākou ke hoʻonohonoho iā lākou i ka lālani hoʻokahi ma ka hoʻololi ʻana i ka papa inoa o nā papa inoa pihi. No ka mea Hoʻokahi lālani i loko o ka papa keyboard i hana ʻia ma o kahi papa inoa o nā pihi, a laila no ka hōʻike ʻana i kā mākou mau pihi i ka lālani hoʻokahi, pono mākou e kākau hou i kahi ʻāpana o ke code no ke kūkulu ʻana i ka keyboard e like me kēia:

RKM <- ReplyKeyboardMarkup(
    keyboard = list(
      list(
          KeyboardButton("Чат ID"),
          KeyboardButton("Моё имя"),
          KeyboardButton("Мой логин")
     )
    ),
    resize_keyboard = FALSE,
    one_time_keyboard = TRUE
)

Ke kākau ʻana i kahi bot telegram ma R (mahele 3): Pehea e hoʻohui ai i ke kākoʻo keyboard i kahi bot

Hoʻouna ʻia ka keyboard i ke kamaʻilio me ke ʻano sendMessage(), ma ka hoopaapaa reply_markup.

  bot$sendMessage(update$message$chat_id,
                  text = 'Выберите команду', 
                  reply_markup = RKM)

Papa kuhikuhi laina

E like me kaʻu i kākau ai ma luna, ua hoʻopaʻa ʻia ka Inline keyboard i kahi leka kikoʻī. ʻOi aku ka paʻakikī o ka hana ʻana ma mua o ka papa kuhikuhi nui.

I ka hoʻomaka ʻana, pono ʻoe e hoʻohui i kahi ala i ka bot e kāhea ai i ka Inline keyboard.

No ka pane ʻana i kahi kaomi pihi Inline, hiki iā ʻoe ke hoʻohana i ke ʻano bot answerCallbackQuery(), hiki iā ia ke hōʻike i kahi leka hoʻomaopopo ma ke kelepona telegram i ka mea hoʻohana e kaomi i ke pihi Inline.

ʻO ka ʻikepili i hoʻouna ʻia mai ka pihi Inline ʻaʻole ia he kikokikona, no laila no ka hana ʻana ia mea pono ʻoe e hana i kahi mea hoʻohana kūikawā me ke kauoha CallbackQueryHandler().

ʻO ke code no ke kūkulu ʻana i kahi kīwī Inline i hāʻawi ʻia ma ke kōkua kūhelu o ka pūʻolo telegram.bot.

Code no ke kūkulu ʻana i kahi kīwī Inline mai ke kōkua kūhelu

# 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)

Pono ʻoe e kūkulu i kahi kīwī Inline me ke kauoha InlineKeyboardMarkup(), ma ke kumumanaʻo like me ke kīpē pane. IN InlineKeyboardMarkup() pono e hāʻawi i kahi papa inoa o nā pihi Inline, hana ʻia kēlā me kēia pihi e ka hana InlineKeyboardButton().

Hiki i ke pihi inline ke hāʻawi i kekahi ʻikepili i ka bot me ka hoʻohana ʻana i kahi hoʻopaʻapaʻa callback_data, a i ʻole e wehe i kekahi ʻaoʻao HTML i kuhikuhi ʻia me ka hoʻohana ʻana i ka hoʻopaʻapaʻa url.

ʻO ka hopena he papa inoa kahi i loaʻa ai kēlā me kēia mea i kahi papa inoa o nā pihi Inline pono e hoʻohui ʻia i hoʻokahi lālani.

A laila e nānā mākou i kekahi mau hiʻohiʻona o nā bots me nā pihi Inline.

He laʻana o ka bot maʻalahi me ke kākoʻo no nā pihi InLine

ʻO ka mea mua, e kākau mākou i kahi bot no ka hōʻike hōʻike no covid-19. Ma ke kauoha /test, e hoʻouna iā ʻoe i kahi kīpē me nā pihi ʻelua, e pili ana i ke pihi i kaomi ʻia e hoʻouna iā ʻoe i kahi leka me nā hopena o kāu hoʻāʻo.

Code 2: ʻO ka bot maʻalahi loa me kahi kīwī 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()

E holo i ka laʻana code ma luna, ma hope o ka hoʻololi ʻana iā 'YOUR BOT TOKEN' me ka hōʻailona maoli i loaʻa iā ʻoe i ka hana ʻana i ka bot ma Hoike (Ua kamaʻilio wau e pili ana i ka hana ʻana i kahi bot i loko ʻatikala mua).

Hualoaʻa:
Ke kākau ʻana i kahi bot telegram ma R (mahele 3): Pehea e hoʻohui ai i ke kākoʻo keyboard i kahi bot

Ua hana mākou i ʻelua ala:

  • hōʻike — E hoʻouna e kamaʻilio Inline keyboard
  • pane_cb — No ka hana ʻana i ka ʻikepili i hoʻouna ʻia mai ke kīpē.

Hōʻike ʻia ka ʻikepili e hoʻouna ʻia mai kēlā me kēia pihi ma ka hoʻopaʻapaʻa callback_data, i ka hana ʻana i kahi pihi. Hiki iā ʻoe ke loaʻa ka ʻikepili i hoʻouna ʻia mai ke pihi me ka hoʻohana ʻana i ke kūkulu update$callback_query$data, i loko o ke ʻano pane_cb.

No ka pane ʻana o ka bot i ka papa kuhikuhi Inline, ala pane_cb hana ʻia e kahi mea lawelawe kūikawā: CallbackQueryHandler(answer_cb). E holo ana i ke ʻano i ʻōlelo ʻia ke kaomi ʻia ke pihi Inline. Mea lima lima CallbackQueryHandler lawe ʻia nā manaʻo ʻelua:

  • callback — ʻO ke ʻano e pono ai ke holo
  • pattern - E kānana ma ka ʻikepili i hoʻopaʻa ʻia i ke pihi me ka hoʻohana ʻana i kahi hoʻopaʻapaʻa callback_data.

No laila, e hoʻohana i ka hoʻopaʻapaʻa pattern Hiki iā mākou ke kākau i kahi ala ʻokoʻa no ke kaomi ʻana i kēlā me kēia pihi:

Code 3: E hoʻokaʻawale i nā ala no kēlā me kēia pihi 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_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()

E holo i ka laʻana code ma luna, ma hope o ka hoʻololi ʻana iā 'YOUR BOT TOKEN' me ka hōʻailona maoli i loaʻa iā ʻoe i ka hana ʻana i ka bot ma Hoike (Ua kamaʻilio wau e pili ana i ka hana ʻana i kahi bot i loko ʻatikala mua).

I kēia manawa ua kākau mākou i 2 mau ʻano kaʻawale i.e. hoʻokahi ala, no kēlā me kēia pihi kaomi, a hoʻohana i ka hoʻopaʻapaʻa pattern, i ka wā e hana ai i kā lākou mau mea lawelawe:

query_handler_yes <- CallbackQueryHandler(answer_cb_yes, pattern = 'yes')
query_handler_no  <- CallbackQueryHandler(answer_cb_no, pattern = 'no')

Hoʻopau ke code ʻano hana pane_cb hui bot$answerCallbackQuery(callback_query_id = update$callback_query$id), e haʻi ana i ka bot ua loaʻa ka ʻikepili mai ka papa kuhikuhi laina.

He laʻana o ka bot e hōʻike ana i ke ʻano o kēia manawa no ke kūlanakauhale i koho ʻia

E hoʻāʻo kāua e kākau i kahi bot e noi ana i ka ʻikepili o ka wā.

Penei ke kumu o kana hana. I ka mua e ka hui /start kāhea ʻoe i ka papa kuhikuhi nui, nona hoʻokahi pihi "Weather". Ma ke kaomi ʻana i kēia pihi e loaʻa iā ʻoe kahi leka me ka Inline keyboard e koho ai i ke kūlanakauhale āu e makemake ai e ʻike i ke ʻano o kēia manawa. E koho i kekahi o nā kūlanakauhale a loaʻa i ka wā o kēia manawa.

Ma kēia laʻana code e hoʻohana mākou i kekahi mau pūʻolo hou:

  • httr - he pūʻolo no ka hana ʻana me nā noi HTTP, ma ke kumu o ka hana me kekahi API i kūkulu ʻia. I kā mākou hihia e hoʻohana mākou i ka API manuahi openweathermap.org.
  • stringr - he pūʻolo no ka hana ʻana me ka kikokikona, i kā mākou hihia e hoʻohana mākou iā ia e hana i kahi leka e pili ana i ke aniau ma ke kūlanakauhale i koho ʻia.

Code 4: He bot e hōʻike ana i ka wā o kēia manawa no ke kūlanakauhale i koho ʻia

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()

E holo i ka laʻana code ma luna, ma hope o ka hoʻololi ʻana iā 'YOUR BOT TOKEN' me ka hōʻailona maoli i loaʻa iā ʻoe i ka hana ʻana i ka bot ma Hoike (Ua kamaʻilio wau e pili ana i ka hana ʻana i kahi bot i loko ʻatikala mua).

ʻO ka hopena, e hana kā mākou bot i kahi mea e like me kēia:
Ke kākau ʻana i kahi bot telegram ma R (mahele 3): Pehea e hoʻohui ai i ke kākoʻo keyboard i kahi bot

Ma ka schematically, hiki ke hōʻike ʻia kēia bot e like me kēia:
Ke kākau ʻana i kahi bot telegram ma R (mahele 3): Pehea e hoʻohui ai i ke kākoʻo keyboard i kahi bot

Ua hana mākou i 3 mau ala i loaʻa i loko o kā mākou weather bot:

  • hoʻomaka — E hoʻokuʻu i ka kī kī bot nui
  • map - E hoʻolele i ka papa kuhikuhi Inline e koho i ke kūlanakauhale
  • pane_cb - ʻO ke ala nui e noi ai i ke aniau mai ka API no kahi kūlanakauhale i hāʻawi ʻia a hoʻouna iā ia i ke kamaʻilio.

Palapala hoʻomaka hoʻomaka mākou me ke kauoha /start, i hoʻokō ʻia e ka mea lawelawe CommandHandler('start', start).

E holo i kahi ala map Ua hana mākou i kānana o ka inoa like:

# создаём фильтры
## сообщения с текстом Погода
MessageFilters$weather <- BaseFilter(function(message) {

  # проверяем текст сообщения
  message$text == "Погода"

}
)

A kapa mākou i kēia ʻano me ka mea lawe memo: MessageHandler(weather, filters = MessageFilters$weather).

A i ka hopena, kā mākou kumu nui pane_cb e pane ana i ke kaomi ʻana i nā pihi Inline, i hoʻokō ʻia e kahi mea lawelawe kūikawā: CallbackQueryHandler(answer_cb).

I loko o kahi ala pane_cb, heluhelu mākou i ka ʻikepili i hoʻouna ʻia mai ka keyboard a kākau iā ia i kahi loli city: city <- update$callback_query$data. A laila noi mākou i ka ʻikepili mai ka API, hana a hoʻouna i kahi leka, a hoʻohana hope i ke ʻano answerCallbackQuery i mea e hoʻomaopopo ai i ka bot ua hana mākou i ke kaomi o ke pihi Inline.

He laʻana o ka bot e hōʻike ana i ka papa inoa o nā ʻatikala hou loa me nā loulou i ka Hub i kuhikuhi ʻia mai www.habr.com.

Hōʻike wau i kēia bot e hōʻike iā ʻoe pehea e hōʻike ai i nā pihi Inline e alakaʻi i nā ʻaoʻao pūnaewele.

Ua like ka loiloi o kēia bot me ka mea ma mua; hoʻomaka mākou i ka papa kuhikuhi nui me ke kauoha /start. A laila, hāʻawi ka bot iā mākou i ka papa inoa o nā hubs 6 e koho ai, koho mākou i ka hub a mākou e makemake ai, a loaʻa iā 5 mau puke hou loa mai ka Hub i koho ʻia.

E like me kāu e hoʻomaopopo ai, i kēia hihia pono mākou e kiʻi i kahi papa inoa o nā ʻatikala, a no kēia e hoʻohana mākou i kahi pūʻulu kūikawā habR, hiki iā ʻoe ke noi i nā ʻatikala mai Habra a me kekahi mau helu helu ma ia mau mea ma R.

E hoʻouka i ka pūʻolo habR hiki wale mai ka github, kahi e pono ai ʻoe i kahi pūʻulu hou devtools. No ka hoʻouka ʻana, e hoʻohana i ke code ma lalo nei.

install.packages('devtools')
devtools::install_github('selesnow/habR')

E nānā kākou i ke code no ke kūkulu ʻana i ka bot i hōʻike ʻia ma luna nei:

Code 5: He bot e hōʻike ana i ka papa inoa o nā ʻatikala hou loa ma ka Hub i koho ʻia

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()

E holo i ka laʻana code ma luna, ma hope o ka hoʻololi ʻana iā 'YOUR BOT TOKEN' me ka hōʻailona maoli i loaʻa iā ʻoe i ka hana ʻana i ka bot ma Hoike (Ua kamaʻilio wau e pili ana i ka hana ʻana i kahi bot i loko ʻatikala mua).

ʻO ka hopena, e loaʻa iā mākou kēia hopena:
Ke kākau ʻana i kahi bot telegram ma R (mahele 3): Pehea e hoʻohui ai i ke kākoʻo keyboard i kahi bot

Ua paʻakikī mākou i ka papa inoa o nā Hubs i loaʻa no ke koho ʻana ma ke ʻano 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)
}

Loaʻa iā mākou kahi papa inoa o nā ʻatikala mai ka Hub i kuhikuhi ʻia me ke kauoha habr_hub_posts(), mai ka pūʻolo habR. Ma ka manawa like, kuhikuhi mākou ʻaʻole pono mākou i kahi papa inoa o nā ʻatikala no ka manawa holoʻokoʻa, akā ʻo ka ʻaoʻao mua wale nō kahi i loaʻa ai nā ʻatikala 20. Mai ka papa ʻaina e hoʻohana ana i ke kauoha head() Ke waiho wale nei mākou i ka 5 kiʻekiʻe, ʻo ia nā ʻatikala hou loa.

  # парсим Хабр
  posts <- head(habr_hub_posts(hub, 1), 5)

Ua like loa ka loiloi me ka bot mua, akā i kēia hihia ke hana nei mākou i kahi kīwī Inline me kahi papa inoa o nā ʻatikala me ka hoʻohana ʻana i ka hana. lapply().

  # формируем список кнопок
  keys <- lapply(1:5, function(x) list(InlineKeyboardButton(posts$title[x], url = posts$link[x])))

  # формируем клавиатуру
  IKM <- InlineKeyboardMarkup(
    inline_keyboard =  keys 
    )

Hoʻokomo mākou i ke poʻo o ka ʻatikala i loko o ka kikokikona pihi posts$title[x], a ma ka hoopaapaa ana url loulou i ka ʻatikala: url = posts$link[x].

A laila, hana mākou i kānana, nā mea lawelawe a hoʻomaka i kā mākou bot.

hopena

I kēia manawa, ʻoi aku ka maʻalahi o nā bots āu e kākau ai, no ka mea e hoʻomalu ʻia lākou mai ka papa keyboard, ma mua o ke komo ʻana i nā kauoha. Ma ka liʻiliʻi loa, i ka wā e launa pū ai me kahi bot ma o ke kelepona, e maʻalahi ka papa keyboard i ke kaʻina hana o ka hoʻohana ʻana.

Ma ka ʻatikala aʻe e noʻonoʻo mākou pehea e kūkulu ai i kahi kūkākūkā loiloi me kahi bot a hana pū me nā ʻikepili.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka