R (భాగం 3)లో టెలిగ్రామ్ బాట్ రాయడం: బాట్‌కి కీబోర్డ్ మద్దతును ఎలా జోడించాలి

"R లో టెలిగ్రామ్ బాట్ రాయడం" సిరీస్‌లో ఇది మూడవ కథనం. మునుపటి ప్రచురణలలో, మేము టెలిగ్రామ్ బాట్‌ను ఎలా సృష్టించాలో నేర్చుకున్నాము, దాని ద్వారా సందేశాలను పంపాము, బాట్‌కు ఆదేశాలు మరియు సందేశ ఫిల్టర్‌లను జోడించాము. అందువల్ల, మీరు ఈ కథనాన్ని చదవడం ప్రారంభించే ముందు, మీరు చదవమని నేను బాగా సిఫార్సు చేస్తున్నాను మునుపటి, ఎందుకంటే ఇక్కడ నేను ఇకపై బోట్ బిల్డింగ్ యొక్క గతంలో వివరించిన ప్రాథమిక విషయాలపై నివసించను.

ఈ కథనంలో, మేము కీబోర్డ్‌ను జోడించడం ద్వారా మా బాట్ యొక్క వినియోగాన్ని మెరుగుపరుస్తాము, ఇది బోట్ ఇంటర్‌ఫేస్‌ను సహజంగా మరియు ఉపయోగించడానికి సులభమైనదిగా చేస్తుంది.

R (భాగం 3)లో టెలిగ్రామ్ బాట్ రాయడం: బాట్‌కి కీబోర్డ్ మద్దతును ఎలా జోడించాలి

“R లో టెలిగ్రామ్ బాట్ రాయడం” సిరీస్‌లోని అన్ని కథనాలు

  1. మేము ఒక బోట్‌ను సృష్టించి, టెలిగ్రామ్‌లో సందేశాలను పంపడానికి దాన్ని ఉపయోగిస్తాము
  2. బాట్‌కు కమాండ్ సపోర్ట్ మరియు మెసేజ్ ఫిల్టర్‌లను జోడించండి
  3. బాట్‌కి కీబోర్డ్ మద్దతును ఎలా జోడించాలి

కంటెంట్

మీకు డేటా విశ్లేషణపై ఆసక్తి ఉంటే, మీరు నాపై ఆసక్తి కలిగి ఉండవచ్చు టెలిగ్రామ్ и YouTube ఛానెల్‌లు. చాలా కంటెంట్ R భాషకు అంకితం చేయబడింది.

  1. టెలిగ్రామ్ బాట్ ఏ రకమైన కీబోర్డ్‌లకు మద్దతు ఇస్తుంది?
  2. ప్రత్యుత్తరం కీబోర్డ్
  3. ఇన్లైన్ కీబోర్డ్
    <span style="font-family: arial; ">10</span> ఇన్‌లైన్ బటన్‌లకు మద్దతు ఉన్న సాధారణ బోట్‌కు ఉదాహరణ
    <span style="font-family: arial; ">10</span> ఎంచుకున్న నగరం కోసం ప్రస్తుత వాతావరణాన్ని నివేదించే బోట్ యొక్క ఉదాహరణ
    <span style="font-family: arial; ">10</span> 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 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()

దీని ద్వారా బోట్‌ను సృష్టించేటప్పుడు మీరు అందుకున్న నిజమైన టోకెన్‌తో 'మీ బోట్ టోకెన్'ని భర్తీ చేసిన తర్వాత ఎగువ కోడ్ ఉదాహరణను అమలు చేయండి బోట్ఫదర్ (నేను బోట్‌ను సృష్టించడం గురించి మాట్లాడాను మొదటి వ్యాసం).

ఫలితంగా, మేము ఈ ఫలితాన్ని పొందుతాము:
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

ఒక వ్యాఖ్యను జోడించండి