Aufgabe
Erstellen Sie einen einfachen IRC-Bot, der einfache Aufgaben wie die Begrüßung des Benutzers ausführt.
Detail
(Möglicherweise wird dieses RFC-Dokument angezeigt .)
Schreiben Sie ein vollständiges Programm, das diese ausführt:
Das Programm gibt
nicknameundrealnamevom Benutzer ein.- Alle
nicknameundrealnamewelche Form[A-Za-z0-9]+sollte erlaubt sein, aber es ist nicht wichtig, ob andere Formen erlaubt sind. Wenn der Benutzer beispielsweise1234qwertyasnicknameund5319009as möchterealname, sollte das Programm diese Namen verwenden, aber es ist nicht wichtig, ob das Programm^^☆Rick Astley☆^^(einschließlich Nicht-Alphabet und Dezimalstellen) als (nicknameoderrealname) verwenden kann oder nicht, obwohl dieser Name möglicherweise abgelehnt wird vom Server.
- Alle
Das Programm wird
serverAddressvom Benutzer eingegeben.- Die Form von
serverAddressistserverIP:serverPort, woserverIPist die IP-Adresse des Servers undserverPortist die Portnummer des Servers.
- Die Form von
Das Programm ist mit Port
serverPortim IRC - ServerserverIP, und es sollte es die Spitznamen nachnicknameund Realnamen wierealnamedurch das SendenUSER realname 0 * :realnameundNICK nickname.Das Programm gibt eine Single ein,
channelNamedie nicht enthalten ist#, und verbindet sich mit dem Kanal#channelName.Senden Sie eine private Nachricht wie folgt
Hello, world!an den#channelNameKanal:PRIVMSG #channelName :Hello, world!Dann macht das Programm diese:
A. Wenn jemand verbindet, Gruß ihn mit den Worten
Hello, @!an#channelName, wo @ ist der Spitzname von ihm / ihr.B. Wenn das Programm gestartet wird, versuchen Sie erneut, sich anzumelden.
C. Wenn eine Person getreten oder verboten wird, sagen wir
POW HAHA.D. Wenn eine Person geht (
PARToderQUIT), sagen SieGoodbye, @!, wo @ der Spitzname von ihr ist.E. Wenn jemand einen Text sagt, einschließlich
Turing testoderturing test, sagen wirI'm a human!.F. Wenn jemand Text sagt, einschließlich
6*9, beenden Sie ihn, indem Sie ihnQUIT :42an den Server senden .G. Wenn jemand Text sagt, einschließlich
all your base are belong to us(ohne Berücksichtigung der Groß- und Kleinschreibung), beenden Sie den Vorgang, indem Sie ihnQUIT :What you say!an den Server senden .H. Wenn jemand sagt, dass ein Text mit einem Leerzeichen und höher nicht vom Text ausgeführt wird, sagen Sie die Summe der Zeichen aller Zeichen (außer des ersten Leerzeichens) im Text.
Wenn ein Fehler auftritt
Wenn ein Fehler (z. B. ein Verbindungsfehler oder ein ungültiger Fehler nickname) auftritt, können Sie das tun, was Sie möchten. Wenn nicknamedas Programm beispielsweise bereits verwendet wird, wird das Programm möglicherweise gestoppt, erhält eine neue nicknamevom Benutzer oder ändert das automatisch nicknameund versucht es erneut.
Beschränkung
Das Programm
- Sollte keine internen Funktionen oder Bibliotheken verwenden, die für die Erstellung von IRC-Clients / Bots vorgesehen sind. dh so etwas wie IRC-Client-Bibliotheken
- Sollte auffordern, was eingegeben werden soll, bevor eine Eingabe erfolgt . Zum Beispiel, bevor Eingaben
serverAddress, sollte es auffordernWrite the address of server:,serverIP:serverPort >,serverAddress >oder einen Text , dass der Benutzer erkennen kann. - Sollte auf mehreren IRC-Servern mit UTF-8 funktionieren. (dh nicht für einzelne Server)
- Die an den Server gesendeten Nachrichten sollten nicht sein
NOTICE. (RFC 2812, 3.3.2 Hinweis: Der Unterschied zwischenNOTICEundPRIVMSGbesteht darin, dass automatische Antworten NIEMALS als Antwort auf eineNOTICENachricht gesendet werden dürfen.) - Sollte eine Nachricht senden, woher die Anfrage kam (
#channelNameodernickname). - Sollte
PONGwennPINGed natürlich.
PS
Nun, ich habe das gerade gemacht, weil es kein Rätsel um den IRC-Bot gab.
Bearbeiten
Nachdem ich den Kommentar von @ dmckee gelesen hatte, änderte ich die Regel für die Auswahl des Gewinners.
Standard
bonus= +0Wenn das Programm irgendwie eine Verbindung zu einem Kanal herstellen kann (auch wenn dies nicht der Fall ist
#channelName),bonus= 1Wenn das Programm die Schritte 1 bis 5 ausführen kann, ist
bonus* = 2.Für jede Aufgabe A ~ H in Schritt 6 gilt, wenn das Programm implementiert,
bonus* =1.2.Wenn das Programm dem folgt, gilt für jeweils sechs Einschränkungen
bonus* =1.05.
und score = int(codelength/bonus).
Programm mit der niedrigsten Punktzahl ist Gewinner. Wenn zwei Antworten die gleiche Punktzahl haben, gewinnt die Antwort mit den höchsten Stimmen.
EDIT Edit: Ich denke 1.2und 1.05in Schritt 4 und 5 sollte etwas größer eingestellt werden .. Was denkst du darüber?
Der Gewinner steht fest, aber ich denke, es gab zu wenige Einsendungen.
Jeder kann den Code noch einreichen ..: P.