[Python] Programmieren Sie einen Bot für IRC

Heute werde ich Ihnen beibringen, wie man a programmiert bot für IRC. Für diejenigen, die es nicht wissen, ist ein Bot ein Programm, das eine Verbindung zu einem IRC-Kanal herstellt und mit diesem interagiert, wodurch wir beispielsweise den Kanal ohne ihn moderieren können dass wir verbunden sind und somit Spam vermeiden oder eine Reihe von Bestellungen erkennen und den entsprechenden Code ausführen.
Obwohl es bereits Bots gibt, bin ich ehrlich einer von denen, die gerne ihre eigenen Programme zum Lernen erstellen und die große Zufriedenheit, die es uns gibt, nachdem wir gesehen haben, dass es funktioniert ^^

Nachdem dies gesagt ist, fahren wir mit dem Tutorial fort.

Um den Bot zu programmieren, benötigen wir einen Nur-Text-Editor cualquiera (Nano, Gedit, Medit usw.) und Python-Interpreter (2.6 oder 2.7 werden notwendig sein, funktioniert nicht mit Python 3.x.).

Zuerst importieren wir die erforderliche ModuleIn diesem Fall benötigen wir nur zwei:

[code] #! / usr / bin / env python
# - * - Codierung: utf-8 - * -

Socket importieren
Zeichenfolge importieren
[/ Code]

Nun fahren wir fort mit konfigurieren der bot:

[Code] HOST=»irc.desdelinux.Netz"
PORT = 6667
NICK = »CalicoBot»
IDENT = »CalicoBot»
REALNAME = »CalicoBot»
CHAN = »# Home»
readbuffer = »»
[/ Code]

Ich werde jede Variable erklären:

  • HOST: Die URL des Servers, zu dem wir eine Verbindung herstellen
  • HAFEN: Der Server-Port. Standardmäßig ist es 6667.
  • NICK, IDENT und REALNAME: Sie entsprechen dem Spitznamen des Bots, seiner Identifikation und dem richtigen Namen.
  • CHAN: Der Kanal, in den der Bot eintreten wird
  • Lesepuffer: In dieser Variablen werden die vom Server gesendeten Daten gespeichert.

Sobald unser Bot konfiguriert ist, fahren wir fort mit die Verbindung

[code] s = socket.socket ()
an Verbindung ((Host, Port))
s.send ("NICK% s \ r \ n"% NICK)
s.send ("USER% s% s bla:% s \ r \ n"% (IDENT, HOST, REALNAME))
s.send ("JOIN:% s \ r \ n"% CHAN)
[/ Code]

Die erste Zeile hat nicht viel Rätsel, die zweite schafft die Serververbindung und die letzten drei senden die Daten des Bots an den Server, um mit der Anmeldung fortzufahren.

Sobald die Verbindung hergestellt ist, erstellen wir eine Endlosschleife in die wir gehen werden Empfangen und Senden von Daten vom / zum Server:

[Code] während 1:
readbuffer = readbuffer + s.recv (1024)
temp = string.split (Lesepuffer, "\ n")
readbuffer = temp.pop ()
für line in temp:
line = string.rstrip (line)
line = line.split (CHAN + ':')

if line [0] .find ("PING")! = -1:
pingid = Zeile [0] .split () [1] s.send ("PONG% s \ r \ n"% pingid)
[/ Code]

Von allen oben geschriebenen Zeilen werde ich nur die wichtigen kommentieren.
Mit line = line.split (CHAN + ':') Was wir tun, ist zu teilen, was der Server uns wann sendet Lassen Sie uns etwas aus dem Kanal holen.
Zum Beispiel zeigt die folgende Zeile an, dass jemand etwas auf dem Kanal geschrieben hat:

:son_link!sonlink@127.0.0.1 PRIVMSG #Home :Hola ^^

Der erste ist der Spitzname und die Verbindungsdaten des Benutzers (getrennt durch!), Der Befehl (in diesem Fall zeigt er an, dass er geschrieben hat), der Kanal und schließlich nach dem Doppelpunkt die gesendete Nachricht. Ich werde nicht mehr viele Befehle erklären, da dies nicht in dieses Tutorial fällt.

Die anderen wichtigen Zeilen sind diejenigen sind nach dem wenn. Der Server sendet von Zeit zu Zeit den PING-Befehl, um zu überprüfen, ob der Benutzer noch verbunden ist. In diesem Fall sendet der Bot den PONG-Befehl mit einer ID, die PING gesendet hat, um dem Server anzuzeigen, dass noch eine Verbindung besteht.

Damit haben wir bereits die Basis des Bots. Jetzt werde ich erklären, wie der Bot auf bestimmte Befehle reagieren kann, unabhängig davon, ob sie vom IRC selbst oder von Benutzern stammen.

Antworten auf IRC-Befehle:

PING und PRIVMSG sind Beispiele für IRC-Befehle. Es gibt viele Befehle, aber wie ich bereits sagte, werde ich nicht näher darauf eingehen.
Zum Beispiel können wir den Bot dazu bringen, Benutzer zu begrüßen, die eine Verbindung herstellen:

[Code] wenn Zeile [0] .find ('JOIN')! = -1:
name = line [0] .split ('!') [0] .split (':') [1] wenn name! = NICK und name.find (HOST) == -1:
s.send ("PRIVMSG% s: Willkommen @% s ^^ \ n"% (CHAN, Name))
[/ Code]

Zuerst prüfen wir, ob der Server den Befehl sendet JOIN Dies zeigt an, dass jemand mit dem Server verbunden ist. Dann extrahieren wir den Nick und prüfen, ob der Nick nicht die IRC-URL ist (Wenn nicht, sobald wir den Bot ausführen, wird die URL begrüßt) und schließlich senden wir die Begrüßungsnachricht.

Bot-Befehle:

Wie mache ich jetzt meinen Bot? auf meine eigenen Befehle antworten? Schauen wir uns ein Beispiel besser an:

[Code] if Zeile [1] == '$ version':
s.send («PRIVMSG% s: CalicoBot 0.1.2 (c) 2012 Son Link \ n»% CHAN)
[/ Code]

In diesem Beispiel, wenn jemand schreibt $-Version Der Bot zeigt die Nachricht mit Namen, Version und Autor an. Der vollständige Code des Beispiels lautet wie folgt:

[Code] Socket importieren
Zeichenfolge importieren

HOST = »localhost»
PORT = 6667
NICK = »CalicoBot»
IDENT = »CalicoBot»
REALNAME = »CalicoBot»
CHAN = »# Home»
readbuffer = »»
s = socket.socket ()
an Verbindung ((Host, Port))
s.send ("NICK% s \ r \ n"% NICK)
s.send ("USER% s% s bla:% s \ r \ n"% (IDENT, HOST, REALNAME))
s.send ("JOIN:% s \ r \ n"% CHAN)

während 1:

readbuffer = readbuffer + s.recv (1024)
temp = string.split (Lesepuffer, "\ n")
readbuffer = temp.pop ()
für line in temp:
Zeile drucken
line = string.rstrip (line)
line = line.split (CHAN + ':')

if line [0] .find ("PING")! = -1:
pingid = Zeile [0] .split () [1] s.send ("PONG% s \ r \ n"% pingid)

if line [0] .find ('JOIN')! = -1:
name = line [0] .split ('!') [0] .split (':') [1] wenn name! = NICK und name.find (HOST) == -1:
s.send ("PRIVMSG% s: Willkommen @% s ^^ \ n"% (CHAN, Name))

wenn len (Linie) <1:
if line [1] == '$ version':
s.send («PRIVMSG% s: CalicoBot 0.1.2 (c) 2012 Son Link \ n»% CHAN)
[/ Code]

Ich hoffe, Ihnen hat dieses Tutorial gefallen, und natürlich überlasse ich Ihnen den Link zum Code meines Bots, damit Sie dessen Code vollständig sehen und besser sehen können, wie er funktioniert (obwohl ich einige Befehle für den persönlichen Gebrauch entfernt habe).

CalicoBot


Hinterlasse einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert mit *

*

*

  1. Verantwortlich für die Daten: Miguel Ángel Gatón
  2. Zweck der Daten: Kontrolle von SPAM, Kommentarverwaltung.
  3. Legitimation: Ihre Zustimmung
  4. Übermittlung der Daten: Die Daten werden nur durch gesetzliche Verpflichtung an Dritte weitergegeben.
  5. Datenspeicherung: Von Occentus Networks (EU) gehostete Datenbank
  6. Rechte: Sie können Ihre Informationen jederzeit einschränken, wiederherstellen und löschen.

  1.   auroszx sagte

    Heh, ich konnte den Bot des Bullshits, den du im IRC reitest, nicht verfehlen. Sehr interessanter Artikel.

  2.   Cesar Salat sagte

    Sehr einfache und klare Erklärung.
    Was ist, wenn im Python-Code alle Einrückungen fehlen?

  3.   rafa sagte

    Ausgezeichneter Artikel und wie einfach es ist, eine Verbindung zu einem IRC herzustellen, um einen Bot zu programmieren :)…

    Es erinnert mich an jene Zeiten, als wir uns wie Programmierer fühlten, die Skripte für mIRC in Chats auf MSN oder MSNGroups schreiben.

  4.   truko22 sagte

    Interessant halte ich es 😀

  5.   Genesis Vargas J. (@elprincipiodeto) sagte

    excellent !!

  6.   Elin sagte

    Sehr nützlich, danke Son_Link!

    Viele Grüße!

  7.   Dbillyx sagte

    Prost…

    Folgen Sie Ihren Anweisungen und testen Sie, was nur funktioniert
    Socket importieren
    Zeichenfolge importieren

    HOST = »localhost»
    PORT = 6667
    NICK = »CalicoBot»
    IDENT = »CalicoBot»
    REALNAME = »CalicoBot»
    CHAN = »# Home»
    readbuffer = »»
    s = socket.socket ()
    an Verbindung ((Host, Port))
    s.send ("NICK% srn"% NICK)
    s.send ("USER% s% s bla:% srn"% (IDENT, HOST, REALNAME))
    s.send ("JOIN:% srn"% CHAN)

    Wenn ich jetzt den Kanal und den Nick ändere, wird mir die Fehlersyntax angezeigt

    Ich habe andere Bekannte gefragt und sie sagen mir, dass das nicht wie Python aussieht

    Ich weiß nicht, was ich falsch mache oder warum ich alles kopiere und in Python einfüge und es eingebe und es verbindet sich mit dem Kanal, aber nach 250 Sekunden entfernt der Kanal es, weil es keine Antwort von Pong gab ...

  8.   Pinfry sagte

    Der vollständige Code funktioniert bei mir nicht, der letzte Absatz schlägt fehl und ich kann den Fehler nicht finden. Wenn ich diesen Teil lösche, verbindet er sich und funktioniert perfekt. Getestet mit Python 2.7.3 unter Windows 7.

    PS: In meinem Fall verbinde ich mich mit einem Passwort mit einem Server und füge folgende Zeilen hinzu:
    PASS = »Passdelbot»
    s.send ("PASS% s \ r \ n"% PASS)

  9.   Delfin sagte

    Hallo Son Link, vielen Dank für den Artikel, es ist sehr interessant, ich kann einfach nicht auf die gesendeten Befehle antworten. Das Programm geht nicht in das letzte if und ich kann nicht herausfinden warum: "if len (line)> 1:"
    Ich erwarte deine Antwort.
    dank