دا د لړۍ دریمه مقاله ده "په R کې د ټیلیګرام بوټ لیکل". په تیرو خپرونو کې، موږ زده کړل چې څنګه د ټیلیګرام بوټ جوړ کړو، د هغې له لارې پیغامونه واستوو، بوټ ته کمانډونه او د پیغام فلټرونه اضافه کړو. له همدې امله ، مخکې لدې چې تاسو د دې مقالې لوستل پیل کړئ ، زه په کلکه وړاندیز کوم چې تاسو یې ولولئ
پدې مقاله کې ، موږ به د کیبورډ اضافه کولو سره زموږ د بوټ کارولو وړتیا ته وده ورکړو ، کوم چې به د بوټ انٹرفیس په زړه پوري او کارول اسانه کړي.
د لړۍ ټولې مقالې "په R کې د ټیلیګرام بوټ لیکل"
موږ یو بوټ جوړوو او په ټیلیګرام کې د پیغامونو لیږلو لپاره یې کاروو بوټ ته د کمانډ ملاتړ او پیغام فلټرونه اضافه کړئ په بوټ کې د کیبورډ ملاتړ اضافه کولو څرنګوالی
منځپانګې
که تاسو د معلوماتو تحلیل سره علاقه لرئ ، تاسو ممکن زما سره علاقه ولرئ
د ټیلیګرام بوټ کوم ډول کیبورډونه ملاتړ کوي؟ کیبورډ ته ځواب ورکړئ انلاین کیبورډ
3.1.د انلاین بټونو لپاره د ملاتړ سره د ساده بوټ مثال
3.2.د بوټ یوه بیلګه چې د ټاکل شوي ښار لپاره اوسني هوا راپور ورکوي
3.3.د بوټ یوه بیلګه چې د habr.com څخه ټاکل شوي هب ته لینکونو سره د وروستي مقالو لیست ښیې پایلې
د ټیلیګرام بوټ کوم ډول کیبورډونه ملاتړ کوي؟
د دې لیکلو په وخت کې 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
ځکه دا دقیقا هغه څه دي چې موږ د کیبورډ لانچ کولو لپاره تعریف کړل.
که په اوس وخت کې ستاسو لپاره د میتودونو ، فلټرونو او هینډلرونو رامینځته کولو سره د ورکړل شوي کوډ مثال تجزیه کول ستونزمن وي ، نو تاسو باید پخواني ته بیرته راشئ.
موږ 4 میتودونه جوړ کړل:
- پیل - کیبورډ لانچ کړئ
- chat_id - د چیٹ ID غوښتنه وکړئ
- زما_نوم - د خپل نوم غوښتنه وکړئ
- 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
)
کیبورډ د میتود په کارولو سره چیٹ ته لیږل کیږي 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()
پورته د کوډ مثال پرمخ وړئ ، د ریښتیني نښه سره د 'ستاسو بوټ ټوکن' ځای په ځای کولو وروسته چې تاسو د دې له لارې د بوټ رامینځته کولو پرمهال ترلاسه کوئ. بوټ فیتر (ما د بوټ جوړولو په اړه خبرې وکړې
لومړۍ مقاله ).
پایلې:
موږ دوه میتودونه جوړ کړل:
- ازموینه - چیټ انلاین کیبورډ ته لیږلو لپاره
- ځواب_cb - د کیبورډ څخه لیږل شوي ډیټا پروسس کولو لپاره.
هغه معلومات چې د هرې تڼۍ څخه لیږل کیږي په دلیل کې مشخص شوي callback_data
، کله چې تڼۍ رامینځته کړئ. تاسو کولی شئ د ساختمان په کارولو سره د تڼۍ څخه لیږل شوي معلومات ترلاسه کړئ update$callback_query$data
، د میتود دننه ځواب_cb.
د بوټ لپاره د انلاین کیبورډ ته عکس العمل ښودلو لپاره ، میتود ځواب_cb د ځانګړي سمبالونکي لخوا پروسس شوی: 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')
د میتود کوډ پای ته رسیږي ځواب_cb ډله 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()
پورته د کوډ مثال پرمخ وړئ ، د ریښتیني نښه سره د 'ستاسو بوټ ټوکن' ځای په ځای کولو وروسته چې تاسو د دې له لارې د بوټ رامینځته کولو پرمهال ترلاسه کوئ. بوټ فیتر (ما د بوټ جوړولو په اړه خبرې وکړې
لومړۍ مقاله ).
د پایلې په توګه، زموږ بوټ به داسې کار وکړي:
په سکیماتیکه توګه، دا بوټ د دې په څیر ښودل کیدی شي:
موږ زموږ د هوا بوټ دننه 3 میتودونه رامینځته کړي دي:
- پیل - اصلي بوټ کیبورډ لانچ کړئ
- د هوا - د ښار غوره کولو لپاره انلاین کیبورډ لانچ کړئ
- ځواب_cb - اصلي میتود چې د ورکړل شوي ښار لپاره د API څخه هوا غوښتنه کوي او چیټ ته یې لیږي.
میتود پیل موږ یې د کمانډ سره پیل کوو /start
، کوم چې د سمبالونکي لخوا پلي کیږي CommandHandler('start', start)
.
د میتود چلولو لپاره د هوا موږ د ورته نوم فلټر جوړ کړ:
# создаём фильтры
## сообщения с текстом Погода
MessageFilters$weather <- BaseFilter(function(message) {
# проверяем текст сообщения
message$text == "Погода"
}
)
او موږ دا طریقه د لاندې پیغام سمبالونکي سره بولو: MessageHandler(weather, filters = MessageFilters$weather)
.
او په پای کې، زموږ اصلي میتود ځواب_cb د انلاین تڼیو فشارولو ته غبرګون ښیې، کوم چې د ځانګړي هینډلر لخوا پلي کیږي: CallbackQueryHandler(answer_cb)
.
د یوې طریقې دننه ځواب_cbموږ د کیبورډ څخه لیږل شوي ډاټا لوستلو او یو متغیر ته یې لیکو city
: city <- update$callback_query$data
. بیا موږ د API څخه د هوا ډیټا غوښتنه کوو ، پیغام تولید او لیږو ، او په پای کې میتود وکاروو answerCallbackQuery
د دې لپاره چې بوټ ته خبر ورکړئ چې موږ د انلاین تڼۍ کلیک پروسس کړی.
د بوټ یوه بیلګه چې د وروستي مقالو لیست ښیې چې د ځانګړي شوي مرکز لینکونو سره www.habr.com .
زه دا بوټ وړاندې کوم چې تاسو ته وښایئ چې څنګه د انلاین بټونو ښودلو لپاره کوم چې ویب پاڼو ته ځي.
د دې بوټ منطق د تیر سره ورته دی؛ په پیل کې موږ اصلي کیبورډ د کمانډ سره پیل کوو /start
. بیا ، بوټ موږ ته د غوره کولو لپاره د 6 مرکزونو لیست راکوي ، موږ هغه مرکز غوره کوو چې موږ یې علاقه لرو ، او د ټاکل شوي مرکز څخه 5 خورا وروستي خپرونې ترلاسه کوو.
لکه څنګه چې تاسو پوهیږئ، پدې حالت کې موږ اړتیا لرو د مقالو لیست ترلاسه کړو، او د دې لپاره به موږ یو ځانګړی کڅوړه وکاروو habR
، کوم چې تاسو ته اجازه درکوي د هابرا څخه د مقالو غوښتنه وکړئ او په R کې د دوی په اړه ځینې احصایې.
کڅوړه نصب کړئ habR
یوازې د ګیتوب څخه امکان لري ، د کوم لپاره چې تاسو به اضافي کڅوړې ته اړتیا ولرئ 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()
پورته د کوډ مثال پرمخ وړئ ، د ریښتیني نښه سره د 'ستاسو بوټ ټوکن' ځای په ځای کولو وروسته چې تاسو د دې له لارې د بوټ رامینځته کولو پرمهال ترلاسه کوئ. بوټ فیتر (ما د بوټ جوړولو په اړه خبرې وکړې
لومړۍ مقاله ).
د پایلې په توګه، موږ به دا پایله ترلاسه کړو:
موږ په میتود کې د انتخاب لپاره د موجود مرکزونو لیست هارډ کوډ کړی 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