Kulemba telegalamu bot mu R (gawo 3): Momwe mungawonjezere thandizo la kiyibodi ku bot

Iyi ndi nkhani yachitatu pamutu wakuti "Kulemba telegalamu bot mu R". M'mabuku am'mbuyomu, tidaphunzira kupanga telegalamu bot, kutumiza mauthenga kudzeramo, kuwonjezera malamulo ndi zosefera mauthenga ku bot. Chifukwa chake, musanayambe kuwerenga nkhaniyi, ndikupangira kuti muwerenge zam'mbuyo, chifukwa Pano sindikhalanso pazomwe zafotokozedwa kale za bot building.

M'nkhaniyi, tikonza kugwiritsa ntchito bwino kwa bot yathu powonjezera kiyibodi, yomwe ipangitsa mawonekedwe a bot kukhala osavuta kugwiritsa ntchito.

Kulemba telegalamu bot mu R (gawo 3): Momwe mungawonjezere thandizo la kiyibodi ku bot

Zolemba zonse zakuti "Kulemba telegalamu bot mu R"

  1. Timapanga bot ndikugwiritsa ntchito kutumiza mauthenga pa telegalamu
  2. Onjezani thandizo lamalamulo ndi zosefera za mauthenga ku bot
  3. Momwe mungawonjezere thandizo la kiyibodi ku bot

Zamkatimu

Ngati mukufuna kusanthula deta, mungakhale ndi chidwi changa uthengawo и Youtube njira. Zambiri mwazomwe zimaperekedwa ku chilankhulo cha R.

  1. Ndi mitundu yanji ya kiyibodi yomwe telegraph bot imathandizira?
  2. Yankhani kiyibodi
  3. Kiyibodi yapaintaneti
    3.1. Chitsanzo cha bot yosavuta yothandizidwa ndi mabatani a InLine
    3.2. Chitsanzo cha bot chomwe chimanena za nyengo yamakono ya mzinda wosankhidwa
    3.3. Chitsanzo cha bot chomwe chimawonetsa mndandanda wazolemba zaposachedwa zokhala ndi maulalo a Hub yotchulidwa kuchokera ku habr.com
  4. Pomaliza

Ndi mitundu yanji ya kiyibodi yomwe telegraph bot imathandizira?

Pa nthawi yolemba izi telegram.bot amakulolani kupanga mitundu iwiri ya kiyibodi:

  • Yankhani - Kiyibodi yayikulu, yokhazikika, yomwe ili pansi pa gulu lolowetsa mawu. Kiyibodi yotereyi imangotumiza meseji ku bot, ndipo monga mawuwo imatumiza zolemba zomwe zalembedwa pa batani lokha.
  • Inline - Kiyibodi yolumikizidwa ndi uthenga wina wa bot. Kiyibodi iyi imatumiza data ya bot yolumikizidwa ndi batani lopanikizidwa; izi zitha kusiyana ndi zomwe zalembedwa pa batani lomwe. Ndipo mabatani oterowo amakonzedwa CallbackQueryHandler.

Kuti bot atsegule kiyibodi, ndikofunikira potumiza uthenga kudzera munjira sendMessage(), perekani kiyibodi yomwe idapangidwa kale ngati mkangano reply_markup.

Pansipa tiwona zitsanzo zingapo.

Yankhani kiyibodi

Monga ndalemba pamwambapa, iyi ndiye kiyibodi yayikulu yolamulira bot.

Chitsanzo chopanga kiyibodi ya Reply kuchokera ku chithandizo chovomerezeka

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)

Zomwe zili pamwambazi ndi chitsanzo kuchokera ku chithandizo chovomerezeka cha phukusi telegram.bot. Kuti mupange kiyibodi, gwiritsani ntchito ntchitoyi ReplyKeyboardMarkup(), yomwe imatenga mndandanda wa mndandanda wa mabatani omwe amapangidwa ndi ntchitoyi KeyboardButton().

Chifukwa chiyani ReplyKeyboardMarkup() Kodi simuyenera kungodutsa mndandanda, koma mndandanda wa mndandanda? Chowonadi ndi chakuti mumadutsa mndandanda waukulu, ndipo momwemo mumatanthauzira mabatani aliwonse pamndandanda wosiyana, chifukwa Mutha kuyika mabatani angapo pamzere umodzi.

Kukangana resize_keyboard amakulolani kusankha basi kukula mulingo woyenera mabatani kiyibodi, ndi mkangano one_time_keyboard limakupatsani kubisa kiyibodi pambuyo aliyense akanikizire batani.

Tiyeni tilembe bot yosavuta yomwe idzakhala ndi mabatani atatu:

  • Chat ID - Funsani ID yochezera ya zokambirana ndi bot
  • Dzina langa - Funsani dzina lanu
  • Lowetsani kwanga - Funsani dzina lanu lolowera mu telegalamu

Khodi 1: Bot yosavuta yokhala ndi Yankho kiyibodi

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

Thamangani chitsanzo cha code pamwambapa, mutasintha 'BOT TOKEN YAKO' ndi chizindikiro chenicheni chomwe mudalandira popanga bot kudzera. Abambo (Ndinayankhula za kupanga bot mkati nkhani yoyamba).

Pambuyo poyambitsa, perekani bot lamulo /start, chifukwa Izi ndi zomwe tidafotokozera kuti tiyambitse kiyibodi.

Kulemba telegalamu bot mu R (gawo 3): Momwe mungawonjezere thandizo la kiyibodi ku bot

Ngati pakadali pano ndizovuta kuti mufotokozere chitsanzo chomwe mwapatsidwa, ndikupanga njira, zosefera ndi zowongolera, ndiye kuti muyenera kubwereranso kuzomwe zapita. nkhani, momwe ndinafotokozera zonsezi mwatsatanetsatane.

Tinapanga njira 4:

  • kuyamba - Kukhazikitsa kiyibodi
  • chat_id - Funsani ID yochezera
  • my_name - Funsani dzina lanu
  • my_username - Funsani malowedwe anu

Kutsutsa MessageFilters anawonjezera zosefera 3 zotengera mawu awo:

  • chat_id - Mauthenga okhala ndi mawu "Чат ID"
  • dzina - Mauthenga okhala ndi mawu "Моё имя"
  • lolowera - Mauthenga okhala ndi mawu "Мой логин"

Ndipo tidapanga othandizira 4 omwe, kutengera malamulo ndi zosefera zomwe adapatsidwa, azitsatira njira zomwe zafotokozedwa.

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

Kiyibodi yokha imapangidwa mkati mwa njira start() gulu ReplyKeyboardMarkup().

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

Kwa ife, tinayika mabatani onse pansi pa wina ndi mzake, koma tikhoza kuwakonza pamzere umodzi mwa kusintha mndandanda wa mndandanda wa mabatani. Chifukwa Mzere umodzi mkati mwa kiyibodi umapangidwa kudzera pamndandanda wa mabatani omwe ali pachisa, ndiye kuti tiwonetse mabatani athu pamzere umodzi tiyenera kulembanso gawo la code yomanga kiyibodi motere:

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

Kulemba telegalamu bot mu R (gawo 3): Momwe mungawonjezere thandizo la kiyibodi ku bot

Kiyibodi imatumizidwa kumacheza pogwiritsa ntchito njira sendMessage(), mu mkangano reply_markup.

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

Kiyibodi yapaintaneti

Monga ndalemba pamwambapa, kiyibodi ya Inline imamangiriridwa ku uthenga wina. Ndizovuta kwambiri kugwira ntchito kuposa kiyibodi yayikulu.

Poyamba, muyenera kuwonjezera njira ku bot kuti muyitane kiyibodi ya Inline.

Kuti muyankhe pakadina batani la Inline, mutha kugwiritsanso ntchito njira ya bot answerCallbackQuery(), yomwe imatha kuwonetsa zidziwitso mu mawonekedwe a telegalamu kwa wogwiritsa ntchito akanikizira batani la Inline.

Deta yotumizidwa kuchokera ku Inline batani silemba, kotero kuti muyigwiritse ntchito muyenera kupanga chothandizira chapadera pogwiritsa ntchito lamulo CallbackQueryHandler().

Khodi yopangira kiyibodi ya Inline yomwe imaperekedwa mothandizidwa ndi phukusi telegram.bot.

Khodi yopangira kiyibodi yapaintaneti kuchokera kwa ovomerezeka

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

Muyenera kupanga kiyibodi ya Inline pogwiritsa ntchito lamulo InlineKeyboardMarkup(), pa mfundo yofanana ndi Yankho kiyibodi. MU InlineKeyboardMarkup() m'pofunika kudutsa mndandanda wa mindandanda ya Inline mabatani, aliyense batani amapangidwa ndi ntchito InlineKeyboardButton().

Batani lapakati limatha kupititsa deta ku bot pogwiritsa ntchito mkangano callback_data, kapena tsegulani tsamba lililonse la HTML lotchulidwa pogwiritsa ntchito mkangano url.

Zotsatira zake zidzakhala mndandanda womwe chinthu chilichonse chilinso mndandanda wa mabatani a Inline omwe amayenera kuphatikizidwa mumzere umodzi.

Kenako tiwona zitsanzo zingapo za bots okhala ndi mabatani a Inline.

Chitsanzo cha bot yosavuta yothandizidwa ndi mabatani a InLine

Choyamba, tilemba bot kuti tiyese kuyesa Covid-19. Mwa kulamula /test, idzakutumizirani kiyibodi yokhala ndi mabatani awiri, kutengera batani lomwe lakanidwa idzakutumizirani uthenga ndi zotsatira za kuyesa kwanu.

Khodi 2: Boti yosavuta kwambiri yokhala ndi kiyibodi ya 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()

Thamangani chitsanzo cha code pamwambapa, mutasintha 'BOT TOKEN YAKO' ndi chizindikiro chenicheni chomwe mudalandira popanga bot kudzera. Abambo (Ndinayankhula za kupanga bot mkati nkhani yoyamba).

Zotsatira:
Kulemba telegalamu bot mu R (gawo 3): Momwe mungawonjezere thandizo la kiyibodi ku bot

Tinapanga njira ziwiri:

  • mayeso - Kutumiza ku macheza a Inline kiyibodi
  • yankho_cb - Kukonza zomwe zatumizidwa kuchokera ku kiyibodi.

Deta yomwe idzatumizidwa kuchokera ku batani lililonse imatchulidwa mu mkangano callback_data, popanga batani. Mutha kulandira deta yotumizidwa kuchokera ku batani pogwiritsa ntchito kumanga update$callback_query$data, mkati mwa njira yankho_cb.

Kuti bot igwirizane ndi kiyibodi ya Inline, njira yankho_cb kukonzedwa ndi wothandizira wapadera: CallbackQueryHandler(answer_cb). Zomwe zimayendetsa njira yodziwika pamene batani la Inline likudina. Wothandizira CallbackQueryHandler zimatenga mfundo ziwiri:

  • callback - Njira yomwe iyenera kuyendetsedwa
  • pattern - Sefa ndi data yomwe imamangiriridwa ku batani pogwiritsa ntchito mkangano callback_data.

Chifukwa chake, kugwiritsa ntchito mkangano pattern Titha kulemba njira yosiyana pokanikiza batani lililonse:

Khodi 3: Njira zosiyanitsira pa batani lililonse la 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()

Thamangani chitsanzo cha code pamwambapa, mutasintha 'BOT TOKEN YAKO' ndi chizindikiro chenicheni chomwe mudalandira popanga bot kudzera. Abambo (Ndinayankhula za kupanga bot mkati nkhani yoyamba).

Tsopano talemba 2 njira zosiyana i.e. njira imodzi, pakanikizani batani lililonse, ndipo adagwiritsa ntchito mkangano pattern, popanga othandizira awo:

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

Njira code imatha yankho_cb gulu bot$answerCallbackQuery(callback_query_id = update$callback_query$id), yomwe imauza bot kuti deta yochokera ku kiyibodi yamkati yalandilidwa.

Chitsanzo cha bot chomwe chimanena za nyengo yamakono ya mzinda wosankhidwa

Tiyeni tiyese kulemba bot yomwe imapempha zanyengo.

Lingaliro la ntchito yake lidzakhala motere. Poyamba ndi timu /start mumatcha kiyibodi yayikulu, yomwe ili ndi batani limodzi lokha la "Nyengo". Mukadina batani ili mudzalandira uthenga wokhala ndi kiyibodi ya Inline kuti musankhe mzinda womwe mukufuna kudziwa momwe nyengo ilili. Sankhani umodzi mwamizinda ndikupeza nyengo yomwe ilipo.

Muchitsanzo cha code iyi tidzagwiritsa ntchito zina zowonjezera:

  • httr - phukusi logwirira ntchito ndi zopempha za HTTP, pamaziko omwe ntchito ndi API iliyonse imamangidwa. Kwa ife tidzagwiritsa ntchito API yaulere openweathermap.org.
  • stringr - phukusi logwirira ntchito ndi zolemba, kwa ife tidzagwiritsa ntchito kupanga uthenga wokhudza nyengo mumzinda wosankhidwa.

Khodi 4: Boti yomwe imafotokoza zanyengo ya mzinda womwe wasankhidwa

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

Thamangani chitsanzo cha code pamwambapa, mutasintha 'BOT TOKEN YAKO' ndi chizindikiro chenicheni chomwe mudalandira popanga bot kudzera. Abambo (Ndinayankhula za kupanga bot mkati nkhani yoyamba).

Zotsatira zake, bot yathu igwira ntchito motere:
Kulemba telegalamu bot mu R (gawo 3): Momwe mungawonjezere thandizo la kiyibodi ku bot

Mwadongosolo, bot iyi ikhoza kuwonetsedwa motere:
Kulemba telegalamu bot mu R (gawo 3): Momwe mungawonjezere thandizo la kiyibodi ku bot

Tapanga njira zitatu zopezeka mkati mwa bot yathu yanyengo:

  • chiyambi - Yambitsani kiyibodi yayikulu ya bot
  • Pogoda - Yambitsani kiyibodi ya Inline kuti musankhe mzinda
  • yankho_cb - Njira yayikulu yomwe imapempha nyengo kuchokera ku API ya mzinda womwe wapatsidwa ndikutumiza kumacheza.

Njira chiyambi timayiyambitsa ndi lamulo /start, yomwe imayendetsedwa ndi wothandizira CommandHandler('start', start).

Kuchita njira Pogoda tinapanga fyuluta ya dzina lomwelo:

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

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

}
)

Ndipo timayitcha njira iyi ndi chothandizira mauthenga awa: MessageHandler(weather, filters = MessageFilters$weather).

Ndipo pamapeto, njira yathu yaikulu yankho_cb zimatengera kukanikiza mabatani a Inline, komwe kumakhazikitsidwa ndi chogwirizira chapadera: CallbackQueryHandler(answer_cb).

M'kati mwa njira yankho_cb, timawerenga zomwe zatumizidwa kuchokera ku kiyibodi ndikuzilemba ku variable city: city <- update$callback_query$data. Kenaka timapempha deta ya nyengo kuchokera ku API, kupanga ndi kutumiza uthenga, ndipo potsiriza mugwiritse ntchito njirayo answerCallbackQuery kuti tidziwitse bot kuti takonza dinani batani la Inline.

Chitsanzo cha bot chomwe chimawonetsa mndandanda wazolemba zaposachedwa zokhala ndi maulalo opita ku Hub yotchulidwa kuchokera www.habr.com.

Ndikupereka bot iyi kuti ndikuwonetseni momwe mungasonyezere mabatani a Inline omwe amatsogolera masamba.

Lingaliro la bot iyi ndi lofanana ndi lapitalo; poyambirira timayambitsa kiyibodi yayikulu ndi lamulo /start. Kenako, bot imatipatsa mndandanda wa ma hubs 6 oti tisankhe, timasankha malo omwe timakonda, ndikulandila zofalitsa 5 zaposachedwa kwambiri kuchokera ku Hub yosankhidwa.

Monga mukumvetsetsa, mu nkhani iyi tifunika kupeza mndandanda wa nkhani, ndipo chifukwa cha ichi tidzagwiritsa ntchito phukusi lapadera habR, zomwe zimakupatsani mwayi wopempha zolemba kuchokera kwa Habra ndi ziwerengero zina mu R.

Ikani phukusi habR zotheka kokha kuchokera ku github, komwe mudzafunika phukusi lowonjezera devtools. Kuti muyike, gwiritsani ntchito nambala yomwe ili pansipa.

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

Tsopano tiyeni tiwone khodi yopangira bot yomwe yafotokozedwa pamwambapa:

Khodi 5: Bot yomwe imawonetsa mndandanda wazolemba zaposachedwa kwambiri pa Hub yosankhidwa

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

Thamangani chitsanzo cha code pamwambapa, mutasintha 'BOT TOKEN YAKO' ndi chizindikiro chenicheni chomwe mudalandira popanga bot kudzera. Abambo (Ndinayankhula za kupanga bot mkati nkhani yoyamba).

Zotsatira zake, tipeza zotsatirazi:
Kulemba telegalamu bot mu R (gawo 3): Momwe mungawonjezere thandizo la kiyibodi ku bot

Tidasindikiza mndandanda wama Hubs omwe akupezeka kuti asankhidwe mwanjirayi 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)
}

Timapeza mndandanda wazolemba kuchokera ku Hub yotchulidwa ndi lamulo habr_hub_posts(), kuchokera phukusi habR. Panthawi imodzimodziyo, timasonyeza kuti sitifunikira mndandanda wa zolemba za nthawi yonse, koma tsamba loyamba lokha lomwe pali nkhani 20. Kuchokera pa tebulo lotsatira pogwiritsa ntchito lamulo head() Timangosiya 5 zapamwamba zokha, zomwe ndi nkhani zaposachedwa kwambiri.

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

Mfundoyi ndi yofanana kwambiri ndi bot yapitayi, koma pamenepa timapanga kiyibodi ya Inline yokhala ndi mndandanda wa zolemba pogwiritsa ntchito ntchitoyi. lapply().

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

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

Timayika mutu wa nkhaniyo m'mawu a batani posts$title[x], ndi mkangano url ulalo ku nkhani: url = posts$link[x].

Kenako, timapanga zosefera, zogwirira ntchito ndikuyambitsa bot yathu.

Pomaliza

Tsopano ma bots omwe mumalemba adzakhala osavuta kugwiritsa ntchito, chifukwa adzawongoleredwa kuchokera pa kiyibodi, m'malo molowetsa malamulo. Osachepera, mukamalumikizana ndi bot kudzera pa foni yamakono, kiyibodi imathandizira kwambiri njira yogwiritsira ntchito.

M'nkhani yotsatira tiwona momwe tingamangire zokambirana zomveka ndi bot ndikugwira ntchito ndi ma database.

Source: www.habr.com

Kuwonjezera ndemanga