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

மேலே உள்ள குறியீட்டு உதாரணத்தை இயக்கவும், 'உங்கள் பாட் டோக்கனை' மாற்றிய பின், நீங்கள் போட்டை உருவாக்கும் போது நீங்கள் பெற்ற உண்மையான டோக்கனுடன் போட்ஃபெதர் (நான் ஒரு போட் உருவாக்குவது பற்றி பேசினேன் முதல் கட்டுரை).

துவக்கிய பிறகு, போட்க்கு ஒரு கட்டளையை கொடுங்கள் /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()

மேலே உள்ள குறியீட்டு உதாரணத்தை இயக்கவும், 'உங்கள் பாட் டோக்கனை' மாற்றிய பின், நீங்கள் போட்டை உருவாக்கும் போது நீங்கள் பெற்ற உண்மையான டோக்கனுடன் போட்ஃபெதர் (நான் ஒரு போட் உருவாக்குவது பற்றி பேசினேன் முதல் கட்டுரை).

முடிவு:
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)
}

கட்டளையுடன் குறிப்பிட்ட Hub இலிருந்து கட்டுரைகளின் பட்டியலைப் பெறுகிறோம் 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

கருத்தைச் சேர்