(English version below)
Nachdem ich mich nun etwas mit Jabber beschäftigt habe, war es an der Zeit, einen eigenen Jabber Bot zu schreiben.
Ich hatte bereits einen ChatBot in Perl geschrieben, der in unserem http-Chat lief. Mit der CPAN Bibliothek Net::Jabber::Bot lies sich daraus mit wenigen Handgriffen ein einfacher Jabber Bot basteln.
Der Bot ist noch nicht sehr ausgereift. Aber er funktioniert.
Der Bot hat ein Pluginsystem um einfach neue Funktionen hinzufügen zu können. Um neue Plugins zu schreiben am besten mal ins Helloworld Plugin schauen (plugins/Helloworld.pm). Wichtig ist, das Plugin mit der Funktion Plugins::registerPlugin zu registrieren. Das fertige Plugin kann man ins Verzeichnis “plugins” kopieren. Jeder Befehl ist ein Plugin.
zBot läuft im Multi User Chat (MUC) und man kann ihn genauso gut als Kontakt hinzufügen.
Die Installation ist recht einfach. Man legt einen neuen User für den Bot auf dem Server seiner Wahl an. Dann editiert man die Datei modules/Configs.pm entsprechend (Passwort, Username… setzen). Danach kann man (wenn das CPAN Modul installiert ist) die zbot.pl starten. Am besten natürlich auf einem Server, damit der Bot auch online ist, wenn man den PC ausschaltet. Den Prozess kann man direkt in den Hintergrund schieben um sich wieder abmelden zu können:
./zbot.pl &
Nun kann man den Bot zu seiner Kontaktliste hinzufügen. Nach dem Start braucht der Bot 20 Sekunden zur Initialisierung, bis er antwortet.
Durch das Senden des Befehls “hilfe” werden alle Befehle angezeigt. Mit “hilfe <befehl>” bekommt man die Beschreibung des Plugins angezeigt (z.B. “hilfe helloworld”).
Das Programm habe ich unter der GPL veröffentlicht. Eine Dokumentation ist auch vorhanden.
Über Verbesserungen des Codes oder neue Plugins würde ich mich sehr freuen.
Bei Fragen oder Problemen kann man mich natürlich auch gerne anschreiben (oder einfach hier als Kommentar).
Update: Das Problem mit den Sonderzeichen konnte ich lösen. Es lag daran, dass die Sonderzeichen in der CPAN Bibliothek durch einen regulären Ausdruck ausgefiltert wurden (der dazu gedacht war, nicht druckbare Zeichen auszufiltern). Daher habe ich die entsprechende Datei ins Verzeichnis “modules” kopiert, entsprechend editiert und von dort eingebunden.
Update: Version 0.2 ist nun verfügbar. Informationen über die Änderungen findet man im zugehörigen Blogeintrag.
[UPDATE] Es gibt ein Problem ab ejabberd Version 2.0.3, da diese eine digest-uri zur Verifikation des Clients erwartet. Die einzige Möglichkeit das Problem zu lösen besteht anscheinend darin, diese Verifikation im Quelltext abzuschalten und neu zu kompilieren. Mehr Infos gibt es in diesem Forenthread (englisch).
Des weiteren gibt es ein Problem mit manchen User- bzw. Domainnamen. Der Bot bricht dann mit der Meldung:
Can't call method "isa" without a package or object reference at /usr/local/share/perl/5.8.8/Net/XMPP/Protocol.pm line 2471.
ab. (Die Zeile kann variieren)
Abhilfe schafft das entfernen des “problematischen” Users aus der Liste des Bots. Der User kann den Bot danach immer nocht nutzen (so weit mir berichtet wurde). Anscheinend tritt das Problem auf, wenn der Username mit einer Ziffer beginnt (oder eine Ziffer enthält, das weis ich nicht).
Vielen Dank an Daniel für die Hinweise und die Hilfe bei der Fehlersuche
[/UPDATE]
[UPDATE]Ich habe den Bot jetzt mal auf GitHub hochgeladen: http://github.com/zimon/zBot. In der dortigen Version ist er auch an die neue Version von Net::Jabber::Bot angepasst. Leider funktionieren dadurch einige Plugins nicht mehr richtig, aber ich habe im Moment keine Zeit sie zu fixen. Vielleicht hat ja jemand Lust zu forken
[/UPDATE]
Man kann den Bot gerne testen, indem man ihn zu seiner Kontaktliste hinzufügt: bruno@jey-key.de
Die Dokumentation ist nun auch online Verfügbar: Dokumenation Version 0.2
Dateien
- zbot_0.2.zip – Das Programm (the program)
- zbot_0.2_doc.zip – Die Dokumentation (the documentation)
Plugins
- Chatbot Plugin – erweitert den zBot um die Möglichkeit “Unterhaltungen” mit dem Bot zu führen.
- Wikipedia Plugin – fügt den Befehl “wiki” hinzu, mit dem die Definition (der erste Abschnitt des Artikels) zu einem Begriff angezeigt werden kann.
- Leo Dictionary Plugin – Deutsch <-> Englisch Übersetzungsplugin
- Wetter Plugin – macht eine Wettervorhersage für eine angegebene Postleitzahl
- Todo Plugin – verwaltet für jeden User eine Todoliste mittels todo.sh
- Whois Plugin – Macht eine Whois-Abfrage zu einer gewünschten Domain und liefert das Ergebnis zurück.
.
English
Here is my Jabber Bot “zBot” written in Perl using the CPAN Module Net::Jabber::Bot.
It is easily extendable with plugins. If you want to write a plugin just look at the modules/Helloworld.pm (I commented this example Plugin better than the other ones). Its important to register your Plugin by calling the function Plugins::registerPlugin in your module. When it’s finished just copy it to the plugins directory. Every command is a plugin.
zBot runs in multi user chats (MUC) and you can add it to your contact list.
I started writing the bot yesterday, so it is not tested well but it works.
To install and start the bot, register a new account for the bot. Then edit the modules/Configs.pm to your needs (password, username,…) and start the zbot.pl (don’t forget to install the CPAN module first). It’s a good idea to start it on a server with
./zbot &
so it stays online when you shut down your own computer. Now you can add the bot to your contact list. After the start the bot needs 20 seconds for initializing before it answers.
By sending “hilfe” to the bot it sends a list of available commands. With “hilfe <command>” you get the description of the plugin (for example: “hilfe helloworld”).
The bot is licenced under GPL. An english documentation is available.
All strings in the Code are in german language but the comments and documentation is english. I wrote an english translation as comment after (or below) each string, so it should be easy to translate.
It would be grate if you send me your plugins and enhancements of the code if you create some.
[UPDATE]I have uploaded the bot on GitHub: http://github.com/zimon/zBot. There it is adapted to the new Net::Jabber::Bot version. By doing this some of the Plugins broke and I don’t have time to fix them. Maybe someone wants to fork it
[/UPDATE]
For questions or problems you may contact me.
Folgende Beiträge könnten Dich auch interessieren:
Schlagworte: Bot, Jabber, perl, Scripte








Hi,
zu dem Umlaut-Problem: Wenn Du Perl > 5.8.0 verwendest, solltest Du Dir mal das Modul Encode anschauen. Damit kann man alle möglichen Kodierungen verwenden.
Wenn Du willst, kannst Du das Projekt auch auf perl-nachrichten.de vorstellen.
Gruß,
Renée
Hallo Renée,
das Umlaut-Problem lag an der CPAN Bibliothek. Habe es gefixt bekommen. Trotzdem Danke, hab wieder viel über Encodings und den Umgang damit in Perl gelernt.
Werde das Projekt jetzt gleich mal vorstellen.
Gruß
zimon