Beispiel eines Telegram Bots
Geschrieben von Hauke amDer 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 EintragDieser 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 | VerschachteltNoch keine Kommentare