2 Stimmen

Verwendung von Befehlen in meinem IRC-Client

Ich versuche derzeit, einen einfachen IRC-GUI-Client zu erstellen. Als Basis verwende ich SmartIrc4net, da es mir zu sein scheint, dass es am unterstützendsten ist, hier gefunden: http://www.codeproject.com/Articles/8323/SmartIrc4net-the-C-IRC-library

Jetzt habe ich ein Problem mit den Aktionsbefehlen. Zum Beispiel, um sich selbst ein Operator zu machen, müsste man eingeben

/oper admin passwort oder um den Host zu ändern, würde es /sethost mynewhost sein

Mein Problem ist, dass, wenn ich diesen Wert in ein TextBox übergebe, anstatt mich zum Administrator zu machen oder meinen Host zu ändern, wird mein Eingang nur als Text im Chat angezeigt.

Hier ist mein Code:

        string[] serverliste;
        serverliste = new string[] { "meinedomain.com" };
        int port = 6667;
        string kanal = "#MeinKanal#";
        try
        {
            irc.Connect(serverliste, port);
            irc.Login("SmartIRC", "SmartIrc4net Test Bot");
            irc.RfcJoin(kanal);

                irc.SendMessage(SendType.Message, kanal, "/oper admin meinpasswort");
                irc.SendMessage(SendType.Action, kanal, "/sethost mynewhost");

            irc.Listen();

Aber wenn ich diese Werte übergebe, wird nur das angezeigt, was ich im Chat eingegeben habe, ohne mich tatsächlich zum Operator zu machen oder meinen Host zu ändern.

Gibt es eine Möglichkeit, wie ich es tatsächlich schaffe, Befehle an den IRC-Server zu übermitteln, anstatt nur den Rohtext im Chat anzuzeigen?

Jede Hilfe wäre dankbar, Danke

0 Stimmen

Studiere das IRC-Protokoll. Der IRC-Client sendet /oper nicht als PRIVMSG an den Server, sondern als OPER-Befehl. Du kannst damit beginnen, Wireshark auszuführen, den IRC-Client mit einem Server zu verbinden, den Befehl einzugeben und in Wireshark zu schauen, was genau über das Kabel gesendet wird.

0 Stimmen

Ja, ich habe gerade Wireshark überprüft und festgestellt, dass eine normale Nachricht mit PRIVMSG gesendet wird und Befehle wie OPER und SETHOST nicht mit PRIVMSG beginnen. Wie schaffe ich es also, dass mein Befehl nicht mit PRIVMSG beginnt? Danke für Ihre Antwort

2voto

Joey Punkte 329386

Dies liegt daran, dass Sie explizit eine Nachricht senden. IRC selbst hat kein Konzept von /Befehlen, das passiert alles im Client. Was Sie tun, ist einfach eine Nachricht mit einem spezifischen Text zu senden, der zufällig mit / beginnt. Was der Server empfängt, ist also

PRIVMSG #channel :/oper admin mypass

anstatt

OPER admin mypass

Sie müssen nur herausfinden, wie Sie Raw-IRC-Befehle an den Server senden können. Die von Ihnen verlinkte Seite bietet jedoch nicht viel Dokumentation zu diesem Teil. Aber vom Aufbau her sollte dies entweder in Layer 2 oder Layer 1 sein.

0 Stimmen

Gibt es also einen bestimmten Code-Typ, den ich eingeben müsste, damit er meinen Text in Rohdaten umwandeln könnte?

0 Stimmen

Wenn Sie den Befehl aus einem Textfeld erhalten, müssten Sie ihn analysieren, um festzustellen, ob Sie nur eine Nachricht oder einen Befehl senden möchten. tbInput.Text.StartsWith("/") könnte in diesem Fall eine gute Bedingung sein, die Sie überprüfen. Dann müssen Sie einfach herausfinden, was genau Sie senden müssen und mit welchen Parametern.

0 Stimmen

Hallo, Ja, ich habe das versucht, aber leider ohne Erfolg. Aber jetzt verstehe ich genau, was du meinst, denn als ich Wireshark ausgeführt habe, habe ich den PRIVMSG-Befehl gesehen, als ich eine Nachricht gesendet habe. Die Rohdaten, die eingefügt werden sollen, stammen nicht aus einem Textfeld, sondern werden im Codebehind spezifiziert. Könntest du mir irgendwelche Tipps geben, was ich tun müsste, um eine Nachricht ohne den PRIVMSG-Befehl zu senden, damit ich das herausfinden kann? Vielen Dank

1voto

Tenerezza Punkte 394

Es gibt viele weitere Optionen als SendMessages.

Sie haben zum Beispiel irc.RfcOper(Benutzername, Passwort) für Oper.

Wenn Sie Rohdatenbefehle für Dinge senden möchten, die nicht direkt unterstützt werden, zum Beispiel sethost, können Sie einfach ein WriteLine senden.

irc.WriteLine("sethost mynewhost")

Öffnen Sie die IrcCommands.cs, um eine Liste der Befehle und Rfc2812.cs zu sehen, wie sie übertragen werden.

Ich empfehle Ihnen jedoch, den Rfc2812-Standard zu lesen oder zumindest einen Blick darauf zu werfen, den Sie hier finden können https://www.rfc-editor.org/rfc/rfc2812

0 Stimmen

Hallo, ich habe gerade die Rfc2812.cs und die IrcCommands.cs überprüft. Ich habe gesehen, wie es funktioniert, aber es zeigt mir nicht wirklich, wie ich es machen soll. Glaubst du, ich sollte einfach eine sethost-Funktion in die Klasse hinzufügen und sie neu kompilieren?

0 Stimmen

Ich habe bereits genau geschrieben, was du tun musst. Überprüfe die beiden Codezeilen.

0 Stimmen

OK, ich glaube, ich verstehe dein Problem, du verwendest eine viel zu alte Version von SmartIrc4Net, die Homepage ist hier meebey.net/projects/smartirc4net. Wenn du sie vom Code-Projekt heruntergeladen hast, ist die Version 0.2.0, die neueste ist 0.4.5.1.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X