Krijimi i një boti telegram në gjuhën R (pjesa 1): Krijojmë botin dhe dërgojmë mesazhe në telegram me ndihmën e tij

Audienca e telegramit po rritet çdo ditë me një progresion gjeometrik, falë komoditetit të mesazhereve, pranisë së kanaleve, bisedave, dhe sigurisht mundësisë për të krijuar bota.

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

Në esencë, përmes botit, ju mund të bëni çdo operacion duke përdorur telegram: dërgoni ose kërkoni të dhëna, nisni detyra në server, grumbulloni informacion në një bazë të dhënash, dërgoni email dhe kështu me radhë.

Planifikoj të shkruaj një seri artikujsh për mënyrën se si të punoni me telegram bot API, dhe të krijoni bota për nevojat tuaja.

Krijimi i një boti telegram në gjuhën R (pjesa 1): Krijojmë botin dhe dërgojmë mesazhe në telegram me ndihmën e tij

Në këtë artikull të parë, ne do të shqyrtojmë si të krijojmë një boti telegram dhe të dërgojmë njoftime në telegram me ndihmën e tij.

Si rezultat, ne do të krijojmë një bot që do të kontrollojë statusin e ekzekutimeve të fundit të të gjitha detyrave në planifikuesin e detyrave të Windows dhe do të dërgojë njoftime nëse disa përfunduan me gabim.

Porosi i kësaj serie artikujsh nuk është t'ju mësojë si të shkruani një bot për një detyrë specifike të ngushtë, por për t'ju njohur në mënyrë të përgjithshme me sintaksën e paketës. telegram.bot, dhe shembujt e kodit, me ndihmën e të cilave do të jeni në gjendje të shkruani bota për të zgjidhur detyrat tuaja.

Përmbajtja

Nëse jeni të interesuar për analizën e të dhënave, ndoshta do t'ju interesojnë kanalet e mia telegram dhe youtube në të cilat shumica e përmbajtjes është e kushtuar gjuhës R.

  1. Krijimi i një boti të Telegramit
  2. Instalimi i paketës për punën me botin e Telegramit në R
  3. Dërgimi i mesazheve nga R në Telegram
  4. Konfigurimi i orarit për kontrollin e detyrave
  5. Përfundimi

Krijimi i një boti të Telegramit

Për të filluar, na nevojitet të krijojmë një bot. Kjo bëhet me anë të një boti të veçantë BotFather, kalojmë në lidhjes dhe i shkruajmë botit /start.

Pas kësaj do të merrni një mesazh me një listë komandash:

Mesazh nga BotFather

Mund të ju ndihmoj të krijoni dhe menaxhoni bota në Telegram. Nëse jeni të ri në API-në e Bot-it, ju lutem shihni manualin (https://core.telegram.org/bots).

Mund të më kontrolloni duke dërguar këto komanda:

/newbot - krijoni një bot të ri
/mybots - redaktoni botët tuaj [beta]

Redaktoni Botët
/setname - ndryshoni emrin e botit
/setdescription - ndryshoni përshkrimin e botit
/setabouttext - ndryshoni informacionin rreth botit
/setuserpic - ndryshoni foton e profilit të botit
/setcommands - ndryshoni listën e komandave
/deletebot - fshini një bot

Cilësimet e Bot-it
/token - gjeneroni tokenin e autorizimit
/revoke - revokoni tokenin e aksesit të botit
/setinline - aktivizoni modalitetin inline (https://core.telegram.org/bots/inline)
/setinlinegeo - aktivizoni kërkesat për lokacione inline (https://core.telegram.org/bots/inline#location-based-results)
/setinlinefeedback - ndryshoni cilësimet e feedback-ut inline (https://core.telegram.org/bots/inline#collecting-feedback)
/setjoingroups - a mund të shtohet bot-i juaj në grupe?
/setprivacy - aktivizoni modalitetin e privatësisë (https://core.telegram.org/bots#privacy-mode) në grupe

Lojërat
/mygames - redaktoni lojërat tuaja (https://core.telegram.org/bots/games) [beta]
/newgame - krijoni një lojë të re (https://core.telegram.org/bots/games)
/listgames - merrni një listë të lojërave tuaja
/editgame - redaktoni një lojë
/deletegame - fshini një lojë ekzistuese

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

BotFather do t'ju kërkojë të shkruani emrin dhe username-in e botit.

BotFather, [25.07.20 09:39]
Mirë, një bot e re. Si do ta quajmë? Ju lutem zgjidhni një emër për botin tuaj.

Alexey Seleznev, [25.07.20 09:40]
Boti Im i Testit

BotFather, [25.07.20 09:40]
Mirë. Tani le të zgjedhim një username për botin tuaj. Duhet të përfundojë me `bot`. Si, për shembull: TetrisBot ose tetris_bot.

Alexey Seleznev, [25.07.20 09:40]
@my_test_bot

Emri mund të jetë i rastësishëm, ndërsa username-i duhet të përfundojë me bot.

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

Përfunduar! Urime për botin tuaj të ri. Do ta gjeni në t.me/my_test_bot. Tani mund të shtoni një përshkrim, seksion rreth dhe një foto profili për botin tuaj, shihni /help për një listë komandoresh. Për më tepër, kur të keni përfunduar krijimin e botit tuaj të mrekullueshëm, kontaktoni mbështetjen tonë për botët nëse dëshironi një emër më të mirë për të. Sigurohuni që boti të jetë plotësisht funksional para se ta bëni këtë.

Përdorni këtë token për të aksesuar API-në HTTP:
123456789:abcdefghijklmnopqrstuvwxyz

Për një përshkrim të API-së për botët, shihni këtë faqe: https://core.telegram.org/bots/api

Më pas do t'ju nevojitet tokeni API që keni marrë, në shembullin tim kjo është 123456789:abcdefghijklmnopqrstuvwxyz.

Në këtë hap, përgatitjet për krijimin e botit janë përfunduar.

Instalimi i paketës për punën me botin e Telegramit në R

Supozoj se tashmë e keni instaluar gjuhën R dhe mjedisin e zhvillimit RStudio. Nëse jo, mund të shihni këtë video mësim për atë se si t'i instaloni.

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

Instalimi i pakove në R bëhet me funksionin install.packages(), prandaj për të instaluar paketën që na nevojitet përdorni komandën install.packages("telegram.bot").

Më shumë informata mbi instalimin e pakove të ndryshme mund të gjenden në këtë video.

Pas instalimit të paketës, ajo duhet të lidhet:

library(telegram.bot)

Dërgimi i mesazheve nga R në Telegram

Boti që keni krijuar mund të gjendet në Telegram me emrin që keni caktuar në krijim, në rastin tim kjo është @my_test_bot.

Dërgoni botit çdo mesazh, për shembull "Përshëndetje bot". Aktualisht na nevojitet për të marrë ID-në e bisedës tuaj me botin.

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

library(telegram.bot)

# krijojmë një instancë të botit
bot <- Bot(token = "123456789:abcdefghijklmnopqrstuvwxyz")

# Kërkojmë informacion rreth botit
print(bot$getMe())

# Marrim përditësimet e botit, dmth. listën e mesazheve të dërguara atij
updates <- bot$getUpdates()

# Kërkojmë identifikuesin e bisedës
# Shënim: përpara se të kërkoni përditësimet, duhet të dërgoni një mesazh në bot
chat_id <- updates[[1L]]$from_chat_id()

Fillimisht krijojmë një instancë të botit tonë me funksionin Bot(), si argument në të duhet të kaloni token-in e marrë më parë.

Të ruash token-in në kod konsiderohet praktikë jo e mirë, prandaj mund ta ruani atë në një variabël të mjedisit dhe ta lexoni prej saj. Në paketën telegram.bot është realizuar mbështetje për variablat e mjedisit me emrin e mëposhtëm: R_TELEGRAM_BOT_EMRI_I_BOTIT_TUEJ. Në vend të EMRI_I_BOTIT_TUEJ zëvendësoni me emrin që keni caktuar gjatë krijimit, në rastin tim do të kem variablen R_TELEGRAM_BOT_My Test Bot.

Mund të krijoni një variabël ambienti në disa mënyra; unë do t'ju tregoj për metodën më të zakonshme dhe ndërplatformë. Krijoni një skedar tekstual në direktorinë tuaj të shtëpisë (mund ta zbuloni atë duke përdorur komandën path.expand("~")) me emrin .Renviron. Këtë mund ta bëni gjithashtu duke përdorur komandën file.edit(path.expand(file.path("~", ".Renviron"))).

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

R_TELEGRAM_BOT_EMRI_JUAJ_I_BOTIT=123456789:abcdefghijklmnopqrstuvwxyz

Më pas mund të përdorni token-in e ruajtur në variablën ambienti me funksionin bot_token(), dmth, kështu:

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

Metoda getUpdates()na lejon të marrim përditësime të botit, dmth mesazhet që i janë dërguar atij. Metoda from_chat_id(), na lejon të marrim identifikuesin e bisedës nga e cila është dërguar mesazhi. Ky identifikues na nevojitet për të dërguar mesazhe nga boti.

Përveç id-së së bisedës nga objekti i marrë me metodën getUpdates() merrni gjithashtu disa informacione të tjera të dobishme. Për shembull, informacion mbi përdoruesin 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 këtë fazë, tashmë kemi gjithçka të nevojshme për të dërguar një mesazh nga boti në Telegram. Do të përdorim metodën sendMessage(), në të cilën duhet të dërgoni identifikuesin e bisedës, tekstin e mesazhit dhe llojin e formatimit të mesazhit. Lloji i formatimit mund të jetë Markdown ose HTML dhe vendoset me argumentin parse_mode.

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

Bazat e formatimit të shenjave Markdown:

  • Teksti me shkronja të trasha shënohet me shenjën *:
    • p.sh.: *shkronja të trasha*
    • rezultati: shkronja të trasha
  • Kursivi shënohet me nënvizim:
    • p.sh.: _kursiv_
    • rezultati: kursiv
  • Shkronja monoshirë, e cila zakonisht shënon kodin programues, shënohet me apostrofë — `:
    • p.sh.: `shkronja monoshirë`
    • rezultati: shkronja monoshirë

Bazat e formatimit të shenjave HTML:
Në HTML ju e mbuloni pjesën e tekstit që duhet të shënohet me etiketa, p.sh. tekst.

  • — etiketa e hapjes
  • — etiketa e mbylljes

Etiketat e formatimit HTML

  • <b> — shkronja të trasha
    • p.sh.: <b>shkronjë e trashë</b>
    • rezultati shkronjë e trashë
  • — kursiv
    • p.sh.: kursiv
    • rezultati: kursiv
  • — shkronja monoshirë
    • p.sh.: shkronja monoshirë
    • rezultati: shkronja monoshirë

Përveç tekstit, ju mund të dërgoni edhe përmbajtje të tjera duke përdorur metoda speciale:

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

Pra, p.sh. me ndihmën e metodës sendPhoto() mund të dërgoni një grafik të ruajtur si imazh që keni ndërtuar me paketën ggplot2.

Kontrolli i planifikuesit të detyrave në Windows dhe dërgimi i njoftimeve për detyrat që janë mbyllur papritur

Për të punuar me planifikuesin e detyrave në Windows, duhet të instaloni paketën taskscheduleR, dhe për lehtësimin e punës me të dhënat, do të instalojmë paketën dplyr.

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

Më pas, me funksionin taskscheduler_ls() kërkojmë informacion për detyrat nga planifikuesi ynë. Me funksionin filter() nga paketa dplyr eliminojmë nga lista e detyrave ato që janë kryer me sukses dhe kanë statusin e rezultatit të fundit 0, dhe ato që nuk janë ekzekutuar asnjëherë dhe kanë statusin 267011, detyrat e fikura 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ë objektin task tani kemi një listë detyrash për të cilat puna përfundoi me gabim, kjo listë duhet ta dërgojmë në Telegram.

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

  • filter() — filtrojë listën e detyrave sipas kushteve të përshkruara më lart
  • select() — lë në tabelë vetëm një fushë me emrin e detyrave
  • unique() — heq dyfishimet e emrave
  • unlist() — kthen kolonën e zgjedhur të tabelës në vektor
  • paste0() — lidh emrat e detyrave në një rresht dhe përdor si ndarës shenjën e këmbimit të rreshtit, dmth. n.

Gjithçka që na mbetet është ta dërgojmë këtë rezultat në Telegram.

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

Pra, aktualisht kodi i bot-it duket kështu:

Kodi i bot-it që kontrollon detyrat

# Подключение пакета
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, thjesht vendosni në kodin tuaj token-in e bot-it dhe identifikuesin tuaj të bisedës.

Mund të shtoni kushte filtrimi për detyrat, për shembull duke kontrolluar vetëm ato detyra që janë krijuar nga ju, duke përjashtuar ato sistemike.

Po ashtu, mund të nxirrni cilësime të ndryshme në një skedar konfigurimi të veçantë, dhe të ruani në të id-në e bisedës dhe token-in. Lexoni konfigurimin, për shembull, me ndihmën e paketës configr.

Shembulli i konfigurations ini

[telegram_bot]
;cilësimet e bot-it të Telegram dhe bisedës, në të cilën do të vijë njoftimi
chat_id=12345678
bot_token=123456789:abcdefghijklmnopqrstuvwxyz"

Shembulli i leximit të variablave nga konfigurimi në R

library(configr)

# leximi i konfigurimit
config <- read.config('C:/rruga_të_konfigurimit/config.cfg', rcmd.parse = TRUE)

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

Konfiguroni orarin e nisjes për kontrollin e detyrave

Procesi i ndërlikuar i konfigurimit të ekzekutimit të skripteve sipas një orari përshkruhet në këtë artikullin. Këtu do të përshkruaj vetëm hapat që duhet të ndiqni. Nëse ndonjë nga hapat nuk është i qartë për ju, lutem referojuni artikullit për të cilin kam dhënë lidhje.

Supozoni se kemi ruajtur kodin tonë të botit në një skedar check_bot.R. Për të planifikuar ekzekutimin e rregullt të këtij skedari, ndiqni hapat e mëposhtëm:

  1. Shkruani në variablën sistemike Path rrugën e dosjes ku është instaluar R, në Windows rruga do të jetë diçka e tillë: C:Program FilesRR-4.0.2bin.
  2. Krijoni një skedar ekzekutues bat, në të cilin do të ketë vetëm një rresht R CMD BATCH C:rscriptscheck_botcheck_bot.R. Zëvendësoni C:rscriptscheck_botcheck_bot.R me rrugën e plotë të skedarit tuaj R.
  3. Më pas, configuroni me ndihmën e planifikuesit të detyrave të Windows orarin e ekzekutimit, për shembull çdo gjysmë ore.

Përfundimi

Në këtë artikull ne e kuptuam se si të krijojmë një bot, dhe të dërgojmë me ndihmën e tij njoftime të ndryshme në telegram.

Kam përshkruam detyrën e monitorimit të planifikuesit të detyrave të Windows, por mund të përdorni materialin e këtij artikulli për të dërguar njoftime të çdo lloji, nga parashikimet e motit deri te treguesit e aksioneve në bursë, pasi R ju lejon të lidhni me një sërë të gjerë burimesh të të dhënave.

Në artikullin e ardhshëm do të shqyrtojmë se si t'i shtoni komandat dhe tastierën botit, në mënyrë që ai të mund të dërgojë njoftime, por gjithashtu të realizojë veprime më të komplikuara.

Burimi: habr.com

Bli një hosting të besueshëm për faqet me mbrojtje DDoS, VPS VDS serverë 🔥 Bli një hosting të besueshëm për faqet me mbrojtje DDoS, VPS VDS serverë | ProHoster