Te tuhi karetao waea ki R (waahanga 3): Me pehea te taapiri i te tautoko papapātuhi ki te karetao

Koinei te tuhinga tuatoru o te raupapa "Te tuhi i te karetao waea i roto i te R". I nga panui o mua, i ako matou me pehea te hanga i te karetao waea, te tuku karere ma roto, te taapiri i nga whakahau me nga whiriwhiringa karere ki te karetao. No reira, i mua i to tiimata ki te panui i tenei tuhinga, ka tino taunaki ahau kia panui koe mua, no te mea I konei kare au e noho ki runga i nga korero o mua mo te hanga bot.

I roto i tenei tuhinga, ka whakapai ake i te whakamahinga o to tatou karetao ma te taapiri i te papapātuhi, e pai ai te atanga karetao me te ngawari ki te whakamahi.

Te tuhi karetao waea ki R (waahanga 3): Me pehea te taapiri i te tautoko papapātuhi ki te karetao

Nga tuhinga katoa mai i te raupapa "Te tuhi i te karetao waea ki R"

  1. Ka hangaia e matou he karetao ka whakamahia hei tuku karere ma te waea waea
  2. Tāpirihia te tautoko whakahau me nga whiriwhiringa karere ki te karetao
  3. Me pehea te taapiri i te tautoko papapātuhi ki te karetao

Tuhinga

Mena kei te pirangi koe ki te tātari raraunga, ka aro pea koe ki taku waea и youtube hongere. Ko te nuinga o nga korero e whakatapua ana ki te reo R.

  1. He aha nga momo papapātuhi e tautokohia ana e te karetao waea?
  2. Whakautu papapātuhi
  3. Papapātuhi rōraina
    3.1. He tauira o te karetao ngawari me te tautoko mo nga paatene InLine
    3.2. He tauira o te karetao e whakaatu ana i te huarere o naianei mo tetahi taone kua tohua
    3.3. He tauira o te karetao e whakaatu ana i te rarangi o nga tuhinga hou me nga hononga ki te Tari kua tohua mai i te habr.com
  4. mutunga

He aha nga momo papapātuhi e tautokohia ana e te karetao waea?

I te wa o tenei tuhi telegram.bot ka taea e koe te hanga i nga momo papapātuhi e rua:

  • Whakautu - Ko te papapātuhi matua, he rite tonu, kei raro i te panui whakauru kuputuhi karere. Ka tukuna noa e taua papapātuhi he karere kuputuhi ki te karetao, ka rite ki te tuhinga ka tukuna e ia nga tuhinga kua tuhia ki runga i te paatene.
  • Raina - Papapātuhi e hono ana ki tetahi karere karetao motuhake. Ka tukuna e tenei papapātuhi nga raraunga karetao e pa ana ki te paatene kua pehia; he rereke pea enei raraunga mai i nga tuhinga kua tuhia ki te paatene. Na ka tukatukahia nga paatene pera CallbackQueryHandler.

Kia taea ai e te bot te whakatuwhera i te papapātuhi, he mea tika i te wa e tukuna ana he karere ma te tikanga sendMessage(), tukuna te papapātuhi i hangaia i mua hei tohenga reply_markup.

Kei raro ka titiro tatou ki etahi tauira.

Whakautu papapātuhi

Ka rite ki taku tuhituhi i runga ake nei, koinei te papapātuhi whakahaere bot matua.

He tauira mo te hanga papapātuhi Whakautu mai i te awhina whai mana

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)

Ko te mea i runga ake nei he tauira mai i te awhina mana o te kete telegram.bot. Hei hanga papapātuhi, whakamahia te mahi ReplyKeyboardMarkup(), ka mau i te rarangi o nga rarangi o nga paatene i hangaia e te mahi KeyboardButton().

He aha i roto i ReplyKeyboardMarkup() Me tuku koe ehara i te rarangi anake, engari he rarangi rarangi? Ko te meka ka paahitia e koe te rarangi matua, a ka tautuhia e koe ia rarangi o nga paatene i roto i nga rarangi motuhake, na te mea Ka taea e koe te whakanoho i etahi paatene ki te rarangi kotahi.

tautohe resize_keyboard ka taea e koe te whiriwhiri aunoa i te rahi tino pai o nga paatene papapātuhi, me te tautohe one_time_keyboard ka taea e koe te huna i te papapātuhi i muri i ia patene patene.

Me tuhi he karetao ngawari e 3 nga patene:

  • ID Kōrerorero - Tonoa he ID kōrerorero mo te korero me te karetao
  • Toku ingoa - Tonoa to ingoa
  • Taku takiuru - Tonoa to ingoa kaiwhakamahi ki te waea waea

Waehere 1: karetao ngawari me te papapātuhi Whakautu

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

Whakahaerehia te tauira waehere i runga ake nei, i muri i te whakakapi i te 'TOKEN BOT TOKEN' ki te tohu pono i riro i a koe i te wa e hanga ana i te karetao ma Matua Matua (I korero ahau mo te hanga karetao ki roto tuhinga tuatahi).

Whai muri i te whakarewatanga, hoatu he whakahau ki te bot /start, no te mea Koinei tonu ta matou i tautuhi ai hei whakarewa i te papapātuhi.

Te tuhi karetao waea ki R (waahanga 3): Me pehea te taapiri i te tautoko papapātuhi ki te karetao

Mena i tenei wa he uaua ki a koe te tarai i te tauira waehere kua homai, me te hanga tikanga, whiriwhiringa me nga kaikawe, katahi ka hoki koe ki te waa o mua. Tuhinga, i whakaahuahia e au enei mea katoa.

I hanga e matou nga tikanga e 4:

  • timata — Whakarewahia te papapātuhi
  • chat_id — Tono ID korerorero
  • my_name - Tonoa to ingoa
  • my_username - Tonoa to takiuru

Ki te whakahe MessageFilters i taapirihia nga whiriwhiringa karere e 3 i runga i o raatau tuhinga:

  • chat_id — Karere me te kupu "Чат ID"
  • ingoa — Karere me te kuputuhi "Моё имя"
  • ingoa kaiwhakamahi — Karere me te kupu "Мой логин"

Na matou i hanga e 4 nga kaihautu, i runga i nga whakahau me nga whiriwhiringa, ka mahia nga tikanga kua tohua.

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

Ko te papapātuhi ano ka hangaia i roto i te tikanga start() kapa ReplyKeyboardMarkup().

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

I roto i to maatau, ka waiho e matou nga patene katoa ki raro i tetahi atu, engari ka taea e matou te whakarite kia kotahi rarangi ma te whakarereke i te rarangi o nga rarangi paatene. No te mea Ko tetahi rarangi kei roto i te papapātuhi ka hangaia ma te rarangi kohanga o nga paatene, katahi ka whakaatu i a tatou paatene i te rarangi kotahi me tuhi ano i tetahi waahanga o te waehere mo te hanga papapātuhi penei:

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

Te tuhi karetao waea ki R (waahanga 3): Me pehea te taapiri i te tautoko papapātuhi ki te karetao

Ka tukuna te papapātuhi ki te korerorero ma te whakamahi i te tikanga sendMessage(), i roto i te tautohe reply_markup.

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

Papapātuhi rōraina

Ka rite ki taku tuhituhi i runga ake nei, kua herea te papapātuhi Raina ki tetahi karere motuhake. He uaua ake te mahi i te papapātuhi matua.

I te tuatahi, me taapiri he tikanga ki te karetao hei karanga i te papapātuhi Raina.

Hei whakautu ki te patene paatene Raina, ka taea hoki te whakamahi i te tikanga bot answerCallbackQuery(), ka taea te whakaatu whakamohiotanga i roto i te atanga waea waea ki te kaiwhakamahi e pehi ana i te paatene Raina.

Ko nga raraunga i tukuna mai i te paatene Raina ehara i te tuhinga, no reira me hanga e koe he kaihautu motuhake ma te whakamahi i te whakahau CallbackQueryHandler().

Ko te waehere mo te hanga papapātuhi Raina ka tukuna i roto i te awhina mana o te kete telegram.bot.

Waehere mo te hanga papapātuhi Raina mai i te awhina mana

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

Me hanga e koe he papapātuhi Raina ma te whakamahi i te whakahau InlineKeyboardMarkup(), i runga i te kaupapa rite ki te papapātuhi Whakautu. IN InlineKeyboardMarkup() he mea tika ki te tuku i te rarangi rarangi o nga paatene Raina, ka hangaia ia paatene takitahi e te mahi InlineKeyboardButton().

Ka taea e te paatene roraina te tuku i etahi raraunga ki te karetao ma te tohenga callback_data, whakatuwheratia ranei tetahi wharangi HTML kua tohua ma te whakamahi i te tautohe url.

Ko te hua he rarangi kei roto ia huānga he rarangi o nga paatene Raina me whakakotahi ki te rarangi kotahi.

I muri mai ka titiro tatou ki etahi tauira o nga potae me nga patene Raina.

He tauira o te karetao ngawari me te tautoko mo nga paatene InLine

Tuatahi, ka tuhia e matou he bot mo te whakamatautau mo te covid-19. Ma te whakahau /test, ka tukuna he papapātuhi ki a koe me nga paatene e rua, i runga i te paatene i pehia ka tukuna he karere ki a koe me nga hua o to whakamatautau.

Waehere 2: Ko te karetao ngawari me te papapātuhi Raina

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

Whakahaerehia te tauira waehere i runga ake nei, i muri i te whakakapi i te 'TOKEN BOT TOKEN' ki te tohu pono i riro i a koe i te wa e hanga ana i te karetao ma Matua Matua (I korero ahau mo te hanga karetao ki roto tuhinga tuatahi).

Hua:
Te tuhi karetao waea ki R (waahanga 3): Me pehea te taapiri i te tautoko papapātuhi ki te karetao

I hanga e matou nga tikanga e rua:

  • whakamātautau — Ki te tuku korero ki te papapātuhi Raina
  • whakautu_cb — Hei tukatuka raraunga i tukuna mai i te papapātuhi.

Ko nga raraunga ka tukuna mai i ia paatene kua tohua ki te tohenga callback_data, i te wa e hanga ana he paatene. Ka taea e koe te tango i nga raraunga i tukuna mai i te paatene ma te whakamahi i te hanga update$callback_query$data, roto te tikanga whakautu_cb.

Kia tauhohe te karetao ki te papapātuhi Raina, tikanga whakautu_cb ka tukatukahia e tetahi kaihautu motuhake: CallbackQueryHandler(answer_cb). Ka whakahaere i te tikanga kua tohua ina paatohia te paatene Raina. Kaihautu CallbackQueryHandler e rua nga tautohetohe:

  • callback — Ko te tikanga me whakahaere
  • pattern — Tātarihia ma te raraunga kua herea ki te paatene ma te whakamahi i te tohenga callback_data.

Na reira, ma te whakamahi i te tautohetohe pattern Ka taea e tatou te tuhi i tetahi tikanga motuhake mo te pehi i ia paatene:

Waehere 3: Whakawehea nga tikanga mo ia paatene Raina

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

Whakahaerehia te tauira waehere i runga ake nei, i muri i te whakakapi i te 'TOKEN BOT TOKEN' ki te tohu pono i riro i a koe i te wa e hanga ana i te karetao ma Matua Matua (I korero ahau mo te hanga karetao ki roto tuhinga tuatahi).

Inaianei kua tuhia e matou nga tikanga motuhake e 2 i.e. kotahi tikanga, mo ia patene patene, ka whakamahia te tautohe pattern, i te wa e hanga ana i a raatau kaihautu:

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

Ka mutu te waehere tikanga whakautu_cb kapa bot$answerCallbackQuery(callback_query_id = update$callback_query$id), e korero ana ki te bot kua riro mai nga raraunga mai i te papapātuhi raina.

He tauira o te karetao e whakaatu ana i te huarere o naianei mo tetahi taone kua tohua

Me ngana ki te tuhi i te karetao e tono raraunga huarere.

Ko te arorau o ana mahi ka penei. I te tuatahi na te kapa /start ka karanga koe i te papapātuhi matua, kotahi noa te paatene "Weather". Ma te panui i tenei paatene ka whiwhi koe i tetahi panui me te papapātuhi Raina hei kowhiri i te taone e hiahia ana koe ki te rapu i te huarere o naianei. Tīpakohia tetahi o nga taone me te tiki i te huarere o naianei.

I tenei tauira waehere ka whakamahia e matou etahi atu kohinga:

  • httr - he putea mo te mahi me nga tono HTTP, i runga i te kaupapa o te mahi me tetahi API ka hangaia. I roto i to maatau ka whakamahi matou i te API kore utu openweathermap.org.
  • stringr — he kete mo te mahi me te tuhinga, i roto i to maatau ka whakamahia e matou ki te whakaputa korero mo te rangi i te taone kua tohua.

Waehere 4: He karetao e whakaatu ana i te huarere o naianei mo te taone kua tohua

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

Whakahaerehia te tauira waehere i runga ake nei, i muri i te whakakapi i te 'TOKEN BOT TOKEN' ki te tohu pono i riro i a koe i te wa e hanga ana i te karetao ma Matua Matua (I korero ahau mo te hanga karetao ki roto tuhinga tuatahi).

Ko te mutunga, ka penei te mahi a to tatou bot:
Te tuhi karetao waea ki R (waahanga 3): Me pehea te taapiri i te tautoko papapātuhi ki te karetao

Ka taea te whakaahua i tenei bot penei:
Te tuhi karetao waea ki R (waahanga 3): Me pehea te taapiri i te tautoko papapātuhi ki te karetao

Kua hanga e matou nga tikanga e toru e waatea ana i roto i ta maatau bot huarere:

  • tīmatanga — Whakarewahia te papapātuhi karetao matua
  • rangi — Whakarewahia te papapātuhi Raina ki te kowhiri i tetahi taone nui
  • whakautu_cb — Ko te tikanga matua e tono ana i te rangi mai i te API mo tetahi taone nui ka tukuna atu ki te korerorero.

Tikanga tīmatanga ka whakarewahia e matou me te whakahau /start, ka whakatinanahia e te kaihautu CommandHandler('start', start).

Hei whakahaere i te tikanga rangi i hanga e matou he tātari o taua ingoa:

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

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

}
)

Na ka kiia e matou tenei tikanga me te kaihautu karere e whai ake nei: MessageHandler(weather, filters = MessageFilters$weather).

A, i te mutunga, ko ta maatau tikanga matua whakautu_cb ka tauhohe ki te pehi i nga paatene Raina, ka mahia e tetahi kaihautu motuhake: CallbackQueryHandler(answer_cb).

I roto i tetahi tikanga whakautu_cb, ka panuihia e matou nga raraunga i tukuna mai i te papapātuhi ka tuhia ki tetahi taurangi city: city <- update$callback_query$data. Na ka tono matou i nga raraunga huarere mai i te API, ka whakaputa me te tuku karere, ka mutu te whakamahi i te tikanga answerCallbackQuery hei whakamohio atu ki te karetao i tukatukahia e matou te paatene o te paatene Raina.

He tauira o te karetao e whakaatu ana i te rarangi o nga tuhinga hou me nga hononga ki te Tari kua tohua mai will.com.

Ka whakaatu ahau i tenei karetao hei whakaatu ki a koe me pehea te whakaatu i nga paatene Raina e ahu atu ana ki nga wharangi paetukutuku.

He rite te arorau o tenei karetao ki te mea o mua; i te tuatahi ka whakarewahia e matou te papapātuhi matua me te whakahau /start. I muri mai, ka homai e te karetao he rarangi o nga tari e 6 hei whiriwhiri, ka tohua e matou te tari e pai ana ki a matou, ka whiwhi i nga panui hou e 5 mai i te Hub kua tohua.

I a koe e mohio ana, i tenei keehi me kii he rarangi o nga tuhinga, a mo tenei ka whakamahia e matou he kete motuhake habR, ka taea e koe te tono tuhinga mai i a Habra me etahi tatauranga mo ratou i roto i te R.

Tāuta mōkihi habR ka taea anake mai i te github, ka hiahia koe ki tetahi kete taapiri devtools. Hei whakauru, whakamahia te waehere i raro nei.

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

Inaianei me titiro ki te waehere mo te hanga i te bot i whakaahuatia i runga ake nei:

Waehere 5: He karetao e whakaatu ana i te rarangi o nga tuhinga hou i runga i te Hub kua tohua

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

Whakahaerehia te tauira waehere i runga ake nei, i muri i te whakakapi i te 'TOKEN BOT TOKEN' ki te tohu pono i riro i a koe i te wa e hanga ana i te karetao ma Matua Matua (I korero ahau mo te hanga karetao ki roto tuhinga tuatahi).

Ko te mutunga, ka whiwhi tatou i tenei hua:
Te tuhi karetao waea ki R (waahanga 3): Me pehea te taapiri i te tautoko papapātuhi ki te karetao

I whakapakeketia e matou te rarangi o nga Puka e waatea ana hei kowhiri ma te tikanga 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)
}

Ka whiwhi tatou i te rarangi o nga tuhinga mai i te Hub kua tohua me te whakahau habr_hub_posts(), mai i te kete habR. I te wa ano, ka tohu matou kaore e hiahiatia he rarangi tuhinga mo te wa katoa, engari ko te wharangi tuatahi anake e 20 nga tuhinga. Mai i te ripanga ka puta ma te whakamahi i te whakahau head() Ka waiho e matou ko te 5 o runga anake, ko nga tuhinga hou.

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

He tino rite te arorau ki te karetao o mua, engari i tenei keehi ka hangaia e matou he papapātuhi Raina me te rarangi o nga tuhinga e kaha ana te whakamahi i te mahi. lapply().

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

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

Ka whakauruhia e matou te taitara o te tuhinga ki roto i te paatene kuputuhi posts$title[x], me te tautohetohe url hono ki te tuhinga: url = posts$link[x].

I muri mai, ka hangaia e matou he tātari, he kaikawe me te whakarewa i to maatau bot.

mutunga

Inaianei ko nga potae ka tuhia e koe ka pai ake te whakamahi, na te mea ka whakahaerehia mai i te papapātuhi, kaua ki te whakauru i nga whakahau. I te iti rawa, i te wa e taunekeneke ana me te karetao ma te waea atamai, ka tino ngawari te papapātuhi i te tikanga o te whakamahi.

I roto i te tuhinga e whai ake nei ka whakaaro tatou me pehea te hanga korero arorau me te karetao me te mahi me nga papaa raraunga.

Source: will.com

Tāpiri i te kōrero