R เชฎเชพเช‚ เชŸเซ‡เชฒเชฟเช—เซเชฐเชพเชฎ เชฌเซ‹เชŸ เชฒเช–เชตเซเช‚ (เชญเชพเช— 3): เชฌเซ‹เชŸเชฎเชพเช‚ เช•เซ€เชฌเซ‹เชฐเซเชก เชธเชชเซ‹เชฐเซเชŸ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช‰เชฎเซ‡เชฐเชตเซ‹

"R เชฎเชพเช‚ เชŸเซ‡เชฒเชฟเช—เซเชฐเชพเชฎ เชฌเซ‹เชŸ เชฒเช–เชตเซเช‚" เชถเซเชฐเซ‡เชฃเซ€เชจเซ‹ เช† เชคเซเชฐเซ€เชœเซ‹ เชฒเซ‡เช– เช›เซ‡. เช…เช—เชพเช‰เชจเชพ เชชเซเชฐเช•เชพเชถเชจเซ‹เชฎเชพเช‚, เช…เชฎเซ‡ เชŸเซ‡เชฒเชฟเช—เซเชฐเชพเชฎ เชฌเซ‹เชŸ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฌเชจเชพเชตเชตเซ‹, เชคเซ‡เชจเชพ เชฆเซเชตเชพเชฐเชพ เชธเช‚เชฆเซ‡เชถเชพ เชฎเซ‹เช•เชฒเชตเชพ, เชฌเซ‹เชŸเชฎเชพเช‚ เช†เชฆเซ‡เชถเซ‹ เช…เชจเซ‡ เชธเช‚เชฆเซ‡เชถ เชซเชฟเชฒเซเชŸเชฐเซเชธ เช‰เชฎเซ‡เชฐเชตเชพ เชถเซ€เช–เซเชฏเชพ. เชคเซ‡เชฅเซ€, เชคเชฎเซ‡ เช† เชฒเซ‡เช– เชตเชพเช‚เชšเชตเชพเชจเซเช‚ เชถเชฐเซ‚ เช•เชฐเซ‹ เชคเซ‡ เชชเชนเซ‡เชฒเชพเช‚, เชนเซเช‚ เช–เซ‚เชฌ เชญเชฒเชพเชฎเชฃ เช•เชฐเซเช‚ เช›เซเช‚ เช•เซ‡ เชคเชฎเซ‡ เชตเชพเช‚เชšเซ‹ เช…เช—เชพเช‰เชจเชพ, เช•เชพเชฐเชฃ เช•เซ‡ เช…เชนเซ€เช‚ เชนเซเช‚ เชฌเซ‹เชŸ เชฌเชฟเชฒเซเชกเชฟเช‚เช—เชจเซ€ เช…เช—เชพเช‰ เชตเชฐเซเชฃเชตเซ‡เชฒ เชฎเซ‚เชณเชญเซ‚เชค เชฌเชพเชฌเชคเซ‹ เชชเชฐ เชงเซเชฏเชพเชจ เช†เชชเซ€เชถ เชจเชนเซ€เช‚.

เช† เชฒเซ‡เช–เชฎเชพเช‚, เช…เชฎเซ‡ เช•เซ€เชฌเซ‹เชฐเซเชก เช‰เชฎเซ‡เชฐเซ€เชจเซ‡ เช…เชฎเชพเชฐเชพ เชฌเซ‹เชŸเชจเซ€ เช‰เชชเชฏเซ‹เช—เซ€เชคเชพเชฎเชพเช‚ เชธเซเชงเชพเชฐเซ‹ เช•เชฐเซ€เชถเซเช‚, เชœเซ‡ เชฌเซ‹เชŸ เชˆเชจเซเชŸเชฐเชซเซ‡เชธเชจเซ‡ เชธเชพเชนเชœเชฟเช• เช…เชจเซ‡ เช‰เชชเชฏเซ‹เช—เชฎเชพเช‚ เชธเชฐเชณ เชฌเชจเชพเชตเชถเซ‡.

R เชฎเชพเช‚ เชŸเซ‡เชฒเชฟเช—เซเชฐเชพเชฎ เชฌเซ‹เชŸ เชฒเช–เชตเซเช‚ (เชญเชพเช— 3): เชฌเซ‹เชŸเชฎเชพเช‚ เช•เซ€เชฌเซ‹เชฐเซเชก เชธเชชเซ‹เชฐเซเชŸ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช‰เชฎเซ‡เชฐเชตเซ‹

"R เชฎเชพเช‚ เชŸเซ‡เชฒเชฟเช—เซเชฐเชพเชฎ เชฌเซ‹เชŸ เชฒเช–เชตเซเช‚" เชถเซเชฐเซ‡เชฃเซ€เชจเชพ เชคเชฎเชพเชฎ เชฒเซ‡เช–เซ‹

  1. เช…เชฎเซ‡ เชเช• เชฌเซ‹เชŸ เชฌเชจเชพเชตเซ€เช เช›เซ€เช เช…เชจเซ‡ เชคเซ‡เชจเซ‹ เช‰เชชเชฏเซ‹เช— เชŸเซ‡เชฒเชฟเช—เซเชฐเชพเชฎเชฎเชพเช‚ เชธเช‚เชฆเซ‡เชถเชพ เชฎเซ‹เช•เชฒเชตเชพ เชฎเชพเชŸเซ‡ เช•เชฐเซ€เช เช›เซ€เช
  2. เชฌเซ‹เชŸเชฎเชพเช‚ เช•เชฎเชพเชจเซเชก เชธเชชเซ‹เชฐเซเชŸ เช…เชจเซ‡ เชฎเซ‡เชธเซ‡เชœ เชซเชฟเชฒเซเชŸเชฐเซเชธ เช‰เชฎเซ‡เชฐเซ‹
  3. เชฌเซ‹เชŸเชฎเชพเช‚ เช•เซ€เชฌเซ‹เชฐเซเชก เชธเชชเซ‹เชฐเซเชŸ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช‰เชฎเซ‡เชฐเชตเซ‹

เช…เชจเซเช•เซเชฐเชฎเชฃเชฟเช•เชพ

เชœเซ‹ เชคเชฎเชจเซ‡ เชกเซ‡เชŸเชพ เชตเชฟเชถเซเชฒเซ‡เชทเชฃเชฎเชพเช‚ เชฐเชธ เชนเซ‹เชฏ, เชคเซ‹ เชคเชฎเชจเซ‡ เชฎเชพเชฐเชพเชฎเชพเช‚ เชฐเชธ เชนเซ‹เชˆ เชถเช•เซ‡ เช›เซ‡ เชŸเซ‡เชฒเชฟเช—เซเชฐเชพเชฎ ะธ เชฏเซ เชŸเซเชฏเซเชฌ เชšเซ‡เชจเชฒเซ‹ เชฎเซ‹เชŸเชพเชญเชพเช—เชจเซ€ เชธเชพเชฎเช—เซเชฐเซ€ R เชญเชพเชทเชพเชจเซ‡ เชธเชฎเชฐเซเชชเชฟเชค เช›เซ‡.

  1. เชŸเซ‡เชฒเชฟเช—เซเชฐเชพเชฎ เชฌเซ‹เชŸ เช•เชฏเชพ เชชเซเชฐเช•เชพเชฐเชจเชพเช‚ เช•เซ€เชฌเซ‹เชฐเซเชกเชจเซ‡ เชธเชชเซ‹เชฐเซเชŸ เช•เชฐเซ‡ เช›เซ‡?
  2. เช•เซ€เชฌเซ‹เชฐเซเชกเชจเซ‹ เชœเชตเชพเชฌ เช†เชชเซ‹
  3. เช‡เชจเชฒเชพเช‡เชจ เช•เซ€เชฌเซ‹เชฐเซเชก
    3.1. เช‡เชจเชฒเชพเช‡เชจ เชฌเชŸเชจเซ‹ เชฎเชพเชŸเซ‡ เชธเชชเซ‹เชฐเซเชŸ เชธเชพเชฅเซ‡ เชธเชฐเชณ เชฌเซ‹เชŸเชจเซเช‚ เช‰เชฆเชพเชนเชฐเชฃ
    3.2. เชชเชธเช‚เชฆ เช•เชฐเซ‡เชฒ เชถเชนเซ‡เชฐ เชฎเชพเชŸเซ‡ เชตเชฐเซเชคเชฎเชพเชจ เชนเชตเชพเชฎเชพเชจเชจเซ€ เชœเชพเชฃ เช•เชฐเชคเชพ เชฌเซ‹เชŸเชจเซเช‚ เช‰เชฆเชพเชนเชฐเชฃ
    3.3. เชฌเซ‰เชŸเชจเซเช‚ เช‰เชฆเชพเชนเชฐเชฃ เชœเซ‡ habr.com เชชเชฐเชฅเซ€ เช‰เชฒเซเชฒเซ‡เช–เชฟเชค เชนเชฌเชจเซ€ เชฒเชฟเช‚เช•เซเชธ เชธเชพเชฅเซ‡ เชจเชตเซ€เชจเชคเชฎ เชฒเซ‡เช–เซ‹เชจเซ€ เชธเซ‚เชšเชฟ เชฆเชฐเซเชถเชพเชตเซ‡ เช›เซ‡
  4. เชจเชฟเชทเซเช•เชฐเซเชท

เชŸเซ‡เชฒเชฟเช—เซเชฐเชพเชฎ เชฌเซ‹เชŸ เช•เชฏเชพ เชชเซเชฐเช•เชพเชฐเชจเชพเช‚ เช•เซ€เชฌเซ‹เชฐเซเชกเชจเซ‡ เชธเชชเซ‹เชฐเซเชŸ เช•เชฐเซ‡ เช›เซ‡?

เช† เชฒเซ‡เช–เชจ เชธเชฎเชฏเซ‡ telegram.bot เชคเชฎเชจเซ‡ เชฌเซ‡ เชชเซเชฐเช•เชพเชฐเชจเชพ เช•เซ€เชฌเซ‹เชฐเซเชก เชฌเชจเชพเชตเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡:

  • เชœเชตเชพเชฌ เช†เชชเซ‹ - เชฎเซเช–เซเชฏ, เชจเชฟเชฏเชฎเชฟเชค เช•เซ€เชฌเซ‹เชฐเซเชก, เชœเซ‡ เชธเช‚เชฆเซ‡เชถ เชŸเซ‡เช•เซเชธเซเชŸ เช‡เชจเชชเซเชŸ เชชเซ‡เชจเชฒ เชนเซ‡เช เชณ เชธเซเชฅเชฟเชค เช›เซ‡. เช†เชตเชพ เช•เซ€เชฌเซ‹เชฐเซเชก เชฌเซ‹เชŸเชจเซ‡ เชซเช•เซเชค เชŸเซ‡เช•เซเชธเซเชŸ เชธเช‚เชฆเซ‡เชถ เชฎเซ‹เช•เชฒเซ‡ เช›เซ‡, เช…เชจเซ‡ เชŸเซ‡เช•เซเชธเซเชŸ เชคเชฐเซ€เช•เซ‡ เชคเซ‡ เชฌเชŸเชจ เชชเชฐ เชœ เชฒเช–เชพเชฏเซ‡เชฒ เชŸเซ‡เช•เซเชธเซเชŸ เชฎเซ‹เช•เชฒเชถเซ‡.
  • เช‡เชจเชฒเชพเช‡เชจ - เชšเซ‹เช•เซเช•เชธ เชฌเซ‹เชŸ เชธเช‚เชฆเซ‡เชถ เชธเชพเชฅเซ‡ เชธเช‚เช•เชณเชพเชฏเซ‡เชฒ เช•เซ€เชฌเซ‹เชฐเซเชก. เช† เช•เซ€เชฌเซ‹เชฐเซเชก เชฆเชฌเชพเชตเซ‡เชฒเชพ เชฌเชŸเชจ เชธเชพเชฅเซ‡ เชธเช‚เช•เชณเชพเชฏเซ‡เชฒ เชฌเซ‹เชŸ เชกเซ‡เชŸเชพ เชฎเซ‹เช•เชฒเซ‡ เช›เซ‡; เช† เชกเซ‡เชŸเชพ เชฌเชŸเชจ เชชเชฐ เชฒเช–เซ‡เชฒเชพ เชŸเซ‡เช•เซเชธเซเชŸเชฅเซ€ เช…เชฒเช— เชนเซ‹เชˆ เชถเช•เซ‡ เช›เซ‡. เช…เชจเซ‡ เช†เชตเชพ เชฌเชŸเชจเซ‹ เชฆเซเชตเชพเชฐเชพ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ CallbackQueryHandler.

เชฌเซ‹เชŸ เช•เซ€เชฌเซ‹เชฐเซเชก เช–เซ‹เชฒเชตเชพ เชฎเชพเชŸเซ‡, เชชเชฆเซเชงเชคเชฟ เชฆเซเชตเชพเชฐเชพ เชธเช‚เชฆเซ‡เชถ เชฎเซ‹เช•เชฒเชคเซ€ เชตเช–เชคเซ‡ เชคเซ‡ เชœเชฐเซ‚เชฐเซ€ เช›เซ‡ sendMessage(), เช…เช—เชพเช‰ เชฌเชจเชพเชตเซ‡เชฒ เช•เซ€เชฌเซ‹เชฐเซเชกเชจเซ‡ เชฆเชฒเซ€เชฒ เชคเชฐเซ€เช•เซ‡ เชชเชพเชธ เช•เชฐเซ‹ reply_markup.

เชจเซ€เชšเซ‡ เช†เชชเชฃเซ‡ เช˜เชฃเชพ เช‰เชฆเชพเชนเชฐเชฃเซ‹ เชœเซ‹เชˆเชถเซเช‚.

เช•เซ€เชฌเซ‹เชฐเซเชกเชจเซ‹ เชœเชตเชพเชฌ เช†เชชเซ‹

เชฎเซ‡เช‚ เช‰เชชเชฐ เชฒเช–เซเชฏเซเช‚ เชคเซ‡เชฎ, เช† เชฎเซเช–เซเชฏ เชฌเซ‹เชŸ เช•เช‚เชŸเซเชฐเซ‹เชฒ เช•เซ€เชฌเซ‹เชฐเซเชก เช›เซ‡.

เชธเชคเซเชคเชพเชตเชพเชฐ เชฎเชฆเชฆเชฎเชพเช‚เชฅเซ€ เชœเชตเชพเชฌ เช•เซ€เชฌเซ‹เชฐเซเชก เชฌเชจเชพเชตเชตเชพเชจเซเช‚ เช‰เชฆเชพเชนเชฐเชฃ

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)

เช‰เชชเชฐเซ‹เช•เซเชค เชชเซ‡เช•เซ‡เชœเชจเซ€ เชธเชคเซเชคเชพเชตเชพเชฐ เชธเชนเชพเชฏเชจเซเช‚ เช‰เชฆเชพเชนเชฐเชฃ เช›เซ‡ telegram.bot. เช•เซ€เชฌเซ‹เชฐเซเชก เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡, เชซเช‚เช•เซเชถเชจเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‹ ReplyKeyboardMarkup(), เชœเซ‡ เชฌเชฆเชฒเชพเชฎเชพเช‚ เชฌเชŸเชจเซ‹เชจเซ€ เชธเซ‚เชšเชฟเชจเซ€ เชธเซ‚เชšเชฟ เชฒเซ‡ เช›เซ‡ เชœเซ‡ เชซเช‚เช•เซเชถเชจ เชฆเซเชตเชพเชฐเชพ เชฌเชจเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ KeyboardButton().

เช•เซ‡เชฎ เช…เช‚เชฆเชฐ ReplyKeyboardMarkup() เชถเซเช‚ เชคเชฎเชพเชฐเซ‡ เชซเช•เซเชค เชธเซ‚เชšเชฟ เชœ เชจเชนเซ€เช‚, เชชเชฐเช‚เชคเซ เชธเซ‚เชšเชฟเชจเซ€ เชธเซ‚เชšเชฟ เชชเชธเชพเชฐ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡? เชนเช•เซ€เช•เชค เช เช›เซ‡ เช•เซ‡ เชคเชฎเซ‡ เชฎเซเช–เซเชฏ เชธเซ‚เชšเชฟ เชชเชธเชพเชฐ เช•เชฐเซ‹ เช›เซ‹, เช…เชจเซ‡ เชคเซ‡เชฎเชพเช‚ เชคเชฎเซ‡ เชฌเชŸเชจเซ‹เชจเซ€ เชฆเชฐเซ‡เช• เชชเช‚เช•เซเชคเชฟเชจเซ‡ เช…เชฒเช— เชธเซ‚เชšเชฟเชฎเชพเช‚ เชตเซเชฏเชพเช–เซเชฏเชพเชฏเชฟเชค เช•เชฐเซ‹ เช›เซ‹, เช•เชพเชฐเชฃ เช•เซ‡ เชคเชฎเซ‡ เชเช• เชชเช‚เช•เซเชคเชฟเชฎเชพเช‚ เช˜เชฃเชพ เชฌเชŸเชจเซ‹ เชฎเซ‚เช•เซ€ เชถเช•เซ‹ เช›เซ‹.

เชฆเชฒเซ€เชฒ resize_keyboard เชคเชฎเชจเซ‡ เช•เซ€เชฌเซ‹เชฐเซเชก เชฌเชŸเชจเซ‹เชจเชพ เชถเซเชฐเซ‡เชทเซเช  เช•เชฆ เช…เชจเซ‡ เชฆเชฒเซ€เชฒเชจเซ‡ เช†เชชเชฎเซ‡เชณเซ‡ เชชเชธเช‚เชฆ เช•เชฐเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡ one_time_keyboard เชฆเชฐเซ‡เช• เชฌเชŸเชจ เชฆเชฌเชพเชตเซเชฏเชพ เชชเช›เซ€ เชคเชฎเชจเซ‡ เช•เซ€เชฌเซ‹เชฐเซเชก เช›เซเชชเชพเชตเชตเชพ เชฆเซ‡ เช›เซ‡.

เชšเชพเชฒเซ‹ เชเช• เชธเชฐเชณ เชฌเซ‹เชŸ เชฒเช–เซ€เช เชœเซ‡เชฎเชพเช‚ 3 เชฌเชŸเชจ เชนเชถเซ‡:

  • เชšเซ‡เชŸ ID - เชฌเซ‹เชŸ เชธเชพเชฅเซ‡ เชธเช‚เชตเชพเชฆเชจเชพ เชšเซ‡เชŸ IDเชจเซ€ เชตเชฟเชจเช‚เชคเซ€ เช•เชฐเซ‹
  • เชฎเชพเชฐเซเช‚ เชจเชพเชฎ - เชคเชฎเชพเชฐเชพ เชจเชพเชฎเชจเซ€ เชตเชฟเชจเช‚เชคเซ€ เช•เชฐเซ‹
  • เชฎเชพเชฐเซเช‚ เชฒเซ‰เช—เชฟเชจ - เชŸเซ‡เชฒเชฟเช—เซเชฐเชพเชฎเชฎเชพเช‚ เชคเชฎเชพเชฐเชพ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เชจเชพเชฎเชจเซ€ เชตเชฟเชจเช‚เชคเซ€ เช•เชฐเซ‹

เช•เซ‹เชก 1: เชœเชตเชพเชฌ เช•เซ€เชฌเซ‹เชฐเซเชก เชธเชพเชฅเซ‡เชจเซ‹ เชธเชฐเชณ เชฌเซ‹เชŸ

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

เช‰เชชเชฐเซ‹เช•เซเชค เช•เซ‹เชก เช‰เชฆเชพเชนเชฐเชฃ เชšเชฒเชพเชตเซ‹, 'เชฏเซ‹เชฐ เชฌเซ‹เชŸ เชŸเซ‹เช•เชจ' เชจเซ‡ เชฌเชฆเชฒเซเชฏเชพ เชชเช›เซ€, เชคเชฎเชจเซ‡ เชฌเซ‹เชŸ เชฌเชจเชพเชตเชคเซ€ เชตเช–เชคเซ‡ เชชเซเชฐเชพเชชเซเชค เชฅเชฏเซ‡เชฒ เชตเชพเชธเซเชคเชตเชฟเช• เชŸเซ‹เช•เชจ เชธเชพเชฅเซ‡ เชฌเซ‹เชŸเชซเซ‡เชงเชฐ (เชฎเซ‡เช‚ เชฎเชพเช‚ เชฌเซ‹เชŸ เชฌเชจเชพเชตเชตเชพ เชตเชฟเชถเซ‡ เชตเชพเชค เช•เชฐเซ€ เชชเซเชฐเชฅเชฎ เชฒเซ‡เช–).

เชฒเซ‹เชจเซเชš เช•เชฐเซเชฏเชพ เชชเช›เซ€, เชฌเซ‹เชŸเชจเซ‡ เช†เชฆเซ‡เชถ เช†เชชเซ‹ /start, เช•เชพเชฐเชฃ เช•เซ‡ เช† เชฌเชฐเชพเชฌเชฐ เช›เซ‡ เชœเซ‡ เช†เชชเชฃเซ‡ เช•เซ€เชฌเซ‹เชฐเซเชก เชฒเซ‹เชจเซเชš เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชตเซเชฏเชพเช–เซเชฏเชพเชฏเชฟเชค เช•เชฐเซเชฏเซเช‚ เช›เซ‡.

R เชฎเชพเช‚ เชŸเซ‡เชฒเชฟเช—เซเชฐเชพเชฎ เชฌเซ‹เชŸ เชฒเช–เชตเซเช‚ (เชญเชพเช— 3): เชฌเซ‹เชŸเชฎเชพเช‚ เช•เซ€เชฌเซ‹เชฐเซเชก เชธเชชเซ‹เชฐเซเชŸ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช‰เชฎเซ‡เชฐเชตเซ‹

เชœเซ‹ เช† เช•เซเชทเชฃเซ‡ เชชเชฆเซเชงเชคเชฟเช“, เชซเชฟเชฒเซเชŸเชฐเซเชธ เช…เชจเซ‡ เชนเซ‡เชจเซเชกเชฒเชฐเซเชธเชจเซ€ เชฐเชšเชจเชพ เชธเชพเชฅเซ‡ เช†เชชเซ‡เชฒ เช•เซ‹เชก เช‰เชฆเชพเชนเชฐเชฃเชจเซเช‚ เชตเชฟเชถเซเชฒเซ‡เชทเชฃ เช•เชฐเชตเซเช‚ เชคเชฎเชพเชฐเชพ เชฎเชพเชŸเซ‡ เชฎเซเชถเซเช•เซ‡เชฒ เช›เซ‡, เชคเซ‹ เชคเชฎเชพเชฐเซ‡ เชชเชพเช›เชฒเชพ เชเช• เชชเชฐ เชชเชพเช›เชพ เชซเชฐเชตเซเช‚ เชœเซ‹เชˆเช. เชฒเซ‡เช–, เชœเซ‡เชฎเชพเช‚ เชฎเซ‡เช‚ เช† เชฌเชงเซเช‚ เชตเชฟเช—เชคเชตเชพเชฐ เชตเชฐเซเชฃเชตเซเชฏเซเช‚ เช›เซ‡.

เช…เชฎเซ‡ 4 เชชเชฆเซเชงเชคเชฟเช“ เชฌเชจเชพเชตเซ€ เช›เซ‡:

  • เชชเซเชฐเชพเชฐเช‚เชญ เช•เชฐเซ‹ - เช•เซ€เชฌเซ‹เชฐเซเชก เชฒเซ‹เช‚เชš เช•เชฐเซ‹
  • chat_id โ€” เชšเซ‡เชŸ ID เชฎเชพเชŸเซ‡ เชตเชฟเชจเช‚เชคเซ€ เช•เชฐเซ‹
  • my_name โ€” เชคเชฎเชพเชฐเชพ เชจเชพเชฎเชจเซ€ เชตเชฟเชจเช‚เชคเซ€ เช•เชฐเซ‹
  • my_username โ€” เชคเชฎเชพเชฐเชพ เชฒเซ‰เช—เชฟเชจ เชฎเชพเชŸเซ‡ เชตเชฟเชจเช‚เชคเซ€ เช•เชฐเซ‹

เชตเชพเช‚เชงเซ‹ เช‰เช เชพเชตเชตเซ‹ เชฎเซ‡เชธเซ‡เชœเชซเชฟเชฒเซเชŸเชฐเซเชธ เชคเซ‡เชฎเชจเชพ เชŸเซ‡เช•เซเชธเซเชŸเชจเชพ เช†เชงเชพเชฐเซ‡ 3 เชธเช‚เชฆเซ‡เชถ เชซเชฟเชฒเซเชŸเชฐเซเชธ เช‰เชฎเซ‡เชฐเซเชฏเชพ:

  • chat_id โ€” เชŸเซ‡เช•เซเชธเซเชŸ เชธเชพเชฅเซ‡เชจเชพ เชธเช‚เชฆเซ‡เชถเชพเช“ "ะงะฐั‚ ID"
  • เชจเชพเชฎ - เชŸเซ‡เช•เซเชธเซเชŸ เชธเชพเชฅเซ‡เชจเชพ เชธเช‚เชฆเซ‡เชถเชพ "ะœะพั‘ ะธะผั"
  • เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เชจเชพเชฎ โ€” เชŸเซ‡เช•เซเชธเซเชŸ เชธเชพเชฅเซ‡เชจเชพ เชธเช‚เชฆเซ‡เชถเชพเช“ "ะœะพะน ะปะพะณะธะฝ"

เช…เชจเซ‡ เช…เชฎเซ‡ 4 เชนเซ‡เชจเซเชกเชฒเชฐเซเชธ เชฌเชจเชพเชตเซเชฏเชพ เช›เซ‡, เชœเซ‡ เช†เชชเซ‡เชฒ เช†เชฆเซ‡เชถเซ‹ เช…เชจเซ‡ เชซเชฟเชฒเซเชŸเชฐเซเชธเชจเชพ เช†เชงเชพเชฐเซ‡, เช‰เชฒเซเชฒเซ‡เช–เชฟเชค เชชเชฆเซเชงเชคเชฟเช“เชจเซ‹ เช…เชฎเชฒ เช•เชฐเชถเซ‡.

# ัะพะทะดะฐั‘ะผ ะพะฑั€ะฐะฑะพั‚ั‡ะธะบะธ
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)

เช•เซ€เชฌเซ‹เชฐเซเชก เชชเซ‹เชคเซ‡ เชชเชฆเซเชงเชคเชฟเชจเซ€ เช…เช‚เชฆเชฐ เชฌเชจเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ start() เชŸเซ€เชฎ ReplyKeyboardMarkup().

RKM <- ReplyKeyboardMarkup(
    keyboard = list(
      list(KeyboardButton("ะงะฐั‚ ID")),
      list(KeyboardButton("ะœะพั‘ ะธะผั")),
      list(KeyboardButton("ะœะพะน ะปะพะณะธะฝ"))
    ),
    resize_keyboard = FALSE,
    one_time_keyboard = TRUE
)

เช…เชฎเชพเชฐเชพ เช•เชฟเชธเซเชธเชพเชฎเชพเช‚, เช…เชฎเซ‡ เชฌเชงเชพ เชฌเชŸเชจเซ‹ เชเช•เชฌเซ€เชœเชพเชจเซ€ เชจเซ€เชšเซ‡ เชฎเซ‚เช•เซเชฏเชพ เช›เซ‡, เชชเชฐเช‚เชคเซ เช…เชฎเซ‡ เชฌเชŸเชจ เชธเซ‚เชšเชฟเชจเซ€ เชธเซ‚เชšเชฟเชฎเชพเช‚ เชซเซ‡เชฐเชซเชพเชฐ เช•เชฐเซ€เชจเซ‡ เชคเซ‡เชฎเชจเซ‡ เชเช• เชชเช‚เช•เซเชคเชฟเชฎเชพเช‚ เช—เซ‹เช เชตเซ€ เชถเช•เซ€เช เช›เซ€เช. เช•เชพเชฐเชฃ เช•เซ‡ เช•เซ€เชฌเซ‹เชฐเซเชกเชจเซ€ เช…เช‚เชฆเชฐเชจเซ€ เชเช• เชชเช‚เช•เซเชคเชฟ เชฌเชŸเชจเซ‹เชจเซ€ เชจเซ‡เชธเซเชŸเซ‡เชก เชธเซ‚เชšเชฟ เชฆเซเชตเชพเชฐเชพ เชฌเชจเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เชชเช›เซ€ เช…เชฎเชพเชฐเชพ เชฌเชŸเชจเซ‹เชจเซ‡ เชเช• เชชเช‚เช•เซเชคเชฟเชฎเชพเช‚ เชฆเชฐเซเชถเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เช†เชชเชฃเซ‡ เช•เซ€เชฌเซ‹เชฐเซเชก เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เช•เซ‹เชกเชจเซ‹ เชญเชพเช— เช† เชฐเซ€เชคเซ‡ เชซเชฐเซ€เชฅเซ€ เชฒเช–เชตเซ‹ เชชเชกเชถเซ‡:

RKM <- ReplyKeyboardMarkup(
    keyboard = list(
      list(
          KeyboardButton("ะงะฐั‚ ID"),
          KeyboardButton("ะœะพั‘ ะธะผั"),
          KeyboardButton("ะœะพะน ะปะพะณะธะฝ")
     )
    ),
    resize_keyboard = FALSE,
    one_time_keyboard = TRUE
)

R เชฎเชพเช‚ เชŸเซ‡เชฒเชฟเช—เซเชฐเชพเชฎ เชฌเซ‹เชŸ เชฒเช–เชตเซเช‚ (เชญเชพเช— 3): เชฌเซ‹เชŸเชฎเชพเช‚ เช•เซ€เชฌเซ‹เชฐเซเชก เชธเชชเซ‹เชฐเซเชŸ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช‰เชฎเซ‡เชฐเชตเซ‹

เช•เซ€เชฌเซ‹เชฐเซเชก เชชเชฆเซเชงเชคเชฟเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชšเซ‡เชŸ เชชเชฐ เชฎเซ‹เช•เชฒเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ sendMessage(), เชฆเชฒเซ€เชฒเชฎเชพเช‚ reply_markup.

  bot$sendMessage(update$message$chat_id,
                  text = 'ะ’ั‹ะฑะตั€ะธั‚ะต ะบะพะผะฐะฝะดัƒ', 
                  reply_markup = RKM)

เช‡เชจเชฒเชพเช‡เชจ เช•เซ€เชฌเซ‹เชฐเซเชก

เชฎเซ‡เช‚ เช‰เชชเชฐ เชฒเช–เซเชฏเซเช‚ เชคเซ‡เชฎ, เช‡เชจเชฒเชพเช‡เชจ เช•เซ€เชฌเซ‹เชฐเซเชก เชšเซ‹เช•เซเช•เชธ เชธเช‚เชฆเซ‡เชถ เชธเชพเชฅเซ‡ เชœเซ‹เชกเชพเชฏเซ‡เชฒเซเช‚ เช›เซ‡. เชฎเซเช–เซเชฏ เช•เซ€เชฌเซ‹เชฐเซเชก เช•เชฐเชคเชพเช‚ เชคเซ‡เชจเซ€ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเซเช‚ เช•เช‚เชˆเช• เชตเชงเซ เชฎเซเชถเซเช•เซ‡เชฒ เช›เซ‡.

เชถเชฐเซ‚เช†เชคเชฎเชพเช‚, เชคเชฎเชพเชฐเซ‡ เช‡เชจเชฒเชพเช‡เชจ เช•เซ€เชฌเซ‹เชฐเซเชกเชจเซ‡ เช•เซ‰เชฒ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชฌเซ‹เชŸเชฎเชพเช‚ เชเช• เชชเชฆเซเชงเชคเชฟ เช‰เชฎเซ‡เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡.

เช‡เชจเชฒเชพเช‡เชจ เชฌเชŸเชจ เช•เซเชฒเชฟเช•เชจเซ‹ เชชเซเชฐเชคเชฟเชธเชพเชฆ เช†เชชเชตเชพ เชฎเชพเชŸเซ‡, เชคเชฎเซ‡ เชฌเซ‹เชŸ เชชเชฆเซเชงเชคเชฟเชจเซ‹ เชชเชฃ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹ answerCallbackQuery(), เชœเซ‡ เช‡เชจเชฒเชพเช‡เชจ เชฌเชŸเชจ เชฆเชฌเชพเชตเชจเชพเชฐ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเชจเซ‡ เชŸเซ‡เชฒเชฟเช—เซเชฐเชพเชฎ เช‡เชจเซเชŸเชฐเชซเซ‡เชธเชฎเชพเช‚ เชธเซ‚เชšเชจเชพ เชชเซเชฐเชฆเชฐเซเชถเชฟเชค เช•เชฐเซ€ เชถเช•เซ‡ เช›เซ‡.

เช‡เชจเชฒเชพเช‡เชจ เชฌเชŸเชจเชฅเซ€ เชฎเซ‹เช•เชฒเชตเชพเชฎเชพเช‚ เช†เชตเซ‡เชฒ เชกเซ‡เชŸเชพ เชŸเซ‡เช•เซเชธเซเชŸ เชจเชฅเซ€, เชคเซ‡เชฅเซ€ เชคเซ‡เชจเซ€ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชคเชฎเชพเชฐเซ‡ เช†เชฆเซ‡เชถเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชตเชฟเชถเชฟเชทเซเชŸ เชนเซ‡เชจเซเชกเชฒเชฐ เชฌเชจเชพเชตเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡ CallbackQueryHandler().

เช‡เชจเชฒเชพเช‡เชจ เช•เซ€เชฌเซ‹เชฐเซเชก เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡เชจเซ‹ เช•เซ‹เชก เชœเซ‡ เชชเซ‡เช•เซ‡เชœเชจเซ€ เชธเชคเซเชคเชพเชตเชพเชฐ เชฎเชฆเชฆเชฎเชพเช‚ เช†เชชเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ telegram.bot.

เชธเชคเซเชคเชพเชตเชพเชฐ เชฎเชฆเชฆเชฎเชพเช‚เชฅเซ€ เช‡เชจเชฒเชพเช‡เชจ เช•เซ€เชฌเซ‹เชฐเซเชก เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡เชจเซ‹ เช•เซ‹เชก

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

เชคเชฎเชพเชฐเซ‡ เช†เชฆเซ‡เชถเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เช‡เชจเชฒเชพเช‡เชจ เช•เซ€เชฌเซ‹เชฐเซเชก เชฌเชจเชพเชตเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡ InlineKeyboardMarkup(), เชœเชตเชพเชฌ เช•เซ€เชฌเซ‹เชฐเซเชก เชœเซ‡เชตเชพ เชœ เชธเชฟเชฆเซเชงเชพเช‚เชค เชชเชฐ. IN InlineKeyboardMarkup() เช‡เชจเชฒเชพเช‡เชจ เชฌเชŸเชจเซ‹เชจเซ€ เชธเซ‚เชšเชฟเชจเซ€ เชธเซ‚เชšเชฟ เชชเชธเชพเชฐ เช•เชฐเชตเซ€ เชœเชฐเซ‚เชฐเซ€ เช›เซ‡, เชฆเชฐเซ‡เช• เชตเซเชฏเช•เซเชคเชฟเช—เชค เชฌเชŸเชจ เชซเช‚เช•เซเชถเชจ เชฆเซเชตเชพเชฐเชพ เชฌเชจเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ InlineKeyboardButton().

เช‡เชจเชฒเชพเช‡เชจ เชฌเชŸเชจ เช•เชพเช‚ เชคเซ‹ เชฆเชฒเซ€เชฒเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชฌเซ‹เชŸเชจเซ‡ เช•เซ‡เชŸเชฒเซ‹เช• เชกเซ‡เชŸเชพ เชฎเซ‹เช•เชฒเซ€ เชถเช•เซ‡ เช›เซ‡ callback_data, เช…เชฅเชตเชพ เชฆเชฒเซ€เชฒเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เช‰เชฒเซเชฒเซ‡เช–เชฟเชค เช•เซ‹เชˆเชชเชฃ HTML เชชเซƒเชทเซเช  เช–เซ‹เชฒเซ‹ url.

เชชเชฐเชฟเชฃเชพเชฎ เช เชธเซ‚เชšเชฟ เชนเชถเซ‡ เชœเซ‡เชฎเชพเช‚ เชฆเชฐเซ‡เช• เช˜เชŸเช• เช‡เชจเชฒเชพเช‡เชจ เชฌเชŸเชจเซ‹เชจเซ€ เชธเซ‚เชšเชฟ เชชเชฃ เช›เซ‡ เชœเซ‡เชจเซ‡ เชเช• เชชเช‚เช•เซเชคเชฟเชฎเชพเช‚ เชœเซ‹เชกเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡.

เช†เช—เชณ เช†เชชเชฃเซ‡ เช‡เชจเชฒเชพเช‡เชจ เชฌเชŸเชจเซ‹ เชธเชพเชฅเซ‡เชจเชพ เชฌเซ‹เชŸเซเชธเชจเชพ เช•เซ‡เชŸเชฒเชพเช• เช‰เชฆเชพเชนเชฐเชฃเซ‹ เชœเซ‹เชˆเชถเซเช‚.

เช‡เชจเชฒเชพเช‡เชจ เชฌเชŸเชจเซ‹ เชฎเชพเชŸเซ‡ เชธเชชเซ‹เชฐเซเชŸ เชธเชพเชฅเซ‡ เชธเชฐเชณ เชฌเซ‹เชŸเชจเซเช‚ เช‰เชฆเชพเชนเชฐเชฃ

เชชเซเชฐเชฅเชฎ, เช…เชฎเซ‡ เช•เซ‹เชตเชฟเชก-19 เชฎเชพเชŸเซ‡ เชเช•เซเชธเชชเซเชฐเซ‡เชธ เชŸเซ‡เชธเซเชŸเชฟเช‚เช— เชฎเชพเชŸเซ‡ เชฌเซ‹เชŸ เชฒเช–เซ€เชถเซเช‚. เช†เชฆเซ‡เชถ เชฆเซเชตเชพเชฐเชพ /test, เชคเซ‡ เชคเชฎเชจเซ‡ เชฌเซ‡ เชฌเชŸเชจเซ‹ เชธเชพเชฅเซ‡ เช•เซ€เชฌเซ‹เชฐเซเชก เชฎเซ‹เช•เชฒเชถเซ‡, เชœเซ‡ เชฌเชŸเชจ เชฆเชฌเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ เชคเซ‡เชจเชพ เช†เชงเชพเชฐเซ‡ เชคเซ‡ เชคเชฎเชจเซ‡ เชคเชฎเชพเชฐเชพ เชชเชฐเซ€เช•เซเชทเชฃเชจเชพ เชชเชฐเชฟเชฃเชพเชฎเซ‹ เชธเชพเชฅเซ‡เชจเซ‹ เชธเช‚เชฆเซ‡เชถ เชฎเซ‹เช•เชฒเชถเซ‡.

เช•เซ‹เชก 2: เช‡เชจเชฒเชพเช‡เชจ เช•เซ€เชฌเซ‹เชฐเซเชก เชธเชพเชฅเซ‡เชจเซ‹ เชธเซŒเชฅเซ€ เชธเชฐเชณ เชฌเซ‹เชŸ

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

เช‰เชชเชฐเซ‹เช•เซเชค เช•เซ‹เชก เช‰เชฆเชพเชนเชฐเชฃ เชšเชฒเชพเชตเซ‹, 'เชฏเซ‹เชฐ เชฌเซ‹เชŸ เชŸเซ‹เช•เชจ' เชจเซ‡ เชฌเชฆเชฒเซเชฏเชพ เชชเช›เซ€, เชคเชฎเชจเซ‡ เชฌเซ‹เชŸ เชฌเชจเชพเชตเชคเซ€ เชตเช–เชคเซ‡ เชชเซเชฐเชพเชชเซเชค เชฅเชฏเซ‡เชฒ เชตเชพเชธเซเชคเชตเชฟเช• เชŸเซ‹เช•เชจ เชธเชพเชฅเซ‡ เชฌเซ‹เชŸเชซเซ‡เชงเชฐ (เชฎเซ‡เช‚ เชฎเชพเช‚ เชฌเซ‹เชŸ เชฌเชจเชพเชตเชตเชพ เชตเชฟเชถเซ‡ เชตเชพเชค เช•เชฐเซ€ เชชเซเชฐเชฅเชฎ เชฒเซ‡เช–).

เชชเชฐเชฟเชฃเชพเชฎ:
R เชฎเชพเช‚ เชŸเซ‡เชฒเชฟเช—เซเชฐเชพเชฎ เชฌเซ‹เชŸ เชฒเช–เชตเซเช‚ (เชญเชพเช— 3): เชฌเซ‹เชŸเชฎเชพเช‚ เช•เซ€เชฌเซ‹เชฐเซเชก เชธเชชเซ‹เชฐเซเชŸ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช‰เชฎเซ‡เชฐเชตเซ‹

เช…เชฎเซ‡ เชฌเซ‡ เชชเชฆเซเชงเชคเชฟเช“ เชฌเชจเชพเชตเซ€ เช›เซ‡:

  • เชŸเซ‡เชธเซเชŸ - เชšเซ‡เชŸ เช‡เชจเชฒเชพเช‡เชจ เช•เซ€เชฌเซ‹เชฐเซเชก เชชเชฐ เชฎเซ‹เช•เชฒเชตเชพ เชฎเชพเชŸเซ‡
  • เชœเชตเชพเชฌ_เชธเซ€เชฌเซ€ - เช•เซ€เชฌเซ‹เชฐเซเชก เชชเชฐเชฅเซ€ เชฎเซ‹เช•เชฒเชตเชพเชฎเชพเช‚ เช†เชตเซ‡เชฒ เชกเซ‡เชŸเชพ เชชเชฐ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡.

เชฆเชฐเซ‡เช• เชฌเชŸเชจเชฎเชพเช‚เชฅเซ€ เชœเซ‡ เชกเซ‡เชŸเชพ เชฎเซ‹เช•เชฒเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡ เชคเซ‡ เชฆเชฒเซ€เชฒเชฎเชพเช‚ เช‰เชฒเซเชฒเซ‡เช–เชฟเชค เช›เซ‡ callback_data, เชฌเชŸเชจ เชฌเชจเชพเชตเชคเซ€ เชตเช–เชคเซ‡. เชคเชฎเซ‡ เช•เชจเซเชธเซเชŸเซเชฐเช•เซเชŸเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชฌเชŸเชจเชฎเชพเช‚เชฅเซ€ เชฎเซ‹เช•เชฒเซ‡เชฒ เชกเซ‡เชŸเชพ เชชเซเชฐเชพเชชเซเชค เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹ update$callback_query$data, เชชเชฆเซเชงเชคเชฟเชจเซ€ เช…เช‚เชฆเชฐ เชœเชตเชพเชฌ_เชธเซ€เชฌเซ€.

เช‡เชจเชฒเชพเช‡เชจ เช•เซ€เชฌเซ‹เชฐเซเชก เชชเชฐ เชฌเซ‰เชŸ เชชเซเชฐเชคเชฟเช•เซเชฐเชฟเชฏเชพ เช†เชชเซ‡ เชคเซ‡ เชฎเชพเชŸเซ‡, เชชเชฆเซเชงเชคเชฟ เชœเชตเชพเชฌ_เชธเซ€เชฌเซ€ เชตเชฟเชถเชฟเชทเซเชŸ เชนเซ‡เชจเซเชกเชฒเชฐ เชฆเซเชตเชพเชฐเชพ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡: CallbackQueryHandler(answer_cb). เชœเซ‡ เช‡เชจเชฒเชพเช‡เชจ เชฌเชŸเชจ เช•เซเชฒเชฟเช• เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เชคเซเชฏเชพเชฐเซ‡ เช‰เชฒเซเชฒเซ‡เช–เชฟเชค เชชเชฆเซเชงเชคเชฟ เชšเชฒเชพเชตเซ‡ เช›เซ‡. เชนเซ‡เชจเซเชกเชฒเชฐ CallbackQueryHandler เชฌเซ‡ เชฆเชฒเซ€เชฒเซ‹ เชฒเซ‡ เช›เซ‡:

  • callback - เชชเชฆเซเชงเชคเชฟ เช•เซ‡ เชœเซ‡ เชšเชฒเชพเชตเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡
  • pattern - เชฆเชฒเซ€เชฒเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชฌเชŸเชจ เชธเชพเชฅเซ‡ เชฌเช‚เชงเชพเชฏเซ‡เชฒ เชกเซ‡เชŸเชพ เชฆเซเชตเชพเชฐเชพ เชซเชฟเชฒเซเชŸเชฐ เช•เชฐเซ‹ callback_data.

เชคเชฆเชจเซเชธเชพเชฐ, เชฆเชฒเซ€เชฒเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ pattern เช…เชฎเซ‡ เชฆเชฐเซ‡เช• เชฌเชŸเชจ เชฆเชฌเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชเช• เช…เชฒเช— เชชเชฆเซเชงเชคเชฟ เชฒเช–เซ€ เชถเช•เซ€เช เช›เซ€เช:

เช•เซ‹เชก 3: เชฆเชฐเซ‡เช• เช‡เชจเชฒเชพเช‡เชจ เชฌเชŸเชจ เชฎเชพเชŸเซ‡ เช…เชฒเช— เชชเชฆเซเชงเชคเชฟเช“

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

เช‰เชชเชฐเซ‹เช•เซเชค เช•เซ‹เชก เช‰เชฆเชพเชนเชฐเชฃ เชšเชฒเชพเชตเซ‹, 'เชฏเซ‹เชฐ เชฌเซ‹เชŸ เชŸเซ‹เช•เชจ' เชจเซ‡ เชฌเชฆเชฒเซเชฏเชพ เชชเช›เซ€, เชคเชฎเชจเซ‡ เชฌเซ‹เชŸ เชฌเชจเชพเชตเชคเซ€ เชตเช–เชคเซ‡ เชชเซเชฐเชพเชชเซเชค เชฅเชฏเซ‡เชฒ เชตเชพเชธเซเชคเชตเชฟเช• เชŸเซ‹เช•เชจ เชธเชพเชฅเซ‡ เชฌเซ‹เชŸเชซเซ‡เชงเชฐ (เชฎเซ‡เช‚ เชฎเชพเช‚ เชฌเซ‹เชŸ เชฌเชจเชพเชตเชตเชพ เชตเชฟเชถเซ‡ เชตเชพเชค เช•เชฐเซ€ เชชเซเชฐเชฅเชฎ เชฒเซ‡เช–).

เชนเชตเซ‡ เช†เชชเชฃเซ‡ 2 เช…เชฒเช— เชชเชฆเซเชงเชคเชฟเช“ เชฒเช–เซ€ เช›เซ‡ เชเชŸเชฒเซ‡ เช•เซ‡. เชฆเชฐเซ‡เช• เชฌเชŸเชจ เชฆเชฌเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชเช• เชชเชฆเซเชงเชคเชฟ, เช…เชจเซ‡ เชฆเชฒเซ€เชฒเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซเชฏเซ‹ pattern, เชคเซ‡เชฎเชจเชพ เชนเซ‡เชจเซเชกเชฒเชฐเซเชธ เชฌเชจเชพเชตเชคเซ€ เชตเช–เชคเซ‡:

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

เชชเชฆเซเชงเชคเชฟ เช•เซ‹เชก เชธเชฎเชพเชชเซเชค เชฅเชพเชฏ เช›เซ‡ เชœเชตเชพเชฌ_เชธเซ€เชฌเซ€ เชŸเซ€เชฎ bot$answerCallbackQuery(callback_query_id = update$callback_query$id), เชœเซ‡ เชฌเซ‹เชŸเชจเซ‡ เช•เชนเซ‡ เช›เซ‡ เช•เซ‡ เช‡เชจเชฒเชพเช‡เชจ เช•เซ€เชฌเซ‹เชฐเซเชกเชฎเชพเช‚เชฅเซ€ เชกเซ‡เชŸเชพ เชชเซเชฐเชพเชชเซเชค เชฅเชฏเซ‹ เช›เซ‡.

เชชเชธเช‚เชฆ เช•เชฐเซ‡เชฒ เชถเชนเซ‡เชฐ เชฎเชพเชŸเซ‡ เชตเชฐเซเชคเชฎเชพเชจ เชนเชตเชพเชฎเชพเชจเชจเซ€ เชœเชพเชฃ เช•เชฐเชคเชพ เชฌเซ‹เชŸเชจเซเช‚ เช‰เชฆเชพเชนเชฐเชฃ

เชšเชพเชฒเซ‹ เชเช• เชฌเซ‹เชŸ เชฒเช–เชตเชพเชจเซ‹ เชชเซเชฐเชฏเชพเชธ เช•เชฐเซ€เช เชœเซ‡ เชนเชตเชพเชฎเชพเชจ เชกเซ‡เชŸเชพเชจเซ€ เชตเชฟเชจเช‚เชคเซ€ เช•เชฐเซ‡ เช›เซ‡.

เชคเซ‡เชจเชพ เช•เชพเชฎเชจเซ‹ เชคเชฐเซเช• เชจเซ€เชšเซ‡ เชฎเซเชœเชฌ เชนเชถเซ‡. เชถเชฐเซ‚เช†เชคเชฎเชพเช‚ เชŸเซ€เชฎ เชฆเซเชตเชพเชฐเชพ /start เชคเชฎเซ‡ เชฎเซเช–เซเชฏ เช•เซ€เชฌเซ‹เชฐเซเชกเชจเซ‡ เช•เซ‰เชฒ เช•เชฐเซ‹ เช›เซ‹, เชœเซ‡เชฎเชพเช‚ เชซเช•เซเชค เชเช• "เชตเซ‡เชงเชฐ" เชฌเชŸเชจ เช›เซ‡. เช† เชฌเชŸเชจ เชชเชฐ เช•เซเชฒเชฟเช• เช•เชฐเชตเชพเชฅเซ€ เชคเชฎเซ‡ เชœเซ‡ เชถเชนเซ‡เชฐ เชฎเชพเชŸเซ‡ เชตเชฐเซเชคเชฎเชพเชจ เชนเชตเชพเชฎเชพเชจ เชœเชพเชฃเชตเชพ เชฎเชพเช—เซ‹ เช›เซ‹ เชคเซ‡ เชถเชนเซ‡เชฐ เชชเชธเช‚เชฆ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชคเชฎเชจเซ‡ เช‡เชจเชฒเชพเช‡เชจ เช•เซ€เชฌเซ‹เชฐเซเชก เชธเชพเชฅเซ‡เชจเซ‹ เชธเช‚เชฆเซ‡เชถ เชชเซเชฐเชพเชชเซเชค เชฅเชถเซ‡. เชถเชนเซ‡เชฐเซ‹เชฎเชพเช‚เชฅเซ€ เชเช• เชชเชธเช‚เชฆ เช•เชฐเซ‹ เช…เชจเซ‡ เชตเชฐเซเชคเชฎเชพเชจ เชนเชตเชพเชฎเชพเชจ เชฎเซ‡เชณเชตเซ‹.

เช† เช•เซ‹เชก เช‰เชฆเชพเชนเชฐเชฃเชฎเชพเช‚ เช…เชฎเซ‡ เช˜เชฃเชพ เชตเชงเชพเชฐเชพเชจเชพ เชชเซ‡เช•เซ‡เชœเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชถเซเช‚:

  • httr โ€” HTTP เชตเชฟเชจเช‚เชคเซ€เช“ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡เชจเซเช‚ เชชเซ‡เช•เซ‡เชœ, เชœเซ‡เชจเชพ เช†เชงเชพเชฐเซ‡ เช•เซ‹เชˆเชชเชฃ API เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เช…เชฎเชพเชฐเชพ เช•เชฟเชธเซเชธเชพเชฎเชพเช‚ เช…เชฎเซ‡ เชฎเชซเชค API เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชถเซเช‚ openweathermap.org.
  • stringr โ€” เชŸเซ‡เช•เซเชธเซเชŸ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡เชจเซเช‚ เชชเซ‡เช•เซ‡เชœ, เช…เชฎเชพเชฐเชพ เช•เชฟเชธเซเชธเชพเชฎเชพเช‚ เช…เชฎเซ‡ เชคเซ‡เชจเซ‹ เช‰เชชเชฏเซ‹เช— เชชเชธเช‚เชฆ เช•เชฐเซ‡เชฒเชพ เชถเชนเซ‡เชฐเชฎเชพเช‚ เชนเชตเชพเชฎเชพเชจ เชตเชฟเชถเซ‡ เชธเช‚เชฆเซ‡เชถ เชœเชจเชฐเซ‡เชŸ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช•เชฐเซ€เชถเซเช‚.

เช•เซ‹เชก 4: เชเช• เชฌเซ‹เชŸ เชœเซ‡ เชชเชธเช‚เชฆ เช•เชฐเซ‡เชฒ เชถเชนเซ‡เชฐ เชฎเชพเชŸเซ‡ เชตเชฐเซเชคเชฎเชพเชจ เชนเชตเชพเชฎเชพเชจเชจเซ€ เชœเชพเชฃ เช•เชฐเซ‡ เช›เซ‡

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

เช‰เชชเชฐเซ‹เช•เซเชค เช•เซ‹เชก เช‰เชฆเชพเชนเชฐเชฃ เชšเชฒเชพเชตเซ‹, 'เชฏเซ‹เชฐ เชฌเซ‹เชŸ เชŸเซ‹เช•เชจ' เชจเซ‡ เชฌเชฆเชฒเซเชฏเชพ เชชเช›เซ€, เชคเชฎเชจเซ‡ เชฌเซ‹เชŸ เชฌเชจเชพเชตเชคเซ€ เชตเช–เชคเซ‡ เชชเซเชฐเชพเชชเซเชค เชฅเชฏเซ‡เชฒ เชตเชพเชธเซเชคเชตเชฟเช• เชŸเซ‹เช•เชจ เชธเชพเชฅเซ‡ เชฌเซ‹เชŸเชซเซ‡เชงเชฐ (เชฎเซ‡เช‚ เชฎเชพเช‚ เชฌเซ‹เชŸ เชฌเชจเชพเชตเชตเชพ เชตเชฟเชถเซ‡ เชตเชพเชค เช•เชฐเซ€ เชชเซเชฐเชฅเชฎ เชฒเซ‡เช–).

เชชเชฐเชฟเชฃเชพเชฎเซ‡, เช…เชฎเชพเชฐเซเช‚ เชฌเซ‹เชŸ เช†เชจเชพ เชœเซ‡เชตเซเช‚ เช•เช‚เชˆเช• เช•เชพเชฐเซเชฏ เช•เชฐเชถเซ‡:
R เชฎเชพเช‚ เชŸเซ‡เชฒเชฟเช—เซเชฐเชพเชฎ เชฌเซ‹เชŸ เชฒเช–เชตเซเช‚ (เชญเชพเช— 3): เชฌเซ‹เชŸเชฎเชพเช‚ เช•เซ€เชฌเซ‹เชฐเซเชก เชธเชชเซ‹เชฐเซเชŸ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช‰เชฎเซ‡เชฐเชตเซ‹

เชฏเซ‹เชœเชจเชพเช•เซ€เชฏ เชฐเซ€เชคเซ‡, เช† เชฌเซ‹เชŸเชจเซ‡ เช† เชฐเซ€เชคเซ‡ เชฆเชฐเซเชถเชพเชตเซ€ เชถเช•เชพเชฏ เช›เซ‡:
R เชฎเชพเช‚ เชŸเซ‡เชฒเชฟเช—เซเชฐเชพเชฎ เชฌเซ‹เชŸ เชฒเช–เชตเซเช‚ (เชญเชพเช— 3): เชฌเซ‹เชŸเชฎเชพเช‚ เช•เซ€เชฌเซ‹เชฐเซเชก เชธเชชเซ‹เชฐเซเชŸ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช‰เชฎเซ‡เชฐเชตเซ‹

เช…เชฎเซ‡ เช…เชฎเชพเชฐเชพ เชนเชตเชพเชฎเชพเชจ เชฌเซ‰เชŸเชจเซ€ เช…เช‚เชฆเชฐ เช‰เชชเชฒเชฌเซเชง 3 เชชเชฆเซเชงเชคเชฟเช“ เชฌเชจเชพเชตเซ€ เช›เซ‡:

  • เชถเชฐเซ‚เช†เชค - เชฎเซเช–เซเชฏ เชฌเซ‹เชŸ เช•เซ€เชฌเซ‹เชฐเซเชก เชฒเซ‹เช‚เชš เช•เชฐเซ‹
  • เชนเชตเชพเชฎเชพเชจ โ€” เชถเชนเซ‡เชฐ เชชเชธเช‚เชฆ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช‡เชจเชฒเชพเช‡เชจ เช•เซ€เชฌเซ‹เชฐเซเชก เชฒเซ‹เช‚เชš เช•เชฐเซ‹
  • เชœเชตเชพเชฌ_เชธเซ€เชฌเซ€ โ€” เชฎเซเช–เซเชฏ เชชเชฆเซเชงเชคเชฟ เชœเซ‡ เช†เชชเซ‡เชฒ เชถเชนเซ‡เชฐ เชฎเชพเชŸเซ‡ API เชชเชพเชธเซ‡เชฅเซ€ เชนเชตเชพเชฎเชพเชจเชจเซ€ เชตเชฟเชจเช‚เชคเซ€ เช•เชฐเซ‡ เช›เซ‡ เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เชšเซ‡เชŸเชฎเชพเช‚ เชฎเซ‹เช•เชฒเซ‡ เช›เซ‡.

เชชเชฆเซเชงเชคเชฟ เชถเชฐเซ‚เช†เชค เช…เชฎเซ‡ เชคเซ‡เชจเซ‡ เช†เชฆเซ‡เชถ เชธเชพเชฅเซ‡ เชฒเซ‹เชจเซเชš เช•เชฐเซ€เช เช›เซ€เช /start, เชœเซ‡ เชนเซ‡เชจเซเชกเชฒเชฐ เชฆเซเชตเชพเชฐเชพ เชฒเชพเช—เซ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ CommandHandler('start', start).

เชชเชฆเซเชงเชคเชฟ เชšเชฒเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชนเชตเชพเชฎเชพเชจ เช…เชฎเซ‡ เชธเชฎเชพเชจ เชจเชพเชฎเชจเซเช‚ เชซเชฟเชฒเซเชŸเชฐ เชฌเชจเชพเชตเซเชฏเซเช‚ เช›เซ‡:

# ัะพะทะดะฐั‘ะผ ั„ะธะปัŒั‚ั€ั‹
## ัะพะพะฑั‰ะตะฝะธั ั ั‚ะตะบัั‚ะพะผ ะŸะพะณะพะดะฐ
MessageFilters$weather <- BaseFilter(function(message) {

  # ะฟั€ะพะฒะตั€ัะตะผ ั‚ะตะบัั‚ ัะพะพะฑั‰ะตะฝะธั
  message$text == "ะŸะพะณะพะดะฐ"

}
)

เช…เชจเซ‡ เช…เชฎเซ‡ เช† เชชเชฆเซเชงเชคเชฟเชจเซ‡ เชจเซ€เชšเซ‡เชจเชพ เชธเช‚เชฆเซ‡เชถ เชนเซ‡เชจเซเชกเชฒเชฐ เชธเชพเชฅเซ‡ เช•เซ‰เชฒ เช•เชฐเซ€เช เช›เซ€เช: MessageHandler(weather, filters = MessageFilters$weather).

เช…เชจเซ‡ เช…เช‚เชคเซ‡, เช…เชฎเชพเชฐเซ€ เชฎเซเช–เซเชฏ เชชเชฆเซเชงเชคเชฟ เชœเชตเชพเชฌ_เชธเซ€เชฌเซ€ เช‡เชจเชฒเชพเช‡เชจ เชฌเชŸเชจเซ‹ เชฆเชฌเชพเชตเชตเชพ เชชเชฐ เชชเซเชฐเชคเชฟเช•เซเชฐเชฟเชฏเชพ เช†เชชเซ‡ เช›เซ‡, เชœเซ‡ เช–เชพเชธ เชนเซ‡เชจเซเชกเชฒเชฐ เชฆเซเชตเชพเชฐเชพ เชฒเชพเช—เซ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡: CallbackQueryHandler(answer_cb).

เชเช• เชชเชฆเซเชงเชคเชฟเชจเซ€ เช…เช‚เชฆเชฐ เชœเชตเชพเชฌ_เชธเซ€เชฌเซ€, เช…เชฎเซ‡ เช•เซ€เชฌเซ‹เชฐเซเชก เชชเชฐเชฅเซ€ เชฎเซ‹เช•เชฒเซ‡เชฒ เชกเซ‡เชŸเชพ เชตเชพเช‚เชšเซ€เช เช›เซ€เช เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เชตเซ‡เชฐเซ€เชเชฌเชฒเชฎเชพเช‚ เชฒเช–เซ€เช เช›เซ€เช city: city <- update$callback_query$data. เชชเช›เซ€ เช…เชฎเซ‡ API เชชเชพเชธเซ‡เชฅเซ€ เชนเชตเชพเชฎเชพเชจ เชกเซ‡เชŸเชพเชจเซ€ เชตเชฟเชจเช‚เชคเซ€ เช•เชฐเซ€เช เช›เซ€เช, เชธเช‚เชฆเซ‡เชถเซ‹ เชœเชจเชฐเซ‡เชŸ เช•เชฐเซ€เช เช›เซ€เช เช…เชจเซ‡ เชฎเซ‹เช•เชฒเซ€เช เช›เซ€เช เช…เชจเซ‡ เช…เช‚เชคเซ‡ เชชเชฆเซเชงเชคเชฟเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เช เช›เซ€เช answerCallbackQuery เชฌเซ‹เชŸเชจเซ‡ เชœเชพเชฃ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช•เซ‡ เช…เชฎเซ‡ เช‡เชจเชฒเชพเช‡เชจ เชฌเชŸเชจเชจเชพ เช•เซเชฒเชฟเช• เชชเชฐ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เช•เชฐเซ€ เช›เซ‡.

เชฌเซ‹เชŸเชจเซเช‚ เช‰เชฆเชพเชนเชฐเชฃ เช•เซ‡ เชœเซ‡เชฎเชพเช‚เชฅเซ€ เช‰เชฒเซเชฒเซ‡เช–เชฟเชค เชนเชฌเชจเซ€ เชฒเชฟเช‚เช•เซเชธ เชธเชพเชฅเซ‡ เชจเชตเซ€เชจเชคเชฎ เชฒเซ‡เช–เซ‹เชจเซ€ เชธเซ‚เชšเชฟ เชฆเชฐเซเชถเชพเชตเซ‡ เช›เซ‡ www.habr.com.

เชตเซ‡เชฌ เชชเซƒเชทเซเช เซ‹ เชคเชฐเชซ เชฆเซ‹เชฐเซ€ เชœเชคเชพ เช‡เชจเชฒเชพเช‡เชจ เชฌเชŸเชจเซ‹ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชชเซเชฐเชฆเชฐเซเชถเชฟเชค เช•เชฐเชตเชพ เชคเซ‡ เชฌเชคเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชนเซเช‚ เช† เชฌเซ‹เชŸ เชฐเชœเซ‚ เช•เชฐเซเช‚ เช›เซเช‚.

เช† เชฌเซ‹เชŸเชจเซ‹ เชคเชฐเซเช• เช…เช—เชพเช‰เชจเชพ เชœเซ‡เชตเซ‹ เชœ เช›เซ‡, เชถเชฐเซ‚เช†เชคเชฎเชพเช‚ เช†เชชเชฃเซ‡ เชฎเซเช–เซเชฏ เช•เซ€เชฌเซ‹เชฐเซเชกเชจเซ‡ เช†เชฆเซ‡เชถ เชธเชพเชฅเซ‡ เชฒเซ‹เชจเซเชš เช•เชฐเซ€เช เช›เซ€เช /start. เช†เช—เชณ, เชฌเซ‹เชŸ เช…เชฎเชจเซ‡ เชชเชธเช‚เชฆ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ 6 เชนเชฌเชจเซ€ เชธเซ‚เชšเชฟ เช†เชชเซ‡ เช›เซ‡, เช…เชฎเซ‡ เชœเซ‡ เชนเชฌเชฎเชพเช‚ เชฐเชธ เชงเชฐเชพเชตเซ€เช เช›เซ€เช เชคเซ‡ เชชเชธเช‚เชฆ เช•เชฐเซ€เช เช›เซ€เช เช…เชจเซ‡ เชชเชธเช‚เชฆ เช•เชฐเซ‡เชฒ เชนเชฌเชฎเชพเช‚เชฅเซ€ 5 เชธเซŒเชฅเซ€ เชคเชพเชœเซ‡เชคเชฐเชจเชพ เชชเซเชฐเช•เชพเชถเชจเซ‹ เชชเซเชฐเชพเชชเซเชค เช•เชฐเซ€เช เช›เซ€เช.

เชœเซ‡เชฎ เชคเชฎเซ‡ เชธเชฎเชœเซ‹ เช›เซ‹, เช† เช•เชฟเชธเซเชธเชพเชฎเชพเช‚ เช…เชฎเชพเชฐเซ‡ เชฒเซ‡เช–เซ‹เชจเซ€ เชธเซ‚เชšเชฟ เชฎเซ‡เชณเชตเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡, เช…เชจเซ‡ เช† เชฎเชพเชŸเซ‡ เช…เชฎเซ‡ เชตเชฟเชถเชฟเชทเซเชŸ เชชเซ‡เช•เซ‡เชœเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชถเซเช‚ habR, เชœเซ‡ เชคเชฎเชจเซ‡ เชนเชพเชฌเซเชฐเชพเชจเชพ เชฒเซ‡เช–เซ‹ เช…เชจเซ‡ R เชฎเชพเช‚ เชคเซ‡เชฎเชจเชพ เชชเชฐเชจเชพ เช•เซ‡เชŸเชฒเชพเช• เช†เช‚เช•เชกเชพเช“เชจเซ€ เชตเชฟเชจเช‚เชคเซ€ เช•เชฐเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡.

เชชเซ‡เช•เซ‡เชœ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเซ‹ habR เชซเช•เซเชค เช—เซ€เชฅเชฌเชฅเซ€ เชœ เชถเช•เซเชฏ เช›เซ‡, เชœเซ‡เชจเชพ เชฎเชพเชŸเซ‡ เชคเชฎเชพเชฐเซ‡ เชตเชงเชพเชฐเชพเชจเชพ เชชเซ‡เช•เซ‡เชœเชจเซ€ เชœเชฐเซ‚เชฐ เชชเชกเชถเซ‡ devtools. เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชจเซ€เชšเซ‡เชจเชพ เช•เซ‹เชกเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‹.

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

เชนเชตเซ‡ เช‰เชชเชฐ เชตเชฐเซเชฃเชตเซ‡เชฒ เชฌเซ‹เชŸ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡เชจเซ‹ เช•เซ‹เชก เชœเซ‹เชˆเช:

เช•เซ‹เชก 5: เชเช• เชฌเซ‹เชŸ เชœเซ‡ เชชเชธเช‚เชฆ เช•เชฐเซ‡เชฒ เชนเชฌ เชชเชฐ เชธเซŒเชฅเซ€ เชคเชพเชœเซ‡เชคเชฐเชจเชพ เชฒเซ‡เช–เซ‹เชจเซ€ เชธเซ‚เชšเชฟ เชฆเชฐเซเชถเชพเชตเซ‡ เช›เซ‡

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

เช‰เชชเชฐเซ‹เช•เซเชค เช•เซ‹เชก เช‰เชฆเชพเชนเชฐเชฃ เชšเชฒเชพเชตเซ‹, 'เชฏเซ‹เชฐ เชฌเซ‹เชŸ เชŸเซ‹เช•เชจ' เชจเซ‡ เชฌเชฆเชฒเซเชฏเชพ เชชเช›เซ€, เชคเชฎเชจเซ‡ เชฌเซ‹เชŸ เชฌเชจเชพเชตเชคเซ€ เชตเช–เชคเซ‡ เชชเซเชฐเชพเชชเซเชค เชฅเชฏเซ‡เชฒ เชตเชพเชธเซเชคเชตเชฟเช• เชŸเซ‹เช•เชจ เชธเชพเชฅเซ‡ เชฌเซ‹เชŸเชซเซ‡เชงเชฐ (เชฎเซ‡เช‚ เชฎเชพเช‚ เชฌเซ‹เชŸ เชฌเชจเชพเชตเชตเชพ เชตเชฟเชถเซ‡ เชตเชพเชค เช•เชฐเซ€ เชชเซเชฐเชฅเชฎ เชฒเซ‡เช–).

เชชเชฐเชฟเชฃเชพเชฎเซ‡, เช…เชฎเชจเซ‡ เช† เชชเชฐเชฟเชฃเชพเชฎ เชฎเชณเชถเซ‡:
R เชฎเชพเช‚ เชŸเซ‡เชฒเชฟเช—เซเชฐเชพเชฎ เชฌเซ‹เชŸ เชฒเช–เชตเซเช‚ (เชญเชพเช— 3): เชฌเซ‹เชŸเชฎเชพเช‚ เช•เซ€เชฌเซ‹เชฐเซเชก เชธเชชเซ‹เชฐเซเชŸ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช‰เชฎเซ‡เชฐเชตเซ‹

เช…เชฎเซ‡ เชชเชฆเซเชงเชคเชฟเชฎเชพเช‚ เชชเชธเช‚เชฆเช—เซ€ เชฎเชพเชŸเซ‡ เช‰เชชเชฒเชฌเซเชง เชนเชฌเชจเซ€ เชธเซ‚เชšเชฟเชจเซ‡ เชนเชพเชฐเซเชกเช•เซ‹เชก เช•เชฐเซ€ เช›เซ‡ 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)
}

เช…เชฎเชจเซ‡ เช†เชฆเซ‡เชถ เชธเชพเชฅเซ‡ เช‰เชฒเซเชฒเซ‡เช–เชฟเชค เชนเชฌเชฎเชพเช‚เชฅเซ€ เชฒเซ‡เช–เซ‹เชจเซ€ เชธเซ‚เชšเชฟ เชฎเชณเซ‡ เช›เซ‡ habr_hub_posts(), เชชเซ‡เช•เซ‡เชœเชฎเชพเช‚เชฅเซ€ habR. เชคเซ‡ เชœ เชธเชฎเชฏเซ‡, เช…เชฎเซ‡ เชจเชฟเชฐเซเชฆเซ‡เชถ เช•เชฐเซ€เช เช›เซ€เช เช•เซ‡ เช…เชฎเชจเซ‡ เชธเชฎเช—เซเชฐ เชธเชฎเชฏ เชฎเชพเชŸเซ‡ เชฒเซ‡เช–เซ‹เชจเซ€ เชธเซ‚เชšเชฟเชจเซ€ เชœเชฐเซ‚เชฐ เชจเชฅเซ€, เชชเชฐเช‚เชคเซ เชซเช•เซเชค เชชเซเชฐเชฅเชฎ เชชเซƒเชทเซเช  เช•เซ‡ เชœเซ‡เชจเชพ เชชเชฐ 20 เชฒเซ‡เช–เซ‹ เชธเซเชฅเชฟเชค เช›เซ‡. เช†เชฆเซ‡เชถเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชชเชฐเชฟเชฃเชพเชฎเซ€ เช•เซ‹เชทเซเชŸเช•เชฎเชพเช‚เชฅเซ€ head() เช…เชฎเซ‡ เชซเช•เซเชค เชŸเซ‹เชšเชจเชพ 5 เช›เซ‹เชกเซ€เช เช›เซ€เช, เชœเซ‡ เชธเซŒเชฅเซ€ เชคเชพเชœเซ‡เชคเชฐเชจเชพ เชฒเซ‡เช–เซ‹ เช›เซ‡.

  # ะฟะฐั€ัะธะผ ะฅะฐะฑั€
  posts <- head(habr_hub_posts(hub, 1), 5)

เชคเชฐเซเช• เช…เช—เชพเช‰เชจเชพ เชฌเซ‹เชŸ เชœเซ‡เชตเซ‹ เชœ เช›เซ‡, เชชเชฐเช‚เชคเซ เช† เช•เชฟเชธเซเชธเชพเชฎเชพเช‚ เช…เชฎเซ‡ เชซเช‚เช•เซเชถเชจเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เช—เชคเชฟเชถเซ€เชฒ เชฐเซ€เชคเซ‡ เชฒเซ‡เช–เซ‹เชจเซ€ เชธเซ‚เชšเชฟ เชธเชพเชฅเซ‡ เช‡เชจเชฒเชพเช‡เชจ เช•เซ€เชฌเซ‹เชฐเซเชก เชœเชจเชฐเซ‡เชŸ เช•เชฐเซ€เช เช›เซ€เช. lapply().

  # ั„ะพั€ะผะธั€ัƒะตะผ ัะฟะธัะพะบ ะบะฝะพะฟะพะบ
  keys <- lapply(1:5, function(x) list(InlineKeyboardButton(posts$title[x], url = posts$link[x])))

  # ั„ะพั€ะผะธั€ัƒะตะผ ะบะปะฐะฒะธะฐั‚ัƒั€ัƒ
  IKM <- InlineKeyboardMarkup(
    inline_keyboard =  keys 
    )

เช…เชฎเซ‡ เชฌเชŸเชจ เชŸเซ‡เช•เซเชธเซเชŸเชฎเชพเช‚ เชฒเซ‡เช–เชจเซเช‚ เชถเซ€เชฐเซเชทเช• เชฆเชพเช–เชฒ เช•เชฐเซ€เช เช›เซ€เช posts$title[x], เช…เชจเซ‡ เชฆเชฒเซ€เชฒเชฎเชพเช‚ url เชฒเซ‡เช–เชจเซ€ เชฒเชฟเช‚เช•: url = posts$link[x].

เช†เช—เชณ, เช…เชฎเซ‡ เชซเชฟเชฒเซเชŸเชฐ, เชนเซ‡เชจเซเชกเชฒเชฐเซเชธ เชฌเชจเชพเชตเซ€เช เช›เซ€เช เช…เชจเซ‡ เช…เชฎเชพเชฐเซ‹ เชฌเซ‹เชŸ เชฒเซ‹เชจเซเชš เช•เชฐเซ€เช เช›เซ€เช.

เชจเชฟเชทเซเช•เชฐเซเชท

เชนเชตเซ‡ เชคเชฎเซ‡ เชฒเช–เซ‹ เช›เซ‹ เชคเซ‡ เชฌเซ‰เชŸเซ‹ เชตเชพเชชเชฐเชตเชพ เชฎเชพเชŸเซ‡ เชตเชงเซ เช…เชจเซเช•เซ‚เชณ เชนเชถเซ‡, เช•เชพเชฐเชฃ เช•เซ‡ เชคเซ‡เช“ เช†เชฆเซ‡เชถเซ‹ เชฆเชพเช–เชฒ เช•เชฐเชตเชพเชจเซ‡ เชฌเชฆเชฒเซ‡ เช•เซ€เชฌเซ‹เชฐเซเชกเชฅเซ€ เชจเชฟเชฏเช‚เชคเซเชฐเชฟเชค เชฅเชถเซ‡. เช“เช›เชพเชฎเชพเช‚ เช“เช›เซเช‚, เชœเซเชฏเชพเชฐเซ‡ เชธเซเชฎเชพเชฐเซเชŸเชซเซ‹เชจ เชฆเซเชตเชพเชฐเชพ เชฌเซ‹เชŸ เชธเชพเชฅเซ‡ เช•เซเชฐเชฟเชฏเชพเชชเซเชฐเชคเชฟเช•เซเชฐเชฟเชฏเชพ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เชคเซเชฏเชพเชฐเซ‡ เช•เซ€เชฌเซ‹เชฐเซเชก เชคเซ‡เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชจเซ€ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชจเซ‡ เชจเซ‹เช‚เชงเชชเชพเชคเซเชฐ เชฐเซ€เชคเซ‡ เชธเชฐเชณ เชฌเชจเชพเชตเชถเซ‡.

เช†เช—เชณเชจเชพ เชฒเซ‡เช–เชฎเชพเช‚ เช†เชชเชฃเซ‡ เชฌเซ‹เชŸ เชธเชพเชฅเซ‡ เชคเชพเชฐเซเช•เชฟเช• เชธเช‚เชตเชพเชฆ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฌเชจเชพเชตเชตเซ‹ เช…เชจเซ‡ เชกเซ‡เชŸเชพเชฌเซ‡เช เชธเชพเชฅเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช•เชพเชฐเซเชฏ เช•เชฐเชตเซเช‚ เชคเซ‡ เชถเซ‹เชงเซ€เชถเซเช‚.

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹