Telegrammiroti kirjutamine R-is (1. osa): Boti loomine ja selle kasutamine telegrammis sõnumite saatmiseks

Telegrami vaatajaskond kasvab iga päevaga plahvatuslikult, seda soodustavad sõnumitooja mugavus, kanalite, vestluste olemasolu ja loomulikult robotite loomise võimalus.

Bote saab kasutada täiesti erinevatel eesmärkidel, alates klientidega suhtlemise automatiseerimisest kuni oma ülesannete haldamiseni.

Põhimõtteliselt saate telegrammi abil teha roboti kaudu mis tahes toiminguid: saata või taotleda andmeid, käivitada ülesandeid serveris, koguda teavet andmebaasi, saata e-kirju ja nii edasi.

Kavatsen kirjutada artiklite seeria, kuidas sellega töötada telegrammi roboti APIja kirjutage oma vajadustele vastavad robotid.

Telegrammiroti kirjutamine R-is (1. osa): Boti loomine ja selle kasutamine telegrammis sõnumite saatmiseks

Selles esimeses artiklis selgitame välja, kuidas luua telegrammirobot ja kasutada seda teadete saatmiseks telegrammis.

Selle tulemusel on meil robot, mis kontrollib kõigi Windowsi ülesannete ajakavas olevate ülesannete viimase täitmise olekut ja saadab teile teatisi, kui mõni neist ebaõnnestub.

Kuid selle artiklite seeria eesmärk ei ole õpetada teile konkreetse kitsa ülesande jaoks robotit kirjutama, vaid üldiselt tutvustada teile paketi süntaksit. telegram.botja koodinäited, mille abil saate oma probleemide lahendamiseks roboteid kirjutada.

Sisu

Kui olete huvitatud andmete analüüsist, võite olla huvitatud minu telegramm и youtube kanalid. Suurem osa sisust on pühendatud R-keelele.

  1. Telegrammi roboti loomine
  2. Paki installimine telegrammibotiga töötamiseks R-s
  3. R-i sõnumite saatmine Telegramile
  4. Ülesande kontrollimise ajakava seadistamine
  5. Järeldus

Telegrammi roboti loomine

Esiteks peame looma roboti. Seda tehakse spetsiaalse roboti abil BotFather, minema link ja kirjutage robotile /start.

Pärast seda saate sõnumi käskude loendiga:

Sõnum BotFatherilt

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

Uue roboti loomiseks saatke käsk /newbot.

BotFather palub teil sisestada roboti nimi ja sisselogimine.

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

Võite sisestada mis tahes nime, kuid sisselogimine peab lõppema tähega bot.

Kui tegite kõik õigesti, saate järgmise teate:

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

Järgmiseks vajate saadud API-märki, minu näites see on 123456789:abcdefghijklmnopqrstuvwxyz.

Selles etapis on roboti loomise ettevalmistustööd lõpetatud.

Paki installimine telegrammibotiga töötamiseks R-s

Eeldan, et sul on R-keel ja RStudio arenduskeskkond juba installitud. Kui see nii ei ole, võite seda vaadata videoõpetus kuidas neid paigaldada.

Telegram Bot API-ga töötamiseks kasutame R-paketti telegramm.bot.

R-i pakettide installimine toimub funktsiooni abil install.packages(), nii et vajaliku paketi installimiseks kasutage käsku install.packages("telegram.bot").

Lisateavet erinevate pakettide installimise kohta saate aadressilt see video.

Pärast paketi installimist peate selle ühendama:

library(telegram.bot)

R-i sõnumite saatmine Telegramile

Teie loodud roboti leiate Telegrammist loomisel määratud sisselogimise abil, minu puhul on see nii @my_test_bot.

Saatke robotile mis tahes sõnum, näiteks "Hei bot". Praegu vajame seda teie robotiga vestluse ID hankimiseks.

Nüüd kirjutame järgmise koodi R-i.

library(telegram.bot)

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

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

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

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

Esialgu loome funktsiooniga oma roboti eksemplari Bot(), tuleb sellele argumendina edastada varem saadud märk.

Tokeni salvestamist koodis ei peeta parimaks tavaks, nii et saate selle salvestada keskkonnamuutujasse ja sealt lugeda. Vaikimisi pakendis telegram.bot Rakendatud on järgmiste nimede keskkonnamuutujate tugi: R_TELEGRAM_BOT_ИМЯ_ВАШЕГО_БОТА... Selle asemel ИМЯ_ВАШЕГО_БОТА asendage loomisel määratud nimi, minu puhul on see muutuja R_TELEGRAM_BOT_My Test Bot.

Keskkonnamuutuja loomiseks on mitu võimalust; ma räägin teile kõige universaalsemast ja platvormiülesest. Looge oma kodukataloogis (leiate selle käsuga path.expand("~")) nimega tekstifail .Reviron. Seda saate teha ka käsuga file.edit(path.expand(file.path("~", ".Renviron"))).

Ja lisage sellele järgmine rida.

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

Järgmisena saate funktsiooni abil kasutada keskkonnamuutujasse salvestatud märki bot_token(), st. nagu nii:

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

Meetod getUpdates()võimaldab meil saada bot-värskendusi, st. talle saadetud sõnumid. meetod from_chat_id(), võimaldab teil saada selle vestluse ID, kust sõnum saadeti. Vajame seda ID-d robotilt sõnumite saatmiseks.

Lisaks meetodiga saadud objekti vestluse ID-le getUpdates() saate ka muud kasulikku teavet. Näiteks teave sõnumi saatnud kasutaja kohta.

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"

Niisiis, praeguses etapis on meil juba kõik, mida vajame robotilt Telegrami sõnumi saatmiseks. Kasutame meetodit sendMessage(), kuhu peate edastama vestluse ID, sõnumi teksti ja sõnumiteksti märgistuse tüübi. Märgistustüüp võib olla Markdown või HTML ja see määratakse argumendiga parse_mode.

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

Markdowni vormindamise põhitõed:

  • Paks font on esile tõstetud tähega *:
    • näide: *жирный шритф*
    • tulemus: paksus kirjas
  • Kaldkirja tähistatakse allkriipsudega:
    • näide: _курсив_
    • tulemus: kursiiv
  • Monoruumi font, mida tavaliselt kasutatakse programmikoodi esiletõstmiseks, määratakse apostroofidega - `:
    • näide: "monospace font".
    • tulemus: моноширинный шрифт

HTML-märgistuse vormindamise põhitõed:
HTML-is mähite esiletõstmist vajava tekstiosa, näiteks <тег>текст</тег>.

  • <silt> – avasilt
  • - sulgev silt

HTML-i märgistussildid

  • <b> - paksus kirjas
    • näide: <b>жирный шрифт</b>
    • tulemus paksus kirjas
  • <i> - kaldkiri
    • näide: <i>курсив</i>
    • tulemus: kursiiv
  • — моноширинный шрифт
    • näide: моноширинный шрифт
    • tulemus: моноширинный шрифт

Lisaks tekstile saate erimeetodite abil saata muud sisu:

# Отправить изображение
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"
)

Need. näiteks kasutades meetodit sendPhoto() saate saata paketi abil loodud pildina salvestatud graafiku ggplot2.

Windows Task Scheduleri kontrollimine ja teadete saatmine ebanormaalselt lõppenud ülesannete kohta

Windows Task Scheduleriga töötamiseks peate installima paketi taskscheduleR, ja andmetega töötamise mugavuse huvides installige pakett dplyr.

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

Järgmisena kasutage funktsiooni taskscheduler_ls() küsime oma planeerijalt teavet ülesannete kohta. Funktsiooni kasutamine filter() pakendist dplyr Eemaldame ülesannete loendist need, mis on edukalt lõpetatud ja mille viimase tulemuse olek on 0, ja need, mida pole kunagi käivitatud ja mille olek on 267011, keelatud ülesanded ja praegu töötavad ülesanded.

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

Objektis task Meil on nüüd nimekiri ebaõnnestunud ülesannetest, peame selle loendi Telegramile saatma.

Kui vaatame iga käsku üksikasjalikumalt, siis:

  • filter() — filtreerib ülesannete loendi vastavalt ülalkirjeldatud tingimustele
  • select() — jätab tabelisse ainult ühe välja ülesannete nimega
  • unique() - eemaldab dubleerivad nimed
  • unlist() — teisendab valitud tabeli veeru vektoriks
  • paste0() — seob ülesannete nimed ühele reale, eraldajaks paneb reavahetuse, s.t. n.

Meil jääb üle vaid see tulemus telegrammiga saata.

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

Seega näeb hetkel roboti kood välja selline:

Ülesande ülevaatuse roboti kood

# Подключение пакета
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"
  )

}

Ülaltoodud näite kasutamisel asendage koodiga oma roboti tunnus ja vestluse ID.

Saate lisada tingimusi ülesannete filtreerimiseks, näiteks kontrollida ainult teie loodud ülesandeid, välja arvatud süsteemi omad.

Samuti saate panna erinevad seaded eraldi konfiguratsioonifaili ning salvestada sellesse vestluse ID ja loa. Konfiguratsiooni saab lugeda näiteks paketti kasutades configr.

Näide ini config

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

Näide muutujate lugemisest R-i konfiguratsioonist

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

Ülesande kontrollimise ajakava seadistamine

Selles kirjeldatakse üksikasjalikumalt skriptide graafiku alusel käivitamise seadistamise protsessi siit. Siin kirjeldan ainult samme, mida selleks tuleb järgida. Kui mõni samm pole teile selge, vaadake artiklit, millele ma lingi andsin.

Oletame, et salvestasime oma roboti koodi faili check_bot.R. Selle faili regulaarse käitamise ajastamiseks toimige järgmiselt.

  1. Kirjutage süsteemimuutuja Path tee kausta, kuhu R on installitud; Windowsis on tee umbes selline: C:Program FilesRR-4.0.2bin.
  2. Looge käivitatav bat-fail ainult ühe reaga R CMD BATCH C:rscriptscheck_botcheck_bot.R. Asenda C:rscriptscheck_botcheck_bot.R teie R-faili täielikule teele.
  3. Järgmiseks kasutage Windows Task Scheduleri, et seadistada käivitamise ajakava näiteks iga poole tunni järel.

Järeldus

Selles artiklis selgitasime välja, kuidas luua robotit ja kasutada seda erinevate teadete saatmiseks telegrammis.

Kirjeldasin Windows Task Scheduleri jälgimise ülesannet, kuid selle artikli materjali abil saate saata mis tahes teateid alates ilmaprognoosist kuni börsi noteeringuteni, sest R võimaldab teil luua ühenduse suure hulga andmeallikatega.

Järgmises artiklis selgitame välja, kuidas lisada robotile käske ja klaviatuuri, et see saaks mitte ainult teateid saata, vaid ka keerukamaid toiminguid teha.

Allikas: www.habr.com

Lisa kommentaar