R တွင် telegram bot တစ်ခုရေးခြင်း (အပိုင်း 3)- bot တစ်ခုတွင် ကီးဘုတ်ပံ့ပိုးမှုထည့်နည်း

ဤသည်စီးရီး "ကြေးနန်းစာရိုက်စက်ကို R ဖြင့်ရေးသားခြင်း" စီးရီး၏တတိယဆောင်းပါးဖြစ်သည်။ ယခင်ထုတ်ဝေမှုများတွင်၊ တယ်လီဂရမ်ဘော့တ်ဖန်တီးနည်း၊ ၎င်းမှတစ်ဆင့် မက်ဆေ့ချ်များပေးပို့ခြင်း၊ ဘော့တ်သို့ ညွှန်ကြားချက်များနှင့် မက်ဆေ့ချ်စစ်ထုတ်ခြင်းများ ထည့်သွင်းနည်းတို့ကို လေ့လာခဲ့သည်။ ထို့ကြောင့် ဤဆောင်းပါးကို မဖတ်မီ၊ ဖတ်ရန် အထူးအကြံပြုလိုပါသည်။ ယခင်, ဘာဖြစ်လို့လဲဆိုတော့ ဤတွင် ကျွန်ုပ်သည် ယခင်ဖော်ပြထားသော bot တည်ဆောက်ခြင်း၏ အခြေခံအချက်များအပေါ်တွင် မနေတော့ပါ။

ဤဆောင်းပါးတွင်၊ ကျွန်ုပ်တို့သည် bot interface ကို အလိုလိုသိစေပြီး အသုံးပြုရလွယ်ကူစေမည့် ကီးဘုတ်တစ်ခုကို ထည့်ခြင်းဖြင့် ကျွန်ုပ်တို့၏ bot ၏အသုံးပြုနိုင်စွမ်းကို မြှင့်တင်ပါမည်။

R တွင် telegram bot တစ်ခုရေးခြင်း (အပိုင်း 3)- bot တစ်ခုတွင် ကီးဘုတ်ပံ့ပိုးမှုထည့်နည်း

စီးရီး "ကြေးနန်းစာရိုက်စက်ကို R ဖြင့်ရေးသားခြင်း" စီးရီးမှ ဆောင်းပါးများအားလုံး

  1. ကျွန်ုပ်တို့သည် ဘော့တ်တစ်ခုကို ဖန်တီးပြီး တယ်လီဂရမ်ဖြင့် စာတိုပေးပို့ရန် ၎င်းကို အသုံးပြုသည်။
  2. ဘော့တ်သို့ အမိန့်ပေးမှုနှင့် မက်ဆေ့ဂျ် စစ်ထုတ်မှုများကို ထည့်ပါ။
  3. bot တစ်ခုတွင် ကီးဘုတ်ပံ့ပိုးမှုထည့်နည်း

အကြောင်းအရာ

ဒေတာခွဲခြမ်းစိတ်ဖြာခြင်းကို စိတ်ဝင်စားပါက ကျွန်ုပ်ကို စိတ်ဝင်စားပေမည်။ ကွေးနနျးစာ и youtube က ချန်နယ်များ။ အကြောင်းအရာအများစုသည် R ဘာသာစကားအတွက် ရည်ရွယ်သည်။

  1. Telegram bot သည် မည်သည့်ကီးဘုတ်အမျိုးအစားများကို ပံ့ပိုးပေးသနည်း။
  2. စာပြန်ရန် ကီးဘုတ်
  3. လိုင်းကီးဘုတ်
    3.1 ။ InLine ခလုတ်များကို ပံ့ပိုးပေးသည့် ရိုးရှင်းသော ဘော့တ်တစ်ခု၏ ဥပမာ
    3.2 ။ ရွေးချယ်ထားသောမြို့အတွက် လက်ရှိရာသီဥတုကို သတင်းပို့သည့် ဘော့တ်တစ်ခု၏ ဥပမာ
    3.3 ။ habr.com မှ သတ်မှတ်ထားသော Hub သို့ လင့်ခ်များပါသော နောက်ဆုံးဆောင်းပါးများစာရင်းကို ပြသသည့် ဘော့တ်တစ်ခု၏ ဥပမာ
  4. ကောက်ချက်

Telegram bot သည် မည်သည့်ကီးဘုတ်အမျိုးအစားများကို ပံ့ပိုးပေးသနည်း။

ဒီစာရေးနေတဲ့အချိန် telegram.bot ကီးဘုတ်နှစ်မျိုးကို ဖန်တီးနိုင်သည်-

  • စာပြန်ခြင်း - မက်ဆေ့ချ် စာသားထည့်သွင်းမှုအကန့်အောက်တွင် တည်ရှိသည့် ပင်မ၊ ပုံမှန်ကီးဘုတ်။ ထိုကဲ့သို့သောကီးဘုတ်သည် bot သို့ စာသားမက်ဆေ့ခ်ျပို့ရုံသာဖြစ်ပြီး စာသားသည် ခလုတ်ပေါ်တွင်ရေးထားသည့်စာသားကို ပေးပို့မည်ဖြစ်သည်။
  • Inline - သီးခြား bot မက်ဆေ့ဂျ်တစ်ခုနှင့် ဆက်စပ်နေသော ကီးဘုတ်။ ဤကီးဘုတ်သည် နှိပ်ထားသော ခလုတ်နှင့် ဆက်စပ်နေသော ဘော့တ်ဒေတာကို ပေးပို့သည်၊ ဤဒေတာသည် ခလုတ်ပေါ်တွင် ရေးထားသည့် စာသားနှင့် ကွဲပြားနိုင်သည်။ နှင့်ထိုကဲ့သို့သောခလုတ်များမှတဆင့်လုပ်ဆောင်နေပါသည်။ CallbackQueryHandler.

bot သည် ကီးဘုတ်ကိုဖွင့်ရန်အတွက် နည်းလမ်းမှတစ်ဆင့် မက်ဆေ့ချ်ပို့သည့်အခါ လိုအပ်ပါသည်။ sendMessage()အငြင်းအခုံအဖြစ် ယခင်ဖန်တီးထားသော ကီးဘုတ်ကို ကျော်ဖြတ်ပါ။ reply_markup.

အောက်တွင် ကျွန်ုပ်တို့သည် ဥပမာများစွာကို ကြည့်ရှုပါမည်။

စာပြန်ရန် ကီးဘုတ်

အပေါ်မှာရေးခဲ့သလိုပဲ၊ ဒါက အဓိက bot control keyboard ဖြစ်ပါတယ်။

တရားဝင်အကူအညီမှ စာပြန်ကီးဘုတ်ဖန်တီးခြင်း၏ ဥပမာ

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()၎င်းသည် function မှဖန်တီးထားသောခလုတ်များစာရင်းများစာရင်းကိုယူသည်။ KeyboardButton().

ဘာကြောင့်လဲ ReplyKeyboardMarkup() စာရင်းတစ်ခုတင်မကဘဲ စာရင်းစာရင်းကို ကျော်ဖြတ်ရန် လိုအပ်ပါသလား။ အမှန်မှာ သင်သည် ပင်မစာရင်းကို ကျော်ဖြတ်ပြီး ၎င်းတွင် ခလုတ်များ၏ အတန်းတစ်ခုစီကို သီးခြားစာရင်းများတွင် သတ်မှတ်ထားသောကြောင့်၊ အတန်းတစ်ခုတွင် ခလုတ်များစွာကို သင်ထားနိုင်သည်။

အငြင်းပွားမှု resize_keyboard ကီးဘုတ်ခလုတ်များ၏ အကောင်းဆုံးအရွယ်အစားနှင့် အကြောင်းပြချက်ကို အလိုအလျောက်ရွေးချယ်နိုင်စေမည်ဖြစ်သည်။ one_time_keyboard ခလုတ်တစ်ခုစီနှိပ်ပြီးနောက် ကီးဘုတ်ကို ဝှက်ထားနိုင်မည်ဖြစ်သည်။

ခလုတ် 3 ခုပါမယ့် ရိုးရှင်းတဲ့ bot ကိုရေးကြည့်ရအောင်။

  • Chat ID - bot နှင့် ဆွေးနွေးမှု၏ chat ID ကို တောင်းဆိုပါ။
  • ငါ့နာမည်- မင်းနာမည်ကိုတောင်း
  • ကျွန်ုပ်၏ လော့ဂ်အင်- တယ်လီဂရမ်တွင် သင့်အသုံးပြုသူအမည်ကို တောင်းဆိုပါ။

ကုဒ် 1- Reply ကီးဘုတ်ပါသော ရိုးရှင်းသော ဘော့တ်

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' ကို ဘော့တ်ကိုဖန်တီးရာတွင် သင်ရရှိသော တိုကင်အစစ်နှင့် အစားထိုးပြီးနောက်၊ BotFather (ကျွန်တော် bot တစ်ခုကို ဖန်တီးဖို့ ပြောခဲ့တယ်။ ပထမဆောင်းပါး).

စတင်ပြီးနောက်၊ ဘော့တ်ကို အမိန့်ပေးလိုက်ပါ။ /start, ဘာဖြစ်လို့လဲဆိုတော့ ဤသည်မှာကီးဘုတ်ကိုဖွင့်ရန်ကျွန်ုပ်တို့သတ်မှတ်ထားသောအတိအကျဖြစ်သည်။

R တွင် telegram bot တစ်ခုရေးခြင်း (အပိုင်း 3)- bot တစ်ခုတွင် ကီးဘုတ်ပံ့ပိုးမှုထည့်နည်း

နည်းလမ်းများ၊ စစ်ထုတ်မှုများနှင့် ကိုင်တွယ်ကိရိယာများဖန်တီးခြင်းဖြင့် ပေးထားသောကုဒ်နမူနာကို ခွဲခြမ်းစိတ်ဖြာရန် ခက်ခဲနေပါက၊ သင်သည် ယခင်တစ်ခုသို့ ပြန်သွားသင့်သည်။ ဆောင်းပါးဤအရာအားလုံးကို ကျွန်ုပ်အသေးစိတ်ဖော်ပြပါသည်။

ကျွန်ုပ်တို့သည် နည်းလမ်း 4 ခုကို ဖန်တီးခဲ့သည်။

  • စတင်ပါ — ကီးဘုတ်ကိုဖွင့်ပါ။
  • chat_id — ချတ် ID ကို တောင်းဆိုပါ။
  • my_name — သင့်အမည်ကို တောင်းဆိုပါ။
  • my_username — သင့်အကောင့်ဝင်ရန် တောင်းဆိုပါ။

ကန့်ကွက်ရန် MessageFilters ၎င်းတို့၏ စာသားအပေါ် အခြေခံ၍ မက်ဆေ့ဂျ် စစ်ထုတ်မှု 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
)

ကျွန်ုပ်တို့၏အခြေအနေတွင်၊ ကျွန်ုပ်တို့သည် ခလုတ်အားလုံးကို တစ်ခုနှင့်တစ်ခုအောက်တွင်ထားရှိသော်လည်း ခလုတ်စာရင်းများကို အပြောင်းအလဲပြုလုပ်ခြင်းဖြင့် ၎င်းတို့ကို အတန်းတစ်ခုတွင် စီစဉ်နိုင်သည်။ ဘာဖြစ်လို့လဲဆိုတော့ ကီးဘုတ်အတွင်းရှိ အတန်းတစ်တန်းကို nested ခလုတ်များစာရင်းဖြင့် ဖန်တီးထားပြီး၊ ထို့နောက် အတန်းတစ်ခုတွင် ကျွန်ုပ်တို့၏ခလုတ်များကိုပြသရန်အတွက် ဤကဲ့သို့သောကီးဘုတ်ကိုတည်ဆောက်ရန်အတွက် ကုဒ်အစိတ်အပိုင်းကို ပြန်လည်ရေးသားရန် လိုအပ်သည်-

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

R တွင် telegram bot တစ်ခုရေးခြင်း (အပိုင်း 3)- bot တစ်ခုတွင် ကီးဘုတ်ပံ့ပိုးမှုထည့်နည်း

နည်းလမ်းကို အသုံးပြု၍ ကီးဘုတ်ကို ချတ်သို့ ပေးပို့သည်။ sendMessage()အငြင်းအခုံ၌ reply_markup.

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

လိုင်းကီးဘုတ်

အပေါ်မှာရေးခဲ့သလိုပဲ Inline keyboard ဟာ သီးခြားမက်ဆေ့ချ်တစ်ခုနဲ့ ချိတ်ဆက်ထားပါတယ်။ ပင်မကီးဘုတ်ထက် အလုပ်လုပ်ရတာ ပိုခက်ပါတယ်။

အစပိုင်းတွင်၊ သင်သည် Inline ကီးဘုတ်ကိုခေါ်ရန် bot သို့ နည်းလမ်းတစ်ခုထည့်ရန်လိုအပ်သည်။

Inline ခလုတ်ကို နှိပ်ခြင်းကို တုံ့ပြန်ရန်၊ သင်သည် bot နည်းလမ်းကို အသုံးပြုနိုင်သည်။ answerCallbackQuery()Inline ခလုတ်ကိုနှိပ်သောအသုံးပြုသူအား ကြေးနန်းအင်တာဖေ့စ်တွင် အသိပေးချက်တစ်ခုပြသနိုင်သည်။

Inline ခလုတ်မှ ပေးပို့သည့် ဒေတာသည် စာသားမဟုတ်သောကြောင့် ၎င်းကိုလုပ်ဆောင်ရန် အမိန့်ကို အသုံးပြု၍ အထူးကိုင်တွယ်ဖြေရှင်းသူ ဖန်တီးရန် လိုအပ်ပါသည်။ CallbackQueryHandler().

ပက်ကေ့ဂျ်၏တရားဝင်အကူအညီတွင်ပေးထားသည့် Inline ကီးဘုတ်တည်ဆောက်ခြင်းအတွက် ကုဒ် telegram.bot.

တရားဝင်အကူအညီမှ Inline ကီးဘုတ်တစ်ခုတည်ဆောက်ရန်အတွက် ကုဒ်

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

အမိန့်ကို အသုံးပြု၍ Inline ကီးဘုတ်တစ်ခု တည်ဆောက်ရန် လိုအပ်သည်။ InlineKeyboardMarkup()Reply keyboard ကဲ့သို့ တူညီသော နိယာမတွင်၊ IN InlineKeyboardMarkup() Inline ခလုတ်များစာရင်းများစာရင်းကို ကျော်ဖြတ်ရန် လိုအပ်ပြီး ခလုတ်တစ်ခုစီကို လုပ်ဆောင်ချက်ဖြင့် ဖန်တီးထားသည်။ InlineKeyboardButton().

inline ခလုတ်တစ်ခုသည် အကြောင်းပြချက်တစ်ခုသုံးပြီး bot သို့ အချက်အလက်အချို့ကို ပေးပို့နိုင်သည်။ callback_dataသို့မဟုတ် အကြောင်းပြချက်ကို အသုံးပြု၍ သတ်မှတ်ထားသည့် HTML စာမျက်နှာကို ဖွင့်ပါ။ url.

ရလဒ်သည် ဒြပ်စင်တစ်ခုစီသည် အတန်းတစ်ခုသို့ ပေါင်းစပ်ရန်လိုအပ်သည့် Inline ခလုတ်များစာရင်းတစ်ခုဖြစ်သည့် စာရင်းတစ်ခုဖြစ်သည်။

ထို့နောက် Inline ခလုတ်များပါရှိသော ဘော့တ်များ၏နမူနာများစွာကို ကြည့်ရှုပါမည်။

InLine ခလုတ်များကို ပံ့ပိုးပေးသည့် ရိုးရှင်းသော ဘော့တ်တစ်ခု၏ ဥပမာ

ဦးစွာ၊ ကျွန်ုပ်တို့သည် Covid-19 အတွက် အမြန်စစ်ဆေးမှုအတွက် bot တစ်ခုကို ရေးပါမည်။ အမိန့်ဖြင့် /test၊ ၎င်းသည် ခလုတ်နှစ်ခုပါသော ကီးဘုတ်တစ်ခုကို ပေးပို့မည်ဖြစ်ပြီး ၎င်းသည် နှိပ်လိုက်သည့်ခလုတ်ပေါ် မူတည်၍ သင်၏စမ်းသပ်မှုရလဒ်နှင့်အတူ မက်ဆေ့ခ်ျတစ်စောင်ပေးပို့မည်ဖြစ်သည်။

ကုဒ် 2- Inline ကီးဘုတ်ပါသော အရိုးရှင်းဆုံး ဘော့တ်

library(telegram.bot)

# создаём экземпляр класса Updater
updater <- Updater('ТОКЕН ВАШЕГО БОТА')

# метод для отправки InLine клавиатуры
test <- function(bot, update) {

  # создаём InLine клавиатуру
  IKM <- InlineKeyboardMarkup(
    inline_keyboard = list(
      list(
        InlineKeyboardButton("Да", callback_data = 'yes'),
        InlineKeyboardButton("Нет", callback_data = 'no')
      )
    )
  )

  # Отправляем клавиатуру в чат
  bot$sendMessage(update$message$chat_id, 
                  text = "Вы болете коронавирусом?", 
                  reply_markup = IKM)
}

# метод для обработки нажатия кнопки
answer_cb <- function(bot, update) {

  # полученные данные с кнопки
  data <- update$callback_query$data

  # получаем имя пользователя, нажавшего кнопку
  uname <- update$effective_user()$first_name

  # обработка результата
  if ( data == 'no' ) {

    msg <- paste0(uname, ", поздравляю, ваш тест на covid-19 отрицательный.")

  } else {

    msg <- paste0(uname, ", к сожалени ваш тест на covid-19 положительный.")

  }

  # Отправка сообщения
  bot$sendMessage(chat_id = update$from_chat_id(),
                  text = msg)

  # сообщаем боту, что запрос с кнопки принят
  bot$answerCallbackQuery(callback_query_id = update$callback_query$id) 
}

# создаём обработчики
inline_h      <- CommandHandler('test', test)
query_handler <- CallbackQueryHandler(answer_cb)

# добавляем обработчики в диспетчер
updater <- updater + inline_h + query_handler

# запускаем бота
updater$start_polling()

အထက်ဖော်ပြပါ ကုဒ်နမူနာကို လုပ်ဆောင်ပါ၊ 'YOUR BOT TOKEN' ကို ဘော့တ်ကိုဖန်တီးရာတွင် သင်ရရှိသော တိုကင်အစစ်နှင့် အစားထိုးပြီးနောက်၊ BotFather (ကျွန်တော် bot တစ်ခုကို ဖန်တီးဖို့ ပြောခဲ့တယ်။ ပထမဆောင်းပါး).

ရလဒ်:
R တွင် telegram bot တစ်ခုရေးခြင်း (အပိုင်း 3)- bot တစ်ခုတွင် ကီးဘုတ်ပံ့ပိုးမှုထည့်နည်း

ကျွန်ုပ်တို့သည် နည်းလမ်းနှစ်ခုကို ဖန်တီးခဲ့သည်။

  • စမ်းသပ် — Inline ကီးဘုတ်ကို ချတ်လုပ်ရန် ပေးပို့ရန်
  • အဖြေ_cb - ကီးဘုတ်မှပေးပို့သောဒေတာကိုလုပ်ဆောင်ရန်။

ခလုတ်တစ်ခုစီမှ ပေးပို့မည့်ဒေတာကို အငြင်းအခုံတွင် သတ်မှတ်ထားသည်။ callback_dataခလုတ်တစ်ခုကို ဖန်တီးသောအခါ၊ တည်ဆောက်မှုကို အသုံးပြု၍ ခလုတ်မှပေးပို့သောဒေတာကို သင်လက်ခံရရှိနိုင်ပါသည်။ update$callback_query$dataနည်းလမ်းအတွင်းပိုင်း အဖြေ_cb.

ဘော့တ်သည် Inline ကီးဘုတ်ကို တုံ့ပြန်ရန်အတွက် နည်းလမ်း အဖြေ_cb အထူးကိုင်တွယ်သူမှ လုပ်ဆောင်သည်- CallbackQueryHandler(answer_cb). Inline ခလုတ်ကို နှိပ်သောအခါ သတ်မှတ်ထားသော နည်းလမ်းကို လုပ်ဆောင်သည်။ ကိုင်တွယ်သူ CallbackQueryHandler ငြင်းချက်နှစ်ခုယူသည်-

  • callback - လုပ်ဆောင်ရမည့်နည်းလမ်း
  • pattern — အငြင်းအခုံတစ်ခုအသုံးပြု၍ ခလုတ်နှင့်ချိတ်ထားသည့်ဒေတာဖြင့် စစ်ထုတ်ပါ။ callback_data.

သို့ဖြစ်ရာ အငြင်းအခုံကို အသုံးပြုသည်။ pattern ခလုတ်တစ်ခုစီကို နှိပ်ခြင်းအတွက် သီးခြားနည်းလမ်းတစ်ခု ရေးနိုင်သည်-

ကုဒ် 3- Inline ခလုတ်တစ်ခုစီအတွက် သီးခြားနည်းလမ်းများ

library(telegram.bot)

# создаём экземпляр класса Updater
updater <- Updater('ТОКЕН ВАШЕГО БОТА')

# метод для отправки InLine клавиатуры
test <- function(bot, update) {  

  # создаём InLine клавиатуру
  IKM <- InlineKeyboardMarkup(
    inline_keyboard = list(
      list(
        InlineKeyboardButton("Да", callback_data = 'yes'),
        InlineKeyboardButton("Нет", callback_data = 'no')
      )
    )
  )

  # Отправляем клавиатуру в чат
  bot$sendMessage(update$message$chat_id, 
                  text = "Вы болете коронавирусом?", 
                  reply_markup = IKM)
}

# метод для обработки нажатия кнопки Да
answer_cb_yes <- function(bot, update) {

  # получаем имя пользователя, нажавшего кнопку
  uname <- update$effective_user()$first_name

  # обработка результата
  msg <- paste0(uname, ", к сожалени ваш текст на covid-19 положительный.")

  # Отправка сообщения
  bot$sendMessage(chat_id = update$from_chat_id(),
                  text = msg)

  # сообщаем боту, что запрос с кнопки принят
  bot$answerCallbackQuery(callback_query_id = update$callback_query$id) 
}

# метод для обработки нажатия кнопки Нет
answer_cb_no <- function(bot, update) {

  # получаем имя пользователя, нажавшего кнопку
  uname <- update$effective_user()$first_name

  msg <- paste0(uname, ", поздравляю, ваш текст на covid-19 отрицательный.")

  # Отправка сообщения
  bot$sendMessage(chat_id = update$from_chat_id(),
                  text = msg)

  # сообщаем боту, что запрос с кнопки принят
  bot$answerCallbackQuery(callback_query_id = update$callback_query$id) 
}

# создаём обработчики
inline_h          <- CommandHandler('test', test)
query_handler_yes <- CallbackQueryHandler(answer_cb_yes, pattern = 'yes')
query_handler_no  <- CallbackQueryHandler(answer_cb_no, pattern = 'no')

# добавляем обработчики в диспетчер
updater <- updater + 
            inline_h + 
            query_handler_yes +
            query_handler_no

# запускаем бота
updater$start_polling()

အထက်ဖော်ပြပါ ကုဒ်နမူနာကို လုပ်ဆောင်ပါ၊ 'YOUR BOT TOKEN' ကို ဘော့တ်ကိုဖန်တီးရာတွင် သင်ရရှိသော တိုကင်အစစ်နှင့် အစားထိုးပြီးနောက်၊ BotFather (ကျွန်တော် bot တစ်ခုကို ဖန်တီးဖို့ ပြောခဲ့တယ်။ ပထမဆောင်းပါး).

ယခုကျွန်ုပ်တို့သည်သီးခြားနည်းလမ်း ၂ ခုကိုရေးသားခဲ့သည် i.e. နည်းလမ်းတစ်ခု၊ ခလုတ်တစ်ခုစီအတွက်၊ အငြင်းအခုံကို အသုံးပြုသည်။ pattern၎င်းတို့၏ ကိုင်တွယ်သူများကို ဖန်တီးသည့်အခါ၊

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

နည်းလမ်းကုဒ်အဆုံးသတ် အဖြေ_cb အသင်းအဖွဲ့ bot$answerCallbackQuery(callback_query_id = update$callback_query$id)inline keyboard မှဒေတာများလက်ခံရရှိကြောင်း bot ကိုပြောပြသည်။

ရွေးချယ်ထားသောမြို့အတွက် လက်ရှိရာသီဥတုကို သတင်းပို့သည့် ဘော့တ်တစ်ခု၏ ဥပမာ

မိုးလေဝသဒေတာကို တောင်းဆိုသည့် bot တစ်ခုကို ရေးကြည့်ရအောင်။

၎င်း၏အလုပ်၏ယုတ္တိဗေဒသည်အောက်ပါအတိုင်းဖြစ်လိမ့်မည်။ အစကတော့ အဖွဲ့နဲ့ပေါ့။ /start "ရာသီဥတု" ခလုတ်တစ်ခုသာရှိသော ပင်မကီးဘုတ်ကို သင်ခေါ်ဆိုပါသည်။ ဤခလုတ်ကိုနှိပ်ခြင်းဖြင့် သင်လက်ရှိရာသီဥတုကိုသိရှိလိုသည့်မြို့ကိုရွေးချယ်ရန် Inline ကီးဘုတ်ဖြင့် မက်ဆေ့ချ်တစ်ခုရရှိမည်ဖြစ်သည်။ မြို့များထဲမှ တစ်ခုကို ရွေးပြီး လက်ရှိရာသီဥတုကို ရယူပါ။

ဤကုဒ်နမူနာတွင် ကျွန်ုပ်တို့သည် နောက်ထပ်ပက်ကေ့ဂျ်များစွာကို အသုံးပြုပါမည်-

  • httr - မည်သည့် API ဖြင့်အလုပ်လုပ်သည်ကိုအခြေခံ၍ HTTP တောင်းဆိုမှုများနှင့်လုပ်ဆောင်ရန်အထုပ်တစ်ခု။ ကျွန်ုပ်တို့၏အခြေအနေတွင်ကျွန်ုပ်တို့သည်အခမဲ့ 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' ကို ဘော့တ်ကိုဖန်တီးရာတွင် သင်ရရှိသော တိုကင်အစစ်နှင့် အစားထိုးပြီးနောက်၊ BotFather (ကျွန်တော် bot တစ်ခုကို ဖန်တီးဖို့ ပြောခဲ့တယ်။ ပထမဆောင်းပါး).

ရလဒ်အနေဖြင့်၊ ကျွန်ုပ်တို့၏ bot သည် ဤကဲ့သို့သောအရာတစ်ခုခုကို လုပ်ဆောင်လိမ့်မည်-
R တွင် telegram bot တစ်ခုရေးခြင်း (အပိုင်း 3)- bot တစ်ခုတွင် ကီးဘုတ်ပံ့ပိုးမှုထည့်နည်း

ဇယားကွက်အရ၊ ဤ bot ကို ဤကဲ့သို့ ပုံဖော်နိုင်သည်-
R တွင် telegram bot တစ်ခုရေးခြင်း (အပိုင်း 3)- bot တစ်ခုတွင် ကီးဘုတ်ပံ့ပိုးမှုထည့်နည်း

ကျွန်ုပ်တို့၏ weather bot တွင်ရရှိနိုင်သောနည်းလမ်း 3 ခုကိုဖန်တီးထားသည်။

  • စတင် - ပင်မ ဘော့တ်ကီးဘုတ်ကို စတင်ပါ။
  • ရာသီဥတု — မြို့တစ်ခုကိုရွေးချယ်ရန် Inline ကီးဘုတ်ကိုဖွင့်ပါ။
  • အဖြေ_cb — ပေးထားသောမြို့အတွက် API မှရာသီဥတုကိုတောင်းဆိုပြီး ချတ်သို့ပေးပို့သည့် အဓိကနည်းလမ်း။

နည်းလမ်း စတင် ၎င်းကို command ဖြင့်ဖွင့်ပါ။ /startကိုင်တွယ်သူမှ အကောင်အထည်ဖော်သည်။ CommandHandler('start', start).

နည်းလမ်းတစ်ခုလုပ်ဆောင်ရန် ရာသီဥတု ကျွန်ုပ်တို့သည် အမည်တူ စစ်ထုတ်မှုတစ်ခုကို ဖန်တီးခဲ့သည်-

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

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

}
)

ပြီးတော့ ဒီနည်းလမ်းကို အောက်ပါ message handler နဲ့ ခေါ်ပါတယ်။ MessageHandler(weather, filters = MessageFilters$weather).

အဆုံး၌၊ ငါတို့၏အဓိကနည်းလမ်း အဖြေ_cb အထူးကိုင်တွယ်သူမှ လုပ်ဆောင်သည့် Inline ခလုတ်များကို နှိပ်ခြင်းဖြင့် တုံ့ပြန်သည်- CallbackQueryHandler(answer_cb).

နည်းလမ်းတစ်ခုအတွင်း အဖြေ_cbကီးဘုတ်မှပေးပို့သောဒေတာကိုကျွန်ုပ်တို့ဖတ်ပြီး variable တစ်ခုသို့ရေးပါ။ city: city <- update$callback_query$data. ထို့နောက် ကျွန်ုပ်တို့သည် API မှ မိုးလေဝသဒေတာကို တောင်းဆိုကာ မက်ဆေ့ချ်တစ်ခုထုတ်ပေးကာ နောက်ဆုံးနည်းလမ်းကို အသုံးပြုပါ။ answerCallbackQuery ကျွန်ုပ်တို့သည် Inline ခလုတ်ကို နှိပ်ပြီး လုပ်ဆောင်ခဲ့ကြောင်း bot ကို အသိပေးရန်အတွက်။

သတ်မှတ်ထားသော Hub မှ လင့်ခ်များပါသည့် နောက်ဆုံးဆောင်းပါးများစာရင်းကို ပြသသည့် ဘော့တ်တစ်ခု၏ ဥပမာ www.habr.com.

ဝဘ်စာမျက်နှာများဆီသို့ ဦးတည်သော Inline ခလုတ်များကို မည်သို့ပြသရမည်ကို ပြသရန် ဤ ဘော့တ်ကို ကျွန်ုပ်တင်ပြပါသည်။

ဤ bot ၏ယုတ္တိဗေဒသည်ယခင်တစ်ခုနှင့်ဆင်တူသည်၊ အစပိုင်းတွင်ကျွန်ုပ်တို့သည် command ဖြင့်ပင်မကီးဘုတ်ကိုစတင်သည်။ /start. ထို့နောက်၊ ဘော့တ်သည် ကျွန်ုပ်တို့အား ရွေးချယ်ရန် အချက်အချာကျသည့် 6 ခုစာရင်းကို ပေးသည်၊ ကျွန်ုပ်တို့သည် ကျွန်ုပ်တို့ စိတ်ဝင်စားသည့် ဟက်ဘ်ကို ရွေးချယ်ကာ ရွေးချယ်ထားသည့် Hub မှ နောက်ဆုံးထုတ်ဝေမှု 5 ခုကို လက်ခံရရှိမည်ဖြစ်သည်။

သင်နားလည်သည့်အတိုင်း၊ ဤကိစ္စတွင် ကျွန်ုပ်တို့သည် ဆောင်းပါးများစာရင်းကို ရယူရန်လိုအပ်ပြီး ယင်းအတွက် ကျွန်ုပ်တို့သည် အထူးအထုပ်တစ်ခုကို အသုံးပြုပါမည်။ habRHabra မှ ဆောင်းပါးများနှင့် ၎င်းတို့နှင့်ပတ်သက်သော စာရင်းအင်းအချို့ကို R ဖြင့် တောင်းဆိုနိုင်စေမည့်၊

အထုပ်ကို ထည့်သွင်းပါ။ habR အပိုပက်ကေ့ခ်ျတစ်ခုလိုအပ်မည့် github မှသာလျှင်ဖြစ်နိုင်သည်။ devtools. ထည့်သွင်းရန်၊ အောက်ပါကုဒ်ကို အသုံးပြုပါ။

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

အခု အထက်မှာဖော်ပြထားတဲ့ bot ကိုတည်ဆောက်ဖို့အတွက် ကုဒ်ကို ကြည့်ကြရအောင်။

ကုဒ် 5- ရွေးချယ်ထားသော Hub တွင် လတ်တလော ဆောင်းပါးများစာရင်းကို ပြသသည့် ဘော့တ်တစ်ခု

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' ကို ဘော့တ်ကိုဖန်တီးရာတွင် သင်ရရှိသော တိုကင်အစစ်နှင့် အစားထိုးပြီးနောက်၊ BotFather (ကျွန်တော် bot တစ်ခုကို ဖန်တီးဖို့ ပြောခဲ့တယ်။ ပထမဆောင်းပါး).

ရလဒ်အနေဖြင့်၊ ကျွန်ုပ်တို့သည် ဤရလဒ်ကို ရရှိလိမ့်မည်-
R တွင် telegram bot တစ်ခုရေးခြင်း (အပိုင်း 3)- bot တစ်ခုတွင် ကီးဘုတ်ပံ့ပိုးမှုထည့်နည်း

နည်းလမ်းတွင် ရွေးချယ်နိုင်သော Hubs စာရင်းကို ကျွန်ုပ်တို့ hardcode လုပ်ထားပါသည်။ 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)
}

ညွှန်ကြားချက်ဖြင့် သတ်မှတ်ထားသော Hub မှ ဆောင်းပါးများစာရင်းကို ကျွန်ုပ်တို့ ရရှိပါသည်။ habr_hub_posts()အထုပ်ထဲမှ၊ habR. တစ်ချိန်တည်းမှာပင်၊ ကျွန်ုပ်တို့သည် အချိန်တစ်ခုလုံးအတွက် ဆောင်းပါးများစာရင်းမလိုအပ်သော်လည်း ဆောင်းပါး 20 ရှိသည့် ပထမစာမျက်နှာကိုသာ ထောက်ပြပါသည်။ ရလဒ်ဇယားမှ command ကို အသုံးပြု head() နောက်ဆုံးဆောင်းပါးများဖြစ်သည့် ထိပ်တန်း 5 ခုကိုသာ ချန်ထားခဲ့သည်။

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

ယုတ္တိဗေဒသည် ယခင် bot နှင့် အလွန်ဆင်တူသည်၊ သို့သော် ဤကိစ္စတွင် ကျွန်ုပ်တို့သည် လုပ်ဆောင်ချက်ကို အသုံးပြု၍ ဆောင်းပါးများစာရင်းနှင့်အတူ Inline ကီးဘုတ်ကို ထုတ်ပေးပါသည်။ 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].

ထို့နောက်၊ ကျွန်ုပ်တို့သည် စစ်ထုတ်မှု၊ ကိုင်တွယ်သူများကို ဖန်တီးပြီး ကျွန်ုပ်တို့၏ ဘော့တ်ကို စတင်လိုက်ပါ။

ကောက်ချက်

ယခု သင်ရေးထားသော ဘော့တ်များသည် ကွန်မန့်များထည့်သွင်းခြင်းထက် ၎င်းတို့ကို ကီးဘုတ်မှ ထိန်းချုပ်ထားသောကြောင့် အသုံးပြုရန် ပိုမိုအဆင်ပြေမည်ဖြစ်သည်။ အနည်းဆုံးအားဖြင့်၊ စမတ်ဖုန်းမှတဆင့် bot နှင့်အပြန်အလှန်ဆက်ဆံသောအခါ၊ ကီးဘုတ်သည် ၎င်းကိုအသုံးပြုသည့်လုပ်ငန်းစဉ်ကိုသိသိသာသာရိုးရှင်းစေမည်ဖြစ်သည်။

နောက်ဆောင်းပါးတွင် bot တစ်ခုနှင့် logical dialogue တစ်ခုကိုတည်ဆောက်ပြီး databases နှင့်အလုပ်လုပ်ပုံကိုရှာဖွေပါမည်။

source: www.habr.com

မှတ်ချက် Add