Seite 1 von 2

TomaHawK IRC V0.107

Verfasst: 23.07.2005 20:06
von HeX0R
Moin,

habe meinen IRC Clienten nun soweit, dass ich keine eigenen Bugs mehr finde.
Was natürlich nicht heissen soll, da wären keine mehr... oooh nein ;)

Aber ne breite Masse sieht nun mal mehr, als ich alleine, also haut rein...

Weitere Infos gibts ->hier<-.

Kommentare selbstverständlich erwünscht

NEW in 0.105 (thx to B€ND0R for the bugreports):
-Fixed:Changing MDI-Menu-Language + Tooltipps of ToolBar
-Fixed:Idle Time in WHOIS Message
-Fixed:When going away without a selected awaynick the active nick will be used
-Fixed:CTCP-Menu MenuBar deleted
-Added:Windows can be hidden when minimized, see: Preferences Miscellanious

Verfasst: 23.07.2005 21:37
von FloHimself
Hi,

habe keine Zeit mir das nun groß anzusehen, sieht aber schon recht gut und komplex aus ;)

Was für IRC Funktionen benutzt du? Eine lib oder in PB geschrieben?

Verfasst: 23.07.2005 22:38
von HeX0R
Das is alles reines PB, ohne irgendwelche Libs.

Verfasst: 24.07.2005 09:13
von DarkDragon
Wie hast du zwischen Server-Message(blabla joined blabla, channel created on datum) und Usermessage unterschieden?

Verfasst: 24.07.2005 09:53
von Leo
@DarkDragon: Hä? Das steht doch alles in der Nachricht, die der Server sendet! Zum Beispiel sendet der Server imo ein JOIN an den Clienten, wenn jemand einen Channel betreten hat und ein PRIVMSG, wenn jemand eine Nachricht gesendet hat.

Verfasst: 24.07.2005 11:13
von HeX0R
Hier is die RFC zu finden, für die interessierten.
(Obwohl ich ja eigentlich Feedback wollte...)

Verfasst: 24.07.2005 12:12
von DarkDragon
Leo hat geschrieben:@DarkDragon: Hä? Das steht doch alles in der Nachricht, die der Server sendet! Zum Beispiel sendet der Server imo ein JOIN an den Clienten, wenn jemand einen Channel betreten hat und ein PRIVMSG, wenn jemand eine Nachricht gesendet hat.
Nein, ich mein jetzt wenn man den channel betritt steht da immer die Serverinformation(500 Zeilen lang)....
Der Server selbst übergibt ja nicht das JOIN noch an die anderen clienten. Ich weiß selbst wie so ein IRC Server funzt, siehe meine IRC Prozeduren aus dem Code, Tipps und Tricks Forum. Aber wie unterscheidet man zwischen

bahuba.blubber.net (305) Hallo ich bin der Server
bahuba.blubber.net (305) Hallo ich bin der Server
bahuba.blubber.net (305) Hallo ich bin der Server
bahuba.blubber.net (305) Hallo ich bin der Server
bahuba.blubber.net (305) Hallo ich bin der Server
bahuba.blubber.net (305) Hallo ich bin der Server
bahuba.blubber.net (305) Hallo ich bin der Server
bahuba.blubber.net (305) Hallo ich bin der Server
bahuba.blubber.net (305) Channel Created on Friday ...
bahuba.blubber.net (305) USERLIST Blabla Ich Du Er Sie Es /ENDLIST

und dem normalen gequatsche im channel. Außerdem ist die Zahl nicht immer die selbe und der Server den man angewählt hat kann auch irc.blubber.org sein. Manchmal steht nichtmal der Anfang da.... Im RFC hab ich auch wochen lange gesucht, aber da standen manchmal sachen die sind bei anderen servern anders.

[EDIT]
Und darf man keine Fragen zu deinem Program stellen?

Verfasst: 24.07.2005 13:14
von HeX0R
Klar darf man Fragen stellen :)

Aber so ganz komm ich immernoch nicht dahinter... in der verlinkten RFC steht eigentlich ganz genau, wie solche Messages aufgebaut sind, und somit ist es auch sehr easy die Messages zu unterscheiden!

Z.B. gibts nen Sack voll Raw-Messages, wo dann jede Nummer einer bestimmten Message zugeordnet is:
317 = IdletTime
321 = Start von List
322 = List
323 = Ende von List
...

Ansonsten gibts halt JOIN, PART, PRIVMSG, usw...

Die dann auseinanderzuklammbustern is nicht besonders schwierig, sie aber in eine ordentliche GUI zu pressen schon.

Gruss
HeX

[Edit]
Kleines Beispiel, wie so ne IRC-Zeile auseinandergenommen wird:

Code: Alles auswählen

raw$ = Trim(DelLead(raw$))
  Nick$ = Trim(StringField(raw$, 1, "!"))
  If FindString(Nick$, " ", 1)
    Nick$        = ""
    Ident$       = StringField(raw$, 1, " ")
    Instruction$ = DelLead(StringField(raw$, 2, " "))
    Chan$        = DelLead(StringField(raw$, 3, " "))
    Text$        = DelLead(Trim(RemoveString(raw$, Ident$ + " " + Instruction$ + " " + Chan$, 1)))
  Else
    Ident$       = RemoveString(StringField(raw$, 1, " "), Nick$ + "!", 1)
    Instruction$ = DelLead(StringField(raw$, 2, " "))
    Chan$        = DelLead(StringField(raw$, 3, " "))
    Text$        = DelLead(Trim(RemoveString(raw$, Nick$ + "!" + Ident$ + " " + Instruction$ + " " + Chan$, 1)))
  EndIf
raw$ = Eine Zeile
DelLead() - löscht (falls vorhanden) den Doppelpunkt am Anfang des Strings
Dann musst nur noch die verschiedenen Instruction$ checken.

Chan$ ist natürlich auch nicht immer der Chan, das muss dann logischerweise mit dem jeweiligen Befehl abgeglichen werden

Manche Befehle verstecken sich auch im Ident$, z.B. ERROR (naja kein Befehl ;) ) oder PING

Verfasst: 24.07.2005 16:11
von FloHimself
Das is alles reines PB, ohne irgendwelche Libs.
Ich habe gefragt, weil ich gute Erfahrungen mit libircclient gemacht habe:
http://sourceforge.net/projects/libircclient/

Verfasst: 24.07.2005 19:06
von DarkDragon
:lol: Naja, also das mit den messages ist ein wenig komplizierter, da kommt noch ASCII Art rein und .... Egal, ich mach sowieso im moment nichtsmehr damit. Den IRC Clienten finde ich cool ;) .