Einen IRC-Bot mit PHP realisieren
14. August 2007 – 05:50In diesem Beitrag will ich ein bisschen mit PHP spielen, ich erkläre wie man Schritt für Schritt mit einer PEAR Klasse und ein bisschen PHP einen einfachen Bot für IRC-Channels bauen kann.
Grundkenntnisse von PHP sollte man haben für den Bot, wer PHP noch nicht kann und lernen möchte sollte mal hier vorbeischauen.
Was soll der Bot können?
Ich begnüge mich heute mit dem simplen Begrüßen von Benutzers, wie es ein Beispiel der Klasse ist. Im Gegensatz zum Beispiel wird jedoch mein Bot etwas mehr Funktionen bieten und modular angelegt sein sodass ich neue Funktionen schneller hinzufügen kann und der ganze Code ordentlich getrennt ist.
Vorbereitungen
Da der Bot auf der Kommandozeile laufen soll, brauchen wir keinen Webserver. Das Tutorial wurde für Windows geschrieben, der fertige Bot läuft ohne Probleme auch unter anderen Betriebssystemen, Linux habe ich bereits getestet.
Ich habe folgendes Verzeichnisschema gewählt:
/root
/bin (Hier liegen die PHP Dateien)
/bot/ (Hier landen die Bot Skripte
/bot/lib (Hier kommen Klassen hin)
/bot/modules (Hier kommen die Funktionen des Bots rein)
Zuerst einmal benötigen wir die PEAR Klasse Net_SmartIRC und die neueste Version von PHP.
Die Dateien von SmartIRC packen wir direkt ins Verzeichnis lib, die Klasse hat einen Unterordner den wir einfach so übernehmen. Da wir nichts an der Klasse verändern, sind Updates dieser später wesentlich einfacher
Der eigentliche Bot
Wir haben nun eine Klasse um zu IRC Netzwerken Verbinden zu können, das alleine reicht aber nicht für einen Bot. Ein bisschen müssen wir schon selber entwickeln
Wie die Hauptdatei für den Bot heißt ist egal, bei mir einfach bot.php. Als erstes müssen wir ein paar Einstellungen festlegen. Da Wordpress scheinbar kein PHP highlighten kann, macht es PHP halt selber. Quellcode
Nun geht es ans eingemachte: Bereiten wir SmartIRC vor damit wir uns zum Server verbinden können. Quellcode
Jetzt haben wir zwar ne Verbindung und den Bot im Channel, jedoch tut er noch nichts. Das können wir gleich ändern.
Da SmartIRC objektorientiert ist, soll der Rest unseres Bots das auch werden. Dazu erstellen wir eine Datei namens WelcomeGreeting.php im Verzeichnis plugins an und includieren wir sie im Skript. Quellcode.
Was macht das Skript nun im Detail? Zuerst definieren wir eine Klasse mit einer Funktion, die später von SmartIRC aufgerufen werden soll. Dann erstellen wir ein neues Objekt aus der Klasse und weisen dieses SmartIRC zu, damit dieser auch weis was zu tun ist. Im Beispiel wird unsere Funktion bei jedem join (Eintreten eines Benutzers) aufgerufen. Zuerst wird geprüft, ob der Bot sich schon vorgestellt hat, falls nein tu er dies nun und merkt sich das für die aktuelle Sitzung. Beim nächsten join prüft er ob der join er selbst ist (SmartIRC ruft die Funktion bei unserem eigenen join auf) und falls das nicht der Fall ist, wird der neue Benutzer begrüßt.
Wenn wir nun den Bot über die Kommandozeile starten, sollten keine Ausgaben erscheinen und der Bot im Channel eine Nachricht hinterlassen.
Und nun?
Er geht, aber man kann die Funktion noch weiter ausbauen. Wie wäre es zum Beispiel, wenn sich der Bot merkt ob er jemanden schon einmal begrüßt hat und dementsprechend “Willkommen zurück” schreibt? ![]()
Erweiterte Version
In dieser Version werden alle begrüßten Benutzer in ein internes Array geschrieben und bei jedem join wird geprüft, ob der neue Benutzer sich in dem Array befindet oder nicht. Falls ja, bekommt er statt “Hallo” ein “Willkommen zurück”
SmartIRC steht unter LGPL, die Beispiele in diesem Beitrag sind Public Domain und können beliebig weiter verwendet werden.