Beispiel eines Telegram Bots

Der bekannte Messenger "Telegram" bietet eine API für sog. "Bots" an.
Bots sind Programme, die keine Benutzer sind, sondern wirklich reine Progrämmchen. Das Tolle daran ist, dass dir Bots einerseits Nachrichten schicken können, andererseits aber auch Nachrichten empfangen und darauf reagieren können. Ältere User kennen sicherlich noch die guten, alten IRC-Bots, Telegram Bots sind sowas ähnliches.

Ich habe mir einen kleinen Bot, incl. einer dazugehörigen Bibliothek, selbst geschrieben, da ich mich näher mit der API von Telegram befassen wollte. Zur Zeit sind noch nicht alle Funktionen der API implementiert, aber ich hoffe, dass ich bald dazu komme, meine kleine Bibliothek weiterzuschreiben.

Also, los geht's!

Wir starten als einfacher Benutzer auf unserem Rechner.

Bevor es so richtig los geht, mit dem eigenen Bot, muss der neue Bot beim Telegramsystem eingerichtet werden. Das bedeutet, es wird vom System ein Token generiert, das zur Authentifizierung des eigenen Bots dient.

Um einen neuen Bot anzumelden, benötigt man natürlich den Telegram Messenger, der korrekt eingerichtet sein muss. Wie das geht, wird hier nicht erklärt. Nun geht man im Messenger in die Suche und sucht nach @BotFather. Dies ist ein Bot, der dazu dient, Bots bei Telegram anzumelden.

Mit dem Kommando "/newbot" wird ein neuer Bot erstellt. Zuerst muss dem Bot ein Name gegeben werden. ZB "HausBot". Der Name kann frei gewählt werden.
Als nächstes muss der Bot einen sog. "Benutzernamen" bekommen. Hier wird es etwas schwieriger, denn dieser Name muss einzigartig im System sein. Ggf. muss man also ein wenig suchen, um einen freien Namen zu finden. Man kann ja mal "wasfuereintoller_bot" versuchen!
Wenn das System zufrieden ist, d.h. wenn der Benutzername frei war, wird vom Bot Father eine entsprechende Meldung ausgegeben. Diese Meldung beinhaltet ein paar grundlegende Infos zu dem neuen Bot, aber auch das Token des Bots! Dieses Token stellt den Schlüssel dar, mit dem sich der Bot später beim Telegramsystem anmelden kann.

Nachdem der neue Bot bei Telegram angemeldet ist, kann es mit der Programmierung des selben los gehen!

Mein Bot ist in C++ programmiert und ich nutze (natürlich) meine eigens dafür geschriebene Bibliothek, die man unter https://github.com/hauke68/LibTgBotPP runterladen kann.

Um diese Bibliothek zu installieren, benötigt man ein paar Pakete und deren Abhängigkeiten:

  • g++
  • cmake
  • libstdc++-dev
  • libcurlpp-dev
  • libjsoncpp-dev
  • git

Nun wird das Paket der Bibliothek erst einmal runtergeladen. Dazu öffnet man eine Konsole (Shell) und gibt folgenden Befehl ein:
git clone https://github.com/hauke68/LibTgBotPP.git

Danach ist ein neues Verzeichnis LibTgBotPP entstanden, in das wir per cd LibTgBotPP wechseln.

Dort werden dann folgende Befehle ausgeführt:

  • mkdir build
  • cd build
  • cmake ../
  • make
  • sudo make install
  • sudo ldconfig

Damit ist die Bibliothek einsatzbereit!

Nach der Installation der Bibliothek habe ich mir dann den eigentlichen Bot geschrieben:

#include <Telegram/TelegramBot.h>

#include <sstream>
#include <string>

#include <termios.h>
#include <unistd.h>

#define BOT_TOKEN "Der Schluessel, den dir der Bot Father gegeben hat!"

// main function
int main(int argc, char** argv) {
    // Process options
    std::string user_id = ""; // ID of the receiving user
    Telegram::TelegramBot tg(BOT_TOKEN);
#ifdef __arm__
    int c;
#else
    char c;
#endif
    while ((c = getopt(argc, argv, "u:")) != -1) {
      switch(c) {
      case 'u':
        user_id = (std::string)optarg;
        break;
      case ':':
        std::cerr << optopt << " without argument" << std::endl;
        break;
      }
    }

    if (user_id == "") {
      std::cerr << "No user ID given!" << std::endl;
      return 1;
    }

    // Read from stdin
    struct termios t;
    std::string s = "";
    if (tcgetattr(STDIN_FILENO, &t) < 0) {
      // If we have a text piped in, read from std::cin
      while(std::cin) {
        std::string line;
        std::getline(std::cin, line);
        s = s + line + "\n";
      }
      s.erase(s.end()-1);
    }

    if (s != "") {
      tg.sendMessage(s, user_id);
    }

  return 0;
}


Ich habe die Quelldatei bot.cc genannt und per g++ -c -o bot.o -I/usr/include/jsoncpp bot.cc && g++ -o bot bot.o -ltgbotpp wurde daraus das Programm "bot". Dies wanderte dann auch gleich in mein persönliches bin/-Verzeichnis.

Okay, genauer gesagt habe ich folgendes gemacht:

  • cd ~
  • vi bot.cc
  • Obigen Code in den Editor per Kopierfunktion (STRG-C / STRG-V) kopiert
  • ESC :wq
  • g++ -c -o bot.o -I/usr/include/jsoncpp bot.cc && g++ -o bot bot.o -ltgbotpp
  • mkdir ~/bin
  • mv bot ~/bin/

Nun kann ich per echo "Hallo Welt" | ~/bin/bot -u <deine telegram id> Nachrichten an mich schicken.

Wie bekommt man seine Benutzer-ID raus?
Nun, entweder sucht man im WWW nach Telegram-Bots, die das anbieten. Ich glaube, wer das Konsolenprogramm zu Telegram verwendet, kann auch die eigene ID herausfinden, aber ob und wie das geht, weiss ich nicht.

Trackbacks

Trackback-URL für diesen Eintrag

Dieser Link ist nicht aktiv. Er enthält die Trackback-URI zu diesem Eintrag. Sie können diese URI benutzen, um Ping- und Trackbacks von Ihrem eigenen Blog zu diesem Eintrag zu schicken. Um den Link zu kopieren, klicken Sie ihn mit der rechten Maustaste an und wählen "Verknüpfung kopieren" im Internet Explorer oder "Linkadresse kopieren" in Mozilla/Firefox.

Keine Trackbacks

Kommentare

Ansicht der Kommentare: Linear | Verschachtelt

Noch keine Kommentare

Kommentar schreiben

Kommentare werden erst nach redaktioneller Prüfung freigeschaltet!

Umschließende Sterne heben ein Wort hervor (*wort*), per _wort_ kann ein Wort unterstrichen werden.
Standard-Text Smilies wie :-) und ;-) werden zu Bildern konvertiert.
Die angegebene E-Mail-Adresse wird nicht dargestellt, sondern nur für eventuelle Benachrichtigungen verwendet.

Um maschinelle und automatische Übertragung von Spamkommentaren zu verhindern, bitte die Zeichenfolge im dargestellten Bild in der Eingabemaske eintragen. Nur wenn die Zeichenfolge richtig eingegeben wurde, kann der Kommentar angenommen werden. Bitte beachten Sie, dass Ihr Browser Cookies unterstützen muss, um dieses Verfahren anzuwenden.
CAPTCHA