Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi IRC-Bot als Anfänger? (https://www.delphipraxis.net/197331-irc-bot-als-anfaenger.html)

ford42 1. Aug 2018 07:11

AW: IRC-Bot als Anfänger?
 
Delphi-Quellcode:
unit UnitIRCBot;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, IdBaseComponent, IdComponent,
  IdTCPConnection, IdTCPClient, IdCmdTCPClient, IdIRC, IdContext, Vcl.StdCtrls;

type
  TForm1 = class(TForm)
    IdIRC1: TIdIRC;
    Bt_Connect: TButton;
    Bt_JoinChannel: TButton;
    Memo1: TMemo;
    Edit1: TEdit;
    Bt_Send: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Bt_ConnectClick(Sender: TObject);
    procedure Bt_JoinChannelClick(Sender: TObject);
    procedure Bt_SendClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure IdIRC1PrivateMessage(ASender: TIdContext; const ANickname, AHost,
      ATarget, AMessage: string);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Bt_ConnectClick(Sender: TObject);
begin
  try //versuche
    IdIRC1.Connect(); //zu verbinden
  except //wenn Fehler
    showMessage('Fehler beim Verbinden!'); //Meldung zeigen
  end;
end;

procedure TForm1.Bt_JoinChannelClick(Sender: TObject);
begin
  IdIRC1.Join('#botty-channel');
end;

procedure TForm1.Bt_SendClick(Sender: TObject);
begin
  IdIRC1.Say('#botty-channel',Edit1.Text); //Nachricht zum Channel schicken
  Memo1.Lines.Add(IdIRC1.Nickname+': '+Edit1.Text); //Zum Memo hinzufügen, denn durch eigene Nachrichten wird das OnMessage-Ereignis nicht ausgelöst
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  IdIRC1.Disconnect();
end;

procedure TForm1.FormCreate(Sender: TObject);
begin

IdIRC1.Nickname:='botty'; // Legt den Nick fest

IdIRC1.Host:='chat.freenode.net'; // Gibt den Server an

IdIRC1.Port:=6667; //Irc Port

end;


procedure TForm1.IdIRC1PrivateMessage(ASender: TIdContext; const ANickname,
  AHost, ATarget, AMessage: string);
begin
  Memo1.lines.add(ANickname+': '+AMessage);
end;

end.
Wenn ich auf Verbinden klicke muss ich erst paar Sec warten und dann kommt
Code:
Fehler beim Verbinden!

Weiß jemand an was das liegen kann?

Daniel 1. Aug 2018 07:15

AW: IRC-Bot als Anfänger?
 
Moin,

Du hängst an dieser Stelle beim Thema "Exceptions" fest und bei der Behandlung selbiger. Da rate ich Dir, mal die Hilfe zu konsultieren oder einschlägige Tutorials zu lesen. Diese Arbeit wird keinesfalls umsonst sein, denn Exceptions werden Dir in (so gut wie) jeder Programmiersprache begegnen.

ford42 1. Aug 2018 07:23

AW: IRC-Bot als Anfänger?
 
Danke, ich weiß glaub schon was die Excption tut, aber ich weiß nicht warum die Verbindung nicht klappt.

Oder meinst du, dass ich was einbauen kann, das mir aufzeigt warum er nicht verbinden kann?

Jasocul 1. Aug 2018 07:36

AW: IRC-Bot als Anfänger?
 
Zitat:

Zitat von ford42 (Beitrag 1409287)
Oder meinst du, dass ich was einbauen kann, das mir aufzeigt warum er nicht verbinden kann?

Ja, kannst du. Daher der Hinweis von Daniel, dass du dich intensiver damit auseinandersetzen solltest.

Wenn du das so änderst:
Delphi-Quellcode:
procedure TForm1.Bt_ConnectClick(Sender: TObject);
begin
  try //versuche
    IdIRC1.Connect(); //zu verbinden
  except //wenn Fehler
    on E: Exception do
      showMessage('Fehler: ' + E.Message); //Meldung zeigen
  end;
end;
bekommst du schon deutlich mehr Informationen.

Towmuz 1. Aug 2018 07:44

AW: IRC-Bot als Anfänger?
 
(wurd schon gesagt)

ford42 1. Aug 2018 07:45

AW: IRC-Bot als Anfänger?
 
Danke!

Habe den Proxyserver der hier vorliegt vergessen...

ford42 1. Aug 2018 07:48

AW: IRC-Bot als Anfänger?
 
Hmh, in duckduckgo finde ich nicht wie man da einen Proxy einstellen kann. Geht das überhaupt?

KodeZwerg 1. Aug 2018 07:54

AW: IRC-Bot als Anfänger?
 
Zitat:

Zitat von ford42 (Beitrag 1409297)
Hmh, in duckduckgo finde ich nicht wie man da einen Proxy einstellen kann. Geht das überhaupt?

TIdConnectThroughHttpProxy sollte eine Möglichkeit sein wenn ich nicht falsch liege.

ford42 1. Aug 2018 09:29

AW: IRC-Bot als Anfänger?
 
Hmh, irgendwie finde ich dazu nichts, nicht einmal im docwiki :o

EDIT: Habe es nun im IDE gefunden, aber ich bekomme es nicht zum laufen...

Mein Code sieht nun so aus, es geht aber immer noch nicht

Delphi-Quellcode:
unit UnitIRCBot;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, IdBaseComponent, IdComponent,
  IdTCPConnection, IdTCPClient, IdCmdTCPClient, IdIRC, IdContext, Vcl.StdCtrls,
  IdCustomTransparentProxy, IdConnectThroughHttpProxy;

type
  TForm1 = class(TForm)
    IdIRC1: TIdIRC;
    Bt_Connect: TButton;
    Bt_JoinChannel: TButton;
    Memo1: TMemo;
    Edit1: TEdit;
    Bt_Send: TButton;
    IdConnectThroughHttpProxy1: TIdConnectThroughHttpProxy;
    procedure FormCreate(Sender: TObject);
    procedure Bt_ConnectClick(Sender: TObject);
    procedure Bt_JoinChannelClick(Sender: TObject);
    procedure Bt_SendClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure IdIRC1PrivateMessage(ASender: TIdContext; const ANickname, AHost,
      ATarget, AMessage: string);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Bt_ConnectClick(Sender: TObject);
begin
  try //versuche
    IdIRC1.Connect(); //zu verbinden
  except //wenn Fehler
    on E: Exception do
      showMessage('Fehler: ' + E.Message); //Meldung zeigen
  end;
end;

procedure TForm1.Bt_JoinChannelClick(Sender: TObject);
begin
  IdIRC1.Join('#botty-channel');
end;

procedure TForm1.Bt_SendClick(Sender: TObject);
begin
  IdIRC1.Say('#botty-channel',Edit1.Text); //Nachricht zum Channel schicken
  Memo1.Lines.Add(IdIRC1.Nickname+': '+Edit1.Text); //Zum Memo hinzufügen, denn durch eigene Nachrichten wird das OnMessage-Ereignis nicht ausgelöst
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  IdIRC1.Disconnect();
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  IdConnectThroughHttpProxy1.Enabled := True;
  IdConnectThroughHttpProxy1.Host := 'Hongkong';
  IdConnectThroughHttpProxy1.Port := 80;

  IdIRC1.Nickname:='botty'; // Legt den Nick fest

  IdIRC1.Host:='chat.freenode.net'; // Gibt den Server an

  IdIRC1.Port:=6667; //Irc Port

end;

procedure TForm1.IdIRC1PrivateMessage(ASender: TIdContext; const ANickname,
  AHost, ATarget, AMessage: string);
begin
  Memo1.lines.add(ANickname+': '+AMessage);
end;

end.

KodeZwerg 1. Aug 2018 10:16

AW: IRC-Bot als Anfänger?
 
So der Pro bin ich leider nicht, aber soweit ich mich erinnern kann muss man für Proxy Nutzung IdIOHandler einrichten und miteinander verbinden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:30 Uhr.
Seite 2 von 4     12 34      

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