Γράφουμε ένα bot telegram στη γλώσσα R (μέρος 1): Δημιουργήστε ένα bot και στείλτε μηνύματα στο telegram χρησιμοποιώντας το

Το κοινό του τηλεγραφήματος αυξάνεται εκθετικά κάθε μέρα, αυτό διευκολύνεται από την ευκολία του messenger, τη διαθεσιμότητα καναλιών, συνομιλιών και φυσικά τη δυνατότητα δημιουργίας bots.

Τα bots μπορούν να χρησιμοποιηθούν για μια μεγάλη ποικιλία σκοπών, από την αυτοματοποίηση της επικοινωνίας με τους πελάτες σας έως τη διαχείριση των δικών σας εργασιών.

Στην πραγματικότητα, μέσω του bot, μπορείτε να χρησιμοποιήσετε το τηλεγράφημα για να εκτελέσετε οποιαδήποτε λειτουργία: αποστολή ή αίτημα δεδομένων, εκτέλεση εργασιών στον διακομιστή, συλλογή πληροφοριών σε μια βάση δεδομένων, αποστολή email κ.λπ.

Σκοπεύω να γράψω μια σειρά άρθρων για το πώς να δουλέψω με το R στο R. telegram bot API, και γράψτε bots για τις ανάγκες σας.

Γράφουμε ένα bot telegram στη γλώσσα R (μέρος 1): Δημιουργήστε ένα bot και στείλτε μηνύματα στο telegram χρησιμοποιώντας το

Σε αυτό το πρώτο άρθρο, θα καταλάβουμε πώς να δημιουργήσουμε ένα bot telegram και να στείλουμε ειδοποιήσεις στο telegram χρησιμοποιώντας το.

Ως αποτέλεσμα, θα έχουμε ένα bot που θα ελέγχει την κατάσταση της τελευταίας εκτέλεσης όλων των εργασιών στον Προγραμματιστή εργασιών των Windows και θα σας στέλνει ειδοποιήσεις σε περίπτωση αποτυχίας.

Αλλά ο σκοπός αυτής της σειράς άρθρων δεν είναι να σας μάθει πώς να γράφετε ένα bot για μια συγκεκριμένη, στενή εργασία, αλλά να σας μυήσει στη σύνταξη του πακέτου γενικά. telegram.bot, και παραδείγματα κώδικα με τα οποία μπορείτε να γράψετε bots για να λύσετε τα δικά σας προβλήματα.

περιεχόμενο

Εάν ενδιαφέρεστε για την ανάλυση δεδομένων, μπορεί να σας ενδιαφέρει το δικό μου τηλεγράφημα и YouTube καναλιών. Το μεγαλύτερο μέρος του περιεχομένου του οποίου είναι αφιερωμένο στη γλώσσα R.

  1. Δημιουργία bot τηλεγραφήματος
  2. Εγκατάσταση πακέτου για εργασία με bot telegram στο R
  3. Αποστολή μηνυμάτων από το R στο Telegram
  4. Διαμόρφωση του χρονοδιαγράμματος εκκίνησης σάρωσης εργασιών
  5. Συμπέρασμα

Δημιουργία bot τηλεγραφήματος

Πρώτα, πρέπει να δημιουργήσουμε ένα bot. Αυτό γίνεται χρησιμοποιώντας ένα ειδικό bot BotFather, παω σε σύνδεσμος και γράψε στο bot /start.

Στη συνέχεια, θα λάβετε ένα μήνυμα με μια λίστα εντολών:

Μήνυμα από τον 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

Για να δημιουργήσετε ένα νέο bot, στείλτε την εντολή /newbot.

Το BotFather θα σας ζητήσει να εισαγάγετε το όνομα και τη σύνδεση του bot.

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

Μπορείτε να εισαγάγετε ένα αυθαίρετο όνομα και η σύνδεση πρέπει να τελειώνει με bot.

Εάν τα κάνατε όλα σωστά, θα λάβετε το ακόλουθο μήνυμα:

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

Στη συνέχεια, θα χρειαστείτε το ληφθέν διακριτικό API, στο παράδειγμά μου 123456789:abcdefghijklmnopqrstuvwxyz.

Σε αυτό το βήμα, ολοκληρώνονται οι προπαρασκευαστικές εργασίες για τη δημιουργία του bot.

Εγκατάσταση πακέτου για εργασία με bot telegram στο R

Υποθέτω ότι έχετε ήδη εγκατεστημένη τη γλώσσα R και το περιβάλλον ανάπτυξης RStudio. Εάν αυτό δεν συμβαίνει, τότε μπορείτε να το δείτε βίντεο μάθημα για το πώς να τα εγκαταστήσετε.

Για να εργαστούμε με το Telegram Bot API, θα χρησιμοποιήσουμε το πακέτο R telegram.bot.

Η εγκατάσταση πακέτων στο R γίνεται από τη συνάρτηση install.packages(), οπότε για να εγκαταστήσουμε το πακέτο που χρειαζόμαστε, χρησιμοποιούμε την εντολή install.packages("telegram.bot").

Για περισσότερες πληροφορίες σχετικά με την εγκατάσταση διαφόρων πακέτων, βλ Αυτό το βίντεο.

Μετά την εγκατάσταση του πακέτου, πρέπει να το συνδέσετε:

library(telegram.bot)

Αποστολή μηνυμάτων από το R στο Telegram

Το bot που δημιουργήσατε μπορεί να βρεθεί στο Telegram χρησιμοποιώντας τα στοιχεία σύνδεσης που καθορίστηκαν κατά τη δημιουργία, στην περίπτωσή μου είναι @my_test_bot.

Στείλτε οποιοδήποτε μήνυμα στο bot, όπως "Hi bot". Προς το παρόν, το χρειαζόμαστε για να λάβουμε το αναγνωριστικό της συνομιλίας σας με το bot.

Τώρα στο R γράφουμε τον παρακάτω κώδικα.

library(telegram.bot)

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

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

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

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

Αρχικά, δημιουργούμε μια παρουσία του bot μας με τη συνάρτηση Bot(), ως επιχείρημα, πρέπει να του περάσετε το διακριτικό που λάβατε προηγουμένως.

Η αποθήκευση του διακριτικού σε κώδικα θεωρείται κακή πρακτική, επομένως μπορείτε να το αποθηκεύσετε σε μια μεταβλητή περιβάλλοντος και να το διαβάσετε από αυτήν. Από προεπιλογή στο πακέτο telegram.bot υλοποιήθηκε υποστήριξη για μεταβλητές περιβάλλοντος με το ακόλουθο όνομα: R_TELEGRAM_BOT_ИМЯ_ВАШЕГО_БОТА. Αντί ИМЯ_ВАШЕГО_БОТА αντικαταστήστε το όνομα που ορίσατε κατά τη δημιουργία, στην περίπτωσή μου θα είναι μια μεταβλητή R_TELEGRAM_BOT_My Test Bot.

Μπορείτε να δημιουργήσετε μια μεταβλητή περιβάλλοντος με διάφορους τρόπους, θα μιλήσω για την πιο καθολική και πολλαπλή πλατφόρμα. Δημιουργήστε στον αρχικό σας κατάλογο (μπορείτε να τον βρείτε με την εντολή path.expand("~")) αρχείο κειμένου με το όνομα .Ρενβίρον. Μπορείτε επίσης να το κάνετε αυτό με την εντολή file.edit(path.expand(file.path("~", ".Renviron"))).

Και προσθέστε την ακόλουθη γραμμή σε αυτό.

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

Στη συνέχεια, μπορείτε να χρησιμοποιήσετε το διακριτικό που είναι αποθηκευμένο στη μεταβλητή περιβάλλοντος με τη συνάρτηση bot_token(), δηλ. σαν αυτό:

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

Μέθοδος getUpdates()μας επιτρέπει να λαμβάνουμε ενημερώσεις bot, π.χ. μηνύματα που του έστειλαν. Μέθοδος from_chat_id(), σας επιτρέπει να λάβετε το αναγνωριστικό της συνομιλίας από την οποία στάλθηκε το μήνυμα. Χρειαζόμαστε αυτό το αναγνωριστικό για να στείλουμε μηνύματα από το bot.

Εκτός από το αναγνωριστικό συνομιλίας από το αντικείμενο που ελήφθη από τη μέθοδο getUpdates() λαμβάνετε και άλλες χρήσιμες πληροφορίες. Για παράδειγμα, πληροφορίες σχετικά με τον χρήστη που έστειλε το μήνυμα.

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"

Έτσι, σε αυτό το στάδιο, έχουμε ήδη όλα όσα χρειάζονται για να στείλουμε ένα μήνυμα από το bot στο τηλεγράφημα. Ας χρησιμοποιήσουμε τη μέθοδο sendMessage(), στο οποίο πρέπει να μεταβιβάσετε το αναγνωριστικό συνομιλίας, το κείμενο του μηνύματος και τον τύπο σήμανσης του κειμένου του μηνύματος. Ο τύπος σήμανσης μπορεί να είναι Markdown ή HTML και ορίζεται από το όρισμα parse_mode.

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

Βασικά στοιχεία μορφοποίησης Markdown:

  • Η έντονη γραμματοσειρά σημειώνεται με *:
    • παράδειγμα: *жирный шритф*
    • αποτέλεσμα: τολμηρό σενάριο
  • Τα πλάγια γράμματα δίνονται με υπογράμμιση:
    • παράδειγμα: _курсив_
    • αποτέλεσμα: πλάγια γραφή
  • Η γραμματοσειρά σταθερού διαστήματος, η οποία χρησιμοποιείται συνήθως για την επισήμανση του κώδικα προγράμματος, καθορίζεται χρησιμοποιώντας απόστροφα - `:
    • Παράδειγμα: «μονοδιαστημική γραμματοσειρά».
    • αποτέλεσμα: моноширинный шрифт

Βασικά στοιχεία μορφοποίησης σήμανσης HTML:
Σε HTML, αναδιπλώνετε το τμήμα του κειμένου που θέλετε να επισημάνετε σε ετικέτες, για παράδειγμα <тег>текст</тег>.

  • <tag> — ετικέτα ανοίγματος
  • - ετικέτα κλεισίματος

Ετικέτες σήμανσης HTML

  • <b> - έντονη γραμματοσειρά
    • παράδειγμα: <b>жирный шрифт</b>
    • αποτέλεσμα έντονη γραμματοσειρά
  • <i> - πλάγια γραφή
    • παράδειγμα: <i>курсив</i>
    • αποτέλεσμα: πλάγια γραφή
  • — моноширинный шрифт
    • παράδειγμα: моноширинный шрифт
    • αποτέλεσμα: моноширинный шрифт

Εκτός από κείμενο, μπορείτε να στείλετε και άλλο περιεχόμενο χρησιμοποιώντας ειδικές μεθόδους:

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

Εκείνοι. για παράδειγμα χρησιμοποιώντας τη μέθοδο sendPhoto() μπορείτε να στείλετε ένα οικόπεδο αποθηκευμένο ως εικόνα που δημιουργήσατε με το πακέτο ggplot2.

Έλεγχος του Προγραμματιστή εργασιών των Windows και αποστολή ειδοποιήσεων για εργασίες που έχουν διακοπεί

Για να εργαστείτε με τον Προγραμματιστή εργασιών των Windows, πρέπει να εγκαταστήσετε το πακέτο taskscheduleR, και για την ευκολία της εργασίας με δεδομένα, εγκαταστήστε το πακέτο dplyr.

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

Στη συνέχεια, χρησιμοποιώντας τη συνάρτηση taskscheduler_ls() ζητάμε πληροφορίες σχετικά με εργασίες από τον προγραμματιστή μας. Χρησιμοποιώντας τη λειτουργία filter() από τη συσκευασία dplyr αφαιρούμε από τη λίστα εργασιών εκείνες που ολοκληρώθηκαν επιτυχώς και έχουν κατάσταση τελευταίου αποτελέσματος 0 και εκείνες που δεν έχουν εκτελεστεί ποτέ ακόμη και έχουν κατάσταση 267011, απενεργοποιημένες εργασίες και εργασίες που εκτελούνται αυτήν τη στιγμή.

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

Στο αντικείμενο task Τώρα έχουμε μια λίστα εργασιών των οποίων η εργασία έληξε με σφάλμα, πρέπει να στείλουμε αυτήν τη λίστα στο Telegram.

Αν εξετάσουμε κάθε εντολή με περισσότερες λεπτομέρειες, τότε:

  • filter() — φιλτράρει τη λίστα εργασιών σύμφωνα με τις συνθήκες που περιγράφονται παραπάνω
  • select() - αφήνει μόνο ένα πεδίο με το όνομα των εργασιών στον πίνακα
  • unique() - αφαιρεί τα διπλά ονόματα
  • unlist() - μεταφράζει την επιλεγμένη στήλη πίνακα σε διάνυσμα
  • paste0() - συνδέει τα ονόματα των εργασιών σε μία γραμμή και βάζει έναν χαρακτήρα νέας γραμμής ως διαχωριστικό, π.χ. n.

Το μόνο που μας μένει είναι να στείλουμε αυτό το αποτέλεσμα στο τηλεγράφημα.

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

Έτσι, αυτή τη στιγμή ο κώδικας bot μοιάζει με αυτό:

Κωδικός bot που ελέγχει την εργασία

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

}

Όταν χρησιμοποιείτε το παραπάνω παράδειγμα, αντικαταστήστε το διακριτικό bot και το αναγνωριστικό συνομιλίας σας στον κωδικό.

Μπορείτε να προσθέσετε συνθήκες φιλτραρίσματος εργασιών, για παράδειγμα, ελέγχοντας μόνο εκείνες τις εργασίες που δημιουργήθηκαν από εσάς, εξαιρουμένων εκείνων του συστήματος.

Μπορείτε επίσης να βάλετε διάφορες ρυθμίσεις σε ένα ξεχωριστό αρχείο διαμόρφωσης και να αποθηκεύσετε το αναγνωριστικό συνομιλίας και το διακριτικό σε αυτό. Μπορείτε να διαβάσετε τη διαμόρφωση, για παράδειγμα, χρησιμοποιώντας το πακέτο configr.

Παράδειγμα ini config

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

Παράδειγμα ανάγνωσης μεταβλητών από τη διαμόρφωση στο 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

Ρύθμιση ενός χρονοδιαγράμματος εκκίνησης σάρωσης εργασιών

Η διαδικασία διαμόρφωσης της προγραμματισμένης εκκίνησης σεναρίου περιγράφεται με περισσότερες λεπτομέρειες σε αυτό άρθρο. Εδώ θα περιγράψω μόνο τα βήματα που πρέπει να ακολουθηθούν για αυτό. Εάν κάποιο από τα βήματα δεν σας είναι ξεκάθαρο, τότε ανατρέξτε στο άρθρο στο οποίο παρείχα έναν σύνδεσμο.

Ας υποθέσουμε ότι αποθηκεύουμε τον κώδικα bot μας σε ένα αρχείο check_bot.R. Για να προγραμματίσετε την τακτική εκτέλεση αυτού του αρχείου, ακολουθήστε τα εξής βήματα:

  1. Γράψτε τη διαδρομή προς το φάκελο στον οποίο είναι εγκατεστημένο το R στη μεταβλητή συστήματος Path, στα Windows η διαδρομή θα είναι κάπως έτσι: C:Program FilesRR-4.0.2bin.
  2. Δημιουργήστε ένα εκτελέσιμο αρχείο bat με μία μόνο γραμμή R CMD BATCH C:rscriptscheck_botcheck_bot.R. Αντικαθιστώ C:rscriptscheck_botcheck_bot.R στην πλήρη διαδρομή προς το αρχείο R σας.
  3. Στη συνέχεια, χρησιμοποιήστε τον Προγραμματιστή εργασιών των Windows για να ορίσετε ένα χρονοδιάγραμμα εκκίνησης, για παράδειγμα, κάθε μισή ώρα.

Συμπέρασμα

Σε αυτό το άρθρο, καταλάβαμε πώς να δημιουργήσουμε ένα bot και να το χρησιμοποιήσουμε για να στείλουμε διάφορες ειδοποιήσεις στο τηλεγράφημα.

Περιέγραψα την εργασία παρακολούθησης του Προγραμματιστή εργασιών των Windows, αλλά μπορείτε να χρησιμοποιήσετε το υλικό σε αυτό το άρθρο για να στείλετε οποιαδήποτε ειδοποίηση, από την πρόγνωση του καιρού έως τις τιμές των μετοχών στο χρηματιστήριο, επειδή. Το R σάς επιτρέπει να συνδεθείτε σε έναν τεράστιο αριθμό πηγών δεδομένων.

Στο επόμενο άρθρο, θα καταλάβουμε πώς να προσθέσουμε εντολές και ένα πληκτρολόγιο στο bot, ώστε όχι μόνο να στέλνει ειδοποιήσεις, αλλά και να εκτελεί πιο περίπλοκες ενέργειες.

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο