R-เตฝ เด’เดฐเต เดŸเต†เดฒเดฟเด—เตเดฐเดพเด‚ เดฌเต‹เดŸเตเดŸเต เดŽเดดเตเดคเตเดจเตเดจเต (เดญเดพเด—เด‚ 3): เด’เดฐเต เดฌเต‹เดŸเตเดŸเดฟเดฒเต‡เด•เตเด•เต เด•เต€เดฌเต‹เตผเดกเต เดชเดฟเดจเตเดคเตเดฃ เดŽเด™เตเด™เดจเต† เดšเต‡เตผเด•เตเด•เดพเด‚

"R-เตฝ เด’เดฐเต เดŸเต†เดฒเดฟเด—เตเดฐเดพเด‚ เดฌเต‹เดŸเตเดŸเต เดŽเดดเตเดคเตเดจเตเดจเต" เดŽเดจเตเดจ เดชเดฐเดฎเตเดชเดฐเดฏเดฟเดฒเต† เดฎเต‚เดจเตเดจเดพเดฎเดคเตเดคเต† เดฒเต‡เด–เดจเดฎเดพเดฃเดฟเดคเต. เดฎเตเตป เดชเตเดฐเดธเดฟเดฆเตเดงเต€เด•เดฐเดฃเด™เตเด™เดณเดฟเตฝ, เด’เดฐเต เดŸเต†เดฒเดฟเด—เตเดฐเดพเด‚ เดฌเต‹เดŸเตเดŸเต เดŽเด™เตเด™เดจเต† เดธเตƒเดทเตเดŸเดฟเด•เตเด•เดพเดฎเต†เดจเตเดจเตเด‚ เด…เดคเดฟเดฒเต‚เดŸเต† เดธเดจเตเดฆเต‡เดถเด™เตเด™เตพ เด…เดฏเดฏเตเด•เตเด•เดพเดฎเต†เดจเตเดจเตเด‚ เดฌเต‹เดŸเตเดŸเดฟเดฒเต‡เด•เตเด•เต เด•เดฎเดพเตปเดกเตเด•เดณเตเด‚ เดธเดจเตเดฆเต‡เดถ เดซเดฟเตฝเดŸเตเดŸเดฑเตเด•เดณเตเด‚ เดŽเด™เตเด™เดจเต† เดšเต‡เตผเด•เตเด•เดพเดฎเต†เดจเตเดจเตเด‚ เดžเด™เตเด™เตพ เดชเด เดฟเดšเตเดšเต. เด…เดคเดฟเดจเดพเตฝ, เดจเดฟเด™เตเด™เตพ เดˆ เดฒเต‡เด–เดจเด‚ เดตเดพเดฏเดฟเด•เตเด•เดพเตป เดคเตเดŸเด™เตเด™เตเดจเตเดจเดคเดฟเดจเตเดฎเตเดฎเตเดชเต, เดจเดฟเด™เตเด™เตพ เดตเดพเดฏเดฟเด•เตเด•เดพเตป เดžเดพเตป เดตเดณเดฐเต† เดถเตเดชเดพเตผเดถ เดšเต†เดฏเตเดฏเตเดจเตเดจเต เดฎเตเดฎเตเดชเดคเตเดคเต†, เด•เดพเดฐเดฃเด‚ เดฌเต‹เดŸเตเดŸเต เดจเดฟเตผเดฎเตเดฎเดพเดฃเดคเตเดคเดฟเดจเตเดฑเต† เดฎเตเดฎเตเดชเต เดตเดฟเดตเดฐเดฟเดšเตเดš เด…เดŸเดฟเดธเตเดฅเดพเดจเด•เดพเดฐเตเดฏเด™เตเด™เดณเดฟเตฝ เดžเดพเตป เด‡เดจเดฟ เดคเดพเดฎเดธเดฟเด•เตเด•เดฟเดฒเตเดฒ.

เดˆ เดฒเต‡เด–เดจเดคเตเดคเดฟเตฝ, เด’เดฐเต เด•เต€เดฌเต‹เตผเดกเต เดšเต‡เตผเดคเตเดคเต เดžเด™เตเด™เดณเตเดŸเต† เดฌเต‹เดŸเตเดŸเดฟเดจเตเดฑเต† เด‰เดชเดฏเต‹เด—เด•เตเดทเดฎเดค เดžเด™เตเด™เตพ เดฎเต†เดšเตเดšเดชเตเดชเต†เดŸเตเดคเตเดคเตเด‚, เด…เดคเต เดฌเต‹เดŸเตเดŸเต เด‡เดจเตเดฑเตผเดซเต‡เดธเต เด…เดตเดฌเต‹เดงเดœเดจเตเดฏเดตเตเด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเตป เดŽเดณเตเดชเตเดชเดตเตเดฎเดพเด•เตเด•เตเด‚.

R-เตฝ เด’เดฐเต เดŸเต†เดฒเดฟเด—เตเดฐเดพเด‚ เดฌเต‹เดŸเตเดŸเต เดŽเดดเตเดคเตเดจเตเดจเต (เดญเดพเด—เด‚ 3): เด’เดฐเต เดฌเต‹เดŸเตเดŸเดฟเดฒเต‡เด•เตเด•เต เด•เต€เดฌเต‹เตผเดกเต เดชเดฟเดจเตเดคเตเดฃ เดŽเด™เตเด™เดจเต† เดšเต‡เตผเด•เตเด•เดพเด‚

"R-เตฝ เด’เดฐเต เดŸเต†เดฒเดฟเด—เตเดฐเดพเด‚ เดฌเต‹เดŸเตเดŸเต เดŽเดดเตเดคเตเดจเตเดจเต" เดŽเดจเตเดจ เดชเดฐเดฎเตเดชเดฐเดฏเดฟเดฒเต† เดŽเดฒเตเดฒเดพ เดฒเต‡เด–เดจเด™เตเด™เดณเตเด‚

  1. เดžเด™เตเด™เตพ เด’เดฐเต เดฌเต‹เดŸเตเดŸเต เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดŸเต†เดฒเดฟเด—เตเดฐเดพเดฎเดฟเตฝ เดธเดจเตเดฆเต‡เดถเด™เตเด™เตพ เด…เดฏเดฏเตเด•เตเด•เดพเตป เด…เดคเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต
  2. เดฌเต‹เดŸเตเดŸเดฟเดฒเต‡เด•เตเด•เต เด•เดฎเดพเตปเดกเต เดชเดฟเดจเตเดคเตเดฃเดฏเตเด‚ เดธเดจเตเดฆเต‡เดถ เดซเดฟเตฝเดŸเตเดŸเดฑเตเด•เดณเตเด‚ เดšเต‡เตผเด•เตเด•เตเด•
  3. เด’เดฐเต เดฌเต‹เดŸเตเดŸเดฟเดฒเต‡เด•เตเด•เต เด•เต€เดฌเต‹เตผเดกเต เดชเดฟเดจเตเดคเตเดฃ เดŽเด™เตเด™เดจเต† เดšเต‡เตผเด•เตเด•เดพเด‚

เด‰เดณเตเดณเดŸเด•เตเด•เด‚

เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดกเดพเดฑเตเดฑ เดตเดฟเดถเด•เดฒเดจเดคเตเดคเดฟเตฝ เดคเดพเตฝเดชเตเดชเดฐเตเดฏเดฎเตเดฃเตเดŸเต†เด™เตเด•เดฟเตฝ, เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดŽเดจเตเดฑเต† เดคเดพเตฝเดชเตเดชเดฐเตเดฏเดฎเตเดฃเตเดŸเดพเด•เดพเด‚ เดŸเต†เดฒเด—เตเดฐเดพเด‚ ะธ YouTube เดšเดพเดจเดฒเตเด•เตพ. เด‰เดณเตเดณเดŸเด•เตเด•เดคเตเดคเดฟเดจเตเดฑเต† เดญเต‚เดฐเดฟเดญเดพเด—เดตเตเด‚ 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 เดฌเดŸเตเดŸเดฃเตเด•เดณเตเดณเตเดณ เด’เดฐเต เดฒเดณเดฟเดคเดฎเดพเดฏ เดฌเต‹เดŸเตเดŸเต เดจเดฎเตเด•เตเด•เต เดŽเดดเตเดคเดพเด‚:

  • เดšเดพเดฑเตเดฑเต เดเดกเดฟ - เดฌเต‹เดŸเตเดŸเตเดฎเดพเดฏเตเดณเตเดณ เดกเดฏเดฒเต‹เด—เดฟเดจเตเดฑเต† เดšเดพเดฑเตเดฑเต เดเดกเดฟ เด…เดญเตเดฏเตผเดคเตเดฅเดฟเด•เตเด•เตเด•
  • เดŽเดจเตเดฑเต† เดชเต‡เดฐเต - เดจเดฟเด™เตเด™เดณเตเดŸเต† เดชเต‡เดฐเต เด…เดญเตเดฏเตผเดคเตเดฅเดฟเด•เตเด•เตเด•
  • เดŽเดจเตเดฑเต† เดฒเต‹เด—เดฟเตป - เดŸเต†เดฒเดฟเด—เตเดฐเดพเดฎเดฟเตฝ เดจเดฟเด™เตเด™เดณเตเดŸเต† เด‰เดชเดฏเต‹เด•เตเดคเตƒเดจเดพเดฎเด‚ เด…เดญเตเดฏเตผเดคเตเดฅเดฟเด•เตเด•เตเด•

เด•เต‹เดกเต 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()

เด‡เดคเดฟเดฒเต‚เดŸเต† เดฌเต‹เดŸเตเดŸเต เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดฒเดญเดฟเดšเตเดš เดฏเดฅเดพเตผเดคเตเดฅ เดŸเต‹เด•เตเด•เตบ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต 'Your BOT TOKEN' เดฎเดพเดฑเตเดฑเดฟ เดชเด•เดฐเด‚ เดฎเตเด•เดณเดฟเดฒเต† เด•เต‹เดกเต เด‰เดฆเดพเดนเดฐเดฃเด‚ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเด• เดฌเต‹เดŸเตเดŸเตเดซเดพเดฆเตผ (เดžเดพเตป เด’เดฐเต เดฌเต‹เดŸเตเดŸเต เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เดธเด‚เดธเดพเดฐเดฟเดšเตเดšเต เด†เดฆเตเดฏ เดฒเต‡เด–เดจเด‚).

เดธเดฎเดพเดฐเด‚เดญเดฟเดšเตเดš เดถเต‡เดทเด‚, เดฌเต‹เดŸเตเดŸเดฟเดจเต เด’เดฐเต เด•เดฎเดพเตปเดกเต เดจเตฝเด•เตเด• /start, เด•เดพเดฐเดฃเด‚ เด•เต€เดฌเต‹เตผเดกเต เดธเดฎเดพเดฐเด‚เดญเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดžเด™เตเด™เตพ เดจเดฟเตผเดตเตเดตเดšเดฟเดšเตเดšเดคเต เด‡เดคเดพเดฃเต.

R-เตฝ เด’เดฐเต เดŸเต†เดฒเดฟเด—เตเดฐเดพเด‚ เดฌเต‹เดŸเตเดŸเต เดŽเดดเตเดคเตเดจเตเดจเต (เดญเดพเด—เด‚ 3): เด’เดฐเต เดฌเต‹เดŸเตเดŸเดฟเดฒเต‡เด•เตเด•เต เด•เต€เดฌเต‹เตผเดกเต เดชเดฟเดจเตเดคเตเดฃ เดŽเด™เตเด™เดจเต† เดšเต‡เตผเด•เตเด•เดพเด‚

เดฐเต€เดคเดฟเด•เตพ, เดซเดฟเตฝเดŸเตเดŸเดฑเตเด•เตพ, เดนเดพเตปเดกเตโ€Œเดฒเดฑเตเด•เตพ เดŽเดจเตเดจเดฟเดตเดฏเตเดŸเต† เดธเตƒเดทเตเดŸเดฟ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดจเตฝเด•เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจ เด•เต‹เดกเต เด‰เดฆเดพเดนเดฐเดฃเด‚ เดชเดพเดดเตโ€Œเดธเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเต เด‡เดชเตเดชเต‹เตพ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดฌเตเดฆเตเดงเดฟเดฎเตเดŸเตเดŸเดพเดฃเต†เด™เตเด•เดฟเตฝ, เดจเดฟเด™เตเด™เตพ เดฎเตเดฎเตเดชเดคเตเดคเต‡เดคเดฟเดฒเต‡เด•เตเด•เต เดฎเดŸเด™เตเด™เดฃเด‚. เดฒเต‡เด–เดจเด‚, เด…เดคเดฟเตฝ เดžเดพเตป เด‡เดคเต†เดฒเตเดฒเดพเด‚ เดตเดฟเดถเดฆเดฎเดพเดฏเดฟ เดตเดฟเดตเดฐเดฟเดšเตเดšเต.

เดžเด™เตเด™เตพ 4 เดฐเต€เดคเดฟเด•เตพ เดธเตƒเดทเตเดŸเดฟเดšเตเดšเต:

  • เด†เดฐเด‚เดญเดฟเด•เตเด•เตเด• - เด•เต€เดฌเต‹เตผเดกเต เดธเดฎเดพเดฐเด‚เดญเดฟเด•เตเด•เตเด•
  • chat_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()

เด‡เดคเดฟเดฒเต‚เดŸเต† เดฌเต‹เดŸเตเดŸเต เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดฒเดญเดฟเดšเตเดš เดฏเดฅเดพเตผเดคเตเดฅ เดŸเต‹เด•เตเด•เตบ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต 'Your BOT TOKEN' เดฎเดพเดฑเตเดฑเดฟ เดชเด•เดฐเด‚ เดฎเตเด•เดณเดฟเดฒเต† เด•เต‹เดกเต เด‰เดฆเดพเดนเดฐเดฃเด‚ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเด• เดฌเต‹เดŸเตเดŸเตเดซเดพเดฆเตผ (เดžเดพเตป เด’เดฐเต เดฌเต‹เดŸเตเดŸเต เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เดธเด‚เดธเดพเดฐเดฟเดšเตเดšเต เด†เดฆเตเดฏ เดฒเต‡เด–เดจเด‚).

เดซเดฒเด‚:
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()

เด‡เดคเดฟเดฒเต‚เดŸเต† เดฌเต‹เดŸเตเดŸเต เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดฒเดญเดฟเดšเตเดš เดฏเดฅเดพเตผเดคเตเดฅ เดŸเต‹เด•เตเด•เตบ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต 'Your BOT TOKEN' เดฎเดพเดฑเตเดฑเดฟ เดชเด•เดฐเด‚ เดฎเตเด•เดณเดฟเดฒเต† เด•เต‹เดกเต เด‰เดฆเดพเดนเดฐเดฃเด‚ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเด• เดฌเต‹เดŸเตเดŸเตเดซเดพเดฆเตผ (เดžเดพเตป เด’เดฐเต เดฌเต‹เดŸเตเดŸเต เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เดธเด‚เดธเดพเดฐเดฟเดšเตเดšเต เด†เดฆเตเดฏ เดฒเต‡เด–เดจเด‚).

เด‡เดชเตเดชเต‹เตพ เดžเด™เตเด™เตพ 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 - เดŽเดšเตเดšเตเดŸเดฟเดŸเดฟเดชเดฟ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เตพเด•เตเด•เตŠเดชเตเดชเด‚ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด’เดฐเต เดชเดพเด•เตเด•เต‡เดœเต, เดเดคเต เดŽเดชเดฟเดเดฏเตเดฎเดพเดฏเตเดณเตเดณ เดชเตเดฐเดตเตผเดคเตเดคเดจเดคเตเดคเดฟเดจเตเดฑเต† เด…เดŸเดฟเดธเตเดฅเดพเดจเดคเตเดคเดฟเดฒเดพเดฃเต เดจเดฟเตผเดฎเตเดฎเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเต. เดžเด™เตเด™เดณเตเดŸเต† เด•เดพเดฐเตเดฏเดคเตเดคเดฟเตฝ เดžเด™เตเด™เตพ เดธเต—เดœเดจเตเดฏ 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()

เด‡เดคเดฟเดฒเต‚เดŸเต† เดฌเต‹เดŸเตเดŸเต เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดฒเดญเดฟเดšเตเดš เดฏเดฅเดพเตผเดคเตเดฅ เดŸเต‹เด•เตเด•เตบ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต 'Your BOT TOKEN' เดฎเดพเดฑเตเดฑเดฟ เดชเด•เดฐเด‚ เดฎเตเด•เดณเดฟเดฒเต† เด•เต‹เดกเต เด‰เดฆเดพเดนเดฐเดฃเด‚ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเด• เดฌเต‹เดŸเตเดŸเตเดซเดพเดฆเตผ (เดžเดพเตป เด’เดฐเต เดฌเต‹เดŸเตเดŸเต เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เดธเด‚เดธเดพเดฐเดฟเดšเตเดšเต เด†เดฆเตเดฏ เดฒเต‡เด–เดจเด‚).

เดคเตฝเดซเดฒเดฎเดพเดฏเดฟ, เดžเด™เตเด™เดณเตเดŸเต† เดฌเต‹เดŸเตเดŸเต เด‡เดคเตเดชเต‹เดฒเต† เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเด‚:
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 github-เตฝ เดจเดฟเดจเตเดจเต เดฎเดพเดคเตเดฐเดฎเต‡ เดธเดพเดงเตเดฏเดฎเดพเด•เต‚, เด…เดคเดฟเดจเดพเดฏเดฟ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด’เดฐเต เด…เดงเดฟเด• เดชเดพเด•เตเด•เต‡เดœเต เด†เดตเดถเตเดฏเดฎเดพเดฃเต 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()

เด‡เดคเดฟเดฒเต‚เดŸเต† เดฌเต‹เดŸเตเดŸเต เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดฒเดญเดฟเดšเตเดš เดฏเดฅเดพเตผเดคเตเดฅ เดŸเต‹เด•เตเด•เตบ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต 'Your BOT TOKEN' เดฎเดพเดฑเตเดฑเดฟ เดชเด•เดฐเด‚ เดฎเตเด•เดณเดฟเดฒเต† เด•เต‹เดกเต เด‰เดฆเดพเดนเดฐเดฃเด‚ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเด• เดฌเต‹เดŸเตเดŸเตเดซเดพเดฆเตผ (เดžเดพเตป เด’เดฐเต เดฌเต‹เดŸเตเดŸเต เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เดธเด‚เดธเดพเดฐเดฟเดšเตเดšเต เด†เดฆเตเดฏ เดฒเต‡เด–เดจเด‚).

เดซเดฒเดฎเดพเดฏเดฟ, เดžเด™เตเด™เตพเด•เตเด•เต เดˆ เดซเดฒเด‚ เดฒเดญเดฟเด•เตเด•เตเด‚:
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

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•