Benötige Hilfe beim Irc Client/Bot

derzuerner

Grünschnabel
Hallo Leute,

Ich bin noch ein echt frischer Vbler,
versuche momentan erstmal eienn Irc Clienten zu programmieren um diesen einen Bot einzufügen.

Allerdings habe ich momentan Folgendes Problem.

Und zwar wird mir beim Empfangsfenster des Chattes bei einer Nachricht immer dies angezeigt :
:derzuerner!~dominik@p579A2E10.dip.t-dialin.net PRIVMSG #technische_informatik_1 :Hi Leute

Giebt es da den weg aus dem ganzen Wirr z.B soetwas draus zu machen?
Weil mit dem Oben gezeigten werde ich wohl eher schwer dem Bot sagen könnten das er bei !Hallo "Hallo" Sagen soll

Es wäre daher schon einfacher das ganze erstmal so zu gestalten:

#Channel : Hallo Leute

Hier ist der Source des Ganzen Clients...

Option Explicit

Dim strdata As String

Private Sub cmdConnect_Click()
Wsck.Close
Wsck.Connect txtIp, txtPort
End Sub

Private Sub cmdDisconnect_Click()
Wsck.Close
txtRecieve.Text = ""
End Sub

Private Sub cmdSend_Click()
txtRecieve.Text = txtRecieve & "privmsg " & txtChannel & " " & txtSend & vbCrLf
Wsck.SendData "privmsg " & txtChannel & " " & txtSend & vbCrLf
txtSend.Text = ""
End Sub

Private Sub Wsck_Close()
txtRecieve.Text = ""
End Sub

Private Sub Wsck_Connect()
txtRecieve = txtRecieve & "nick " & txtNickname & vbCrLf
Wsck.SendData "nick " & txtNickname & vbCrLf

txtRecieve = txtRecieve & "user " & txtusername & " 1 " & txtNickname & " : " & txtNickname & vbCrLf
Wsck.SendData "user " & txtusername & " 1 " & txtNickname & " : " & txtNickname & vbCrLf

txtRecieve = txtRecieve & "join " & txtChannel & vbCrLf
Wsck.SendData "join " & txtChannel & vbCrLf
End Sub

Private Sub Wsck_DataArrival(ByVal bytesTotal As Long)
Wsck.GetData strdata
txtRecieve.Text = txtRecieve & strdata
End Sub

EDIT:
Haben einen Anderen Lösungs weg gefunden mit dem der Bot den Usertext sich selbst raussucht.
Evt kann den mal einer gebrauchen!

If InStr(1, dat, "!hi ") Then
Winsock1.senddata "PRIVMSG #fishbot :Hello!" & vbCrLf
End If
End Sub

Hätte da noch eine Frage, wie baue ich dadrauß eine Case anwendung?

Da wäre noch ne Frage wie bau ich das ein das der Bot immer weiß vom wem das kommt? Damit er auch sagen kann "Hallo derzuerner"

Vielen Danke
 
Zuletzt bearbeitet:
Ne Case Anweisung, wenn es nur eine Vorgabe (jemand schreibt "Hi") vorhanden ist?
oder willst es auch auf Ausdruecke wie Hallo, Gruess Gott etc ausweiten?
 
Hi,

eine Case-Verzweigung macht nur dann Sinn, wenn du noch andere Fälle hast, auf die dein Bot anders reagieren soll.

Ungetestetes Beispiel:
Visual Basic:
' Extrahiert den Text von links ausgehend (Left) bis zum ersten Auftreten 
' eines Leerzeichens (InStr) als Kleinbuchstaben (LCase).
Select Case LCase(Left(dat, InStr(dat, " ")))
    Case "!hi"
        WinSock1.SendData "PRIVMSG #fishbot :Hello!" & vbCrLf
    Case "!hello"
        WinSock1.SendData "PRIVMSG #fishbot :Hi!" & vbCrLf
End Select

Zum Herausfinden des Namens: Du bekommst doch vom WinSock-Control eine vollständige IRC-Zeile, die unter anderem auch einen Benutzernamen enthält, oder? Den müsstest du dir ebenfalls über Funktionen zur Textbearbeitung heraussuchen. Sieh dir dazu mal das hier an: http://www.vbarchiv.net/workshop/details.php?id=27

Grüße, D.
 
Ja Genau so wie es Dario geschrieben hat wollt ichs haben.

Aber irgendmag das noch nicht so richtig ich musste das ja die Variablen namen ädern.. und das LCase muss ich das nicht auch definieren

Select Case Lcase(Left(strdata, InStr(strdata, " ")))
Case "!hello"

Wsck.SendData "PRIVMSG " & txtChannel & " :Hi!" & vbCrLf

Case "!hi"

Wsck.SendData "PRIVMSG " & txtChannel & " :Hello!" & vbCrLf
End Select

So funktioniert das leider nicht... der Bot erkennt nicht das er etwas zum auswerten hat

Und den link denn werd ich mir gleich noch mal in ruhe ansehen Danke dir erstmal!:suspekt:
 
Zuletzt bearbeitet:
Oh Endschuldige.. ich wollts nur übersichtlicher machen :)

Habs dem entsprechend editiert am Schluss will aber auch schon mehrere Befhle haben..
Mit If ist zwar net sooo schlimm aber Case find ich eleganter...

So zu der Sache mit Darios Link !

Danke hab ich echt was tolles gelernt Problem ist nur.. ich weiß nicht wie lang die Usernames sind.. Und der Client bekommt immer so etwas gesendet bei jeder nachricht

:derzuerner!~dominik@p579A2F67.dip.t-dialin.net PRIVMSG #annytest :"Nachricht"


t

Ich hab nochmal was in nem anderen Open Source Client gefunden weiß nicht ob ihr das jetz veständlich ist ich verstehs nämlich nicht so ganz

'find out who posted the message
Temp2 = InStr(1, Data, "!") - 2

'get person's name in variable
InboundMessageName = Mid(Data, 2, Temp2)

So nocch ein Edit ;)

Müsste es wenn wir uns das erste Zitat im Beitrag ansehen nicht eher so heißen? Der Text erscheint ja Rechts

Select Case Lcase(Right(strdata, InStr(strdata, " ")))
Case "!hello"

Wsck.SendData "PRIVMSG " & txtChannel & " :Hi!" & vbCrLf

Case "!hi"

Wsck.SendData "PRIVMSG " & txtChannel & " :Hello!" & vbCrLf
End Selec
 
Zuletzt bearbeitet:
Hi,

natürlich sind die Benutzernamen unterschiedlich lang, genau wie die Schlagwörter unterschiedlich lang sein können, auf die dein Bot zugreift. Aber irgendwo in der Protokolldefinition für IRC wird festgelegt sein, wie eine Zeile aufgebaut ist. Wenn ich mir deine Zeile ansehe, würde ich (ohne viel über IRC zu wissen) raten, dass du den Benutzernamen herausfinden kannst, indem du zwischen dem ersten Doppelpunkt und dem ersten Ausrufezeichen ausschneidest. Du musst die Länge also nicht wissen, sondern nur die Positionen ermitteln und dann mittels der Mid()-Funktion ein Stück vom String ausschneiden. Nichts anderes macht auch der Beispielcode, den du da gefunden hast. ;)

Wenn du deine gesamte Zeile weiterhin hast, um daraus die Nachricht zu filtern, musst du natürlich von rechts anfangen. Allerdings brauchst du eben auch hier wieder die Position von der ab du den rechten Teil herausschneidest, um an den Nachrichtentext zu kommen. Nach der gesamten Zeile zu urteilen müsste diese Position direkt hinter dem zweiten Doppelpunkt beginnen. Also ermittelst du auch hier wieder mit InStr() die Position des Doppelpunkts und schneidest von da ab den Text aus.

Grüße, D.
 
Ach danke sehr Dario :)
Jetz bin schon viel glücklicher.
Allerding nur noch zu besseren Verständiss
InStr(1, Data, "!") - 2
InStr sag "im String"? "1" sagt die erste stelle wird ignoriert? "Data" sagt dann das alles dahinter die Variable data ist? "!" sag das Data nur bist zur zeile vor dem "!" geht? aber was macht "-2"

Und irgendwas müsste ich hier übersehen haben..

Select Case Lcase(Left(strdata, InStr(strdata, ":"))
 
Hi,

InStr sucht in einem String, den du übergibst nach dem ersten Vorkommen eines anderen Strings und gibt dessen Position zurück. Der erste Parameter legt dabei fest, ab welcher Stelle du in deinem String mit der Suche anfängst, der zweite Parameter ist der String oder die Stringvariable selbst und der dritte Parameter ist der Suchstring.

In deinem Code musst du die 2 abziehen, um die Position nachträglich zu korrigieren, würde ich annehmen.

Grüße, D.
 
Hmm Problem ist wo genau setze ich das -2 hin?
Select Case Lcase(Right(strdata, InStr(strdata, ":")-2))

Da, und bei allen anderen Positionen hinter der Klammer bekomme ich einen Laufzeit fehler, hmmm


Und da hätte ich da jetz noch eine Etwas andere Baustelle, möchte da jetz ungern noch ein Thread aufbauen...
Ich würde gerne eine art "Wetter Checker" einabauen der dann auf Befehl seine Daten in den Chat sendet...
 
Zuletzt bearbeitet:
Zurück