Loome telegrammi boti R keeles (osa 1): Loome boti ja saadame selle abil sõnumeid telegrammi

Telegrami publik kasvab iga päev geomeetrilise progressioniga, mille põhjuseks on mugav sõnumiteenus, kanalite ja vestluste olemasolu ning loomulikult ka võimalus luua roboteid.

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

Tegelikult saab roboti kaudu Telegrami kasutades teostada kõiki toiminguid: andmeid saata või küsida, serveri ülesandeid käivitada, teavet andmebaasi koguda, e-kirju saata ja nii edasi.

Planeerin kirjutada artiklisarja selle kohta, kuidas R keeles töötada telegram bot API, ja kirjutada roboteid enda vajaduste rahuldamiseks.

Loome telegrammi boti R keeles (osa 1): Loome boti ja saadame selle abil sõnumeid telegrammi

Selles esimeses artiklis uurime, kuidas luua Telegrami robot ja saata selle kaudu teateid Telegrami.

Tulemusena saame roboti, mis kontrollib Windowsi ülesande planeerija viimase täitmise staatust ja saadab teile teateid, kui mõni ülesanne lõpetatakse veaga.

Kuid selle artiklisarja eesmärk ei ole õpetada teid kirjutama robotit konkreetse, kitsase ülesande jaoks, vaid tutvustada teid paketi süntaksiga telegram.bot, ja koodinäidetega, mille abil saate kirjutada roboteid oma ülesannete lahendamiseks.

Sisukord

Kui teid huvitab andmeanalüüs, võivad teid huvitada minu telegram ja youtube kanalid, millel on suur osa sisu R keelele.

  1. Telegrami roboti loomine
  2. Paketi installimine Telegrami robotiga töötamiseks R-is
  3. Teadete saatmine R-ist Telegrami
  4. Ülesannete kontrollimise käivitamise ajakava seadistus
  5. Kokkuvõte

Telegrami roboti loomine

Alustamiseks peame looma roboti. Seda teeb spetsiaalne robot BotFather, minge aadressile lingil ning kirjutage robotile /start.

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

Sõnum BotFatherilt

Ma saan aidata sul luua ja hallata Telegrami roboteid. Kui sa oled Bot API-s uus, siis vaata käsiraamatut (https://core.telegram.org/bots).

Sa saad mind juhtida, saates järgmised käsud:

/newbot - loo uus robot
/mybots - redigeeri oma roboteid [beta]

Muuda roboteid
/setname - muuda roboti nime
/setdescription - muuda roboti kirjeldust
/setabouttext - muuda roboti teavet
/setuserpic - muuda roboti profiilipilti
/setcommands - muuda käskude nimekirja
/deletebot - kustuta robot

Roboti sätted
/token - genereeri autoriseerimise token
/revoke - tühista roboti juurdepääsu token
/setinline - lülita sisseehitatud režiim sisse (https://core.telegram.org/bots/inline)
/setinlinegeo - lülita sisse geolookuse taotlused (https://core.telegram.org/bots/inline#location-based-results)
/setinlinefeedback - muuda sisseehitatud tagasiside (https://core.telegram.org/bots/inline#collecting-feedback) seadeid
/setjoingroups - kas su robot saab rühmadesse lisatud?
/setprivacy - lülita privaatsusrežiim (https://core.telegram.org/bots#privacy-mode) sisse rühmades

Mängud
/mygames - redigeeri oma mänge (https://core.telegram.org/bots/games) [beta]
/newgame - loo uus mäng (https://core.telegram.org/bots/games)
/listgames - saa nimekiri oma mängudest
/editgame - muuda mängu
/deletegame - kustuta olemasolev mäng

Uue roboti loomiseks saada käsk /newbot.

BotFather palub sul sisestada roboti nimi ja sisselogimise.

BotFather, [25.07.20 09:39]
Selge, uus robot. Kuidas me seda nimetame? Palun vali oma roboti nimi.

Alexey Seleznev, [25.07.20 09:40]
Minu Test Robot

BotFather, [25.07.20 09:40]
Hea. Nüüd valime oma roboti jaoks kasutajanime. See peab lõppema `bot`. Näiteks TetrisBot või tetris_bot.

Alexey Seleznev, [25.07.20 09:40]
@my_test_bot

Nime saad sisestada meelevaldselt, kuid sisselogimine peab lõppema bot.

Kui sa tegid kõik õigesti, siis saad järgmise sõnumi:

Valmis! Palju õnne sinu uue roboti üle. Leiad selle aadressilt t.me/my_test_bot. Sa saad lisada kirjelduse, teabeosa ja profiilipildi oma robotile, vaata /help käskude nimekirja. Muide, kui oled oma laheda roboti loomise lõpetanud, siis saada meie Bot Support‘ile sõnum, kui soovid selle jaoks paremat kasutajanime. Veendu, et robot on täiesti funktsionaalne enne, kui seda teed.

Kasutage seda tokenit, et pääseda HTTP API-le:
123456789:abcdefghijklmnopqrstuvwxyz

Bot API kirjelduse leiad siit: https://core.telegram.org/bots/api

Edasi on sul vaja saadud API tokenit, minu näites on see 123456789:abcdefghijklmnopqrstuvwxyz.

Sellel etapil on roboti loomise ettevalmistavad tööd lõpetatud.

Paketi installimine Telegrami robotiga töötamiseks R-is

Eeldan, et sul on juba R keel paigaldatud ja RStudio arenduskeskkond. Kui ei, siis saad vaadata seda videotundi kuidas need paigaldada.

Telegrami Bot API-ga töötamiseks kasutame R paketti telegram.bot.

Pakettide paigaldamine R-is toimub funktsiooni install.packages(), seega kasutage vajaliku paketi paigaldamiseks käsku install.packages("telegram.bot").

Erinevate pakettide paigaldamise kohta saad rohkem teada sellest videost.

Pärast paketi paigaldamist tuleb see importida:

library(telegram.bot)

Teadete saatmine R-ist Telegrami

Teie loodud robotit saab leida Telegramis vastavalt loodud sisselogimisele, minu näites on see @my_test_bot.

Saate botile mis tahes sõnum, näiteks "Tere bot". Praegu on see vajalik, et saada teie vestluse botiga ID.

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

library(telegram.bot)

# loome boti eksemplari
bot <- Bot(token = "123456789:abcdefghijklmnopqrstuvwxyz")

# Pärime boti teavet
print(bot$getMe())

# Saame boti uuendused, st saadetud sõnumite loendi
updates <- bot$getUpdates()

# Pärime vestluse ID
# Märkus: enne uuenduste pärimist peate saatma botile sõnumi
chat_id <- updates[[1L]]$from_chat_id()

Alguses loome meie boti eksemplari funktsiooni Bot(), mille argumendiks on eelnevalt saadud token.

Tokeni hoidmine koodis ei ole kõige parem tava, seega võite selle salvestada keskkonnamuutujasse ja lugeda seda sealt. Vaikimisi on pakendis telegram.bot rakendatud keskkonnamuutujate tugi järgmiste nimede jaoks: R_TELEGRAM_BOT_TEIE_BOTI_NIMI. Asendage TEIE_BOTI_NIMI nimetusega, mille määrasite loomisel, minu puhul saab see muutujaks R_TELEGRAM_BOT_My Test Bot.

Keskkonnamuutujat saab luua mitmel viisil, räägin kõige universaalsemast ja ristplatvormilisest. Looge oma kodukaustas (saate selle teada käsuga path.expand("~")) tekstifail nimega .Renviron. Samuti saab seda teha käsu abil file.edit(path.expand(file.path("~", ".Renviron"))).

Ja lisage sinna järgmine rida.

R_TELEGRAM_BOT_TEIE_BOTI_NIMI=123456789:abcdefghijklmnopqrstuvwxyz

Seejärel saate kasutada keskkonnamuutujas salvestatud tokenit funktsiooni kaudu bot_token(), st nii:

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

Meetod getUpdates()võimaldab meil saada boti uuendusi, st sõnumeid, mis on talle saadetud. Meetod from_chat_id(), võimaldab saada vestluse ID-d, kust sõnum saadeti. See ID on vajalik boti kaudu sõnumite saatmiseks.

Lisaks vestluse ID-le saadud objektist getUpdates() saate ka teistsugust kasulikku teavet. Näiteks teavet sõnumi saatja 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"

Nii et selle etapi käigus on meil juba kõik, mis on vajalik boti kaudu sõnumi saatmiseks Telegramis. Kasutame meetodit sendMessage(), kuhu tuleb edastada vestluse identifikaator, sõnumi tekst ja sõnumi formaadi tüüp. Formaadi tüüp võib olla Markdown või HTML ning selle määrab argument parse_mode.

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

Markdown formaadi põhialused:

  • Raske kiri eristatakse tärniga *:
    • näide: *raske kiri*
    • tulemus: raske kiri
  • Kaldkirja määramiseks kasutatakse alakriipse:
    • näide: _kaldkiri_
    • tulemus: kaldkiri
  • Monospace kiri, millega tavaliselt eristatakse programmeerimiskoodi, määratakse apostroofide abil — `:
    • näide: `monospace kiri`
    • tulemus: monospace kiri

HTML formaadi põhialused:
HTML-is mähitakse osa tekstist, mida tuleb eristada, siltidesse, näiteks tekst.

  • — avav silt
  • — sulgev silt

HTML formaadi sildid

  • <b> — raske kiri
    • näide: <b>rasvitud kiri</b>
    • tulemus rasvitud kiri
  • — kaldkiri
    • näide: kaldkiri
    • tulemus: kaldkiri
  • — monospace kiri
    • näide: monospace kiri
    • tulemus: monospace kiri

Lisaks tekstile saate saata ka muud sisu kasutades spetsiaalseid meetodeid:

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

St, näiteks meetodi abil sendPhoto() võite saata salvestatud pildina graafiku, mille olete koostanud paketi ggplot2.

Windowsi ülesannete ajakava kontrollimine ja teate saatmine ülesannetest, mille täitmine katkestati

Windowsi ülesannete ajakava kasutamiseks peate installima paketi taskscheduleR, ja andmete mugavuse huvides installime paketi dplyr.

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

Seejärel funktsiooni taskscheduler_ls() abil küsime ülesannete teavet meie ajakavast. Funktsiooni abil filter() paketist dplyr eemaldame ülesannete loost need, mis on edukalt täidetud ja mille viimane tulemus on 0, ja need, mis pole veel kunagi käivitatud ja mille olek on 267011, välja lülitatud ülesanded ning ülesanded, mis töötavad hetkel.

# запрашиваем список задач
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 on meil nüüd ülesannete loetelu, mille täitmine lõppes veaga, see loetelu tuleb saata Telegrami.

Kui vaatame iga käsku lähemalt, siis:

  • filter() — filtreerib ülesannete loendi eelmainitud tingimuste alusel
  • select() — jätab tabelisse ainult ühe välja, mille nimi on ülesanne
  • unique() — eemaldab korduvad nimed
  • unlist() — muundab valitud tabeli veeru vektoriks
  • paste0() — ühendab ülesannete nimed ühte lausesse ja kasutab eraldajana reavahetust, st. n.

Kõik, mis me peame tegema, on saata see tulemus Telegrami.

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

Nii, hetkel näeb boti kood välja nii:

Ülesannete kontrollimise boti 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"
  )

}

Kasutades ülaltoodud näidet, asendage koodis oma boti token ja chat ID.

Saate lisada ülesannete filtreerimise tingimusi, näiteks kontrollida ainult neid ülesandeid, mis on loodud teie poolt, välja arvata süsteemsed.

Samuti saate erinevad seaded viia eraldi konfigureerimisfaili ning salvestada sinna chat ID ja token. Konfiguraatsiooni lugemiseks saate kasutada näiteks paketti configr.

Ini konfiguratsiooni näidis

[telegram_bot]
;telegram boti ja chati seaded, kuhu teated saadetakse
chat_id=12345678
bot_token=123456789:abcdefghijklmnopqrstuvwxyz

Näide muutujate lugemisest konfiguratsioonist R-is

library(configr)

# konfi lugemine
config <- read.config('C:/tee_konfigu/konfig.cfg', rcmd.parse = TRUE)

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

Seame ülesannete kontrollimise ajakava

Ajakava skriptide käivitamiseks seadistamise protsess on kõige üksikasjalikumalt kirjeldatud selles artiklis. Siin kirjeldan vaid samme, mida selleks on vaja teha. Kui mõni samm on teile arusaamatu, siis pöörduge artikli poole, millele viitasin.

Oletame, et oleme salvestanud meie boti koodi faili check_bot.R. Regulaarse käivitamise planeerimiseks tehke järgmised sammud:

  1. Lisage keskkonnamuutujasse Path R installimise kausta tee, Windowsis näeb tee välja umbes selline: C:Program FilesRR-4.0.2bin.
  2. Looge käideldav bat-fail, kus on ainult üks rida R CMD BATCH C:rscriptscheck_botcheck_bot.R. Asendage C:rscriptscheck_botcheck_bot.R oma R-faili täis tee juurde.
  3. Seejärel seadistage Windowsi ülesannete planeerijaga käivitamise ajakava, näiteks iga poole tunni tagant.

Kokkuvõte

Selles artiklis uurisime, kuidas luua boti ja saata selle abil erinevaid teateid telegrammi.

Kirjeldasin Windowsi ülesannete planeerimise jälgimise ülesannet, kuid saate kasutada selle artikli materjale mis tahes teatiste saatmiseks, alates ilmaprognoosist kuni aktsiate indeksiteni, kuna R võimaldab teil ühenduda tohutu hulga andmeallikatega.

Järgmises artiklis vaatame, kuidas lisada botile käske ja klaviatuuri, et ta saaks mitte ainult teateid saata, vaid ka täita keerukamaid toiminguid.

Allikas: habr.com

Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster