Ho ngola bot ea thelekramo ho R (karolo ea 3): Mokhoa oa ho eketsa tšehetso ea keyboard ho bot

Ena ke sengoloa sa boraro letotong la "Ho ngola bot ea thelekramo ka R". Likhatisong tse fetileng, re ithutile ho theha bot ea thelekramo, ho romella melaetsa ka eona, ho eketsa litaelo le li-filters tsa melaetsa ho bot. Ka hona, pele u qala ho bala sehlooho sena, ke khothaletsa haholo hore u bale e fetileng, hobane Mona ha ke sa tla hlola ke bua ka lintho tsa motheo tse hlalositsoeng pele tsa mohaho oa bot.

Sehloohong sena, re tla ntlafatsa ts'ebeliso ea bot ea rona ka ho kenyelletsa keyboard, e tla etsa hore sebopeho sa bot se be bonolo ho se sebelisa.

Ho ngola bot ea thelekramo ho R (karolo ea 3): Mokhoa oa ho eketsa tšehetso ea keyboard ho bot

Lingoliloeng tsohle tse tsoang letotong la "Ho ngola bot ea thelekramo ka R"

  1. Re theha bot mme re e sebelisa ho romella melaetsa ka thelekramo
  2. Kenya tšehetso ea litaelo le li-filters tsa melaetsa ho bot
  3. Mokhoa oa ho eketsa tšehetso ea keyboard ho bot

Tse ka hare

Haeba u thahasella tlhahlobo ea data, u ka 'na ua thahasella ea ka thelekramo и mang youtube dikanale. Boholo ba litaba bo nehetsoe puong ea R.

  1. Ke mefuta efe ea li-keyboards eo telegram bot e e tšehetsang?
  2. Araba keyboard
  3. Keybhoto e moleng
    3.1. Mohlala oa bot e bonolo e nang le ts'ehetso ea likonopo tsa InLine
    3.2. Mohlala oa bot o tlalehang boemo ba leholimo ba hajoale bakeng sa toropo e khethiloeng
    3.3. Mohlala oa bot o bonts'ang lethathamo la lingoliloeng tsa morao-rao tse nang le likhokahano tsa Hub e boletsoeng ho tsoa habr.com.
  4. fihlela qeto e

Ke mefuta efe ea li-keyboards eo telegram bot e e tšehetsang?

Nakong ea ha ho ngoloa sena telegram.bot E u lumella ho etsa mefuta e 'meli ea li-keyboards:

  • Karabo - Keyboard ea mantlha, e tloaelehileng, e fumanehang tlasa phanele ea mongolo oa molaetsa. Khiboto e joalo e romella feela molaetsa oa mongolo ho bot, mme joalo ka mongolo o tla romella mongolo o ngotsoeng ho konopo ka boeona.
  • Inline - Keyboard e amanang le molaetsa o itseng oa bot. Khiboto ena e romella data ea bot e amanang le konopo e hatisitsoeng; data ena e kanna ea fapana le mongolo o ngotsoeng konopong ka boyona. 'Me likonopo tse joalo li sebetsoa ka ho fetesisa CallbackQueryHandler.

E le hore bot e bule lebokose, hoa hlokahala ha u romela molaetsa ka mokhoa sendMessage(), fetisa keyboard e entsoeng pele e le khang reply_markup.

Ka tlase re tla sheba mehlala e 'maloa.

Araba keyboard

Joalokaha ke ngotse ka holimo, ena ke eona keyboard ea mantlha ea taolo ea bot.

Mohlala oa ho theha keyboard ea Reply ho tsoa ho thuso ea semmuso

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)

E ka holimo ke mohlala o tsoang ho thuso ea molao ea sephutheloana telegram.bot. Ho theha keyboard, sebelisa ts'ebetso ReplyKeyboardMarkup(), e leng eona e nkang lethathamo la manane a likonopo tse entsoeng ke mosebetsi KeyboardButton().

Hobaneng ho ReplyKeyboardMarkup() Na ha u hloke ho fetisa lenane feela, empa lethathamo la manane? 'Nete ke hore u fetisa lenane la sehlooho,' me ho lona u hlalosa mola o mong le o mong oa likonopo ka lethathamong le arohaneng, hobane U ka beha likonopo tse 'maloa moleng o le mong.

khang resize_keyboard e o lumella ho khetha boholo bo nepahetseng ba likonopo tsa keyboard, le khang one_time_keyboard e o lumella ho pata keyboard ka mor'a ho tobetsa konopo e 'ngoe le e' ngoe.

Ha re ngole bot e bonolo e tla ba le likonopo tse 3:

  • ID ea Chat - Kopa ID ea puisano ea puisano le bot
  • Lebitso la ka - Kopa lebitso la hau
  • Ho kena ha ka - Kopa lebitso la hau la mosebelisi ho thelekramo

Khoutu ea 1: Bot e bonolo e nang le keyboard ea Karabo

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

Etsa mohlala oa khoutu ka holimo, ka mor'a hore u nkele 'BOT TOKEN' sebaka ka letšoao la sebele leo u le fumaneng ha u theha bot ka. Ntate Ntate (Ke buile ka ho theha bot ho sehlooho sa pele).

Kamora ho qala, fana ka taelo ea bot /start, hobane Sena ke sona hantle seo re se hlalositseng ho qala keyboard.

Ho ngola bot ea thelekramo ho R (karolo ea 3): Mokhoa oa ho eketsa tšehetso ea keyboard ho bot

Haeba hajoale ho le thata ho uena ho hlalosa mohlala oa khoutu o fanoeng, ka ho theha mekhoa, li-filters le li-handers, joale u lokela ho khutlela ho e fetileng. sehlooho, moo ke hlalositseng sena sohle ka botlalo.

Re entse mekhoa e 4:

  • qala — Qala keyboard
  • chat_id - Kopa ID ea puisano
  • my_name - Kopa lebitso la hau
  • my_username - Kopa ho kena ha hau

Ho hanyetsa MelaetsaFilters e kentse li-filters tse 3 tsa melaetsa ho ipapisitsoe le mongolo oa bona:

  • chat_id — Melaetsa e nang le mongolo "Чат ID"
  • lebitso — Melaetsa e nang le mongolo "Моё имя"
  • lebitso la mosebedisi — Melaetsa e nang le mongolo "Мой логин"

'Me re thehile li-handers tse 4 tseo, ho latela litaelo le li-filters tse fanoeng, li tla phethahatsa mekhoa e boletsoeng.

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

Khiboto ka boeona e entsoe ka har'a mokhoa start() sehlopha ReplyKeyboardMarkup().

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

Tabeng ea rona, re behile likonopo tsohle tlas'a tse ling, empa re ka li hlophisa ka tatellano e le 'ngoe ka ho etsa liphetoho lethathamong la li-buttons. Hobane mola o le mong ka har'a keyboard o entsoe ka lethathamo la li-buttons, joale e le hore re bontše likonopo tsa rona ka tatellano e le 'ngoe re hloka ho ngola karolo ea khoutu bakeng sa ho haha ​​​​keyboard ka tsela ena:

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

Ho ngola bot ea thelekramo ho R (karolo ea 3): Mokhoa oa ho eketsa tšehetso ea keyboard ho bot

Khiboto e romelloa moqoqong ho sebelisoa mokhoa sendMessage(), khang reply_markup.

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

Keybhoto e moleng

Joalokaha ke ngotse ka holimo, keyboard ea Inline e tlameletsoe ho molaetsa o itseng. Ho batla ho le thata ho sebetsa ka eona ho feta keyboard e kholo.

Qalong, o hloka ho eketsa mokhoa ho bot ho bitsa keyboard ea Inline.

Ho araba ho tobetsa konopo ea Inline, u ka sebelisa mokhoa oa bot answerCallbackQuery(), e ka bonts'ang tsebiso ho sehokelo sa thelekramo ho mosebelisi ea tobetsang konopo ea Inline.

Lintlha tse rometsoeng ho tsoa ho konopo ea Inline ha se mongolo, kahoo ho e sebetsa o hloka ho theha mohlokomeli ea khethehileng o sebelisa taelo CallbackQueryHandler().

Khoutu ea ho aha keyboard ea Inline e fanoeng ka thuso ea semmuso ea sephutheloana telegram.bot.

Khoutu ea ho aha keyboard ea Inline ho tsoa ho thuso ea semmuso

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

U hloka ho aha keyboard ea Inline u sebelisa taelo InlineKeyboardMarkup(), ka molao-motheo o tšoanang le keyboard ea Reply. IN InlineKeyboardMarkup() hoa hlokahala ho fetisa lethathamo la li-buttons tsa Inline, konopo e 'ngoe le e' ngoe ea motho ka mong e entsoe ke mosebetsi InlineKeyboardButton().

Konopo ea inline e ka fetisetsa data ho bot ho sebelisa khang callback_data, kapa bula leqephe lefe kapa lefe la HTML le boletsoeng ho sebelisoa khang url.

Sephetho e tla ba lethathamo leo ho lona element ka 'ngoe e leng lethathamo la likonopo tsa Inline tse hlokang ho kopanngoa moleng o le mong.

Ka mor'a moo re tla sheba mehlala e 'maloa ea bots e nang le likonopo tsa Inline.

Mohlala oa bot e bonolo e nang le ts'ehetso ea likonopo tsa InLine

Taba ea pele, re tla ngola bot bakeng sa tlhahlobo e hlakileng ea covid-19. Ka taelo /test, e tla u romella keyboard e nang le likonopo tse peli, ho latela konopo e hatisitsoeng e tla u romella molaetsa ka liphetho tsa tlhahlobo ea hau.

Khoutu 2: Bot e bonolo ka ho fetisisa e nang le keyboard e 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()

Etsa mohlala oa khoutu ka holimo, ka mor'a hore u nkele 'BOT TOKEN' sebaka ka letšoao la sebele leo u le fumaneng ha u theha bot ka. Ntate Ntate (Ke buile ka ho theha bot ho sehlooho sa pele).

Sephetho:
Ho ngola bot ea thelekramo ho R (karolo ea 3): Mokhoa oa ho eketsa tšehetso ea keyboard ho bot

Re entse mekhoa e 'meli:

  • mamella teko — Ho romela ho qoqa Inline keyboard
  • karabo_cb — Ho sebetsana le data e rometsoeng ho tsoa ho keyboard.

Lintlha tse tla romelloa ho tsoa ho konopo e 'ngoe le e' ngoe li hlalositsoe khang callback_data, ha u theha konopo. U ka fumana data e rometsoeng ho tsoa ho konopo u sebelisa ho aha update$callback_query$data, ka hare ho mokhoa karabo_cb.

Hore bot e arabele keyboard ea Inline, mokhoa karabo_cb e sebetsanoa ke mohlokomeli ea khethehileng: CallbackQueryHandler(answer_cb). E tsamaisang mokhoa o boletsoeng ha konopo ea Inline e tobetsoa. Mohlokomedi CallbackQueryHandler e fana ka lintlha tse peli:

  • callback - Mokhoa o lokelang ho tsamaisoa
  • pattern - Sefa ka data e tlamelletsoeng konopo o sebelisa khang callback_data.

Ka lebaka leo, ho sebelisoa tlhaloso pattern Re ka ngola mokhoa o ikhethileng oa ho tobetsa konopo ka 'ngoe:

Khoutu 3: Mekhoa e arohaneng bakeng sa konopo ka 'ngoe ea 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()

Etsa mohlala oa khoutu ka holimo, ka mor'a hore u nkele 'BOT TOKEN' sebaka ka letšoao la sebele leo u le fumaneng ha u theha bot ka. Ntate Ntate (Ke buile ka ho theha bot ho sehlooho sa pele).

Hona joale re ngotse mekhoa e 2 e fapaneng ke hore. mokhoa o le mong, bakeng sa ho tobetsa konopo ka 'ngoe, le ho sebelisa khang pattern, ha u theha li-handers tsa bona:

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

Mokhoa oa khoutu oa fela karabo_cb sehlopha bot$answerCallbackQuery(callback_query_id = update$callback_query$id), e bolellang bot hore data e tsoang ho keyboard e inline e amohetsoe.

Mohlala oa bot o tlalehang boemo ba leholimo ba hajoale bakeng sa toropo e khethiloeng

Ha re leke ho ngola bot e kopang data ea boemo ba leholimo.

The logic ea mosebetsi oa eona e tla ba ka tsela e latelang. Qalong ke sehlopha /start o bitsa keyboard e kholo, e nang le konopo e le 'ngoe feela ea "Boemo". Ka ho tobetsa konopo ena u tla fumana molaetsa o nang le keyboard ea Inline ho khetha toropo eo u batlang ho tseba boemo ba leholimo ba hona joale. Khetha e 'ngoe ea litoropo 'me u fumane boemo ba leholimo ba hajoale.

Mohlala ona oa khoutu re tla sebelisa liphutheloana tse 'maloa tse eketsehileng:

  • httr - sephutheloana sa ho sebetsa le likopo tsa HTTP, motheong oa hore mosebetsi le API efe kapa efe e hahiloe. Tabeng ea rona re tla sebelisa API ea mahala openweathermap.org.
  • stringr - sephutheloana sa ho sebetsa ka mongolo, molemong oa rona re tla se sebelisa ho hlahisa molaetsa ka boemo ba leholimo motseng o khethiloeng.

Khoutu 4: Bot e tlalehang boemo ba leholimo ba hajoale bakeng sa toropo e khethiloeng

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

Etsa mohlala oa khoutu ka holimo, ka mor'a hore u nkele 'BOT TOKEN' sebaka ka letšoao la sebele leo u le fumaneng ha u theha bot ka. Ntate Ntate (Ke buile ka ho theha bot ho sehlooho sa pele).

Ka lebaka leo, bot ea rona e tla sebetsa ntho e kang ena:
Ho ngola bot ea thelekramo ho R (karolo ea 3): Mokhoa oa ho eketsa tšehetso ea keyboard ho bot

Ka moralo, bot ena e ka tšoantšoa tjena:
Ho ngola bot ea thelekramo ho R (karolo ea 3): Mokhoa oa ho eketsa tšehetso ea keyboard ho bot

Re thehile mekhoa e 3 e fumanehang ka har'a bot ea rona ea leholimo:

  • qale - Qala keyboard ea mantlha ea bot
  • meteo - Bula keyboard ea Inline ho khetha toropo
  • karabo_cb - Mokhoa o ka sehloohong o kopang boemo ba leholimo ho API bakeng sa toropo e fanoeng ebe o e romella moqoqong.

Mokhoa qale re e qala ka taelo /start, e kengoang ts'ebetsong ke mohlokomeli CommandHandler('start', start).

Ho tsamaisa mokhoa meteo re thehile filthara ea lebitso le tšoanang:

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

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

}
)

'Me re bitsa mokhoa ona ka mochine o latelang oa molaetsa: MessageHandler(weather, filters = MessageFilters$weather).

'Me qetellong, mokhoa oa rona o ka sehloohong karabo_cb e sebetsana le ho tobetsa likonopo tsa Inline, tse kenngoeng ke ts'ebetso e khethehileng: CallbackQueryHandler(answer_cb).

Ka hare ho mokhoa karabo_cb, re bala lintlha tse rometsoeng ho tswa ho keyboard ebe re li ngolla ho feto-fetoha city: city <- update$callback_query$data. Ebe re kopa data ea boemo ba leholimo ho API, ho hlahisa le ho romella molaetsa, 'me qetellong re sebelise mokhoa answerCallbackQuery e le ho tsebisa bot hore re sebelitse ho tobetsa konopo ea Inline.

Mohlala oa bot o bonts'ang lethathamo la lingoliloeng tsa morao-rao tse nang le likhokahano tsa Hub e boletsoeng ho tsoa ho www.habr.com.

Ke hlahisa bot ena ho u bontša mokhoa oa ho bonts'a likonopo tsa Inline tse lebisang maqepheng a webo.

Maikutlo a bot ena a tšoana le a fetileng; qalong re qala keyboard e kholo ka taelo /start. Ka mor'a moo, bot e re fa lethathamo la li-hubs tse 6 tseo re ka khethang ho tsona, re khetha sebaka seo re se thahasellang, 'me re amohela likhatiso tse 5 tsa morao-rao tse tsoang ho Hub e khethiloeng.

Joalokaha u utloisisa, tabeng ena re hloka ho fumana lethathamo la lihlooho, 'me bakeng sa sena re tla sebelisa sephutheloana se khethehileng habR, e u lumellang ho kopa lingoliloeng ho Habra le lipalo-palo tse ling ho tsona ho R.

Kenya sephutheloana habR ho khoneha feela ho tsoa ho github, eo u tla hloka sephutheloana se eketsehileng devtools. Ho kenya, sebelisa khoutu e ka tlase.

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

Joale a re shebeng khoutu ea ho haha ​​​​bot e hlalositsoeng ka holimo:

Khoutu 5: Bot e bonts'ang lethathamo la lingoliloeng tsa morao-rao ho Hub e khethiloeng

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

Etsa mohlala oa khoutu ka holimo, ka mor'a hore u nkele 'BOT TOKEN' sebaka ka letšoao la sebele leo u le fumaneng ha u theha bot ka. Ntate Ntate (Ke buile ka ho theha bot ho sehlooho sa pele).

Ka lebaka leo, re tla fumana sephetho sena:
Ho ngola bot ea thelekramo ho R (karolo ea 3): Mokhoa oa ho eketsa tšehetso ea keyboard ho bot

Re kentse lethathamo la li-Hubs tse fumanehang bakeng sa khetho ka mokhoa 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)
}

Re fumana lethathamo la lingoliloeng ho tsoa ho Hub e boletsoeng ka taelo habr_hub_posts(), ho tloha sephutheloana habR. Ka nako e ts'oanang, re bontša hore ha re hloke lethathamo la lihlooho tsa nako eohle, empa ke leqephe la pele feela leo lihlooho tsa 20 li leng ho lona. Ho tloha tafoleng e hlahisoang u sebelisa taelo head() Re siea feela 5 e holimo, e leng lihlooho tsa morao-rao.

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

Monahano o ts'oana haholo le bot e fetileng, empa ntlheng ena re hlahisa keyboard ea Inline e nang le lethathamo la lingoliloeng tse sebelisang ts'ebetso ka matla. lapply().

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

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

Re kenya sehlooho sa sehlooho ho mongolo oa konopo posts$title[x], le khang url sehokelo ho sengoloa: url = posts$link[x].

Ka mor'a moo, re theha filthara, li-handers ebe re qala bot ea rona.

fihlela qeto e

Hona joale li-bots tseo u li ngolang li tla ba bonolo haholoanyane ho li sebelisa, ka lebaka la hore li tla laoloa ho tloha keyboard, ho e-na le ho kenya litaelo. Bonyane, ha u sebelisana le bot ka smartphone, keyboard e tla nolofatsa haholo mokhoa oa ho e sebelisa.

Sehloohong se latelang re tla fumana mokhoa oa ho haha ​​​​moqoqo o utloahalang le bot le ho sebetsa ka marang-rang.

Source: www.habr.com

Eketsa ka tlhaloso