Shkrimi i një boti telegrami në R (pjesa 1): Krijimi i një boti dhe përdorimi i tij për të dërguar mesazhe në telegram

Audienca e Telegramit po rritet në mënyrë eksponenciale çdo ditë, kjo lehtësohet nga komoditeti i mesazherit, prania e kanaleve, bisedave dhe natyrisht aftësia për të krijuar bote.

Bots mund të përdoren për qëllime krejtësisht të ndryshme, nga automatizimi i komunikimit me klientët tuaj deri te menaxhimi i detyrave tuaja.

Në thelb, ju mund të përdorni telegramin për të kryer çdo operacion përmes një boti: dërgoni ose kërkoni të dhëna, ekzekutoni detyra në server, mblidhni informacion në një bazë të dhënash, dërgoni email, etj.

Kam në plan të shkruaj një seri artikujsh se si të punoj me të telegram bot API, dhe shkruani bots për t'iu përshtatur nevojave tuaja.

Shkrimi i një boti telegrami në R (pjesa 1): Krijimi i një boti dhe përdorimi i tij për të dërguar mesazhe në telegram

Në këtë artikull të parë do të kuptojmë se si të krijojmë një bot telegram dhe ta përdorim atë për të dërguar njoftime në telegram.

Si rezultat, ne do të kemi një bot që do të kontrollojë statusin e ekzekutimit të fundit të të gjitha detyrave në Programin e detyrave të Windows dhe do t'ju dërgojë njoftime nëse ndonjë prej tyre dështon.

Por qëllimi i kësaj serie artikujsh nuk është t'ju mësojë se si të shkruani një bot për një detyrë specifike dhe të ngushtë, por t'ju prezantojë në përgjithësi me sintaksën e paketës. telegram.bot, dhe shembuj kodesh me të cilët mund të shkruani bot për të zgjidhur problemet tuaja.

Përmbajtje

Nëse jeni të interesuar për analizën e të dhënave, mund të jeni të interesuar për mua telegram и youtube kanalet. Pjesa më e madhe e përmbajtjes i kushtohet gjuhës R.

  1. Krijimi i një boti telegrami
  2. Instalimi i një pakete për të punuar me një bot telegram në R
  3. Dërgimi i mesazheve nga R në Telegram
  4. Vendosja e një plani për ekzekutimin e skanimeve të detyrave
  5. Përfundim

Krijimi i një boti telegrami

Së pari, ne duhet të krijojmë një bot. Kjo bëhet duke përdorur një bot të veçantë BotBabai, shkoni te lidhje dhe shkruajini botit /start.

Pas së cilës do të merrni një mesazh me një listë komandash:

Mesazh nga 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

Për të krijuar një bot të ri, dërgoni komandën /newbot.

BotFather do t'ju kërkojë të shkruani emrin dhe hyrjen e robotit.

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

Mund të vendosni çdo emër, por identifikimi duhet të përfundojë me bot.

Nëse keni bërë gjithçka siç duhet, do të merrni mesazhin e mëposhtëm:

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

Tjetra do t'ju duhet tokeni i marrë API, në shembullin tim është 123456789:abcdefghijklmnopqrstuvwxyz.

Në këtë hap, puna përgatitore për krijimin e botit përfundon.

Instalimi i një pakete për të punuar me një bot telegram në R

Unë supozoj se ju tashmë keni të instaluar gjuhën R dhe mjedisin e zhvillimit RStudio. Nëse nuk është kështu, atëherë mund ta shikoni këtë video tutorial se si t'i instaloni ato.

Për të punuar me Telegram Bot API ne do të përdorim paketën R telegram.bot.

Instalimi i paketave në R bëhet duke përdorur funksionin install.packages(), kështu që për të instaluar paketën që na nevojitet, përdorni komandën install.packages("telegram.bot").

Mund të mësoni më shumë rreth instalimit të paketave të ndryshme nga kjo video.

Pas instalimit të paketës, duhet ta lidhni atë:

library(telegram.bot)

Dërgimi i mesazheve nga R në Telegram

Boti që keni krijuar mund të gjendet në Telegram duke përdorur hyrjen e specifikuar gjatë krijimit, në rastin tim është @my_test_bot.

Dërgojini robotit çdo mesazh, si p.sh. "Hej bot". Për momentin, kjo na duhet për të marrë ID-në e bisedës tuaj me robotin.

Tani shkruajmë kodin e mëposhtëm në R.

library(telegram.bot)

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

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

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

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

Fillimisht, ne krijojmë një shembull të botit tonë me funksionin Bot(), shenja e marrë më parë duhet të kalohet në të si argument.

Nuk konsiderohet praktika më e mirë ruajtja e tokenit në kod, kështu që mund ta ruani atë në një variabël mjedisi dhe ta lexoni prej tij. Si parazgjedhje në paketë telegram.bot Mbështetja për variablat e mjedisit të emrave të mëposhtëm është zbatuar: R_TELEGRAM_BOT_ИМЯ_ВАШЕГО_БОТА... Në vend të kësaj ИМЯ_ВАШЕГО_БОТА zëvendësoni emrin që keni specifikuar gjatë krijimit, në rastin tim do të jetë një ndryshore R_TELEGRAM_BOT_My Test Bot.

Ka disa mënyra për të krijuar një variabël mjedisi; unë do t'ju tregoj për atë më universale dhe ndër-platformë. Krijoni në direktorinë tuaj kryesore (mund ta gjeni duke përdorur komandën path.expand("~")) skedar teksti me emrin .Renviron. Ju gjithashtu mund ta bëni këtë duke përdorur komandën file.edit(path.expand(file.path("~", ".Renviron"))).

Dhe shtoni rreshtin e mëposhtëm në të.

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

Më pas, mund të përdorni tokenin e ruajtur në variablin e mjedisit duke përdorur funksionin bot_token(), d.m.th. si kjo:

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

Метод getUpdates()na lejon të marrim përditësime të robotëve, d.m.th. mesazhet që i janë dërguar. Metoda from_chat_id(), ju lejon të merrni ID-në e bisedës nga e cila është dërguar mesazhi. Na duhet kjo ID për të dërguar mesazhe nga roboti.

Përveç ID-së së bisedës nga objekti i marrë me metodën getUpdates() ju merrni edhe disa informacione të tjera të dobishme. Për shembull, informacione rreth përdoruesit që dërgoi mesazhin.

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"

Pra, në këtë fazë tashmë kemi gjithçka që na nevojitet për të dërguar një mesazh nga një bot në Telegram. Le të përdorim metodën sendMessage(), në të cilin duhet të kaloni ID-në e bisedës, tekstin e mesazhit dhe llojin e shënimit të tekstit të mesazhit. Lloji i shënjimit mund të jetë Markdown ose HTML dhe përcaktohet nga argumenti parse_mode.

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

Bazat e formatimit Markdown:

  • Shkronja e theksuar theksohet me *:
    • shembull: *жирный шритф*
    • rezultati: font të theksuar
  • Shkrimet kursive tregohen me nënvizime:
    • shembull: _курсив_
    • rezultati: shkronja të pjerrëta
  • Fonti monospace, i cili zakonisht përdoret për të theksuar kodin e programit, specifikohet duke përdorur apostrofat - `:
    • shembull: `font monospace`
    • rezultati: моноширинный шрифт

Bazat e formatimit të shënjimit HTML:
Në HTML, ju mbështillni pjesën e tekstit që duhet të theksohet në etiketa, shembull <тег>текст</тег>.

  • <tag> - etiketa hapëse
  • - etiketa mbyllëse

Etiketat e shënjimit HTML

  • <b> - font të theksuar
    • shembull: <b>жирный шрифт</b>
    • pasojë font të theksuar
  • <i> - kursive
    • shembull: <i>курсив</i>
    • rezultati: shkronja të pjerrëta
  • — моноширинный шрифт
    • shembull: моноширинный шрифт
    • rezultati: моноширинный шрифт

Përveç tekstit, mund të dërgoni përmbajtje të tjera duke përdorur metoda të veçanta:

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

Ato. për shembull duke përdorur metodën sendPhoto() ju mund të dërgoni grafikun që keni krijuar duke përdorur paketën, të ruajtur si imazh ggplot2.

Kontrollimi i programuesit të detyrave të Windows dhe dërgimi i njoftimeve për detyrat që kanë përfunduar në mënyrë jonormale

Për të punuar me Windows Task Scheduler, duhet të instaloni paketën taskscheduleR, dhe për lehtësinë e punës me të dhënat, instaloni paketën dplyr.

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

Tjetra, duke përdorur funksionin taskscheduler_ls() ne kërkojmë informacion rreth detyrave nga planifikuesi ynë. Duke përdorur funksionin filter() nga paketa dplyr Ne heqim nga lista e detyrave ato që u kryen me sukses dhe kanë statusin e rezultatit të fundit 0, dhe ato që nuk janë nisur kurrë dhe kanë statusin 267011, detyrat e çaktivizuara dhe detyrat që janë duke u ekzekutuar aktualisht.

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

Në objekt task Tani kemi një listë të detyrave që dështuan, duhet ta dërgojmë këtë listë në Telegram.

Nëse shikojmë secilën komandë në më shumë detaje, atëherë:

  • filter() — filtron listën e detyrave sipas kushteve të përshkruara më sipër
  • select() — lë vetëm një fushë në tabelë me emrin e detyrave
  • unique() - heq emrat e dyfishtë
  • unlist() — konverton kolonën e përzgjedhur të tabelës në një vektor
  • paste0() — lidh emrat e detyrave në një rresht dhe vendos një furnizim rreshti si ndarës, d.m.th. n.

Gjithçka që na mbetet është ta dërgojmë këtë rezultat përmes telegramit.

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

Pra, për momentin kodi i botit duket si ky:

Kodi i botit të rishikimit të detyrës

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

}

Kur përdorni shembullin e mësipërm, zëvendësoni kodin tuaj të botit dhe ID-në tuaj të bisedës në kod.

Mund të shtoni kushte për filtrimin e detyrave, për shembull, duke kontrolluar vetëm ato detyra që keni krijuar, duke përjashtuar ato të sistemit.

Ju gjithashtu mund të vendosni cilësime të ndryshme në një skedar të veçantë konfigurimi dhe të ruani ID-në e bisedës dhe shenjën në të. Ju mund të lexoni konfigurimin, për shembull, duke përdorur paketën configr.

Shembull ini config

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

Një shembull i leximit të variablave nga një konfigurim në 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

Vendosja e një plani për ekzekutimin e skanimeve të detyrave

Procesi i vendosjes së nisjes së skripteve në një orar përshkruhet më në detaje në këtë artikull. Këtu do të përshkruaj vetëm hapat që duhen ndjekur për këtë. Nëse ndonjë nga hapat nuk është i qartë për ju, atëherë referojuni artikullit në të cilin kam dhënë një lidhje.

Le të supozojmë se kemi ruajtur kodin tonë bot në një skedar check_bot.R. Për të planifikuar që ky skedar të ekzekutohet rregullisht, ndiqni këto hapa:

  1. Shkruani shtegun e dosjes në të cilën R është instaluar në variablin Path system; në Windows, shtegu do të jetë diçka e tillë: C:Program FilesRR-4.0.2bin.
  2. Krijoni një skedar të ekzekutueshëm bat me vetëm një rresht R CMD BATCH C:rscriptscheck_botcheck_bot.R. Zëvendësoni C:rscriptscheck_botcheck_bot.R në rrugën e plotë të skedarit tuaj R.
  3. Më pas, përdorni Windows Task Scheduler për të vendosur një orar nisjeje, për shembull, çdo gjysmë ore.

Përfundim

Në këtë artikull, ne kuptuam se si të krijojmë një bot dhe ta përdorim atë për të dërguar njoftime të ndryshme në telegram.

Unë përshkrova detyrën e monitorimit të Programit të Detyrave të Windows, por ju mund të përdorni materialin në këtë artikull për të dërguar çdo njoftim, nga parashikimi i motit deri te kuotat e aksioneve në bursë, sepse R ju lejon të lidheni me një numër të madh burimesh të dhënash.

Në artikullin tjetër, ne do të kuptojmë se si të shtojmë komanda dhe një tastierë në bot, në mënyrë që ai jo vetëm të dërgojë njoftime, por edhe të kryejë veprime më komplekse.

Burimi: www.habr.com

Shto një koment