Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi ICQ/Konsole (https://www.delphipraxis.net/94443-icq-konsole.html)

Matrix Scripter 21. Jun 2007 13:47


ICQ/Konsole
 
Hallo erstmal!

Also ich wollte mit einen kleinen ICQ Bot basteln, das ganze eigentlich aus keinem bestimmten Grund, nur so aus langeweile. Und ich dachte ich könnte bei der gelegenheit doch endlich mal OOP lernen ;)

Ich benutze die TICQLib (http://sourceforge.net/projects/ticqlib), und wollte das ganze als Konsolenanwendung machen.
Ich hab die Bot Komponente(TToy) in eine extra Unit(Toy.pas) gepackt.

Das ganze sieht nun wie folgt aus:

Delphi-Quellcode:
unit Toy;

interface

uses SysUtils, ICQWorks, ICQClient;

type
 TToy = Class
    ICQ: TICQClient;
    procedure ICQInit(Server: string; Port, UIN: cardinal; Password: string);
    procedure ICQLogin(Sender: TObject);
    procedure ICQError(Sender: TObject; ErrorType: TErrorType; ErrorMsg: String);
  End;

implementation

procedure TToy.ICQInit(Server: string; Port, UIN: cardinal; Password: string);
begin
  ICQ := TICQClient.Create(nil);
  ICQ.OnLogin := ICQLogin; //brauch ich das?
  ICQ.OnError := ICQError; //brauch ich das?
  ICQ.ICQServer := Server;
  ICQ.ICQPort := Port;
  ICQ.UIN := UIN;
  ICQ.Password := Password;
end;

procedure TToy.ICQLogin(Sender: TObject);
begin
  WriteLn('eingeloggt');
end;

procedure TToy.ICQError(Sender: TObject; ErrorType: TErrorType; ErrorMsg: string);
begin
  if ErrorType = ERR_WARNING then
    WriteLn('Warning ' + ErrorMsg)
  else
    WriteLn('Error ' + ErrorMsg);
end;
end.
bzw.

Delphi-Quellcode:
program BotProg;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  Toy in 'Toy.pas';

var
  test: TToy;

{ TODO -oUser -cConsole Main : Hier Code einfügen }
begin
  test := TToy.Create;
  WriteLn('Started');
  test.ICQInit('login.icq.com',5190,523523523,'PASSWORD');
  test.ICQ.SendMessage(023023023,'test');
  ReadLn;
  test.ICQ.LogOff;
end.
Nun, mein Problem ist, das eigentlich gar nichts passiert. D.h. es wird keine Nachricht versand. und ich weiss nicht warum :(
Wäre toll wenn ihr mir helfen könntet...und bitte seid nachsichtig :angel:

mfG matrix scripter

alias5000 21. Jun 2007 14:00

Re: ICQ/Konsole
 
Ich kenne den TICQCLient nicht wirklich, aber wo rufst du eine Methode auf, die ICQ verbinden lässt?

Matrix Scripter 21. Jun 2007 14:31

Re: ICQ/Konsole
 
:oops: Hab ich während des ganzen rumprobierens wohl irgendwann weggelöscht -.-
Ich habs jetzt wieder drin:

Delphi-Quellcode:
begin
  test := TToy.Create;
  WriteLn('Started');
  test.ICQInit('login.icq.com',5190,523523523,'PASSWORD');
  test.ICQ.Login;
  test.ICQ.SendMessage(023023023,'test');
  ReadLn;
  test.ICQ.LogOff;
end.
Aber funktionieren tut es immernoch nicht. :(
Und komischerweise wird auch nie ne Fehlermeldung angezeigt.

Meflin 21. Jun 2007 14:38

Re: ICQ/Konsole
 
*Seufz*

Die ICQLib ist veraltet. Sie funktioniert out of the box schlicht und ergreifend nicht mehr. Suche hier im Forum und die wirst ein paar Hacks finden, oder schau im Bugtracker bei Sourceforge, da dürfte sich auch einiges finden.


Matrix Scripter 21. Jun 2007 15:28

Re: ICQ/Konsole
 
Achso ist das!
Okay dann werd ich mich da mal drüm kümmern. Danke für die schnellen Antworten. :)

Matrix Scripter 21. Jun 2007 16:07

Re: ICQ/Konsole
 
Hmm seltsamer Weise funktioniert es immernoch nicht..ich werd nochmal genau nachschauen...vllt hab ich doch noch was vergessen/falsch gemacht. :roll:

Matrix Scripter 21. Jun 2007 19:18

Re: ICQ/Konsole
 
Ich hab echt keine Ahnung was falsch ist :-(

Die ICQLib müsste jetzt stimmen, zumindest funktioniert jetzt das Beispiel "VerySimpleExample".
Aber bei mir tut sich immer noch nichts :(
Wäre echt nett wenn mir jemand helfen könnte.

Matrix Scripter 23. Jun 2007 00:39

Re: ICQ/Konsole
 
Ich habs nochmal mit ner Form versucht

Delphi-Quellcode:
unit t;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ICQClient, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  icq: TICQClient;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  icq.Login();
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  icq := TICQClient.Create(nil);
  icq.ICQServer := 'login.icq.com';
  icq.ICQPort := 5190;
  icq.UIN := 523523523;
  icq.Password := 'PASSWORD';
end;
end.
Hier kann ich problemlos verbinden, nur eben bei dem Konsolenprogramm nicht...weiss keiner rat?

alias5000 24. Jun 2007 19:59

Re: ICQ/Konsole
 
Zitat:

Zitat von Matrix Scripter
Delphi-Quellcode:
begin
  test := TToy.Create;
  WriteLn('Started');
  test.ICQInit('login.icq.com',5190,523523523,'PASSWORD');
  test.ICQ.Login;
  test.ICQ.SendMessage(023023023,'test');
  ReadLn;
  test.ICQ.LogOff;
end.

Ich nehme an, dass das ganze asynchron abläuft. Also musst du schon warten, bis ICQ auch verbunden hat. Sprich such dir das Ereignis raus, das anzeigt, dass man eingeloggt ist und mach dann deine Aktion da drinnen ;)

Matrix Scripter 19. Jul 2007 15:10

Re: ICQ/Konsole
 
Ok. Werde ich mal machen, danke dir.
Soweit ich weiss habe ich aber auch mal das hier probiert:

Delphi-Quellcode:
begin
  test := TToy.Create;
  WriteLn('Started');
  test.ICQInit('login.icq.com',5190,523523523,'PASSWORD');
  test.ICQ.Login;
  ReadLn;//<------
  test.ICQ.SendMessage(023023023,'test');
  ReadLn;
  test.ICQ.LogOff;
end.
Und dort eine Weile gewartet bis ich Enter drückte, so dass eigentlich genug Zeit war um sich einzuloggen. Aber da ging auch nix.
Ich werde aber trotzdem mal nach dem Ereignis suchen das du meinst, und es damit probieren.

mfG matrix scripter


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:19 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz