Telegramos roboto rašymas R (1 dalis): roboto sukūrimas ir naudojimas žinutėms telegramoje siųsti

„Telegram“ auditorija kasdien auga eksponentiškai, tai palengvina pasiuntinio patogumas, kanalų, pokalbių buvimas ir, žinoma, galimybė kurti robotus.

Botai gali būti naudojami visiškai skirtingiems tikslams – nuo ​​komunikacijos su klientais automatizavimo iki savo užduočių tvarkymo.

Iš esmės telegrama galite atlikti bet kokias operacijas per robotą: siųsti arba prašyti duomenų, vykdyti užduotis serveryje, rinkti informaciją į duomenų bazę, siųsti el. laiškus ir pan.

Planuoju parašyti straipsnių ciklą apie tai, kaip dirbti telegramos roboto API, ir rašykite robotus pagal jūsų poreikius.

Telegramos roboto rašymas R (1 dalis): roboto sukūrimas ir naudojimas žinutėms telegramoje siųsti

Šiame pirmame straipsnyje išsiaiškinsime, kaip sukurti telegramos robotą ir naudoti jį pranešimams telegramoje siųsti.

Dėl to turėsime robotą, kuris patikrins paskutinio visų užduočių vykdymo būseną Windows užduočių planuoklyje ir atsiųs pranešimus, jei kuri nors iš jų nepavyktų.

Tačiau šios straipsnių serijos tikslas nėra išmokyti jus parašyti robotą konkrečiai, siaurai užduočiai, o supažindinti jus su paketo sintaksė. telegram.bot, ir kodų pavyzdžiai, su kuriais galite rašyti robotus, kad išspręstumėte savo problemas.

Turinys

Jei jus domina duomenų analizė, galbūt jus domina mano telegrama и "YouTube" kanalai. Didžioji dalis turinio skirta R kalbai.

  1. Telegramos roboto kūrimas
  2. Paketo, skirto darbui su telegramų robotu, įdiegimas R
  3. Siunčia žinutes iš R į Telegram
  4. Užduočių nuskaitymo tvarkaraščio nustatymas
  5. išvada

Telegramos roboto kūrimas

Pirmiausia turime sukurti robotą. Tai atliekama naudojant specialų robotą „BotFather“, eiti į nuoroda ir parašyk į botą /start.

Po to gausite pranešimą su komandų sąrašu:

BotFather žinutė

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

Norėdami sukurti naują robotą, išsiųskite komandą /newbot.

„BotFather“ paprašys įvesti roboto pavadinimą ir prisijungimo vardą.

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

Galite įvesti bet kokį vardą, tačiau prisijungimas turi baigtis bot.

Jei viską padarėte teisingai, gausite šį pranešimą:

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

Toliau jums reikės gauto API prieigos rakto, mano pavyzdyje tai yra 123456789:abcdefghijklmnopqrstuvwxyz.

Šiame etape parengiamieji roboto kūrimo darbai yra baigti.

Paketo, skirto darbui su telegramų robotu, įdiegimas R

Manau, kad jau turite įdiegtą R kalbą ir RStudio kūrimo aplinką. Jei taip nėra, galite pažvelgti į tai vaizdo pamoka kaip juos įdiegti.

Norėdami dirbti su Telegram Bot API, naudosime R paketą telegrama.bot.

Paketų diegimas R atliekamas naudojant funkciją install.packages(), todėl norėdami įdiegti mums reikalingą paketą, naudokite komandą install.packages("telegram.bot").

Daugiau apie įvairių paketų diegimą galite sužinoti iš šį vaizdo įrašą.

Įdiegę paketą, turite jį prijungti:

library(telegram.bot)

Siunčia žinutes iš R į Telegram

Jūsų sukurtą botą galima rasti „Telegram“ naudojant prisijungimo vardą, nurodytą kūrimo metu, mano atveju tai yra @my_test_bot.

Siųskite robotui bet kokį pranešimą, pvz., „Ei, botas“. Šiuo metu mums to reikia, kad gautume jūsų pokalbio su robotu ID.

Dabar R rašome šį kodą.

library(telegram.bot)

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

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

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

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

Iš pradžių sukuriame savo roboto egzempliorių su funkcija Bot(), anksčiau gautas tokenas turi būti perduotas į jį kaip argumentas.

Laikyti žetoną kode nėra geriausia praktika, todėl galite jį saugoti aplinkos kintamajame ir nuskaityti iš jo. Pagal numatytuosius nustatymus pakuotėje telegram.bot Buvo įdiegtas šių pavadinimų aplinkos kintamųjų palaikymas: R_TELEGRAM_BOT_ИМЯ_ВАШЕГО_БОТА. Vietoj ИМЯ_ВАШЕГО_БОТА pakeiskite pavadinimą, kurį nurodėte kurdami, mano atveju tai bus kintamasis R_TELEGRAM_BOT_My Test Bot.

Yra keletas būdų, kaip sukurti aplinkos kintamąjį; aš jums papasakosiu apie universaliausią ir kelių platformų. Sukurkite savo namų kataloge (jį galite rasti naudodami komandą path.expand("~")) tekstinį failą su pavadinimu .Renviron. Taip pat galite tai padaryti naudodami komandą file.edit(path.expand(file.path("~", ".Renviron"))).

Ir pridėkite prie jo šią eilutę.

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

Tada galite naudoti aplinkos kintamajame išsaugotą prieigos raktą naudodami funkciją bot_token(), t.y. kaip šitas:

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

metodas getUpdates()leidžia gauti botų atnaujinimus, t.y. žinutės, kurios jam buvo išsiųstos. Metodas from_chat_id(), leidžia gauti pokalbio, iš kurio buvo išsiųstas pranešimas, ID. Mums reikia šio ID, kad galėtume siųsti pranešimus iš roboto.

Be pokalbio ID iš objekto, gauto metodu getUpdates() taip pat gausite kitos naudingos informacijos. Pavyzdžiui, informacija apie pranešimą atsiuntusį vartotoją.

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"

Taigi, šiame etape jau turime viską, ko reikia norint išsiųsti pranešimą iš roboto į „Telegram“. Pasinaudokime metodu sendMessage(), į kurį turite perduoti pokalbio ID, pranešimo tekstą ir pranešimo teksto žymėjimo tipą. Žymėjimo tipas gali būti Markdown arba HTML ir nustatomas pagal argumentą parse_mode.

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

Pažymėjimo formatavimo pagrindai:

  • Pusjuodis šriftas paryškintas *:
    • pavyzdys: *жирный шритф*
    • rezultatas: paryškintas šriftas
  • Kursyvas žymimas apatiniais brūkšniais:
    • pavyzdys: _курсив_
    • rezultatas: kursyvas
  • Vieno tarpo šriftas, kuris paprastai naudojamas programos kodui paryškinti, nurodomas naudojant apostrofus - `:
    • pavyzdys: „vieno tarpo šriftas“.
    • rezultatas: моноширинный шрифт

HTML žymėjimo formatavimo pagrindai:
HTML teksto dalį, kurią reikia paryškinti, apvyniojate žymomis, pvz <тег>текст</тег>.

  • <tag> – atidarymo žyma
  • - uždarymo žyma

HTML žymėjimo žymos

  • <b> - paryškintas šriftas
    • pavyzdys: <b>жирный шрифт</b>
    • rezultatas paryškintas šriftas
  • <i> - kursyvas
    • pavyzdys: <i>курсив</i>
    • rezultatas: kursyvas
  • — моноширинный шрифт
    • pavyzdys: моноширинный шрифт
    • rezultatas: моноширинный шрифт

Be teksto, galite siųsti kitą turinį naudodami specialius metodus:

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

Tie. pavyzdžiui, naudojant metodą sendPhoto() galite siųsti grafiką, išsaugotą kaip paveikslėlį, kurį sukūrėte naudodami paketą ggplot2.

„Windows“ užduočių planuoklio tikrinimas ir pranešimų siuntimas apie užduotis, kurios pasibaigė neįprastai

Norėdami dirbti su „Windows Task Scheduler“, turite įdiegti paketą taskscheduleR, o darbo su duomenimis patogumui įdiekite paketą dplyr.

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

Toliau naudokite funkciją taskscheduler_ls() mes prašome informacijos apie užduotis iš savo planuotojo. Naudojant funkciją filter() iš pakuotės dplyr Iš užduočių sąrašo pašaliname tas, kurios buvo sėkmingai įvykdytos ir kurių paskutinio rezultato būsena yra 0, ir tas, kurios niekada nebuvo paleistos ir kurių būsena yra 267011, išjungtas užduotis ir šiuo metu vykdomas užduotis.

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

Objekte task Dabar turime užduočių, kurių nepavyko, sąrašą, turime nusiųsti šį sąrašą į „Telegram“.

Jei pažvelgsime į kiekvieną komandą išsamiau, tada:

  • filter() — filtruoja užduočių sąrašą pagal anksčiau aprašytas sąlygas
  • select() — palieka tik vieną lentelės lauką su užduočių pavadinimais
  • unique() - pašalina pasikartojančius vardus
  • unlist() — konvertuoja pasirinktą lentelės stulpelį į vektorių
  • paste0() — sujungia užduočių pavadinimus į vieną eilutę, o kaip skyriklį deda eilutės tiekimą, t.y. n.

Mums belieka šį rezultatą išsiųsti telegrama.

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

Taigi, šiuo metu boto kodas atrodo taip:

Užduočių peržiūros boto kodas

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

}

Naudodami aukščiau pateiktą pavyzdį, kodą pakeiskite savo roboto prieigos raktu ir pokalbio ID.

Galite įtraukti užduočių filtravimo sąlygas, pavyzdžiui, patikrinti tik tas užduotis, kurias sukūrėte, išskyrus sistemines.

Taip pat galite įdėti įvairius nustatymus į atskirą konfigūracijos failą ir išsaugoti pokalbio ID bei prieigos raktą. Pavyzdžiui, konfigūraciją galite perskaityti naudodami paketą configr.

Pavyzdys ini config

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

Kintamųjų skaitymo iš R konfigūracijos pavyzdys

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

Užduočių nuskaitymo tvarkaraščio nustatymas

Scenarijų paleidimo pagal tvarkaraštį nustatymo procesas išsamiau aprašytas čia straipsnis. Čia aprašysiu tik veiksmus, kurių reikia atlikti. Jei kuris nors iš veiksmų jums neaiškus, žr. straipsnį, į kurį pateikiau nuorodą.

Tarkime, kad savo roboto kodą išsaugojome faile check_bot.R. Norėdami suplanuoti, kad šis failas būtų paleistas reguliariai, atlikite šiuos veiksmus:

  1. Path sistemos kintamajame įrašykite kelią į aplanką, kuriame įdiegtas R; sistemoje Windows kelias bus maždaug toks: C:Program FilesRR-4.0.2bin.
  2. Sukurkite vykdomąjį bat failą tik su viena eilute R CMD BATCH C:rscriptscheck_botcheck_bot.R. Pakeiskite C:rscriptscheck_botcheck_bot.R į visą kelią į jūsų R failą.
  3. Tada naudokite „Windows Task Scheduler“, kad nustatytumėte paleidimo tvarkaraštį, pavyzdžiui, kas pusvalandį.

išvada

Šiame straipsnyje mes išsiaiškinome, kaip sukurti robotą ir naudoti jį įvairiems pranešimams telegramoje siųsti.

Aprašiau „Windows“ užduočių planuoklio stebėjimo užduotį, tačiau šiame straipsnyje pateikta medžiaga galite siųsti bet kokius pranešimus, pradedant orų prognozėmis ir baigiant akcijų kotiravimu biržoje, nes R leidžia prisijungti prie daugybės duomenų šaltinių.

Kitame straipsnyje išsiaiškinsime, kaip pridėti komandas ir klaviatūrą prie roboto, kad jis galėtų ne tik siųsti pranešimus, bet ir atlikti sudėtingesnius veiksmus.

Šaltinis: www.habr.com

Добавить комментарий