Tusia o le telegram bot i le R (vaega 3): Faʻafefea ona faʻaopoopo le lagolago keyboard i se pusa

O le tala lona tolu lea i le faasologa "Tuuina o se telegram bot i le R". I lomiga talu ai, na matou aʻoaʻoina ai pe faʻapefea ona fatuina se telegram bot, auina atu feʻau e ala i ai, faʻaopoopo poloaiga ma feʻau filiga i le bot. O le mea lea, ae e te leʻi amata faitauina lenei tusiga, ou te matua fautuaina oe e faitau muamua, ona O iinei o le a ou le toe nofo ai i luga o faʻamatalaga muamua o le fausiaina o bot.

I totonu o lenei tusiga, o le a matou faʻaleleia le faʻaogaina o la matou bot e ala i le faʻaopoopoina o se piano, lea o le a faʻaogaina ai le faʻaogaina o le bot ma faigofie ona faʻaoga.

Tusia o le telegram bot i le R (vaega 3): Faʻafefea ona faʻaopoopo le lagolago keyboard i se pusa

O tala uma mai le faasologa " Tusia o se telegram bot i le R"

  1. Matou te fatuina se bot ma faʻaaogaina e lafo ai feʻau i le telegram
  2. Fa'aopoopoina le fa'atonuga lagolago ma fe'au filiga i le bot
  3. Faʻafefea ona faʻaopoopo le lagolago keyboard i se bot

Mataupu

Afai e te fiafia i suʻesuʻega faʻamatalaga, atonu e te fiafia i laʻu telefoni и YouTube alavai. O le tele o mea o lo'o tu'uina atu i le gagana R.

  1. O a ituaiga keyboard e lagolagoina e le telegram bot?
  2. Tali keyboard
  3. piano i totonu
    3.1. O se faʻataʻitaʻiga o se pusa faigofie ma lagolago mo InLine buttons
    3.2. O se faʻataʻitaʻiga o se bot e lipotia le tau o loʻo i ai nei mo se taulaga filifilia
    3.3. O se faʻataʻitaʻiga o se bot e faʻaalia se lisi o tala fou ma fesoʻotaʻiga i le Hub faʻamaonia mai le habr.com
  4. iʻuga

O a ituaiga keyboard e lagolagoina e le telegram bot?

I le taimi o lenei tusitusiga telegram.bot e mafai ai ona e faia ni ituaiga keyboard se lua:

  • Tali - O le piano autu, masani, lea o loʻo i lalo o le laulau faʻapipiʻi tusitusiga. O sea keyboard e na o le auina atu o se feau tusitusia i le bot, ma e pei o le tusitusiga o le a auina atu ai le tusitusiga o loʻo tusia i luga o le ki lava ia.
  • Inline - Keyboard e feso'ota'i ma se fe'au fa'apitoa. O le piano lea e auina atu fa'amatalaga bot e feso'ota'i ma le fa'amau oomi; o nei fa'amatalaga atonu e ese mai le tusitusiga o lo'o tusia i luga o le ki lava ia. Ma o ia fa'amau o lo'o fa'agasolo atu CallbackQueryHandler.

Ina ia mafai e le bot ona tatala le piano, e manaʻomia pe a lafoina se feʻau e ala i le metotia sendMessage(), pasi le keyboard na faia muamua e fai ma finauga reply_markup.

Lalo o le a tatou tilotilo i ni nai faʻataʻitaʻiga.

Tali keyboard

E pei ona ou tusia i luga, o le autu autu lea e pulea le keyboard.

O se faʻataʻitaʻiga o le fatuina o se tali keyboard mai le fesoasoani aloaia

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 loʻo i luga o se faʻataʻitaʻiga mai le fesoasoani aloaia a le afifi telegram.bot. Ina ia fatuina se piano, faʻaaoga le galuega ReplyKeyboardMarkup(), lea e ave ai se lisi o lisi o faʻamau e faia e le galuega KeyboardButton().

Aisea i totonu ReplyKeyboardMarkup() E te manaʻomia le pasi e le naʻo se lisi, ae o se lisi o lisi? O le mea moni e te pasia le lisi autu, ma i totonu e te faʻamalamalamaina laina taʻitasi o faʻamau i lisi eseese, aua E mafai ona e tu'u ni fa'amau i le laina e tasi.

Manatu finau resize_keyboard e mafai ai ona e filifili otometi le tele sili ona lelei o ki keyboard, ma le finauga one_time_keyboard e mafai ai ona e nanaina le piano pe a uma ona oomi faamau taitasi.

Sei o tatou tusia se pusa faigofie o le ai ai 3 faamau:

  • Chat ID - Talosaga ID talatalanoaga o talanoaga ma bot
  • Lo'u igoa - Talosaga lou igoa
  • La'u saini - Talosaga lou igoa ole igoa ile telefoni

Fa'ailoga 1: Puti faigofie ma le keyboard Tali

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

Faʻataʻitaʻi le faʻataʻitaʻiga code i luga, pe a uma ona sui 'YOUR BOT TOKEN' i le faʻailoga moni na e mauaina pe a fatuina le bot e ala i BotFoa (Na ou talanoa e uiga i le fatuina o se bot i totonu mataupu muamua).

A uma ona fa'alauiloa, tu'u atu i le bot se fa'atonuga /start, ona O le mea tonu lea na matou faʻamatalaina e faʻalauiloa ai le keyboard.

Tusia o le telegram bot i le R (vaega 3): Faʻafefea ona faʻaopoopo le lagolago keyboard i se pusa

Afai o le taimi nei e faigata ia te oe ona faʻavasegaina le faʻataʻitaʻiga faʻataʻitaʻiga ua tuʻuina atu, faʻatasi ai ma le fatuina o metotia, filiga ma tagata e faʻaaogaina, ona tatau lea ona e toe foʻi i le muamua. tusiga, lea na ou faamatalaina auiliili uma ai nei mea.

Na matou faia ni auala se 4:

  • amata — Tatala le piano
  • chat_id - Talosaga ID talatalanoaga
  • my_name - Talosaga lou igoa
  • my_username - Talosaga lou saini

E tetee MessageFilters faaopoopo 3 fe'au filiga e fa'atatau i a latou tusitusiga:

  • chat_id - Fe'au ma tusitusiga "Чат ID"
  • igoa - Feau ma tusitusiga "Моё имя"
  • username — Feau ma tusitusiga "Мой логин"

Ma na matou faia ni tagata e 4, e faʻavae i luga o faʻatonuga ma filiga, o le a faʻatinoina auala faʻapitoa.

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

O le piano lava ia e faia i totonu o le metotia start() 'au ReplyKeyboardMarkup().

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

I la matou tulaga, matou te tuʻuina uma faʻamau i lalo o le tasi ma le isi, ae mafai ona matou faʻatulagaina i latou i le laina e tasi e ala i le faia o suiga i le lisi o lisi faʻamau. Aua tasi le laina i totonu o le piano e faia e ala i se lisi faamoega o faamau, ina ia mafai ona faʻaalia a matou faʻamau i le laina e tasi matou te manaʻomia le toe tusia o se vaega o le code mo le fausiaina o le piano e pei o lenei:

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

Tusia o le telegram bot i le R (vaega 3): Faʻafefea ona faʻaopoopo le lagolago keyboard i se pusa

O le keyboard e lafo i le talatalanoaga e faʻaaoga ai le metotia sendMessage(), i le finauga reply_markup.

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

piano i totonu

E pei ona ou tusia i luga, o le Inline keyboard e nonoa i se savali patino. E fai si faigata ona galue nai lo le piano autu.

I le taimi muamua, e tatau ona e faʻaopoopoina se metotia i le bot e valaʻau ai le Inline keyboard.

Ina ia tali atu i se kiliki Inline button, e mafai foi ona e faʻaogaina le auala bot answerCallbackQuery(), lea e mafai ona faʻaalia se faʻamatalaga i le fesoʻotaʻiga telegram i le tagata faʻaoga o loʻo oomi le Inline button.

O faʻamatalaga na lafoina mai le Inline button e le o ni tusitusiga, o lea e faʻatautaia ai e te manaʻomia le fatuina o se tagata faʻapitoa e faʻaaoga ai le poloaiga CallbackQueryHandler().

Le tulafono mo le fausiaina o se Inline keyboard lea e tuʻuina atu i le fesoasoani aloaia a le afifi telegram.bot.

Laiti mo le fausiaina o se Inline keyboard mai le fesoasoani aloaia

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

E te manaʻomia le fausiaina o se Inline keyboard e faʻaaoga ai le poloaiga InlineKeyboardMarkup(), i luga o le mataupu faavae lava e tasi e pei o le piano keyboard. IN InlineKeyboardMarkup() e tatau ona pasia se lisi o faʻamau Inline, faʻamau taʻitasi e faia e le galuega InlineKeyboardButton().

Ose fa'amau i totonu e mafai ona pasi nisi fa'amatalaga i le pate e fa'aaoga ai se finauga callback_data, pe tatala soʻo se itulau HTML faʻamaonia e faʻaaoga ai le finauga url.

O le taunuuga o le a avea ma se lisi lea o elemene taitasi o se lisi foi o faamau Inline e manaʻomia ona tuʻufaʻatasia i le laina e tasi.

O le isi o le a tatou vaʻavaʻai i le tele o faʻataʻitaʻiga o bots ma faʻamau Inline.

O se faʻataʻitaʻiga o se pusa faigofie ma lagolago mo InLine buttons

Muamua, matou te tusia se bot mo suʻega faʻaalia mo covid-19. I le poloaiga /test, o le a tuʻuina atu ia te oe se piano e lua faʻamau, e faʻatatau i le ki oomi o le a tuʻuina atu ia te oe se feʻau faʻatasi ai ma taunuuga o au suʻega.

Code 2: Le pate sili ona faigofie e iai le piano 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()

Faʻataʻitaʻi le faʻataʻitaʻiga code i luga, pe a uma ona sui 'YOUR BOT TOKEN' i le faʻailoga moni na e mauaina pe a fatuina le bot e ala i BotFoa (Na ou talanoa e uiga i le fatuina o se bot i totonu mataupu muamua).

Taunuʻuga:
Tusia o le telegram bot i le R (vaega 3): Faʻafefea ona faʻaopoopo le lagolago keyboard i se pusa

Na matou faia ni auala se lua:

  • suʻega — E auina atu e talatalanoa i luga ole piano keyboard
  • tali_cb - Ia fa'agasolo fa'amatalaga na lafo mai le piano.

O faʻamatalaga o le a lafoina mai faʻamau taʻitasi o loʻo faʻamaonia i le finauga callback_data, pe a fatuina se faamau. E mafai ona e mauaina faʻamatalaga na lafoina mai le ki e faʻaaoga ai le fausiaina update$callback_query$data, i totonu o le metotia tali_cb.

Mo le bot e tali atu i le Inline keyboard, metotia tali_cb fa'agaioiina e se tagata fa'apitoa: CallbackQueryHandler(answer_cb). O lo'o fa'atinoina le metotia fa'apitoa pe a kiliki le ki Inline. Taulima CallbackQueryHandler e lua finauga:

  • callback — Le auala e manaʻomia ona fai
  • pattern - Filifili e ala i faʻamatalaga o loʻo fusifusia i le ki e faʻaaoga ai se finauga callback_data.

E tusa ai, faʻaaoga le finauga pattern E mafai ona matou tusia se auala ese mo le oomiina o faamau taitasi:

Laiti 3: Va'aiga auala mo fa'amau ta'itasi

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

Faʻataʻitaʻi le faʻataʻitaʻiga code i luga, pe a uma ona sui 'YOUR BOT TOKEN' i le faʻailoga moni na e mauaina pe a fatuina le bot e ala i BotFoa (Na ou talanoa e uiga i le fatuina o se bot i totonu mataupu muamua).

O lea ua matou tusia 2 auala eseese i.e. tasi le metotia, oomi taitasi faamau, ma faaaoga le finauga pattern, pe a fatuina a latou aufaipisinisi:

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

E muta le code method tali_cb 'au bot$answerCallbackQuery(callback_query_id = update$callback_query$id), lea e ta'u atu i le bot o fa'amatalaga mai le piano i totonu ua maua.

O se faʻataʻitaʻiga o se bot e lipotia le tau o loʻo i ai nei mo se taulaga filifilia

Sei o tatou taumafai e tusi se bot e talosagaina faʻamatalaga tau.

O le fa'atatau o lana galuega o le a fa'apea. Muamua e le 'au /start e te taʻua le piano autu, lea e na o le tasi le "Weather" faamau. O le kiliki i luga o lenei faamau o le ae maua ai se feʻau ma le Inline keyboard e filifili ai le taulaga e te manaʻo e suʻe ai le tau o loʻo i ai nei. Filifili se tasi o taulaga ma maua le tau o loʻo iai nei.

I lenei faʻataʻitaʻiga code o le a matou faʻaaogaina nisi afifi faaopoopo:

  • httr - o se afifi mo le galulue faatasi ma talosaga HTTP, i luga o le faavae o le galue ma soʻo se API ua fausia. I la matou tulaga o le a matou faʻaogaina le API fua openweathermap.org.
  • stringr - o se afifi mo le galue i tusitusiga, i la matou tulaga o le a matou faʻaaogaina e fai ai se feʻau e uiga i le tau i le taulaga filifilia.

Laiti 4: O se pusa e lipotia ai le tau o loʻo i ai nei mo le taulaga filifilia

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

Faʻataʻitaʻi le faʻataʻitaʻiga code i luga, pe a uma ona sui 'YOUR BOT TOKEN' i le faʻailoga moni na e mauaina pe a fatuina le bot e ala i BotFoa (Na ou talanoa e uiga i le fatuina o se bot i totonu mataupu muamua).

O se taunuuga, o le a galue le matou bot i se mea e pei o lenei:
Tusia o le telegram bot i le R (vaega 3): Faʻafefea ona faʻaopoopo le lagolago keyboard i se pusa

I se faʻataʻitaʻiga, o lenei bot e mafai ona faʻaalia e pei o lenei:
Tusia o le telegram bot i le R (vaega 3): Faʻafefea ona faʻaopoopo le lagolago keyboard i se pusa

Ua matou faia ni metotia se 3 o loʻo avanoa i totonu o la matou vaʻa tau:

  • āmata — Tatala le keyboard autu o le bot
  • tau — Tatala le Inline keyboard e filifili ai se aai
  • tali_cb - Le auala autu e talosagaina ai le tau mai le API mo se taulaga tuʻuina atu ma tuʻuina atu i le talatalanoaga.

Metotia āmata matou te tatalaina i le poloaiga /start, lea e faʻatinoina e le faʻafoe CommandHandler('start', start).

E faʻatautaia le metotia tau na matou faia se faamama o le igoa tutusa:

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

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

}
)

Ma matou te taʻua lenei metotia ma le faʻasalalauga savali nei: MessageHandler(weather, filters = MessageFilters$weather).

Ma i le faaiuga, o la tatou auala autu tali_cb tali i le oomiina o faamau Inline, lea e faʻatinoina e se tagata faʻapitoa: CallbackQueryHandler(answer_cb).

I totonu o se metotia tali_cb, matou te faitau i faʻamatalaga na lafoina mai le piano ma tusi i se fesuiaiga city: city <- update$callback_query$data. Ona matou talosagaina lea o faʻamatalaga o le tau mai le API, faʻatupu ma lafo se feʻau, ma mulimuli ane faʻaaoga le metotia answerCallbackQuery ina ia logoina le bot na matou faʻaogaina le kiliki o le Inline button.

O se faʻataʻitaʻiga o se bot e faʻaalia se lisi o tala fou ma fesoʻotaʻiga i le Hub faʻamaonia mai www.habr.com.

Ou te tuʻuina atu lenei bot e faʻaali atu ia te oe pe faʻapefea ona faʻaalia faʻamau Inline e taʻitaʻia i itulau web.

O le faʻaogaina o lenei bot e talitutusa ma le muamua; muamua matou te faʻalauiloaina le piano autu ma le poloaiga /start. O le isi, o le bot e tuʻuina mai ia i matou se lisi o 6 hubs e filifili mai ai, matou te filifilia le hub matou te fiafia i ai, ma maua le 5 sili ona lata mai lomiga mai le Hub filifilia.

E pei ona e malamalama i ai, i lenei tulaga e tatau ona tatou maua se lisi o tala, ma mo lenei mea o le a tatou faaaogaina se afifi faapitoa habR, lea e mafai ai ona e talosagaina tala mai Habra ma nisi o fuainumera i latou i le R.

Fa'apipi'i le afifi habR naʻo le mafai mai le github, lea e te manaʻomia ai se afifi faaopoopo devtools. Ina ia faʻapipiʻi, faʻaoga le code i lalo.

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

Sei o tatou vaʻavaʻai i le tulafono mo le fausiaina o le bot o loʻo faʻamatalaina i luga:

Code 5: O se pusa e faʻaalia se lisi o tala lata mai i luga o le Hub ua filifilia

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

Faʻataʻitaʻi le faʻataʻitaʻiga code i luga, pe a uma ona sui 'YOUR BOT TOKEN' i le faʻailoga moni na e mauaina pe a fatuina le bot e ala i BotFoa (Na ou talanoa e uiga i le fatuina o se bot i totonu mataupu muamua).

O le iʻuga, o le a tatou maua lenei faʻaiʻuga:
Tusia o le telegram bot i le R (vaega 3): Faʻafefea ona faʻaopoopo le lagolago keyboard i se pusa

Na matou fa'amauina le lisi o Hubs o lo'o avanoa mo filifiliga i le auala 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)
}

Matou te maua se lisi o tala mai le Hub faʻamaonia ma le faʻatonuga habr_hub_posts(), mai le afifi habR. I le taimi lava e tasi, matou te faʻailoa atu matou te le manaʻomia se lisi o tala mo le taimi atoa, ae naʻo le itulau muamua o loʻo i ai 20 tusiga. Mai le laulau e maua ai le faʻaaogaina o le poloaiga head() Matou te tuʻua naʻo le pito i luga 5, o tala fou ia.

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

O le manatu e talitutusa lava ma le pusa muamua, ae i lenei tulaga matou te gaosia se Inline keyboard ma se lisi o tala faʻamalosi e faʻaaoga ai le galuega. lapply().

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

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

Matou te fa'aofiina le ulutala o le tusiga i totonu o le fa'amaufa'ailoga posts$title[x], ma i le finauga url so'oga ile tala: url = posts$link[x].

O le isi, matou te fatuina se faamama, tagata e faʻaaogaina ma faʻalauiloa la matou bot.

iʻuga

O le taimi nei o bots e te tusia o le a sili atu ona faigofie e faʻaoga, ona o le mea moni o le a pulea i latou mai le piano, nai lo le ulufale atu i poloaiga. I se tulaga maualalo, pe a fegalegaleai ma se bot e ala i se telefoni, o le piano o le a matua faafaigofieina le faagasologa o le faaaogaina.

I le isi tusiga o le a tatou mafaufau pe faʻafefea ona fausia se talanoaga talafeagai ma se bot ma galue ma faʻamaumauga.

puna: www.habr.com

Faaopoopo i ai se faamatalaga