ΠΡΠΎ ΡΡΠ΅ΡΡΡ ΡΡΠ°ΡΡΡ ΠΈΠ· ΡΠ΅ΡΠΈΠΈ "ΠΠΈΡΠ΅ΠΌ telegram Π±ΠΎΡΠ° Π½Π° ΡΠ·ΡΠΊΠ΅ R". Π ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΡ
ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡΡ
ΠΌΡ Π½Π°ΡΡΠΈΠ»ΠΈΡΡ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΡΠ΅Π»Π΅Π³ΡΠ°ΠΌ Π±ΠΎΡΠ°, ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡ ΡΠ΅ΡΠ΅Π· Π½Π΅Π³ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ, Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Π±ΠΎΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΈ ΡΠΈΠ»ΡΡΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ. ΠΠΎΡΡΠΎΠΌΡ ΠΏΠ΅ΡΠ΅Π΄ ΡΠ΅ΠΌ ΠΊΠ°ΠΊ ΠΏΡΠΈΡΡΡΠΏΠΈΡΡ ΠΊ ΡΡΠ΅Π½ΠΈΡ Π΄Π°Π½Π½ΠΎΠΉ ΡΡΠ°ΡΡΠΈ Ρ ΠΊΡΠ°ΠΉΠ½Π΅ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΡ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡΡΡΡ Ρ
Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ ΠΌΡ ΠΏΠΎΠ²ΡΡΠΈΠΌ ΡΠ·Π°Π±ΠΈΠ»ΠΈΡΠΈ Π½Π°ΡΠ΅Π³ΠΎ Π±ΠΎΡΠ° Π·Π° ΡΡΡΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ΄Π΅Π»Π°Π΅Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π±ΠΎΡΠ° ΠΈΠ½ΡΡΠΈΡΠΈΠ²Π½ΠΎ ΠΏΠΎΠ½ΡΡΠ½ΡΠΌ, ΠΈ ΠΏΡΠΎΡΡΡΠΌ Π² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ.
ΠΡΠ΅ ΡΡΠ°ΡΡΠΈ ΠΈΠ· ΡΠ΅ΡΠΈΠΈ "ΠΠΈΡΠ΅ΠΌ telegram Π±ΠΎΡΠ° Π½Π° ΡΠ·ΡΠΊΠ΅ R"
Π‘ΠΎΠ·Π΄Π°ΡΠΌ Π±ΠΎΡΠ°, ΠΈ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌ Ρ Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π² telegram ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π±ΠΎΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈ ΡΠΈΠ»ΡΡΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΠ°ΠΊ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π±ΠΎΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ
Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅
ΠΡΠ»ΠΈ Π²Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΠ΅ΡΠ΅ΡΡ Π°Π½Π°Π»ΠΈΠ·ΠΎΠΌ Π΄Π°Π½Π½ΡΡ
Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π²Π°ΠΌ Π±ΡΠ΄ΡΡ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Ρ ΠΌΠΎΠΈ
ΠΠ°ΠΊΠΈΠ΅ ΡΠΈΠΏΡ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠ΅Π»Π΅Π³ΡΠ°ΠΌ Π±ΠΎΡ Reply ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΠ° Inline ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΠ°
3.1.ΠΡΠΈΠΌΠ΅Ρ ΠΏΡΠΎΡΡΠ΅ΠΉΡΠ΅Π³ΠΎ Π±ΠΎΡΠ° Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ InLine ΠΊΠ½ΠΎΠΏΠΎΠΊ
3.2.ΠΡΠΈΠΌΠ΅Ρ Π±ΠΎΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠΎΠ±ΡΠ°Π΅Ρ ΡΠ΅ΠΊΡΡΡΡ ΠΏΠΎΠ³ΠΎΠ΄Ρ ΠΏΠΎ Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠΌΡ Π³ΠΎΡΠΎΠ΄Ρ
3.3.ΠΡΠΈΠΌΠ΅Ρ Π±ΠΎΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠ²ΠΎΠ΄ΠΈΡ ΡΠΏΠΈΡΠΎΠΊ ΡΠ°ΠΌΡΡ ΡΠ²Π΅ΠΆΠΈΡ ΡΡΠ°ΡΠ΅ΠΉ ΡΠΎ ΡΡΡΠ»ΠΊΠ°ΠΌΠΈ ΠΏΠΎ-ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡ Π₯Π°Π±Ρ ΠΈΠ· habr.com ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
ΠΠ°ΠΊΠΈΠ΅ ΡΠΈΠΏΡ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠ΅Π»Π΅Π³ΡΠ°ΠΌ Π±ΠΎΡ
ΠΠ° ΠΌΠΎΠΌΠ΅Π½Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΡΡΠ°ΡΡΠΈ telegram.bot
ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²Π°ΠΌ ΡΠΎΠ·Π΄Π°ΡΡ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ Π΄Π²ΡΡ
ΡΠΈΠΏΠΎΠ²:
- Reply β ΠΡΠ½ΠΎΠ²Π½Π°Ρ, ΠΎΠ±ΡΡΠ½Π°Ρ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ ΠΏΠΎΠ΄ ΠΏΠ°Π½Π΅Π»ΡΡ Π²Π²ΠΎΠ΄Π° ΡΠ΅ΠΊΡΡΠ° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ. Π’Π°ΠΊΠ°Ρ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΠ° ΠΏΡΠΎΡΡΠΎ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ Π±ΠΎΡΡ ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅, ΠΈ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ΅ΠΊΡΡΠ° ΠΎΡΠΏΡΠ°Π²ΠΈΡ ΡΠΎΡ ΡΠ΅ΠΊΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° ΡΠ°ΠΌΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠ΅.
- Inline β ΠΠ»Π°Π²ΠΈΠ°ΡΡΡΠ° ΠΏΡΠΈΠ²ΡΠ·Π°Π½Π½Π°Ρ ΠΊ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΌΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π±ΠΎΡΠ°. ΠΠ°Π½Π½Π°Ρ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΠ° ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ Π±ΠΎΡΡ Π΄Π°Π½Π½ΡΠ΅, ΠΏΡΠΈΠ²ΡΠ·Π°Π½Π½ΡΠ΅ ΠΊ Π½Π°ΠΆΠ°ΡΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠ΅, ΡΡΠΈ Π΄Π°Π½Π½ΡΠ΅ ΠΌΠΎΠ³ΡΡ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ ΠΎΡ ΡΠ΅ΠΊΡΡΠ°, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΠΎΠ³ΠΎ Π½Π° ΡΠ°ΠΌΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠ΅. Π ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡΡΡ ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΡΠ΅ΡΠ΅Π· CallbackQueryHandler.
ΠΠ»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π±Ρ Π±ΠΎΡ ΠΎΡΠΊΡΡΠ» ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡΠΈ ΠΎΡΠΏΡΠ°Π²ΠΊΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΡΠ΅ΡΠ΅Π· ΠΌΠ΅ΡΠΎΠ΄ sendMessage()
, ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΡΠΎΠ·Π΄Π°Π½Π½ΡΡ ΡΠ°Π½Π΅Π΅ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ Π² Π°ΡΠ³ΡΠΌΠ΅Π½Ρ reply_markup
.
ΠΠΈΠΆΠ΅ ΠΌΡ ΡΠ°Π·Π±Π΅ΡΡΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ².
Reply ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΠ°
ΠΠ°ΠΊ Ρ ΡΠΆΠ΅ ΠΏΠΈΡΠ°Π» Π²ΡΡΠ΅, ΡΡΠΎ ΠΎΡΠ½ΠΎΠ²Π½Π°Ρ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΠ° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π±ΠΎΡΠΎΠΌ.
ΠΡΠΈΠΌΠ΅Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Reply ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ ΠΈΠ· ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠΉ ΡΠΏΡΠ°Π²ΠΊΠΈ
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: ΠΡΠΎΡΡΠΎΠΉ Π±ΠΎΡ Ρ 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()
ΠΠ°ΠΏΡΡΡΠΈΡΠ΅ ΠΏΡΠΈΠ²Π΅Π΄ΡΠ½Π½ΡΠΉ Π²ΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠ΄Π°, ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΠ² ‘Π’ΠΠΠΠ ΠΠΠ¨ΠΠΠ ΠΠΠ’Π’ Π½Π° ΡΠ΅Π°Π»ΡΠ½ΡΠΉ ΡΠΎΠΊΠ΅Π½, ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ Π±ΠΎΡΠ° ΡΠ΅ΡΠ΅Π· BotFather (ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ Π±ΠΎΡΠ° Ρ ΡΠ°ΡΡΠΊΠ°Π·ΡΠ²Π°Π» Π²
ΠΏΠ΅ΡΠ²ΠΎΠΉ ΡΡΠ°ΡΡΠ΅ ).
ΠΠΎΡΠ»Π΅ Π·Π°ΠΏΡΡΠΊΠ° Π·Π°Π΄Π°ΠΉΡΠ΅ Π±ΠΎΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ /start
, Ρ.ΠΊ. ΠΈΠΌΠ΅Π½Π½ΠΎ Π΅Ρ ΠΌΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠ»ΠΈ Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ.
ΠΡΠ»ΠΈ Π½Π° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π²Π°ΠΌ ΡΠ»ΠΎΠΆΠ½ΠΎ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡ ΠΏΡΠΈΠ²Π΅Π΄ΡΠ½Π½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠ΄Π°, Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², ΡΠΈΠ»ΡΡΡΠΎΠ² ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ², ΡΠΎ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π²Π΅ΡΠ½ΡΡΡΡΡ ΠΊ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΉ
ΠΡ ΡΠΎΠ·Π΄Π°Π»ΠΈ 4 ΠΌΠ΅ΡΠΎΠ΄Π°:
- start β ΠΠ°ΠΏΡΡΠΊ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ
- chat_id β ΠΠ°ΠΏΡΠΎΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° ΡΠ°ΡΠ°
- my_name β ΠΠ°ΠΏΡΠΎΡ ΡΠ²ΠΎΠ΅Π³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ
- my_username β ΠΠ°ΠΏΡΠΎΡ ΡΠ²ΠΎΠ΅Π³ΠΎ Π»ΠΎΠ³ΠΈΠ½Π°
Π ΠΎΠ±ΡΠ΅ΠΊΡ MessageFilters Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ 3 ΡΠΈΠ»ΡΡΡΠ° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ, ΠΏΠΎ ΠΈΡ ΡΠ΅ΠΊΡΡΡ:
- chat_id β Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Ρ ΡΠ΅ΠΊΡΡΠΎΠΌ
"Π§Π°Ρ ID"
- name β Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Ρ ΡΠ΅ΠΊΡΡΠΎΠΌ
"ΠΠΎΡ ΠΈΠΌΡ"
- username β Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Ρ ΡΠ΅ΠΊΡΡΠΎΠΌ
"ΠΠΎΠΉ Π»ΠΎΠ³ΠΈΠ½"
Π ΡΠΎΠ·Π΄Π°Π»ΠΈ 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
)
ΠΡΠΏΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΠ° Π² ΡΠ°Ρ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ sendMessage()
, Π² Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ΅ reply_markup
.
bot$sendMessage(update$message$chat_id,
text = 'ΠΡΠ±Π΅ΡΠΈΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ',
reply_markup = RKM)
Inline ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΠ°
ΠΠ°ΠΊ Ρ ΡΠΆΠ΅ ΠΏΠΈΡΠ°Π» Π²ΡΡΠ΅, Inline ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΠ° ΠΏΡΠΈΠ²ΡΠ·Π°Π½Π° ΠΊ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΌΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ. Π‘ Π½Π΅ΠΉ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ»ΠΎΠΆΠ½Π΅Π΅ ΡΠ΅ΠΌ Ρ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΠΎΠΉ.
ΠΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π±ΠΎΡΡ ΠΌΠ΅ΡΠΎΠ΄, Π΄Π»Ρ Π²ΡΠ·ΠΎΠ²Π° Inline ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ.
ΠΠ»Ρ ΠΎΡΠ²Π΅ΡΠ° Π½Π° Π½Π°ΠΆΠ°ΡΠΈΠ΅ Inline ΠΊΠ½ΠΎΠΏΠΊΠΈ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄ Π±ΠΎΡΠ° answerCallbackQuery()
, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ²Π΅ΡΡΠΈ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ Π² ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ΅ telegram, ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π°ΠΆΠ°Π²ΡΠ΅ΠΌΡ 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 ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ. Π InlineKeyboardMarkup()
Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΡΠΏΠΈΡΠΎΠΊ, ΡΠΏΠΈΡΠΊΠΎΠ² Inline ΠΊΠ½ΠΎΠΏΠΎΠΊ, ΠΊΠ°ΠΆΠ΄Π°Ρ ΠΎΡΠ΄Π΅Π»ΡΠ½Π°Ρ ΠΊΠ½ΠΎΠΏΠΊΠ° ΡΠΎΠ·Π΄Π°ΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ InlineKeyboardButton()
.
Inline ΠΊΠ½ΠΎΠΏΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ Π»ΠΈΠ±ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ Π±ΠΎΡΡ ΠΊΠ°ΠΊΠΈΠ΅-ΡΠΎ Π΄Π°Π½Π½ΡΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° callback_data
, Π»ΠΈΠ±ΠΎ ΠΎΡΠΊΡΡΠ²Π°ΡΡ ΠΊΠ°ΠΊΡΡ-Π»ΠΈΠ±ΠΎ HTML ΡΡΡΠ°Π½ΠΈΡΡ, Π·Π°Π΄Π°Π½Π½ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° url
.
Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π±ΡΠ΄Π΅Ρ ΡΠΏΠΈΡΠΎΠΊ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠ°ΠΊ ΠΆΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΏΠΈΡΠΊΠΎΠΌ Inline ΠΊΠ½ΠΎΠΏΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΠΈΡΡ Π² ΠΎΠ΄ΠΈΠ½ ΡΡΠ΄.
ΠΠ°Π»Π΅Π΅ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² Π±ΠΎΡΠΎΠ² Ρ Inline ΠΊΠ½ΠΎΠΏΠΊΠ°ΠΌΠΈ.
ΠΡΠΈΠΌΠ΅Ρ ΠΏΡΠΎΡΡΠ΅ΠΉΡΠ΅Π³ΠΎ Π±ΠΎΡΠ° Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ InLine ΠΊΠ½ΠΎΠΏΠΎΠΊ
ΠΠ»Ρ Π½Π°ΡΠ°Π»Π° ΠΌΡ Π½Π°ΠΏΠΈΡΠ΅ΠΌ Π±ΠΎΡΠ° Π΄Π»Ρ ΡΠΊΡΠΏΡΠ΅ΡΡ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½Π° covid-19. ΠΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ /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()
ΠΠ°ΠΏΡΡΡΠΈΡΠ΅ ΠΏΡΠΈΠ²Π΅Π΄ΡΠ½Π½ΡΠΉ Π²ΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠ΄Π°, ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΠ² ‘Π’ΠΠΠΠ ΠΠΠ¨ΠΠΠ ΠΠΠ’Π’ Π½Π° ΡΠ΅Π°Π»ΡΠ½ΡΠΉ ΡΠΎΠΊΠ΅Π½, ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ Π±ΠΎΡΠ° ΡΠ΅ΡΠ΅Π· BotFather (ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ Π±ΠΎΡΠ° Ρ ΡΠ°ΡΡΠΊΠ°Π·ΡΠ²Π°Π» Π²
ΠΏΠ΅ΡΠ²ΠΎΠΉ ΡΡΠ°ΡΡΠ΅ ).
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ:
ΠΡ ΡΠΎΠ·Π΄Π°Π»ΠΈ Π΄Π²Π° ΠΌΠ΅ΡΠΎΠ΄Π°:
- test β ΠΠ»Ρ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ Π² ΡΠ°Ρ Inline ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ
- answer_cb β ΠΠ»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΎΡΠΏΡΠ°Π²Π»Π΅Π½Π½ΡΡ Ρ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ Π΄Π°Π½Π½ΡΡ .
ΠΠ°Π½Π½ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ ΠΎΡΠΏΡΠ°Π²Π»Π΅Π½Ρ Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΈ Π·Π°Π΄Π°ΡΡΡΡ Π² Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ΅ callback_data
, ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ. ΠΠΎΠ»ΡΡΠΈΡΡ ΠΎΡΠΏΡΠ°Π²Π»Π΅Π½Π½ΡΠ΅ Ρ ΠΊΠ½ΠΎΠΏΠΊΠΈ Π΄Π°Π½Π½ΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ update$callback_query$data
, Π²Π½ΡΡΡΠΈ ΠΌΠ΅ΡΠΎΠ΄Π° answer_cb.
Π§ΡΠΎ Π±Ρ Π±ΠΎΡ ΡΠ΅Π°Π³ΠΈΡΠΎΠ²Π°Π» Π½Π° Inline ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ, ΠΌΠ΅ΡΠΎΠ΄ answer_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()
ΠΠ°ΠΏΡΡΡΠΈΡΠ΅ ΠΏΡΠΈΠ²Π΅Π΄ΡΠ½Π½ΡΠΉ Π²ΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠ΄Π°, ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΠ² ‘Π’ΠΠΠΠ ΠΠΠ¨ΠΠΠ ΠΠΠ’Π’ Π½Π° ΡΠ΅Π°Π»ΡΠ½ΡΠΉ ΡΠΎΠΊΠ΅Π½, ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ Π±ΠΎΡΠ° ΡΠ΅ΡΠ΅Π· BotFather (ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ Π±ΠΎΡΠ° Ρ ΡΠ°ΡΡΠΊΠ°Π·ΡΠ²Π°Π» Π²
ΠΏΠ΅ΡΠ²ΠΎΠΉ ΡΡΠ°ΡΡΠ΅ ).
Π’Π΅ΠΏΠ΅ΡΡ ΠΌΡ Π½Π°ΠΏΠΈΡΠ°Π»ΠΈ 2 ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ
ΠΌΠ΅ΡΠΎΠ΄Π°, Ρ.Π΅. ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΌΠ΅ΡΠΎΠ΄Ρ, ΠΏΠΎΠ΄ Π½Π°ΠΆΠ°ΡΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΈ, ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ pattern
, ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΈΡ
ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ²:
query_handler_yes <- CallbackQueryHandler(answer_cb_yes, pattern = 'yes')
query_handler_no <- CallbackQueryHandler(answer_cb_no, pattern = 'no')
ΠΠ°ΠΊΠ°Π½ΡΠΈΠ²Π°Π΅ΡΡΡ ΠΊΠΎΠ΄ ΠΌΠ΅ΡΠΎΠ΄Π° answer_cb ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ bot$answerCallbackQuery(callback_query_id = update$callback_query$id)
, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΎΠΎΠ±ΡΠ°Π΅Ρ Π±ΠΎΡΡ, ΡΡΠΎ Π΄Π°Π½Π½ΡΠ΅ Ρ inline ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½Ρ.
ΠΡΠΈΠΌΠ΅Ρ Π±ΠΎΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠΎΠ±ΡΠ°Π΅Ρ ΡΠ΅ΠΊΡΡΡΡ ΠΏΠΎΠ³ΠΎΠ΄Ρ ΠΏΠΎ Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠΌΡ Π³ΠΎΡΠΎΠ΄Ρ
ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΠΏΡΠΎΠ±ΡΠ΅ΠΌ Π½Π°ΠΏΠΈΡΠ°ΡΡ Π±ΠΎΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅Ρ Π΄Π°Π½Π½ΡΠ΅ ΠΎ ΠΏΠΎΠ³ΠΎΠ΄Π΅.
ΠΠΎΠ³ΠΈΠΊΠ° Π΅Π³ΠΎ ΡΠ°Π±ΠΎΡΡ Π±ΡΠ΄Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠ°Ρ. ΠΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ /start
Π²Ρ Π²ΡΠ·ΡΠ²Π°Π΅ΡΠ΅ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ Π²ΡΠ΅Π³ΠΎ ΠΎΠ΄Π½Π° ΠΊΠ½ΠΎΠΏΠΊΠ° "ΠΠΎΠ³ΠΎΠ΄Π°". ΠΠ°ΠΆΠ°Π² Π½Π° ΡΡΡ ΠΊΠ½ΠΎΠΏΠΊΡ Π²Ρ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Ρ Inline ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΠΎΠΉ, Π΄Π»Ρ Π²ΡΠ±ΠΎΡΠ° Π³ΠΎΡΠΎΠ΄Π°, ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠ·Π½Π°ΡΡ ΡΠ΅ΠΊΡΡΡΡ ΠΏΠΎΠ³ΠΎΠ΄Ρ. ΠΡΠ±ΠΈΡΠ°Π΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π³ΠΎΡΠΎΠ΄ΠΎΠ², ΠΈ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΠ΅ ΡΠ΅ΠΊΡΡΡΡ ΠΏΠΎΠ³ΠΎΠ΄Ρ.
Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΊΠΎΠ΄Π° ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ²:
httr
β ΠΏΠ°ΠΊΠ΅Ρ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ HTTP Π·Π°ΠΏΡΠΎΡΠ°ΠΌΠΈ, Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΊΠΎΡΠΎΡΡΡ ΠΏΠΎΡΡΡΠΎΠ΅Π½Π° ΡΠ°Π±ΠΎΡΠ° Ρ Π»ΡΠ±ΡΠΌ API. Π Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π±Π΅ΡΠΏΠ»Π°ΡΠ½ΡΠΉ APIopenweathermap.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()
ΠΠ°ΠΏΡΡΡΠΈΡΠ΅ ΠΏΡΠΈΠ²Π΅Π΄ΡΠ½Π½ΡΠΉ Π²ΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠ΄Π°, ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΠ² ‘Π’ΠΠΠΠ ΠΠΠ¨ΠΠΠ ΠΠΠ’Π’ Π½Π° ΡΠ΅Π°Π»ΡΠ½ΡΠΉ ΡΠΎΠΊΠ΅Π½, ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ Π±ΠΎΡΠ° ΡΠ΅ΡΠ΅Π· BotFather (ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ Π±ΠΎΡΠ° Ρ ΡΠ°ΡΡΠΊΠ°Π·ΡΠ²Π°Π» Π²
ΠΏΠ΅ΡΠ²ΠΎΠΉ ΡΡΠ°ΡΡΠ΅ ).
Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π½Π°Ρ Π±ΠΎΡ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΠΊ:
Π‘Ρ
Π΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π±ΠΎΡΠ° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΡΡ Π²ΠΎΡ ΡΠ°ΠΊ:
ΠΡ ΡΠΎΠ·Π΄Π°Π»ΠΈ 3 ΠΌΠ΅ΡΠΎΠ΄Π°, Π΄ΠΎΡΡΡΠΏΠ½ΡΠ΅ Π²Π½ΡΡΡΠΈ Π½Π°ΡΠ΅Π³ΠΎ ΠΏΠΎΠ³ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π±ΠΎΡΠ°:
- start β ΠΠ°ΠΏΡΡΠΊ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ Π±ΠΎΡΠ°
- weather β ΠΠ°ΠΏΡΡΠΊ Inline ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ Π΄Π»Ρ Π²ΡΠ±ΠΎΡΠ° Π³ΠΎΡΠΎΠ΄Π°
- answer_cb β ΠΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΌΠ΅ΡΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡ Π³ΠΎΡΠΎΠ΄Ρ Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅Ρ Π² API ΠΏΠΎΠ³ΠΎΠ΄Ρ, ΠΈ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ Π΅Ρ Π² ΡΠ°Ρ.
ΠΠ΅ΡΠΎΠ΄ start Ρ Π½Π°Ρ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ /start
, ΡΡΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠΌ CommandHandler('start', start)
.
ΠΠ»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΠΌΠ΅ΡΠΎΠ΄Π° weather ΠΌΡ ΡΠΎΠ·Π΄Π°Π»ΠΈ ΠΎΠ΄Π½ΠΎΠΈΠΌΡΠ½Π½ΡΠΉ ΡΠΈΠ»ΡΡΡ:
# ΡΠΎΠ·Π΄Π°ΡΠΌ ΡΠΈΠ»ΡΡΡΡ
## ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Ρ ΡΠ΅ΠΊΡΡΠΎΠΌ ΠΠΎΠ³ΠΎΠ΄Π°
MessageFilters$weather <- BaseFilter(function(message) {
# ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΡΠ΅ΠΊΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ
message$text == "ΠΠΎΠ³ΠΎΠ΄Π°"
}
)
Π Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ ΡΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ: MessageHandler(weather, filters = MessageFilters$weather)
.
Π Π² ΠΊΠΎΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΠΎΠ², ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ Π½Π°Ρ ΠΌΠ΅ΡΠΎΠ΄ answer_cb ΡΠ΅Π°Π³ΠΈΡΡΠ΅Ρ Π½Π° Π½Π°ΠΆΠ°ΡΠΈΠ΅ Inline ΠΊΠ½ΠΎΠΏΠΎΠΊ, ΡΡΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠΌ: CallbackQueryHandler(answer_cb)
.
ΠΠ½ΡΡΡΠΈ ΠΌΠ΅ΡΠΎΠ΄Π° answer_cb, ΠΌΡ ΡΡΠΈΡΡΠ²Π°Π΅ΠΌ ΠΎΡΠΏΡΠ°Π²Π»Π΅Π½Π½ΡΠ΅ Ρ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΈ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΠΌ ΠΈΡ
Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ city
: city <- update$callback_query$data
. ΠΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΈΠ· API Π΄Π°Π½Π½ΡΠ΅ ΠΎ ΠΏΠΎΠ³ΠΎΠ΄Π΅, ΡΠΎΡΠΌΠΈΡΡΠ΅ΠΌ ΠΈ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅, ΠΈ Π² ΠΊΠΎΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄ answerCallbackQuery
Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π±Ρ ΡΠΎΠΎΠ±ΡΠΈΡΡ Π±ΠΎΡΡ, ΠΎ ΡΠΎΠΌ, ΡΡΠΎ ΠΌΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π»ΠΈ Π½Π°ΠΆΠ°ΡΠΈΠ΅ Inline ΠΊΠ½ΠΎΠΏΠΊΠΈ.
ΠΡΠΈΠΌΠ΅Ρ Π±ΠΎΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠ²ΠΎΠ΄ΠΈΡ ΡΠΏΠΈΡΠΎΠΊ ΡΠ°ΠΌΡΡ
ΡΠ²Π΅ΠΆΠΈΡ
ΡΡΠ°ΡΠ΅ΠΉ ΡΠΎ ΡΡΡΠ»ΠΊΠ°ΠΌΠΈ ΠΏΠΎ-ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡ Π₯Π°Π±Ρ ΠΈΠ· habr.com .
ΠΠ°Π½Π½ΠΎΠ³ΠΎ Π±ΠΎΡΠ° Ρ ΠΏΡΠΈΠ²ΠΎΠΆΡ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π±Ρ ΠΏΠΎΠΊΠ°Π·Π°ΡΡ Π²Π°ΠΌ, ΠΊΠ°ΠΊ Π²ΡΠ²Π΅ΡΡΠΈ Inline ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΊΠΎΡΠΎΡΡΠ΅ Π²Π΅Π΄ΡΡ Π½Π° Π²Π΅Π± ΡΡΡΠ°Π½ΠΈΡΡ.
ΠΠΎΠ³ΠΈΠΊΠ° Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π±ΠΎΡΠ° ΡΡ
ΠΎΠΆΠ° Ρ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΌ, ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ ΠΌΡ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ /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()
ΠΠ°ΠΏΡΡΡΠΈΡΠ΅ ΠΏΡΠΈΠ²Π΅Π΄ΡΠ½Π½ΡΠΉ Π²ΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠ΄Π°, ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΠ² ‘Π’ΠΠΠΠ ΠΠΠ¨ΠΠΠ ΠΠΠ’Π’ Π½Π° ΡΠ΅Π°Π»ΡΠ½ΡΠΉ ΡΠΎΠΊΠ΅Π½, ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ Π±ΠΎΡΠ° ΡΠ΅ΡΠ΅Π· BotFather (ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ Π±ΠΎΡΠ° Ρ ΡΠ°ΡΡΠΊΠ°Π·ΡΠ²Π°Π» Π²
ΠΏΠ΅ΡΠ²ΠΎΠΉ ΡΡΠ°ΡΡΠ΅ ).
Π ΠΈΡΠΎΠ³Π΅ ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΠΌ Π²ΠΎΡ ΡΠ°ΠΊΠΎΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ:
Π‘ΠΏΠΈΡΠΎΠΊ Π΄ΠΎΡΡΡΠΏΠ½ΡΡ
Π΄Π»Ρ Π²ΡΠ±ΠΎΡΠ° Π₯Π°Π±ΠΎΠ² ΠΌΡ Π²Π±ΠΈΠ»ΠΈ Ρ
Π°ΡΠ΄ΠΊΠΎΠ΄ΠΎΠΌ, Π² ΠΌΠ΅ΡΠΎΠ΄Π΅ 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)
ΠΠΎΠ³ΠΈΠΊΠ° ΠΎΡΠ΅Π½Ρ ΡΡ
ΠΎΠΆΠ° Ρ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΌ Π±ΠΎΡΠΎΠΌ, Π½ΠΎ Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ 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]
.
ΠΠ°Π»Π΅Π΅, ΡΠΎΠ·Π΄Π°ΡΠΌ ΡΠΈΠ»ΡΡΡ, ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΠΈ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ Π½Π°ΡΠ΅Π³ΠΎ Π±ΠΎΡΠ°.
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
Π’Π΅ΠΏΠ΅ΡΡ Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠ΅ Π²Π°ΠΌΠΈ Π±ΠΎΡΡ Π±ΡΠ΄ΡΡ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ΄ΠΎΠ±Π½Π΅ΠΉ Π² ΡΠ°Π±ΠΎΡΠ΅, Π·Π° ΡΡΡΡ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΠΌΠΈ Π±ΡΠ΄Π΅Ρ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡΡΡ Ρ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ, Π° Π½Π΅ Π²Π²ΠΎΠ΄ΠΎΠΌ ΠΊΠΎΠΌΠ°Π½Π΄. ΠΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ ΠΏΡΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠΈ Ρ Π±ΠΎΡΠΎΠΌ ΡΠ΅ΡΠ΅Π· ΡΠΌΠ°ΡΡΡΠΎΠ½ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΠ° ΠΎΡΡΡΠΈΠΌΠΎ ΡΠΏΡΠΎΡΡΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ.
Π ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΡΠ°ΡΡΠ΅ ΠΌΡ ΡΠ°Π·Π±Π΅ΡΡΠΌΡΡ ΠΊΠ°ΠΊ ΡΡΡΠΎΠΈΡΡ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠΉ Π΄ΠΈΠ°Π»ΠΎΠ³ Ρ Π±ΠΎΡΠΎΠΌ, ΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ .
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com