Навиштани боти телеграмма дар R (қисми 1): Эҷоди бот ва истифодаи он барои фиристодани паёмҳо дар телеграм

Аудиторияи Telegram ҳар рӯз ба таври экспоненсиалӣ меафзояд, ба ин қулай будани мессенҷер, мавҷудияти каналҳо, чатҳо ва албатта қобилияти эҷоди ботҳо мусоидат мекунад.

Ботҳоро барои мақсадҳои комилан дигар истифода бурдан мумкин аст, аз автоматикунонии иртибот бо муштариён то идоракунии вазифаҳои шахсии шумо.

Аслан, шумо метавонед телеграммаро барои анҷом додани ҳама гуна амалиёт тавассути бот истифода баред: маълумот ирсол кунед ё дархост кунед, вазифаҳоро дар сервер иҷро кунед, маълумотро дар пойгоҳи додаҳо ҷамъ кунед, паёмҳои электронӣ фиристед ва ғайра.

Ман нақша дорам, ки дар бораи чӣ гуна кор кардан бо як силсила мақолаҳо нависам API боти telegram, ва ботҳоро мувофиқи ниёзҳои худ нависед.

Навиштани боти телеграмма дар R (қисми 1): Эҷоди бот ва истифодаи он барои фиристодани паёмҳо дар телеграм

Дар ин мақолаи аввал мо мефаҳмем, ки чӣ тавр сохтани боти телеграмма ва истифодаи он барои фиристодани огоҳиҳо дар телеграм.

Дар натиҷа, мо бот дорем, ки ҳолати иҷрои охирини ҳама вазифаҳоро дар Барномасозони Вазифаҳои Windows тафтиш мекунад ва дар сурати ноком шудани яке аз онҳо ба шумо огоҳинома мефиристад.

Аммо ҳадафи ин силсила мақолаҳо ба шумо таълим додани бот барои як вазифаи мушаххас ва танг нест, балки ба шумо умуман бо синтаксиси баста шинос шудан аст. telegram.bot, ва мисолҳои рамзӣ, ки бо онҳо шумо метавонед ботҳоро барои ҳалли мушкилоти худ нависед.

Мундариҷа

Агар шумо ба таҳлили маълумот таваҷҷӯҳ дошта бошед, шумо шояд ба ман таваҷҷӯҳ кунед телеграмма и YouTube каналхо. Аксари мундариҷа ба забони R бахшида шудаанд.

  1. Эҷоди боти телеграмма
  2. Насб кардани баста барои кор бо боти телеграмма дар Р
  3. Ирсоли паёмҳо аз R ба Telegram
  4. Муқаррар кардани ҷадвал барои иҷро кардани сканҳои вазифаҳо
  5. хулоса

Эҷоди боти телеграмма

Аввалан, мо бояд бот эҷод кунем. Ин бо истифода аз боти махсус анҷом дода мешавад БотПадар, равед пайванд ва ба бот нависед /start.

Пас аз он шумо паёмеро бо рӯйхати фармонҳо хоҳед гирифт:

Паём аз BotFather

I can help you create and manage Telegram bots. If you're new to the Bot API, please see the manual (https://core.telegram.org/bots).

You can control me by sending these commands:

/newbot - create a new bot
/mybots - edit your bots [beta]

Edit Bots
/setname - change a bot's name
/setdescription - change bot description
/setabouttext - change bot about info
/setuserpic - change bot profile photo
/setcommands - change the list of commands
/deletebot - delete a bot

Bot Settings
/token - generate authorization token
/revoke - revoke bot access token
/setinline - toggle inline mode (https://core.telegram.org/bots/inline)
/setinlinegeo - toggle inline location requests (https://core.telegram.org/bots/inline#location-based-results)
/setinlinefeedback - change inline feedback (https://core.telegram.org/bots/inline#collecting-feedback) settings
/setjoingroups - can your bot be added to groups?
/setprivacy - toggle privacy mode (https://core.telegram.org/bots#privacy-mode) in groups

Games
/mygames - edit your games (https://core.telegram.org/bots/games) [beta]
/newgame - create a new game (https://core.telegram.org/bots/games)
/listgames - get a list of your games
/editgame - edit a game
/deletegame - delete an existing game

Барои сохтани боти нав, фармонро фиристед /newbot.

BotFather аз шумо хоҳиш мекунад, ки номи бот ва вурудро ворид кунед.

BotFather, [25.07.20 09:39]
Alright, a new bot. How are we going to call it? Please choose a name for your bot.

Alexey Seleznev, [25.07.20 09:40]
My Test Bot

BotFather, [25.07.20 09:40]
Good. Now let's choose a username for your bot. It must end in `bot`. Like this, for example: TetrisBot or tetris_bot.

Alexey Seleznev, [25.07.20 09:40]
@my_test_bot

Шумо метавонед ягон ном ворид кунед, аммо воридшавӣ бояд бо анҷом шавад bot.

Агар шумо ҳама чизро дуруст иҷро кунед, шумо паёми зеринро хоҳед гирифт:

Done! Congratulations on your new bot. You will find it at t.me/my_test_bot. You can now add a description, about section and profile picture for your bot, see /help for a list of commands. By the way, when you've finished creating your cool bot, ping our Bot Support if you want a better username for it. Just make sure the bot is fully operational before you do this.

Use this token to access the HTTP API:
123456789:abcdefghijklmnopqrstuvwxyz

For a description of the Bot API, see this page: https://core.telegram.org/bots/api

Минбаъд ба шумо аломати қабулшудаи API лозим мешавад, дар мисоли ман ин аст 123456789:abcdefghijklmnopqrstuvwxyz.

Дар ин марҳила, корҳои омодагӣ барои сохтани бот ба анҷом мерасад.

Насб кардани баста барои кор бо боти телеграмма дар Р

Ман гумон мекунам, ки шумо аллакай забони R ва муҳити таҳияи RStudio насб кардаед. Агар ин тавр набошад, пас шумо метавонед ба ин назар кунед видео омӯзиш дар бораи чӣ гуна насб кардани онҳо.

Барои кор бо API Telegram Bot мо бастаи R-ро истифода мебарем telegram.bot.

Насб кардани бастаҳо дар R бо истифода аз функсия анҷом дода мешавад install.packages(), Пас барои насб кардани бастаи ба мо лозима, фармонро истифода баред install.packages("telegram.bot").

Шумо метавонед бештар дар бораи насби бастаҳои гуногун аз ин видео.

Пас аз насб кардани баста, шумо бояд онро пайваст кунед:

library(telegram.bot)

Ирсоли паёмҳо аз R ба Telegram

Ботро, ки шумо сохтаед, дар Telegram бо истифода аз логини ҳангоми офариниш нишондодашуда пайдо кардан мумкин аст, дар ҳолати ман ин аст @my_test_bot.

Ба бот ҳама гуна паём фиристед, ба монанди "Эй бот". Дар айни замон, ба мо ин лозим аст, то id-и сӯҳбати шуморо бо бот ба даст орем.

Акнун мо рамзи зеринро дар R менависем.

library(telegram.bot)

# создаём экземпляр бота
bot <- Bot(token = "123456789:abcdefghijklmnopqrstuvwxyz")

# Запрашиваем информацию о боте
print(bot$getMe())

# Получаем обновления бота, т.е. список отправленных ему сообщений
updates <- bot$getUpdates()

# Запрашиваем идентификатор чата
# Примечание: перед запросом обновлений вы должны отправить боту сообщение
chat_id <- updates[[1L]]$from_chat_id()

Дар аввал, мо як мисоли боти худро бо функсия эҷод мекунем Bot(), аломати қаблан гирифташуда бояд ба он ҳамчун далел интиқол дода шавад.

Нигоҳ доштани аломат дар код таҷрибаи беҳтарин ҳисобида намешавад, аз ин рӯ шумо метавонед онро дар тағирёбандаи муҳити зист нигоҳ доред ва аз он хонед. Бо нобаёнӣ дар баста telegram.bot Дастгирии тағирёбандаҳои муҳити зисти номҳои зерин амалӣ карда шудааст: R_TELEGRAM_BOT_ИМЯ_ВАШЕГО_БОТА... Ба ҷои ИМЯ_ВАШЕГО_БОТА номеро, ки ҳангоми эҷод нишон додаед, иваз кунед, дар ҳолати ман он тағирёбанда хоҳад буд R_TELEGRAM_BOT_My Test Bot.

Якчанд роҳҳо барои эҷоди тағирёбандаи муҳити зист вуҷуд доранд; Ман ба шумо дар бораи универсалтарин ва платформаи байнисоҳавӣ нақл мекунам. Дар феҳристи хонагии худ эҷод кунед (шумо метавонед онро бо истифода аз фармон пайдо кунед path.expand("~")) файли матнӣ бо ном .Ренвирон. Шумо инчунин метавонед ин корро бо истифода аз фармон file.edit(path.expand(file.path("~", ".Renviron"))).

Ва ба он сатри зеринро илова кунед.

R_TELEGRAM_BOT_ИМЯ_ВАШЕГО_БОТА=123456789:abcdefghijklmnopqrstuvwxyz

Баъдан, шумо метавонед аломати дар тағирёбандаи муҳити зист захирашударо бо истифода аз функсия истифода баред bot_token(), яъне. монанди ин:

bot <- Bot(token = bot_token("My Test Bot"))

метод getUpdates()ба мо имкон медиҳад, ки навсозиҳои ботҳоро гирем, яъне. паёмҳое, ки ба ӯ фиристода шудаанд. Усул from_chat_id(), ба шумо имкон медиҳад, ки ID-и сӯҳбатеро, ки аз он паём фиристода шудааст, гиред. Барои фиристодани паёмҳо аз бот ба мо ин ID лозим аст.

Илова ба id чат аз объекти бо усули ба даст getUpdates() шумо инчунин маълумоти дигари муфид мегиред. Масалан, маълумот дар бораи корбаре, ки паём фиристодааст.

updates[[1L]]$message$from

$id
[1] 000000000

$is_bot
[1] FALSE

$first_name
[1] "Alexey"

$last_name
[1] "Seleznev"

$username
[1] "AlexeySeleznev"

$language_code
[1] "ru"

Ҳамин тавр, дар ин марҳила мо аллакай ҳама чизро дорем, ки барои фиристодани паём аз бот ба Telegram лозим аст. Биёед усулро истифода барем sendMessage(), ки ба он шумо бояд ID-и чат, матни паём ва навъи аломатгузории матни паёмро гузаронед. Навъи аломатгузорӣ метавонад Markdown ё HTML бошад ва аз ҷониби аргумент муқаррар карда мешавад parse_mode.

# Отправка сообщения
bot$sendMessage(chat_id,
                text = "Привет, *жирный текст* _курсив_",
                parse_mode = "Markdown"
)

Асосҳои форматкунии Markdown:

  • Шрифти ғафс бо * таъкид карда мешавад:
    • мисол: *жирный шритф*
    • натиҷа: шрифти ғафс
  • Курсив бо аломатҳои зер нишон дода мешавад:
    • мисол: _курсив_
    • натиҷа: курсив
  • Шрифти монофосила, ки одатан барои равшан кардани рамзи барнома истифода мешавад, бо истифода аз апострофҳо - `:
    • мисол: "шрифти монофазоӣ"
    • натиҷа: моноширинный шрифт

Асосҳои форматкунии аломатгузории HTML:
Дар HTML, шумо қисми матнро печонед, ки бояд дар тегҳо таъкид карда шавад, масалан <тег>текст</тег>.

  • <teg> - кушодани тег
  • - теги пӯшида

Тегҳои аломатгузории HTML

  • <b> - шрифти ғафс
    • мисол: <b>жирный шрифт</b>
    • таъсири шрифти ғафс
  • <i> - курсив
    • мисол: <i>курсив</i>
    • натиҷа: курсив
  • — моноширинный шрифт
    • мисол: моноширинный шрифт
    • натиҷа: моноширинный шрифт

Илова ба матн, шумо метавонед мундариҷаи дигарро бо усулҳои махсус фиристед:

# Отправить изображение
bot$sendPhoto(chat_id,
  photo = "https://telegram.org/img/t_logo.png"
)

# Отправка голосового сообщения
bot$sendAudio(chat_id,
  audio = "http://www.largesound.com/ashborytour/sound/brobob.mp3"
)

# Отправить документ
bot$sendDocument(chat_id,
  document = "https://github.com/ebeneditos/telegram.bot/raw/gh-pages/docs/telegram.bot.pdf"
)

# Отправить стикер
bot$sendSticker(chat_id,
  sticker = "https://www.gstatic.com/webp/gallery/1.webp"
)

# Отправить видео
bot$sendVideo(chat_id,
  video = "http://techslides.com/demos/sample-videos/small.mp4"
)

# Отправить gif анимацию
bot$sendAnimation(chat_id,
  animation = "https://media.giphy.com/media/sIIhZliB2McAo/giphy.gif"
)

# Отправить локацию
bot$sendLocation(chat_id,
  latitude = 51.521727,
  longitude = -0.117255
)

# Имитация действия в чате
bot$sendChatAction(chat_id,
  action = "typing"
)

Онхое. масалан, бо истифода аз усул sendPhoto() шумо метавонед графикеро, ки ҳамчун тасвире, ки шумо бо истифода аз баста эҷод кардаед, фиристед ggplot2.

Санҷиши ҷадвали Вазифаҳои Windows ва фиристодани огоҳиҳо дар бораи вазифаҳое, ки ба таври ғайримуқаррарӣ қатъ шудаанд

Барои кор бо Windows Task Scheduler шумо бояд бастаро насб кунед taskscheduleR, ва барои роҳати кор бо додаҳо, бастаро насб кунед dplyr.

# Установка пакетов
install.packages(c('taskscheduleR', 'dplyr'))
# Подключение пакетов
library(taskscheduleR)
library(dplyr)

Баъдан, бо истифода аз функсия taskscheduler_ls() мо аз нақшакашамон маълумотро дар бораи вазифаҳо талаб мекунем. Истифодаи функсия filter() аз баста dplyr Мо аз рӯйхати вазифаҳое, ки бомуваффақият иҷро шудаанд ва мақоми охирини 0 доранд ва онҳое, ки ҳеҷ гоҳ оғоз нашудаанд ва мақоми 267011 доранд, вазифаҳои ғайрифаъол ва вазифаҳоеро, ки ҳоло иҷро мешаванд, хориҷ мекунем.

# запрашиваем список задач
task <- task <- taskscheduler_ls() %>%
        filter(! `Last Result`  %in% c("0", "267011") & 
               `Scheduled Task State` == "Enabled" & 
               Status != "Running") %>%
        select(TaskName) %>%
        unique() %>%
        unlist() %>%
        paste0(., collapse = "n")

Дар объект task Ҳоло мо рӯйхати вазифаҳоеро дорем, ки ноком шуданд, мо бояд ин рӯйхатро ба Telegram ирсол кунем.

Агар мо ба ҳар як фармон муфассалтар назар кунем, пас:

  • filter() — рӯйхати вазифаҳоро мувофиқи шартҳои дар боло тавсифшуда филтр мекунад
  • select() — дар чадвал танхо як майдонро бо номи вазифахо мегузорад
  • unique() - номҳои такрориро нест мекунад
  • unlist() — сутуни ҷадвали интихобшударо ба вектор табдил медиҳад
  • paste0() — номхои вазифахоро ба як сатр мепайвандад ва як сатрро ба сифати сепаратор мегузорад, яъне. n.

Барои мо танҳо ин аст, ки ин натиҷаро тавассути телеграмма ирсол кунем.

bot$sendMessage(chat_id,
                text = task,
                parse_mode = "Markdown"
)

Ҳамин тавр, дар айни замон рамзи бот чунин аст:

Рамзи боти баррасии вазифа

# Подключение пакета
library(telegram.bot)
library(taskscheduleR)
library(dplyr)

# инициализируем бота
bot <- Bot(token = "123456789:abcdefghijklmnopqrstuvwxyz")

# идентификатор чата
chat_id <- 123456789

# запрашиваем список задач
task <- taskscheduler_ls() %>%
        filter(! `Last Result`  %in% c("0", "267011")  &
               `Scheduled Task State` == "Enabled" & 
               Status != "Running") %>%
        select(TaskName) %>%
        unique() %>%
        unlist() %>%
        paste0(., collapse = "n")

# если есть проблемные задачи отправляем сообщение
if ( task != "" ) {

  bot$sendMessage(chat_id,
                  text = task,
                  parse_mode = "Markdown"
  )

}

Ҳангоми истифодаи мисоли дар боло зикршуда, рамзи боти худ ва ID чати худро ба код иваз кунед.

Шумо метавонед шароитҳоро барои филтр кардани вазифаҳо илова кунед, масалан, тафтиши танҳо он вазифаҳое, ки шумо сохтаед, ба истиснои вазифаҳои системавӣ.

Шумо инчунин метавонед танзимоти гуногунро дар як файли конфигуратсияи алоҳида ҷойгир кунед ва дар он id ва аломати чат нигоҳ доред. Шумо метавонед конфигуратсияро, масалан, бо истифода аз баста хонед configr.

Намунаи конфигуратсияи ini

[telegram_bot]
;настройки телеграм бота и чата, в который будут приходить уведомления
chat_id=12345678
bot_token=123456789:abcdefghijklmnopqrstuvwxyz"

Намунаи хондани тағирёбандаҳо аз конфигуратсия дар R

library(configr)

# чтение конфина
config <- read.config('C:/путь_к_конфигу/config.cfg', rcmd.parse = TRUE)

bot_token <- config$telegram_bot$bot_token
chat_id     <- config$telegram_bot$chat_id

Муқаррар кардани ҷадвал барои иҷро кардани сканҳои вазифаҳо

Раванди ба кор андохтани скриптҳо аз рӯи ҷадвал дар ин бора муфассалтар тасвир шудааст мақола. Дар ин ҷо ман танҳо қадамҳоеро тавсиф мекунам, ки барои ин бояд риоя шаванд. Агар яке аз қадамҳо барои шумо равшан набошанд, ба мақолае муроҷиат кунед, ки ман ба он истинод додам.

Фарз мекунем, ки мо рамзи боти худро дар файл захира кардем check_bot.R. Барои ба нақша гирифтани ин файл барои мунтазам кор кардан, ин қадамҳоро иҷро кунед:

  1. Роҳро ба папкае нависед, ки дар он R дар тағирёбандаи системаи Path насб шудааст; дар Windows, роҳ чунин хоҳад буд: C:Program FilesRR-4.0.2bin.
  2. Бо як сатр файли bat иҷрошаванда эҷод кунед R CMD BATCH C:rscriptscheck_botcheck_bot.R. Иваз кардан C:rscriptscheck_botcheck_bot.R ба роҳи пурраи файли R шумо.
  3. Минбаъд, Windows Task Scheduler -ро истифода баред, то ҷадвали оғозёбиро муқаррар кунед, масалан, ҳар ним соат.

хулоса

Дар ин мақола мо фаҳмидем, ки чӣ гуна бот эҷод кардан ва онро барои фиристодани огоҳиҳои гуногун дар телеграм истифода бурдан мумкин аст.

Ман вазифаи мониторинги Windows Task Scheduler-ро тавсиф кардам, аммо шумо метавонед маводи дар ин мақоларо барои фиристодани ҳама гуна огоҳиномаҳо, аз пешгӯии обу ҳаво то нархҳои саҳҳомӣ дар биржа истифода баред, зеро R ба шумо имкон медиҳад, ки ба шумораи зиёди манбаъҳои маълумот пайваст шавед.

Дар мақолаи навбатӣ мо мефаҳмем, ки чӣ тавр ба бот фармонҳо ва клавиатураро илова кардан лозим аст, то он на танҳо огоҳинома фиристад, балки амалҳои мураккабтарро иҷро кунад.

Манбаъ: will.com

Илова Эзоҳ