Telegram-Bot in der Programmiersprache R erstellen (Teil 1): Wir erstellen einen Bot und senden damit Nachrichten über Telegram.

Die Telegram-Audience wächst täglich exponentiell, was auf die Benutzerfreundlichkeit des Messengers, die Verfügbarkeit von Kanälen, Chats und natürlich die Möglichkeit, Bots zu erstellen, zurückzuführen ist.

Bots können für völlig unterschiedliche Zwecke verwendet werden, von der Automatisierung der Kommunikation mit Ihren Kunden bis hin zur Verwaltung Ihrer eigenen Aufgaben.

Im Grunde genommen können Sie über einen Bot in Telegram beliebige Operationen durchführen: Daten senden oder abfragen, Aufgaben auf einem Server ausführen, Informationen in einer Datenbank sammeln, E-Mails versenden usw.

Ich plane, eine Serie von Artikeln zu schreiben, wie man mit der Telegram Bot API, Bots nach seinen eigenen Bedürfnissen erstellt.

Telegram-Bot in der Programmiersprache R erstellen (Teil 1): Wir erstellen einen Bot und senden damit Nachrichten über Telegram.

In diesem ersten Artikel werden wir uns damit beschäftigen, wie man einen Telegram-Bot erstellt und mit seiner Hilfe Benachrichtigungen in Telegram versendet.

Das Ergebnis wird ein Bot sein, der den Status der letzten Ausführung aller Aufgaben im Windows-Aufgabenplaner überprüft und Ihnen Benachrichtigungen sendet, wenn einige mit Fehlern abgeschlossen wurden.

Ziel dieser Artikelreihe ist es jedoch nicht, Sie zu lehren, einen Bot für eine bestimmte, eng gefasste Aufgabe zu schreiben, sondern Ihnen einen allgemeinen Überblick über die Syntax des Pakets zu geben. telegram.bot, und Beispielcodes, mit denen Sie Bots zur Lösung eigener Aufgaben schreiben können.

Inhalt

Falls Sie sich für Datenanalyse interessieren, könnten meine telegram und youtube Kanäle für Sie von Interesse sein. Der Großteil der Inhalte widmet sich der R-Sprache.

  1. Erstellung eines Telegram-Bots
  2. Installation des Pakets zur Arbeit mit Telegram-Bots in R
  3. Nachrichten von R an Telegram senden
  4. Konfiguration des Zeitplans für die Aufgabenprüfungen
  5. Fazit

Erstellung eines Telegram-Bots

Zunächst müssen wir einen Bot erstellen. Dies erfolgt über einen speziellen Bot. BotFather, gehen Sie zu über diesen Link verfügbar und schreiben Sie dem Bot /start.

Daraufhin erhalten Sie eine Nachricht mit einer Liste von Befehlen:

Nachricht von BotFather

Ich kann Ihnen helfen, Telegram-Bots zu erstellen und zu verwalten. Wenn Sie neu in der Bot-API sind, sehen Sie sich bitte das Handbuch an (https://core.telegram.org/bots).

Sie können mich steuern, indem Sie diese Befehle senden:

/newbot - erstellen Sie einen neuen Bot
/mybots - bearbeiten Sie Ihre Bots [beta]

Bots bearbeiten
/setname - ändern Sie den Namen des Bots
/setdescription - ändern Sie die Beschreibung des Bots
/setabouttext - ändern Sie die Informationen über den Bot
/setuserpic - ändern Sie das Profilbild des Bots
/setcommands - ändern Sie die Liste der Befehle
/deletebot - löschen Sie einen Bot

Bot-Einstellungen
/token - generieren Sie ein Autorisierungstoken
/revoke - widerrufen Sie das Zugriffstoken des Bots
/setinline - aktivieren Sie den Inline-Modus (https://core.telegram.org/bots/inline)
/setinlinegeo - schalten Sie die Inline-Standortanfragen um (https://core.telegram.org/bots/inline#location-based-results)
/setinlinefeedback - ändern Sie die Einstellungen für das Inline-Feedback (https://core.telegram.org/bots/inline#collecting-feedback)
/setjoingroups - darf Ihr Bot zu Gruppen hinzugefügt werden?
/setprivacy - Privatsphäre-Modus in Gruppen umschalten (https://core.telegram.org/bots#privacy-mode)

Spiele
/mygames - bearbeiten Sie Ihre Spiele (https://core.telegram.org/bots/games) [beta]
/newgame - erstellen Sie ein neues Spiel (https://core.telegram.org/bots/games)
/listgames - erhalten Sie eine Liste Ihrer Spiele
/editgame - bearbeiten Sie ein Spiel
/deletegame - löschen Sie ein bestehendes Spiel

Um einen neuen Bot zu erstellen, senden Sie den Befehl /newbot.

BotFather wird Sie auffordern, den Namen und den Benutzernamen des Bots einzugeben.

BotFather, [25.07.20 09:39]
Okay, ein neuer Bot. Wie möchten wir ihn nennen? Bitte wählen Sie einen Namen für Ihren Bot.

Alexey Seleznev, [25.07.20 09:40]
Mein Test-Bot

BotFather, [25.07.20 09:40]
Gut. Jetzt wählen wir einen Benutzernamen für Ihren Bot. Dieser muss mit `bot` enden. Wie zum Beispiel: TetrisBot oder tetris_bot.

Alexey Seleznev, [25.07.20 09:40]
@mein_test_bot

Sie können einen beliebigen Namen eingeben, aber der Benutzername muss enden mit bot.

Wenn Sie alles richtig gemacht haben, erhalten Sie die folgende Nachricht:

Erledigt! Herzlichen Glückwunsch zu Ihrem neuen Bot. Sie finden ihn unter t.me/my_test_bot. Jetzt können Sie eine Beschreibung, einen Überabschnitt und ein Profilbild für Ihren Bot hinzufügen. Weitere Informationen finden Sie unter /help für eine Liste der Befehle. Übrigens, wenn Sie mit der Erstellung Ihres coolen Bots fertig sind, kontaktieren Sie unseren Bot-Support, wenn Sie einen besseren Benutzernamen möchten. Stellen Sie nur sicher, dass der Bot vollständig betriebsbereit ist, bevor Sie dies tun. 

Verwenden Sie dieses Token, um auf die HTTP-API zuzugreifen: 
123456789:abcdefghijklmnopqrstuvwxyz

Eine Beschreibung der Bot-API finden Sie auf dieser Seite: https://core.telegram.org/bots/api

Als Nächstes benötigen Sie das erhaltene API-Token, in meinem Beispiel ist das 123456789:abcdefghijklmnopqrstuvwxyz.

In diesem Schritt sind die Vorbereitungen für die Erstellung des Bots abgeschlossen.

Installation des Pakets zur Arbeit mit Telegram-Bots in R

Ich gehe davon aus, dass Sie bereits die Programmiersprache R und die Entwicklungsumgebung RStudio installiert haben. Falls nicht, können Sie sich dieses Video-Tutorial ansehen, um zu erfahren, wie Sie sie installieren.

Für die Arbeit mit der Telegram Bot-API verwenden wir das R-Paket telegram.bot.

Pakete in R werden mit der Funktion install.packages()installiert, nutzen Sie also den folgenden Befehl, um das benötigte Paket zu installieren: install.packages("telegram.bot").

Detaillierte Informationen zur Installation verschiedener Pakete finden Sie in diesem Video.

Nach der Installation des Pakets müssen Sie es einbinden:

library(telegram.bot)

Nachrichten von R an Telegram senden

Den von Ihnen erstellten Bot finden Sie in Telegram unter dem bei der Erstellung festgelegten Benutzernamen, in meinem Fall ist das @my_test_bot.

Senden Sie dem Bot eine beliebige Nachricht, zum Beispiel "Hallo Bot". Derzeit benötigen wir dies, um die ID Ihres Chats mit dem Bot zu erhalten.

Jetzt schreiben wir folgenden Code in R.

library(telegram.bot)

# Erstellen Sie eine Instanz des Bots
bot <- Bot(token = "123456789:abcdefghijklmnopqrstuvwxyz")

# Fordern Sie Informationen über den Bot an
print(bot$getMe())

# Holen Sie sich die Updates des Bots, d.h. die Liste der gesendeten Nachrichten
updates <- bot$getUpdates()

# Fordern Sie die Chat-ID an
# Hinweis: Vor dem Abrufen von Updates müssen Sie dem Bot eine Nachricht senden
chat_id <- updates[[1L]]$from_chat_id()

Zunächst erstellen wir eine Instanz unseres Bots mit der Funktion Bot(), wobei als Argument der zuvor erhaltene Token übergeben werden muss.

Es gilt als nicht die beste Praxis, den Token im Code zu speichern, daher können Sie ihn in einer Umgebungsvariable speichern und von dort abrufen. Im Standardpaket telegram.bot ist die Unterstützung für Umgebungsvariablen mit folgendem Namen implementiert: R_TELEGRAM_BOT_IHR_BOTS_NAME. Anstelle von IHR_BOTS_NAME setzen Sie den Namen ein, den Sie bei der Erstellung festgelegt haben, in meinem Fall wäre die Variable R_TELEGRAM_BOT_My Test Bot.

Es gibt mehrere Möglichkeiten, eine Umgebungsvariable zu erstellen. Ich werde die universellste und plattformübergreifende Methode erläutern. Erstellen Sie in Ihrem Home-Verzeichnis (dieses können Sie mit dem Befehl path.expand("~")) eine Textdatei mit dem Namen .Renviron. Dies kann auch mit dem Befehl erfolgen file.edit(path.expand(file.path("~", ".Renviron"))).

Fügen Sie dann die folgende Zeile hinzu.

R_TELEGRAM_BOT_NAME_IHRES_BOTS=123456789:abcdefghijklmnopqrstuvwxyz

Anschließend können Sie das in der Umgebungsvariable gespeicherte Token mit der Funktion bot_token()verwenden, das heißt so:

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

Methode getUpdates()ermöglicht es uns, die Updates des Bots abzurufen, d.h. die Nachrichten, die ihm gesendet wurden. Die Methode from_chat_id()erlaubt es, die Chat-ID zu erhalten, aus der die Nachricht gesendet wurde. Diese ID benötigen wir, um Nachrichten vom Bot zu senden.

Neben der Chat-ID erhalten Sie aus dem Objekt, das durch die Methode getUpdates() gewonnen wurde, auch einige andere nützliche Informationen. Beispielsweise Informationen über den Benutzer, der die Nachricht gesendet hat.

updates[[1L]]$message$from

$id
[1] 000000000

$is_bot
[1] FALSE

$first_name
[1] "Alexey"

$last_name
[1] "Seleznev"

$username
[1] "AlexeySeleznev"

$lang_code
[1] "ru"

Zu diesem Zeitpunkt haben wir bereits alles, was notwendig ist, um eine Nachricht vom Bot über Telegram zu senden. Wir nutzen die Methode sendMessage(), die die Chat-ID, den Nachrichtentext und den Textformatierungstyp der Nachricht benötigt. Der Typ der Formatierung kann Markdown oder HTML sein und wird durch das Argument parse_mode.

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

Grundlagen der Markdown-Formatierung:

  • Fett wird mit dem Zeichen * hervorgehoben:
    • Beispiel: *fetter Text*
    • Ergebnis: fetter Text
  • Kursiv wird mit einem Unterstrich gesetzt:
    • Beispiel: _kursiv_
    • Ergebnis: kursiv
  • Eine monospace Schrift, die typischerweise für Code verwendet wird, wird durch Apostrophe gesetzt — `:
    • Beispiel: `monospace Schrift`
    • Ergebnis: monospace Schrift

Grundlagen der HTML-Formatierung:
In HTML umschließen Sie den Teil des Textes, den Sie hervorheben möchten, mit Tags, Beispiel Text.

  • — öffnendes Tag
  • — schließendes Tag

HTML-Formatierungstags

  • <b> — fetter Text
    • Beispiel: <b>fett</b>
    • Ergebnis fett
  • — kursiv
    • Beispiel: Kursiv
    • Ergebnis: kursiv
  • — monospace Schrift
    • Beispiel: monospace Schrift
    • Ergebnis: monospace Schrift

Neben Text können Sie auch andere Inhalte mit speziellen Methoden senden:

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

Das heißt, beispielsweise mit der Methode sendPhoto() Sie können das als Bild gespeicherte Diagramm, das Sie mit dem Paket erstellt haben, senden. ggplot2.

Überprüfung des Windows-Taskplaners und Versand einer Benachrichtigung über Aufgaben, deren Ausführung fehlgeschlagen ist.

Um mit dem Windows-Taskplaner zu arbeiten, müssen Sie das Paket installieren. taskscheduleR, und zur Vereinfachung der Arbeit mit den Daten installieren wir das Paket. dplyr.

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

Anschließend verwenden wir die Funktion taskscheduler_ls() , um Informationen über die Aufgaben aus unserem Planer abzurufen. Mit der Funktion filter() aus dem Paket dplyr entfernen wir die Aufgaben aus der Liste, die erfolgreich ausgeführt wurden und den Status des letzten Ergebnisses 0 haben, sowie diejenigen, die noch nie ausgeführt wurden und den Status 267011 haben, die deaktivierten Aufgaben, und Aufgaben, die derzeit ausgeführt werden.

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

Im Objekt task haben wir jetzt eine Liste von Aufgaben, deren Ausführung mit einem Fehler beendet wurde; diese Liste müssen wir an Telegram senden.

Wenn wir jede Anweisung genauer betrachten, dann:

  • filter() — filtert die Liste der Aufgaben nach den oben beschriebenen Bedingungen.
  • select() — lässt in der Tabelle nur ein Feld mit dem Namen der Aufgaben stehen.
  • unique() — entfernt doppelte Namen.
  • unlist() — konvertiert die ausgewählte Spalte der Tabelle in einen Vektor.
  • paste0() — verbindet die Aufgabennamen in einer Zeile und verwendet das Zeilenumbruchzeichen als Trennzeichen, d.h. n.

Alles, was uns bleibt, ist das Ergebnis an Telegram zu senden.

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

Der Code des Bots sieht bisher so aus:

Code des aufgabenüberprüfenden Bots

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

}

Beim Verwenden des oben genannten Beispiels fügen Sie den Token Ihres Bots und Ihre Chat-ID in den Code ein.

Sie können Filterbedingungen für Aufgaben hinzufügen, indem Sie beispielsweise nur die Aufgaben überprüfen, die von Ihnen erstellt wurden, und systemeigene ausschließen.

Außerdem können Sie verschiedene Einstellungen in eine separate Konfigurationsdatei auslagern und darin die Chat-ID und den Token speichern. Die Konfiguration kann beispielsweise mit dem Paket configr.

Beispiel für eine ini-Konfiguration

[telegram_bot]
; Einstellungen für den Telegram-Bot und den Chat, in den die Benachrichtigungen gesendet werden
chat_id=12345678
bot_token=123456789:abcdefghijklmnopqrstuvwxyz

Beispiel zum Lesen von Variablen aus der Konfiguration in R

library(configr)

# Lesen der Konfiguration
config <- read.config('C:/pfad_zur_konfiguration/config.cfg', rcmd.parse = TRUE)

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

Wir richten den Zeitplan für die Überprüfung der Aufgaben ein.

Der Prozess zur Einrichtung eines zeitgesteuerten Skriptstarts ist in diesem Artikel ausführlich beschrieben. ArtikelHier beschreibe ich nur die Schritte, die dafür erforderlich sind. Sollten Ihnen einige Schritte unklar sein, beziehen Sie sich bitte auf den angegebenen Artikel.

Angenommen, wir haben den Code unseres Bots in die Datei check_bot.R. Um den regelmäßigen Start dieser Datei zu planen, führen Sie die folgenden Schritte aus:

  1. Fügen Sie den Pfad zum Ordner, in dem R installiert ist, zur Systemvariable Path hinzu. Unter Windows könnte dieser Pfad ungefähr so aussehen: C:Program FilesRR-4.0.2bin.
  2. Erstellen Sie eine ausführbare bat-Datei, die nur eine Zeile enthält: R CMD BATCH C:rscriptscheck_botcheck_bot.R. Ersetzen Sie C:rscriptscheck_botcheck_bot.R wenn Sie den vollständigen Pfad zu Ihrer R-Datei angeben möchten.
  3. Richten Sie dann mit dem Windows-Taskplaner einen Zeitplan für den Start ein, zum Beispiel alle 30 Minuten.

Fazit

In diesem Artikel haben wir uns damit beschäftigt, wie man einen Bot erstellt und mit ihm verschiedene Benachrichtigungen in Telegram sendet.

Ich habe die Aufgabe der Überwachung des Windows-Taskplaners beschrieben, aber Sie können das Material dieses Artikels verwenden, um beliebige Benachrichtigungen zu senden, von Wettervorhersagen bis hin zu Aktienkursen an der Börse, da R Ihnen ermöglicht, sich mit einer Vielzahl von Datenquellen zu verbinden.

Im nächsten Artikel werden wir besprechen, wie Sie dem Bot Befehle und eine Tastatur hinzufügen können, damit er nicht nur Benachrichtigungen senden, sondern auch komplexere Aktionen ausführen kann.

Quelle: habr.com

Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen 🔥 Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen | ProHoster