Code Project Bauen Sie sich ein IRC-Bot, TuxRadar Linux


Hier bei TuxRadar wir lieben schnelle kleine Programmierprojekte, und hoffen, dass Sie auch tun. Das Wort ‚Projekte‘ ist hier wichtig: wir gehen nicht auf Theorie oder banale technische gubbins wohnen, sondern sehen coole Sachen machen - schließlich, Programmierung am meisten Spaß, wenn Sie tatsächlich Dinge, anstatt stundenlang machen Lernen über langweilige Schleifenkonstrukte!

In diesem Tutorial werden wir ein IRC-Bot geschrieben in Perl produzieren. Wenn Sie ein Old-School internetter sind, werden Sie wahrscheinlich IRC haben, bevor sie verwendet; wenn nicht, finden Sie in den Hang auf, was IRC ist? Feld, um die Grundlagen overpage zu erklären. Auf den Punkt gebracht, ist IRC ein Chat-Protokoll in Echtzeit, die üblicherweise in Open-Source-Projekte für die Interaktion zwischen Entwickler. Es ist einfach, schnell und einfach zu verstehen - und am besten von allen, es kann Sie virtuelle Teilnehmer im Gespräch erstellen.

Das ist, was wir gehen hier tun: Schreiben Sie einen ‚Roboter‘, die in einem IRC-Gespräch verbindet, und mit dem Sie sprechen über eine Maschine zu bekommen. Nehmen wir zum Beispiel, dass Sie bei der Arbeit oder im Urlaub sind, und wollen halten Registerkarten auf einem System mit nach Hause (oder eine co-located Server). Unsere IRC-Bot wird ruhig sitzen in einem Kanal und wartet auf Sie kommen und fragen sie um ihre Verfügbarkeit und Lastniveau in Frage stellt.

Es gibt eine Vielzahl von System-Monitoring-Tools gibt, aber sie neigen dazu, alles oder nichts Programme zu sein, die Ihren Posteingang mit unnötigen Einzelheiten über eine Maschine überfluten. Unsere Bot macht die Dinge viel einfacher: Wenn Sie wissen möchten, wie viel Speicherplatz auf Ihrem Rechner gelassen wird, oder wenn es wenig RAM ausgeführt wird, können Sie auf IRC-Hop und kommunizieren mit dem Bot sofort (in private Nachrichten). Am wichtigsten ist, werden wir es so einschränken, dass nur Sie Informationen zurück von ihm bekommen können!

Ein schneller Perl-Primer

In C Art und Weise, Anweisungen müssen mit einem Semikolon (;) beendet. Variablen beginnt mit Dollar-Zeichen:

Dies druckt „Ubuntu“ auf dem Bildschirm. Wie bei vielen anderen Sprachen, wird das erste Element in einem Array der 0. Ein nützliche Befehlsnummer gegeben ist für Arrays Verschiebung, die das erste Element aus einem Array und legt ihn in eine Variable entfernt:

Hier haben wir ein Array mit drei Strings aufgebaut, dann verschieben Sie das erste Element in die $ foo Variable. Wir drucken es und tun dann eine andere Schicht. So wird der Ausgang „Ubuntu“ gefolgt von „Fedora“ ist - und am Ende, das einzige Element in dem Array ist zur „SUSE“. Eine verbesserte Version eines Arrays ist ein ‚Wörterbuch‘ (auch bekannt als ‚hash‘), mit einem Prozentsatz (%) Zeichen bezeichnet:

Dies ordnet eine Liste von Wörtern mit Werten. Zum Beispiel, wenn Sie willst aus dem Gewicht des Wörterbucheintrags ‚Nick‘ drucken:

Das wird gedruckt „25“. wenn Konstrukte sind die gleichen wie in den meisten anderen Sprachen:

Also, das sind die Nüsse-und-Bolzen der Perl-Programmierung - alles, was wir unser IRC-Bot zu schreiben beginnen müssen!

Moment mal, was ist IRC?

IRC (Internet Relay Chat) ein Echtzeit-textbasierte Diskussion System ist, das das World Wide Web älter ist kann ein offenes, Klartext-Protokoll, und jemand ein Front-End-Programm das schreibt 1988 IRC erfunden wurde, System. IRC Diskussionen statt in separaten Netzwerken; einige orientieren sich an Open-Source (irc.freenode.net), während andere auf Gaming ausgerichtet sind.

Jedes IRC-Netzwerk besteht aus mehreren Servern, die zusammen verknüpfen - Sie einen Server in geographischer Nähe zu Ihnen wählen, oder einfach nur irgendein zufällig auswählen. So oder so, werden Sie Teil des gleichen Netzwerks sein. Zum Beispiel im Freenode Netzwerk zu chatten, erhalten einen IRC-Client (zB X-Chat), feuern sie auf und geben Sie ein:

(IRC Befehle beginnen mit Schrägstrichen.) Sie dann Ihren Namen setzen können und mit einem Passwort registrieren verwenden:

Dann können Sie einen ‚Kanal‘ (wie einem bestimmten Chatraum) verbinden mit:

Einrichten

Wir werden ein spezielles Zusatzmodul verwenden, für Perl Net :: IRC genannt. Dies bietet eine Schnittstelle zum IRC-Protokoll, das bedeutet, dass wir Unmengen von Code nicht zu verwirren schreiben müssen, um mit Buchsen und Anschlüssen. Stattdessen können wir Net :: IRC sagen, um alle Netzwerkgeschäft auszusortieren, so dass uns darauf, die Bot Fixfokus tun, was wir wollen.

Extrahieren der tarball Schalten in die resultierende Verzeichnis und eingeben:

Sie haben den letzten Befehl als root eingeben. Dadurch wird das Net :: IRC-Modul in Ihre system Perl-Installation installieren, so das Programm, das wir es verwenden, schreiben wollen können!

Melden Sie sich auf IRC und wechseln Sie zu Ihrem normalen Benutzernamen ein. Wenn Sie es noch nicht registriert haben, sollten Sie so etwas wie ein:

Wir müssen auch einen registrierten Benutzernamen für unsere soon-to-be-born IRC-Bot aufgebaut. Schalten Sie Ihren Benutzernamen und ein Passwort zuweisen wie folgt aus:

Natürlich können Sie den Nickname und Passwort festgelegt, was auch immer Sie wollen, aber sie erinnern - wir sie in der Perl-Code des Bots verwenden werden! So, jetzt haben wir zwei registrierte Benutzername: unsere, und das eine für den bietet.

Zeigen Sie mir den Code

Jetzt sind wir bereit, den Bot laufen. Hier ist der Code: Sie werden es nicht wollen, von Hand einzutippen, so laden Sie es von hier. Bevor Sie es ausführen, lesen Sie aber durch den Code und dann die folgende Beschreibung.

Wir definieren den IRC-Server, auf die unsere Bot wird verbinden, und einen Kanal, der Bot beitreten. Dann setzen wir den Benutzernamen des Bot (auch bekannt als Spitzname) und das Passwort wird es verwenden, um sich Server an den IRC zu identifizieren. Schließlich definieren wir die Spitznamen des Benutzers, der Bot sprechen wird - so wird diese Ihre normalen IRC Spitznamen sein.

Aber es gibt noch eine Sache, wir müssen zuerst tun: attach einige Bot Aktionen auf Nachrichten von dem IRC-Server. Unser Bot wird nicht ganz zu schweigen, so muss er wissen, welche Nachrichten sie reagieren sollte. Die vier add_global_handler Linien beschäftigen sich mit dieser - sie sind unser Bot sagen: „Wenn Sie die Nachricht A empfangen, zu Unterprogramm B springen“.

Zum Beispiel sagt die erste Zeile in diesem Teil des Codes: „Wenn wir Nachricht 376 erhalten, rufen Sie die on_connect Funktion“. Nachricht 376 ist ein spezieller Code, der IRC-Server während der Verbindungsphase sendet zurück - es gibt an, dass der Server die normalen Verbindungsinformationen geliefert hat, und ist nun bereit, Befehle zu akzeptieren.

Wenn Sie ein regelmäßiger IRCer sind, werden Sie wissen, dass, wenn Verbindung zu einem Server, Sie Unmengen von Informationen über den Serverstatus, Community-Nachrichten und so weiter sehen. Der 376-Code zeigt an, dass die Begrüßungsnachrichten beendet haben.

Dann fügen wir Handler für drei weitere Meldungen: Trennung, treten, und private Nachricht senden. Beziehungsweise, sagen diese unsere Bot bestimmte Funktionen zu nennen, wenn sie trennt, oder aus einem Kanal geworfen, oder erhält eine private Nachricht senden. IRC-Bots können auf eine viel breitere Palette von Nachrichten als diese reagieren, aber in unserem Fall, wir brauchen nur ein paar spezifische Nachrichten zu verarbeiten.

Als nächstes haben wir IRC- $> beginnen; das schlägt unser Bot in die Tat umzusetzen. Er weiß, welcher Server und Kanal es verwenden würde und die Subroutinen aufrufen, wenn es bestimmte Nachrichten empfängt. So ist der Bot verbindet, und nach ein paar Sekunden, erhält er die 376 Nachricht zuvor erwähnt. Dies löst die on_connect Funktion.

Also, wenn der Bot verbindet, senden wir eine privmsg (Private Nachricht) zu nickserv, die den Spitznamen Handler auf den meisten IRC-Netzen ist. Wir bieten das Kennwort des bietet es auf dem Server zu authentifizieren. Dann haben wir unseren festgelegten Kanal verbinden, und eine kleine Nachricht auszusenden die besagen, dass wir gehen, ruhig zu sein - nicht den Kanal mit zufälligem Müll überfluten!

Wenn das getan ist, wird der Bot still sitzen, wenn sie getrennt oder getreten, wobei in diesem Fall wird es die beiden folgenden Funktionen aufrufen und schließen oder einen Welpen Augen drucken „Bitte nicht treten mich!“ Nachricht.

Die letzte Funktion, on_msg, ist das wichtigste hier. Dies wird aufgerufen, wenn der Bot eine private Nachricht empfängt - das heißt, eine Nachricht in einem separaten Dialog, nicht etwas in dem Hauptkanal. Wenn der Bot jede Art von Nachricht empfängt, sendet er die Ausgabe von `uptime` zu ​​den $ botadmin Benutzer, die Ihre normalen Spitzname ist.

Beachten Sie die Graviszeichen ( `) Zeichen um` uptime`: diese Perl sagen den spezifischen Befehl auszuführen und die Ausgabe als String zurück. So ist die privmsg Leitung sendet eine Nachricht, die Ausgabe von uptime zu unseren normalen Benutzer enthält. Sie können die Graviszeichen Taste unter der Escape-Taste auf den meisten PC-Tastaturen finden.

Code Project Bauen Sie sich ein IRC-Bot, TuxRadar Linux

Die erste Version unserer bot: wenn wir davon sprechen, bietet es Informationen uptime. Aber es könnte mehr tun.

Renn weiter

Lassen Sie uns nun den Bot laufen. Aufmachen bot1.pl und ändern Sie die fünf Konfigurationsvariablen an der Spitze Ihrer Konfiguration passen - also geben ihm den richtigen Bot Nickname und Passwort, das Sie zuvor registriert haben, und stellen Sie die $ botadmin Name Ihr normales Benutzerkonto sein. Jetzt Ihr IRC-Client anwerfen, identifizieren Sie sich mit dem IRC-Server und verbinden Sie den Kanal für den Bot angegeben. Führen Sie dann den Bot mit:

Nach wenigen Sekunden wird der Bot verbinden, identifizieren sich mit dem IRC-Server und verbinden Sie den Kanal angegeben. Sie sollten es mit seiner kleinen Begrüßungsmeldung erscheinen! Jetzt einen privaten Dialog starten (privmsg) mit ihm, und geben, was Sie wollen - den Bot mit der Ausgabe von uptime reagiert. Ausgezeichnet! Sie können nun den Bot auf jedem Rechner laufen Sie wählen, und zu verfolgen, dass die Maschine der Betriebszeit (und Laststufe) einfach durch IRC Anmeldung und im Gespräch mit ihm.

Außer natürlich, es ist ziemlich in diesem Stadium begrenzt. Jedes Mal, wenn jemand auf das Bot in einer privaten Nachricht spricht, wird es die Ausgabe von uptime zu Ihnen. Außerdem ist es begrenzt auf den einzelnen Befehl uptime - fair genug, wenn das ist alles, was Sie überwachen möchten, aber es könnte so viel mehr tun.

Wenn alles in Ordnung läuft, können Sie die letzte Funktion (on_msg) mit mehr Funktionen erweitern, wie dies (der vollständige Code hier verfügbar ist):

Dieses Mal in der dritten Zeile der Funktion (if), überprüfen wir sehen, wer an den Bot eine private Nachricht sendet. Weiter geht es nur, wenn $ botadmin an den Bot spricht - mit anderen Worten, wenn es uns ist! Dann schauen wir in den eigentlichen Text, den wir in den Strafraum. Dies wird in dem $ event-> args-Array zur Verfügung gestellt, die eine Liste von Text enthält, stellen wir an den Bot gesendet.

Wir radeln durch den Text, und überprüfen, um zu sehen, ob es einen Befehl übereinstimmt wir ausführen wollen. Das ist, was die if ($ arg =

m / uptime /) Linie tut: es sagt: „Wenn eine der Textzeilen auf den Bot gesendet, um die Zeichenfolge uptime enthält, gehen Sie wie folgt vor.“ Die m / uptime / bit ist ein regulärer Ausdruck, zu überprüfen, ob die Textübereinstimmungen zu sehen Betriebszeit.

Nun uptime gibt nur eine Zeile, so scheint es, um durch alle möglichen Ausgabezeilen zwecklos. Aber Sie werden feststellen, dass der nächste Code Chunk überprüft, ob wir df an den Bot gesendet - und df erzeugt mehrere Zeilen ausgegeben. Also, wenn der Bot df in einer privaten Nachricht von uns bekommt, sammelt es die Ausgabe und sendet sie zurück, Line-by-line.

Sie haben nun ein erweiterbares IRC-Bot, der auf Ihre Befehle reagiert, und reagiert nur auf Sie; es wird keine Informationen an zufälligen Fremden ausspeien (es sei denn, sie mit Ihren Spitznamen einloggen und Ihr Passwort kennen). Natürlich wollen Sie nicht den Bot Macht an die Macht-down Ihre Maschine geben, aber Sie können es verwenden, viel Feedback auf einer Maschine zu bekommen.

Dies gibt Ihnen jede Menge Flexibilität: Sie können den Bot auf Ihrem Webserver ausführen können, und wenn Sie etwas vermuten, mit der Maschine liegt, nur Hop auf IRC und haben einen kurzen Schwatz mit dem bot. Oder Sie könnten den Bot auf Ihrem Heim-Desktop-Rechner laufen, und mit ihm kommunizieren von der Arbeit, es zu sagen bestimmte Prozesse zu laufen / stoppen, wenn nötig. Die Möglichkeiten sind unendlich - und alles, was Sie brauchen, ist der Zugang zu IRC!

Code Project Bauen Sie sich ein IRC-Bot, TuxRadar Linux

Bot 2.0 jetzt können wir es spezifische Befehle geben auszuführen, und es wird nicht jemand anderes reden lassen Sie es!

In Verbindung stehende Artikel