[VB.NET] IRC Name und Nachricht

11/26/2014 12:26 dowhile#16
Haenge ans Ende noch irgendein Zeichen bei deiner Ausgabe an, damit du siehst, ob es auf ein Leerzeichen oder nl oder so endet.
11/26/2014 12:31 eRazor97#17
Vielen Dank dowhile!
Ich hab ein vbNewLine dran gehängt und jetzt geht es :)

Vielen Dank!

Was mache ich jetzt schon wieder falsch?

Code:
                If String.Compare(rmsg, "!test" & vbNewLine) = 0 Then
                    send("PRIVMSG #stanleyjuk : Warum testest du mich " & rnick & "?")
                    cout.Write(rnick & " executed !test" & vbNewLine)
                ElseIf String.Compare(rmsg, "!stats" & vbNewLine) = 0 Then
                    send("PRIVMSG #stanleyjuk : Der Stream läuft seit " & GetTime(uptime) & ".")
                    cout.Write(rnick & " executed !stats" & vbNewLine)
                ElseIf String.Compare(rmsg, "!rules" & vbNewLine) = 0 Then
                    send("PRIVMSG #stanleyjuk : Warum testest du mich " & rnick & "?")
                    cout.Write(rnick & " executed !rules" & vbNewLine)
                End If
!rules wird ausgeführt
!test auch
!stats nur wenn ich danach noch nen anderen befehl ausführe wird aber vom bot erkannt nur nicht ausgeführt
11/26/2014 13:17 Devsome#18
Wird !rules beim ersten mal auch sofort ausgegeben ?
Ich würde in diesem Fall eine Switch abfrage nehmen, sofern du vorhast noch mehr "Befehle" zu benutzten
11/26/2014 13:33 eRazor97#19
Ja !rules wird direkt beim ersten mal ausgeführt.
Und wie muss ich die Switch Abfrage dann aufbauen (Codeschnipsel wäre hilfreich).
Ich wüsste nicht wie ich das in eine Case abfrage einarbeiten sollte.
11/26/2014 14:52 Devsome#20
In vb keine ahnung aber in etwa so.

Code:
switch(Bedingung)
	case "!test"
		// Mache dies das
		break;
	case "!rules"
		// Mache rules
		break;
	default:
		// Wenn nichts davon passt
		break;
EndSwitch
11/26/2014 15:03 eRazor97#21
Also so schonmal nicht:
Code:
Select Case rmsg
                    Case "!test"
                        send("PRIVMSG #stanleyjuk : Warum testest du mich " & rnick & "?")
                End Select
und so auch nicht:
Code:
Select Case rmsg
                    Case String.Compare(rmsg, "!test" & vbNewLine) = 0
                        send("PRIVMSG #stanleyjuk : Warum testest du mich " & rnick & "?")
                End Select
Kann mir jemand sagen wie ich das in diesem Fall richtig machen muss?
11/26/2014 15:15 Devsome#22
Sag mal, kennen Sie Google ?
"vb case"
Erster Treffer von Microsoft => [Only registered and activated users can see links. Click Here To Register...]
11/26/2014 15:18 eRazor97#23
Als ob ich das nicht getan hätte -.-
Aber du siehst ja meine 2 versuche wie ich das auf meinen Fall interpretiert habe und es hat nicht geklapt. Entschuldige bitte das ich dann hier nachfrage.
11/26/2014 15:32 Devsome#24
Vielleicht so...
sofern du mehr Anweisungen machen möchtest wenn !test eingeben worden ist, würde ich dort einen Funktionsaufruf machen.

Code:
Select Case True
    Case String.Compare(rmsg, "!test" & vbNewLine)
        Debug.WriteLine("test")
    Case String.Compare(rmsg, "!stats" & vbNewLine)
        Debug.WriteLine("stats")
    Case Else
        Debug.WriteLine("alles andere")
End Select
11/26/2014 15:52 eRazor97#25
Ich weiß absolut nicht warum aber wenn ich den "Bot" starte kommt in der Debug-Konsole test wenn ich !test eingebe kommt "stats" und wenn ich !stats eingebe kommt "test"

ich habe deinen Codeschnipsel 1:1 übernommen :confused:
11/26/2014 16:37 dowhile#26
Quote:
Originally Posted by eRazor97 View Post
Vielen Dank dowhile!
Ich hab ein vbNewLine dran gehängt und jetzt geht es :)
Besser ist, das nl aus rmsg zu entfernen.

Das Select ist falsch, weil String.Compare bei Gleichheit 0 und nicht True zurück gibt (... was musst du also ändern?)
11/26/2014 16:42 eRazor97#27
Ich nehme an das True bei
Code:
Select Case True
auf False zu ändern?

//EDIT: Hab das vbNewLine durch ein vbCrLf ersetzt. Ist doch richtig oder?
Zumindest funktioniert es :D
11/26/2014 17:26 dowhile#28
Ich weiß nicht, ob das geht. Sinnvoller ist es aber, das auf 0 zu ändern, denn dann hast du auch den richtigen Datentypen (0 ist Zahl, False ist Wahrheitswert).

Laut RFC endet jede Nachricht mit CR LF, also sollte das gehen. Besser wäre es aber, wenn du, wie bereits gesagt, einfach aus rmsg die letzten beiden Bytes (also CR und LF) wegschneitest. Schau dir dazu die Methoden von String an (String.Substring, String.Remove oder auch String.Trim sind gute Kandidaten).