Seite 1 von 3

Einen kleinen Mini-ICQ Client schreiben...

Verfasst: 02.12.2005 01:15
von AND51
Hallo!

Ich habe mich hier bereits im Forum umgesehen, wie ich evtl. einen ICQ Clienten schreiben könnte. Dabei bin ich auf das OSCAR Protokoll gestoßen (http://forums.purebasic.com/german/view ... +protokoll). Ich habe zwar schon einen ICQ Bot, den ich auch so halbwegs nach meinen Wünschen konfiguriert habe, aber aus bestimmten Gründen bin ich damit nicht zufrieden. Außerdem ist es sowieso toller, einen "eigenen ICQ Clienten" zu haben.
Das OSCAR Protokoll kann hier eingesehen werden: http://iserverd.khstu.ru/oscar/.

Jedenfalls ist mir das OSCAR Protokoll zu kompliziert. Allein schon dieser Befehl: CLI_IDENT. Ich weiß weder wozu der gut ist, noch, warum man so viele Date übermitteln muss, wie auf der Seite http://iserverd.khstu.ru/oscar/cli_ident.html ganz unten angegeben. Jedenfalls macht mein bisheriger Bot genau das gleiche, das sieht man, wenn man sich den Bot hier http://www.digitalcheese.com/downloads/AI_Bot_Hal.zip herunterläd. Stellt man ihn bei "Debug Mode" auf 3, dann erscheinen in dem Konsolenfenster dieselben Hyroglyphen, wie die bei der "CLI_IDENT" Seite ganz unten.

Meine frage ist eigentlich nur, ob mir jemand weiterhelfen kann. Weiterhelfen insofern, als das jemand vielleicht so ein Projekt mal angefangen, aber eingestellt hat und mr so weiterhelfen kann. Codeschnipsel wären auch nicht schlecht. Oder andere Internetseiten, wo's auch einfacher geht. Oder ganz einfach eine fertige Lib ;-) . Naja, es reicht aber auch schon, wenn mir einer das so erklären könnte dass ich das OSCAR Protokoll halbwegs verstehe und selbst loslegen kann. Zum "Dank" sozusagen will ich das, was dabei "rauskommt" auch veröffentlichen als Open-Source (hoffe, die Bezeichnung ist für ein offenes, durch Dritte erweiterbares Projekt richtig).

Dankeschön, AND51

P.S.: Wem's leichter fällt, mir zu helfen, wen er einen Bot/Client schon in Delphi geschrieben hat, der schaue sich http://sourceforge.net/project/showfile ... _id=135444 an; das ist ein kleiner, richtiger ICQ Client. Dort findet ihr die lauffähige EXE sowie den Delphi Code (hhabe ich mir schon angeschaut). Remember, ich benüge mich ja schon mit einem automatisch, quasi auf bestimmte Befehle antwortenden Bot!

Edit / Added: Bin grad auf den Sourcecode von Miranda gestoßen: http://www.miranda-im.org/release/download.php Darf ich den benutzen? Bzw. weiß einer, wie ich das nutze? Sind lauter *.c Dateien im Surce zip archiv verz. : \protocols\icqoscarj !!

Verfasst: 02.12.2005 10:24
von HeX0R
Is ja witzig... ich bin auch seit dieser Woche am OSCAR-Protokoll.
Wusste nicht mal, dass es hier mal nen Thread darüber gab. Da hätte ich mir die anfängliche Suche ja sparen können...

Naja, nix desto trotz hast du eigentlich alle Infos, die du brauchst. Kompliziert ist das Protokoll auch nicht, ich würde eher sagen es ist überladen.
Viele der Anfragen/Antworten scheinen mir irgendwie quatsch zu sein und ich kann mir beim besten Willen nicht vorstellen, dass der Server diese tatsächlich auswertet. Aber dennoch muss man diesen Mist mitbearbeiten.

Ich hab nicht schlecht gestaunt, was da für nen Wust an Anfragen/Antworten bei einem simplen Login abgehen.

Im übrigen wird das bei mir in ne dll gewurstet, damit mein TomaHawK dann irgendwann auch das ICQ-Laufen beherrscht.

Die dll wird dann irgendwann mit ner Anleitung angeboten werden, damit auch andere in den Genuss kommen. (So gesehen wird TomaHawK nur noch ein simples Beispiel werden).

So is mal die (inoffizielle) Planung. Wie es später dann wird, wissen die Götter, und wann das dann ist, steht auch in den Sternen, da ich RL-bedingt nur tröpfleweise da rumcode.

Verfasst: 02.12.2005 10:29
von AND51
Hi!
Danke für deine Antwort. Verstehe ich das richtig, dass du (fast) dasselbe wie ich vorhast und später dein "ICQ Ergebnis" veröffentlichen willst?
So dass ich das auch nutzen könnte?

Naja. Ich finde das trotzdem kompliziert. Schau die mal die CLI_IDENT Seite gnz unten an. Das muss man senden um <wofür?>. Das sieht mir reichlich kompliziert aus, oder kannst du mir das etwas erklären?
Wäre ja auch schon etwas.

Bzgl. OSCAR & uns: Geteiltes leid ist halbes Leid... :wink: :roll:

Verfasst: 02.12.2005 11:28
von HeX0R
AND51 hat geschrieben:Hi!
Verstehe ich das richtig, dass du (fast) dasselbe wie ich vorhast und später dein "ICQ Ergebnis" veröffentlichen willst?
So dass ich das auch nutzen könnte?
Exakt!
Aber wie ich bereits sagte: Es kann ne ganze Werile dauern, da ich:
1.) Nen irren Job habe
2.) Irre Kumpelz habe, die immer und überall mit mir saufen wollen *g*
3.) Ne liebeshungrige Freundin daheim habe...

Wenn du warten kannst gut, wenn nicht, musst du dich alleine durchbeissen.

Was dieses CLI_IDENT betrifft:
Also was is denn da speziell unklar ?
Du schickst deine UIN, ein per Pipifax-Algo "codiertes" Passwort.
Den ganzen anderen Mist, wie Client ID, Major Version, Minor Version ... kannst du ruhigen Gewissens von ICQ abkupfern (oder auch Miranda, die haben das so wie es aussieht genauso gemacht.)

Im Prinzip gehts darum, dass der Server sieht, ob du eventuell mit einem älteren Client und somit älteren Version des Protokolls daherkommst und er dann entsprechend darauf reagieren kann.

Da du ja jetzt im Moment mit deinem Client anfängst, benutzt du natürlich auch die letzte Version des Protokolls und kannst daher vom neuesten ICQ- bzw. Miranda-Client abkupfern.

Das was danach mit den ganzen SNAC's abgeht ist dann aber wirklich der Irrsinn ;)

Verfasst: 02.12.2005 13:09
von AND51
Hallo!
Also, ich hacke nur auf dieses "CLI_IDENT" rum, weil auf der Seite als beispiel dieselben kryptischen Sachen unten stehen, wie in meinem bishereigen Bot. Ich habe bisher noch ***gar nicht*** damit angefangen, ich sammel nur Infos.
Wenn du warten kannst gut, wenn nicht, musst du dich alleine durchbeissen.
Ja, es kommt drauf an, wie lange. Ich will dich da keinem Druck aussetzen doer so, aber wie weit bist du denn schon, und so?

ich hatte gedacht, ich arbeite so, dass das fertige Produkt ganz einfach zu bedienen ist: Ich stelle mir das (mein oder dein) Endprodukt so vor:

Code: Alles auswählen

InitICQ()
ICQ_Login("username", "Passwort")
ICQ_SendMessage("meine nachricht", 235391151) ; ICQ Nummer (meine)
Debug ICQ_ReceiveMessage()
ICQ_SetStaus(1) ; 1=Online, 2=Away... usw...
Sowas halt... ist zwar ne Menge arbeit, aber ich begnüge mich ja -wie ich sagte- mit einem "Bot", der auf eingehende Nachrichten antwortet.

Ich meine, mal gehört zu haben, dass die *.c Dateien des Source Codes von Miranda (Link siehe oben) irgendwie sich mit PureBasic verarbeiten lassen. Ich weiß nicht mehr genau... Ob die sich vllt. sogar in eine UserLib konvertieren lassen? Oder ich meine, man könnte das irgendwie in PB nutzen... Naja.

HeXOR, wenn es noch allzulange dauert, dann versuch ich es schon mal allein, aber dann wäre es nett, wenn du mir ein kleines bisschen helfen könntest. funktionsübersicht, welche Daten wie senden... etc, etc...

THX, AND51 :allright:

Verfasst: 02.12.2005 14:48
von HeX0R
AND51 hat geschrieben:Hallo!
ich hatte gedacht, ich arbeite so, dass das fertige Produkt ganz einfach zu bedienen ist: Ich stelle mir das (mein oder dein) Endprodukt so vor:

Code: Alles auswählen

InitICQ()
ICQ_Login("username", "Passwort")
ICQ_SendMessage("meine nachricht", 235391151) ; ICQ Nummer (meine)
Debug ICQ_ReceiveMessage()
ICQ_SetStaus(1) ; 1=Online, 2=Away... usw...
Sowas halt... ist zwar ne Menge arbeit, aber ich begnüge mich ja -wie ich sagte- mit einem "Bot", der auf eingehende Nachrichten antwortet.
Jo, so ähnlich wirds dann wohl auch werden...
AND51 hat geschrieben:HeXOR, wenn es noch allzulange dauert, dann versuch ich es schon mal allein, aber dann wäre es nett, wenn du mir ein kleines bisschen helfen könntest. funktionsübersicht, welche Daten wie senden... etc, etc...
Ehrlich gesagt wäre es mir sogar lieber, wenn du darauf nicht warten würdest.
Es ist im Prinzip bis jetzt nichts als Spielerei.
Je nachdem ob ich irgendwann gegen ne Wand renne, mir das ganze zu umständlich wird oder UnrealTournament2007 plötzlich in meinem Briefkasten liegt, würde das ganze in erheblichem Masse zurückgeworfen werden.
Oder evtl. sogar ganz entsorgt.

Das ist das schöne am Just4Fun-coden... Keine Meute von hungrigen Kunden, deren heissen Atem du die ganze Zeit im Genick hast...

Was das "bisschen helfen" betrifft... ich bin nicht wirklich ein guter Teamspieler, ausser du hältst vielleicht gerade die gegnerische Flag in Händen... ;)

Verfasst: 02.12.2005 15:15
von Lukas-P
hmm ich hab keine idee wie ich sowas anfangen sollte zu coden!

kannst du mal irgendein beispiel davon hier posten??

währe nett :allright:

Verfasst: 02.12.2005 17:53
von Nik
Da ich ja selber an nem Instant messenger arbeite der ja auch in purebasic geschrieben ist und auch schon ziemlich gut funktioniert. Bin ich natürlich auch an dem ICQ Zeug interessiert wobei für mich da vorallem das was bei Jabebr Transports heißt interessieren würde. Mal schaun wies weitergeht.

Verfasst: 02.12.2005 18:28
von AND51
HeX0R hat geschrieben:Ehrlich gesagt wäre es mir sogar lieber, wenn du darauf nicht warten würdest.
Es ist im Prinzip bis jetzt nichts als Spielerei.
Je nachdem ob ich irgendwann gegen ne Wand renne, mir das ganze zu umständlich wird oder UnrealTournament2007 plötzlich in meinem Briefkasten liegt, [...])
Haha :lol: Cool! 8) Bei dem rest, den du egschrieben hast, kann ich dir nur zustimmen.
Aber sag mir mal, wie etabliere ich eine Verbidnung zum Server login.icq.com:5180 ? Was sind die ANfangsdaten, die ich senden muss, und welche kommen zurück (Wenn ich mir erstmal nur einloggen will...) So wie ich das versteh, msuss ich die Daten doppelt senden: In DWord Werten und als String ??!?!?!?!?!?!?!?!?!?!???

Verfasst: 02.12.2005 23:13
von HeX0R
Du connectest einfach auf den Server, dann bekommst du ein Hello zurück:

Code: Alles auswählen

2A 01 5C 15 00 04 00 00 00 01
Daraufhin sendest du dieses CLI_IDENT-Geraffel (ohne Cookie zurück) und bekommst ein DISCONNECT-Signal mit neuen Serverdaten und einem "Cookie" zurück.

Das Cookie speicherst du und connectest neu zu den angegebenen Serverdaten.

Du erhältst wieder ein Hello (s.o.)
Diesmal sendest du ein Hello + das gespeicherte Cookie zurück.

Ab jetzt geht der SNAC-Irrsinn los...