A’ sgrìobhadh bot teileagram ann an R (pàirt 3): Mar a chuireas tu taic meur-chlàr ri bot

'S e seo an treas artaigil san t-sreath "A' sgrìobhadh telegram bot ann an R". Ann am foillseachaidhean roimhe seo, dh’ ionnsaich sinn mar a chruthaicheas sinn bot teileagram, cuir teachdaireachdan troimhe, chuir sinn òrdughan agus sìoltachain teachdaireachd ris a ’bot. Mar sin, mus tòisich thu air an artaigil seo a leughadh, tha mi gu mòr a’ moladh gun leugh thu roimhe, oir An seo cha bhith mi a’ fuireach tuilleadh air bunaitean togail bot a chaidh a mhìneachadh roimhe.

San artaigil seo, leasaichidh sinn cleachdadh ar bot le bhith a’ cur meur-chlàr ris, a nì an eadar-aghaidh bot intuitive agus furasta a chleachdadh.

A’ sgrìobhadh bot teileagram ann an R (pàirt 3): Mar a chuireas tu taic meur-chlàr ri bot

A h-uile artaigil bhon t-sreath "A 'sgrìobhadh teileagram bot ann an R"

  1. Bidh sinn a’ cruthachadh bot agus ga chleachdadh gus teachdaireachdan a chuir ann an teileagram
  2. Cuir taic àithne agus sìoltachain teachdaireachd ris a’ bot
  3. Mar a chuireas tu taic meur-chlàr ri bot

Clàr-innse

Ma tha ùidh agad ann am mion-sgrùdadh dàta, is dòcha gu bheil ùidh agad ann an mo telegram и youtube seanailean. Tha a’ mhòr-chuid den t-susbaint coisrigte don chànan R.

  1. Dè an seòrsa meur-chlàr a tha an teileagram bot a’ toirt taic?
  2. Freagair meur-chlàr
  3. Meur-chlàr in-loidhne
    3.1. Eisimpleir de bot sìmplidh le taic airson putanan InLine
    3.2. Eisimpleir de bhot a tha ag aithris air an aimsir làithreach airson baile-mòr taghte
    3.3. Eisimpleir de bhot a sheallas liosta de na h-artaigilean as ùire le ceanglaichean chun Hub ainmichte bho habr.com
  4. co-dhùnadh

Dè an seòrsa meur-chlàr a tha an teileagram bot a’ toirt taic?

Aig àm an sgrìobhaidh seo telegram.bot a’ leigeil leat dà sheòrsa meur-chlàr a chruthachadh:

  • Freagairt - Am prìomh mheur-chlàr cunbhalach, a tha suidhichte fo phannal cuir a-steach teacsa teachdaireachd. Bidh meur-chlàr mar seo dìreach a’ cur teachdaireachd teacsa chun bot, agus mar an teacsa cuiridh e an teacsa a tha sgrìobhte air a’ phutan fhèin.
  • Inline - Meur-chlàr co-cheangailte ri teachdaireachd bot sònraichte. Bidh am meur-chlàr seo a’ cur an dàta bot co-cheangailte ris a’ phutan air a bhrùthadh; faodaidh an dàta seo a bhith eadar-dhealaichte bhon teacsa a tha sgrìobhte air a’ phutan fhèin. Agus tha putanan mar sin air an giullachd troimhe Cuir fios air aisQueryHandler.

Gus am faod am bot am meur-chlàr fhosgladh, tha e riatanach nuair a chuireas tu teachdaireachd tron ​​​​dòigh sendMessage(), cuir seachad am meur-chlàr a chaidh a chruthachadh roimhe seo mar argamaid reply_markup.

Gu h-ìosal bheir sinn sùil air grunn eisimpleirean.

Freagair meur-chlàr

Mar a sgrìobh mi gu h-àrd, is e seo am prìomh mheur-chlàr smachd bot.

Eisimpleir de bhith a 'cruthachadh meur-chlàr Reply bhon chuideachadh oifigeil

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)

Tha na tha gu h-àrd na eisimpleir bho chuideachadh oifigeil a’ phacaid telegram.bot. Gus meur-chlàr a chruthachadh, cleachd an gnìomh ReplyKeyboardMarkup(), a bheir an uair sin liosta de liostaichean de phutanan a tha air an cruthachadh leis a’ ghnìomh KeyboardButton().

Carson a-staigh ReplyKeyboardMarkup() Am feum thu a dhol seachad chan ann a-mhàin air liosta, ach air liosta liostaichean? Is e a’ phuing gun tèid thu seachad air a’ phrìomh liosta, agus innte bidh thu a’ mìneachadh gach sreath de phutanan ann an liostaichean fa leth, oir Faodaidh tu grunn phutanan a chuir ann an aon sreath.

argamaid resize_keyboard a’ leigeil leat am meud as fheàrr de phutanan meur-chlàr a thaghadh gu fèin-ghluasadach, agus an argamaid one_time_keyboard a’ leigeil leat am meur-chlàr fhalach às deidh gach brùth putan.

Sgrìobhamaid bot sìmplidh anns am bi 3 putanan:

  • ID Chat - Iarr ID cabadaich de chòmhradh le bot
  • M’ ainm - Iarr d’ ainm
  • Mo logadh a-steach - Iarr d’ ainm-cleachdaidh ann an telegram

Còd 1: Bot sìmplidh le meur-chlàr Freagairt

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

Ruith an eisimpleir còd gu h-àrd, às deidh dhut an fhìor chomharran a fhuair thu nuair a chruthaich thu am bot a chuir an àite ‘YOUR BOT TOKEN’ Bot-Athair (Bhruidhinn mi mu bhith a’ cruthachadh bot a-staigh chiad artaigil).

Às deidh a chuir air bhog, thoir òrdugh don bot /start, oir Is e seo dìreach a mhìnich sinn airson am meur-chlàr a chuir air bhog.

A’ sgrìobhadh bot teileagram ann an R (pàirt 3): Mar a chuireas tu taic meur-chlàr ri bot

Ma tha e duilich dhut an-dràsta an eisimpleir còd a chaidh a thoirt seachad a pharsadh, le cruthachadh dhòighean, sìoltachain agus luchd-làimhseachaidh, bu chòir dhut tilleadh chun fhear roimhe artaigil, anns an do mhìnich mi seo gu mionaideach.

Chruthaich sinn 4 dòighean:

  • tòiseachadh - Cuir air bhog am meur-chlàr
  • chat_id — Iarr ID cabadaich
  • my_name - Iarr d’ ainm
  • my_username - Iarr do logadh a-steach

Gus cur an aghaidh MessageFilters chuir 3 sìoltachain teachdaireachd ris stèidhichte air an teacsa aca:

  • chat_id - Teachdaireachdan le teacsa "Чат ID"
  • ainm - Teachdaireachdan le teacsa "Моё имя"
  • ainm-cleachdaidh - Teachdaireachdan le teacsa "Мой логин"

Agus chruthaich sinn luchd-làimhseachaidh 4 a chuireas, stèidhichte air òrdughan agus sìoltachain sònraichte, na dòighean ainmichte an gnìomh.

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

Tha am meur-chlàr fhèin air a chruthachadh taobh a-staigh an dòigh start() sgioba ReplyKeyboardMarkup().

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

Anns a 'chùis againn, chuir sinn na putanan gu lèir fo chèile, ach is urrainn dhuinn an rèiteachadh ann an aon sreath le bhith a' dèanamh atharrachaidhean air an liosta de liostaichean putan. Air sgàth tha aon sreath taobh a-staigh a’ mheur-chlàr air a chruthachadh tro liosta neadachaidh de phutanan, an uairsin gus na putanan againn a thaisbeanadh ann an aon sreath feumaidh sinn pàirt den chòd airson am meur-chlàr a thogail mar seo ath-sgrìobhadh:

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

A’ sgrìobhadh bot teileagram ann an R (pàirt 3): Mar a chuireas tu taic meur-chlàr ri bot

Thèid am meur-chlàr a chuir chun chat a’ cleachdadh an dòigh sendMessage(), anns an argamaid reply_markup.

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

Meur-chlàr in-loidhne

Mar a sgrìobh mi gu h-àrd, tha am meur-chlàr Inline ceangailte ri teachdaireachd sònraichte. Tha e beagan nas duilghe obrachadh leis na am prìomh mheur-chlàr.

An toiseach, feumaidh tu modh a chuir ris a 'bot gus am meur-chlàr Inline a ghairm.

Gus freagairt a thoirt do bhriogadh putan Inline, faodaidh tu cuideachd am modh bot a chleachdadh answerCallbackQuery(), a sheallas fios anns an eadar-aghaidh teileagram don neach-cleachdaidh a bhrùthas am putan Inline.

Chan e teacsa a th’ anns an dàta a chaidh a chuir bhon phutan Inline, mar sin airson a phròiseasadh feumaidh tu inneal-làimhseachaidh sònraichte a chruthachadh a’ cleachdadh an àithne CallbackQueryHandler().

An còd airson meur-chlàr Inline a thogail a tha air a thoirt seachad ann an cuideachadh oifigeil a 'phacaid telegram.bot.

Còd airson meur-chlàr Inline a thogail bhon taic oifigeil

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

Feumaidh tu meur-chlàr Inline a thogail a’ cleachdadh an àithne InlineKeyboardMarkup(), air an aon phrionnsapal ris a 'mheur-chlàr Reply. ANNS InlineKeyboardMarkup() feumar a dhol seachad air liosta de liostaichean de phutanan Inline, tha gach putan fa leth air a chruthachadh leis a’ ghnìomh InlineKeyboardButton().

Faodaidh putan in-loidhne beagan dàta a chuir chun bhot a’ cleachdadh argamaid callback_data, no fosgail duilleag HTML sam bith a chaidh a shònrachadh leis an argamaid url.

Is e an toradh liosta anns a bheil gach eileamaid cuideachd na liosta de phutanan Inline a dh’ fheumar a chur còmhla ann an aon sreath.

An uairsin seallaidh sinn ri grunn eisimpleirean de bhotan le putanan Inline.

Eisimpleir de bot sìmplidh le taic airson putanan InLine

An toiseach, sgrìobhaidh sinn bot airson deuchainn luath airson covid-19. Le àithne /test, cuiridh e meur-chlàr thugad le dà phutan, a rèir a’ phutan a chaidh a bhrùthadh cuiridh e teachdaireachd thugad le toraidhean an deuchainn agad.

Còd 2: Am bot as sìmplidh le meur-chlàr 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()

Ruith an eisimpleir còd gu h-àrd, às deidh dhut an fhìor chomharran a fhuair thu nuair a chruthaich thu am bot a chuir an àite ‘YOUR BOT TOKEN’ Bot-Athair (Bhruidhinn mi mu bhith a’ cruthachadh bot a-staigh chiad artaigil).

Toradh:
A’ sgrìobhadh bot teileagram ann an R (pàirt 3): Mar a chuireas tu taic meur-chlàr ri bot

Chruthaich sinn dà dhòigh:

  • deuchainn - Airson a chuir gu cabadaich meur-chlàr Inline
  • freagair_cb - Gus dàta a chuirear bhon mheur-chlàr a phròiseasadh.

Tha an dàta a thèid a chuir bho gach putan air a shònrachadh san argamaid callback_data, nuair a chruthaicheas tu putan. Gheibh thu an dàta a chaidh a chuir bhon phutan a’ cleachdadh an togail update$callback_query$data, taobh a-staigh a 'mhodh freagair_cb.

Airson am bot freagairt a thoirt don mheur-chlàr Inline, modh freagair_cb air a làimhseachadh le inneal-làimhseachaidh sònraichte: CallbackQueryHandler(answer_cb). A bhios a’ ruith an dòigh ainmichte nuair a thèid am putan Inline a bhriogadh. Fear-làimhseachaidh Cuir fios air aisQueryHandler a’ gabhail dà argamaid:

  • callback - An dòigh-obrach a dh'fheumar a ruith
  • pattern - Criathraich le dàta a tha ceangailte ris a’ phutan a’ cleachdadh argamaid callback_data.

A rèir sin, a 'cleachdadh an argamaid pattern Faodaidh sinn dòigh air leth a sgrìobhadh airson gach putan a bhrùthadh:

Còd 3: Dòighean air leth airson gach putan 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()

Ruith an eisimpleir còd gu h-àrd, às deidh dhut an fhìor chomharran a fhuair thu nuair a chruthaich thu am bot a chuir an àite ‘YOUR BOT TOKEN’ Bot-Athair (Bhruidhinn mi mu bhith a’ cruthachadh bot a-staigh chiad artaigil).

A-nis tha sinn air dà dhòigh eadar-dhealaichte a sgrìobhadh i.e. aon dòigh, airson gach putan brùth, agus chleachd sinn an argamaid pattern, nuair a bhios iad a’ cruthachadh an luchd-làimhseachaidh:

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

Còd modh a 'tighinn gu crìch freagair_cb sgioba bot$answerCallbackQuery(callback_query_id = update$callback_query$id), a tha ag innse don bot gun deach dàta bhon mheur-chlàr in-loidhne fhaighinn.

Eisimpleir de bhot a tha ag aithris air an aimsir làithreach airson baile-mòr taghte

Feuchaidh sinn ri bot a sgrìobhadh a dh’ iarras dàta sìde.

Bidh loidsig na h-obrach aige mar a leanas. An toiseach leis an sgioba /start canaidh tu am prìomh mheur-chlàr, aig nach eil ach aon phutan “Aimsir”. Le bhith a’ briogadh air a’ phutan seo gheibh thu teachdaireachd leis a’ mheur-chlàr Inline gus am baile-mòr air a bheil thu airson faighinn a-mach an aimsir làithreach a thaghadh. Tagh aon de na bailtean-mòra agus faigh an aimsir gnàthach.

San eisimpleir còd seo cleachdaidh sinn grunn phasgan a bharrachd:

  • httr - pasgan airson a bhith ag obair le iarrtasan HTTP, air a bheil obair le API sam bith air a thogail. Anns a 'chùis againn cleachdaidh sinn an API an-asgaidh openweathermap.org.
  • stringr - pasgan airson a bhith ag obair le teacsa, anns a’ chùis againn cleachdaidh sinn e gus teachdaireachd a ghineadh mun aimsir anns a ’bhaile-mòr taghte.

Còd 4: Bot a bheir cunntas air an aimsir làithreach airson a’ bhaile-mòr a chaidh a thaghadh

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

Ruith an eisimpleir còd gu h-àrd, às deidh dhut an fhìor chomharran a fhuair thu nuair a chruthaich thu am bot a chuir an àite ‘YOUR BOT TOKEN’ Bot-Athair (Bhruidhinn mi mu bhith a’ cruthachadh bot a-staigh chiad artaigil).

Mar thoradh air an sin, obraichidh am bot againn rudeigin mar seo:
A’ sgrìobhadh bot teileagram ann an R (pàirt 3): Mar a chuireas tu taic meur-chlàr ri bot

Gu sgeamaigeach, faodar am bot seo a dhealbhadh mar seo:
A’ sgrìobhadh bot teileagram ann an R (pàirt 3): Mar a chuireas tu taic meur-chlàr ri bot

Tha sinn air 3 dòighean a chruthachadh a tha rim faighinn taobh a-staigh ar bot sìde:

  • toiseach - Cuir air bhog am prìomh mheur-chlàr bot
  • Tuairmse na h- - Cuir air bhog meur-chlàr Inline gus baile-mòr a thaghadh
  • freagair_cb - Am prìomh dhòigh a dh ’iarras an aimsir bhon API airson baile-mòr sònraichte agus a chuireas chun chat.

Modh toiseach bidh sinn ga chuir air bhog leis an àithne /start, a tha air a chur an gnìomh leis an neach-làimhseachaidh CommandHandler('start', start).

Gus modh a ruith Tuairmse na h- chruthaich sinn criathrag den aon ainm:

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

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

}
)

Agus canaidh sinn an dòigh seo leis an làimhseachadh teachdaireachd a leanas: MessageHandler(weather, filters = MessageFilters$weather).

Agus aig a 'cheann thall, ar prìomh dhòigh freagair_cb freagairt ri putadh air putanan Inline, a tha air a chuir an gnìomh le inneal-làimhseachaidh sònraichte: CallbackQueryHandler(answer_cb).

Taobh a-staigh dòigh-obrach freagair_cb, leugh sinn an dàta a chaidh a chuir bhon mheur-chlàr agus sgrìobh sinn e gu caochladair city: city <- update$callback_query$data. An uairsin bidh sinn ag iarraidh dàta sìde bhon API, a ’gineadh agus a’ cur teachdaireachd, agus mu dheireadh a ’cleachdadh an dòigh answerCallbackQuery gus innse don bot gun do phròiseas sinn cliog air a’ phutan Inline.

Eisimpleir de bhot a sheallas liosta de na h-artaigilean as ùire le ceanglaichean chun Hub ainmichte bho www.habr.com.

Bidh mi a’ taisbeanadh am bot seo gus sealltainn dhut mar a sheallas tu putanan Inline a tha a’ leantainn gu duilleagan lìn.

Tha loidsig a’ bhot seo coltach ris an fhear roimhe; an toiseach bidh sinn a’ cur air bhog am prìomh mheur-chlàr leis an àithne /start. An ath rud, bheir am bot dhuinn liosta de 6 mòr-ionadan airson taghadh, bidh sinn a’ taghadh am meadhan anns a bheil ùidh againn, agus a’ faighinn na 5 foillseachaidhean as ùire bhon Hub taghte.

Mar a thuigeas tu, anns a 'chùis seo feumaidh sinn liosta artaigilean fhaighinn, agus airson seo cleachdaidh sinn pasgan sònraichte habR, a leigeas leat artaigilean iarraidh bho Habra agus cuid de staitistig orra ann an R.

Stàlaich pacaid habR dìreach comasach bho github, agus bidh feum agad air pasgan a bharrachd devtools. Gus a stàladh, cleachd an còd gu h-ìosal.

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

A-nis leig dhuinn sùil a thoirt air a’ chòd airson am bot a thogail air a mhìneachadh gu h-àrd:

Còd 5: Bot a sheallas liosta de na h-artaigilean as ùire air an Hub taghte

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

Ruith an eisimpleir còd gu h-àrd, às deidh dhut an fhìor chomharran a fhuair thu nuair a chruthaich thu am bot a chuir an àite ‘YOUR BOT TOKEN’ Bot-Athair (Bhruidhinn mi mu bhith a’ cruthachadh bot a-staigh chiad artaigil).

Mar thoradh air an sin, gheibh sinn an toradh seo:
A’ sgrìobhadh bot teileagram ann an R (pàirt 3): Mar a chuireas tu taic meur-chlàr ri bot

Chuir sinn còd cruaidh air an liosta de na Hubs a tha rim faighinn airson taghadh san dòigh 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)
}

Gheibh sinn liosta de artaigilean bhon Hub ainmichte leis an àithne habr_hub_posts(), bhon phacaid habR. Aig an aon àm, tha sinn a’ comharrachadh nach fheum sinn liosta artaigilean fad na h-ùine, ach dìreach a’ chiad duilleag air a bheil 20 artaigilean suidhichte. Bhon chlàr a thig às a’ cleachdadh an àithne head() Bidh sinn a’ fàgail dìreach na 5 as àirde, is iad sin na h-artaigilean as ùire.

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

Tha an loidsig glè choltach ris a’ bot roimhe, ach sa chùis seo bidh sinn a’ gineadh meur-chlàr Inline le liosta artaigilean gu dinamach a’ cleachdadh a’ ghnìomh lapply().

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

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

Cuiridh sinn tiotal an artaigil a-steach don teacsa putan posts$title[x], agus anns an argamaid url ceangal dhan artaigil: url = posts$link[x].

An uairsin, bidh sinn a’ cruthachadh sìoltachan, luchd-làimhseachaidh agus a ’cur ar bot air bhog.

co-dhùnadh

A-nis bidh na botaichean a sgrìobhas tu fada nas fhasa a chleachdadh, leis gum bi smachd orra bhon mheur-chlàr, seach a bhith a’ dol a-steach òrdughan. Aig a 'char as lugha, nuair a bhios tu ag eadar-obrachadh le bot tro fòn cliste, nì am meur-chlàr gu mòr am pròiseas cleachdaidh a dhèanamh nas sìmplidhe.

Anns an ath artaigil nì sinn a-mach mar a thogas sinn conaltradh loidsigeach le bot agus obraichidh sinn le stòran-dàta.

Source: www.habr.com

Cuir beachd ann