IRC-Bot als Anfänger?
Hey,
ich habe zwar schon ein bisschen was programmiert in Delphi, aber das ist schon lange her und noch nichts sowas wie ein IRC-Bot. Denkt ihr, dass es für mich zu schwer ist und mit was würdet ihr es programmieren? Also welche lib, etc. Vielen Dank LG ford |
AW: IRC-Bot als Anfänger?
Ist speziell für dich viel zu schwer :wink:
Edit: schau einfach mal hier, die Komponente solltest du auch haben Was man über die DP-Suche so findet |
AW: IRC-Bot als Anfänger?
So habe ich die Frage nicht gemeint, meinte eher ob es für einen eher Anfänger zu schwer ist :D
|
AW: IRC-Bot als Anfänger?
Anfänger oder Fortgeschritten kann man schlecht definieren.
Lies dich doch ein bischen in das Thema ein (Googlesuche nach "IRC Bot", evtl. auch mit "Delphi" davor), fang an und dann frag hier wenn du nicht weiterkommst. |
AW: IRC-Bot als Anfänger?
Danke.
Das sieht ganz schön ungewohnt aus: https://github.com/crutchy-/exec-irc...i/bot_data.pas Das gibts nicht auch leichter oder? |
AW: IRC-Bot als Anfänger?
Zitat:
Ich glaub mit den Komponenten TIdIRC und TIdIRCServer von Indy (sind in deinem 10.2 Pro mit dabei), kommst du erstmal schneller zu Ergebnissen. Guckst du hier |
AW: IRC-Bot als Anfänger?
Ok, danke dir!
Das sieht ja viel leichter aus :D |
AW: IRC-Bot als Anfänger?
Zitat:
|
AW: IRC-Bot als Anfänger?
' Dann musst du noch zwei Ereignisse, OnReceive und OnMessage, hinzufügen' <-- wo muss ich die denn einfügen?
|
AW: IRC-Bot als Anfänger?
Zitat:
Delphi-Quellcode:
sollte aber gehen.
OnPrivateMessage
|
AW: IRC-Bot als Anfänger?
Delphi-Quellcode:
Wenn ich auf Verbinden klicke muss ich erst paar Sec warten und dann kommt
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.
Code:
Fehler beim Verbinden!
Weiß jemand an was das liegen kann? |
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. |
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? |
AW: IRC-Bot als Anfänger?
Zitat:
Wenn du das so änderst:
Delphi-Quellcode:
bekommst du schon deutlich mehr Informationen.
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; |
AW: IRC-Bot als Anfänger?
(wurd schon gesagt)
|
AW: IRC-Bot als Anfänger?
Danke!
Habe den Proxyserver der hier vorliegt vergessen... |
AW: IRC-Bot als Anfänger?
Hmh, in duckduckgo finde ich nicht wie man da einen Proxy einstellen kann. Geht das überhaupt?
|
AW: IRC-Bot als Anfänger?
Zitat:
|
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. |
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.
|
AW: IRC-Bot als Anfänger?
Heißt das, dass ich auf dem Proxy-Server was einrichten muss?
|
AW: IRC-Bot als Anfänger?
Nein,
du musst den IRC Client mit einem IOHandler verbinden (TIdIOHandlerStack) und diesen wiederum mit der Proxy Komponente. |
AW: IRC-Bot als Anfänger?
Ja darauf wollte ich hinaus und Daniels Beitrag zum lesen der Manuals unterstützen.
|
AW: IRC-Bot als Anfänger?
Liste der Anhänge anzeigen (Anzahl: 1)
Hmh, wenn ichs richtig verstanden habe muss ich einfach
Delphi-Quellcode:
machen. Stimmt das?
IdIRC1.IOHandler := IdIOHandlerStack1;
Wenn ja, dann meckert er wegen dem SSL rum (Fehler 502 Proxy Error) Aber ich habe den Port 80 auch in meinem ff konfiguriert |
AW: IRC-Bot als Anfänger?
Oder ist es, weil der Proxy SSL verlangt, dieses jedoch bei meinem Programm (noch) nicht eingerichtet ist?
|
AW: IRC-Bot als Anfänger?
hmh, ich bin nun daheim ohne Proxy.
Da kommt zwar keine Fehlermeldung, allerdings gehts trotzdem nicht. Also wenn ich mit meinem normalen User den botty anschreiben möchte kommt da, dass der User nicht existiert und in dem Channel ist auch niemand außer ich selber...
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, IdIOHandler, IdIOHandlerSocket, IdIOHandlerStack; type TForm1 = class(TForm) IdIRC1: TIdIRC; Bt_Connect: TButton; Bt_JoinChannel: TButton; Memo1: TMemo; Edit1: TEdit; Bt_Send: TButton; IdConnectThroughHttpProxy1: TIdConnectThroughHttpProxy; IdIOHandlerStack1: TIdIOHandlerStack; 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 try //versuche IdIRC1.Join('#botty-channel'); except //wenn Fehler on E: Exception do showMessage('Fehler: ' + E.Message); //Meldung zeigen end; 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.IOHandler := IdIOHandlerStack1; 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. |
AW: IRC-Bot als Anfänger?
Hallo,
wenn ich idIrc.Realname und idIrc.Username angebe funktioniert´s hier. |
AW: IRC-Bot als Anfänger?
Danke, muss ich mal daheim probieren. Hier gehts ja wegen dem Proxy noch nicht...
Was ist denn der Unterschied zwischen Username und Nickname?? EDIT: Habe die Verbindung gerade über mein Smartphone laufen lassen und da gehts nun auch... Aber wäre natürlich cool, wenn es auch über den Proxy gehen würde... |
AW: IRC-Bot als Anfänger?
Alles nur eine konfigurationssache.
Wenn der FF Server nicht für den Port 6667 eingerichtet ist kannst du einstellen was du möchtest. |
AW: IRC-Bot als Anfänger?
Wenn ich nach ffserver suche kommt da, dass es ein Server für media und audio ist. Wofür benötige ich denn diesen für nen IRC-Client? Oo
Oder meinst du was anderes? Mit firefox kome ich mit diesen Port ins Internet EDIT: Du meinst den IRC-Port? Der funktioniert ja mitm Handy.. Dachte du meinst den Proxy-Port (80) |
AW: IRC-Bot als Anfänger?
Ich rede von dem Proxy. (F)ore(F)ront.
|
AW: IRC-Bot als Anfänger?
Aber den Proxy habe ich doch auf Port 80 definiert?
|
AW: IRC-Bot als Anfänger?
Achso, sry, ich stand auf dem Schlauch..
Du meinst, dass der Proxy-Server den IRC-Port blockiert? |
AW: IRC-Bot als Anfänger?
Zitat:
|
AW: IRC-Bot als Anfänger?
Also so dann?
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, IdIOHandler, IdIOHandlerSocket, IdIOHandlerStack, IdHTTP; type TForm1 = class(TForm) IdIRC1: TIdIRC; Bt_Connect: TButton; Bt_JoinChannel: TButton; Memo1: TMemo; Edit1: TEdit; Bt_Send: TButton; IdConnectThroughHttpProxy1: TIdConnectThroughHttpProxy; IdIOHandlerStack1: TIdIOHandlerStack; IdHTTP1: TIdHTTP; 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); procedure IdIRC1Join(ASender: TIdContext; const ANickname, AHost, AChannel: 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 try //versuche IdIRC1.Join('#botty-channel'); except //wenn Fehler on E: Exception do showMessage('Fehler: ' + E.Message); //Meldung zeigen end; 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 Edit1.Text := ''; 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.IOHandler := IdIOHandlerStack1; IdIRC1.Nickname:='botty'; // Legt den Nick fest IdIRC1.Host:='chat.freenode.net'; // Gibt den Server an IdIRC1.Port:=6667; //Irc Port IdIRC1.RealName:='booty'; IdIRC1.Username:='booty'; IdHTTP1.ProxyParams.ProxyServer := 'Hongkong'; IdHTTP1.ProxyParams.ProxyPort := 80; IdHTTP1.IOHandler := IdIOHandlerStack1; Memo1.Text := ''; end; procedure TForm1.IdIRC1Join(ASender: TIdContext; const ANickname, AHost, AChannel: string); var welcomeMsg: String; begin if ANickname <> IdIRC1.Nickname then begin welcomeMsg := 'Hey, ' + ANickname; IdIRC1.Say('#botty-channel', welcomeMsg); //Nachricht zum Channel schicken Memo1.Lines.Add(IdIRC1.Nickname + ': ' + welcomeMsg); end; end; procedure TForm1.IdIRC1PrivateMessage(ASender: TIdContext; const ANickname, AHost, ATarget, AMessage: string); begin Memo1.lines.add(ANickname+': '+AMessage); end; end. |
AW: IRC-Bot als Anfänger?
Ich glaub das liegt am Proxy-Server. Bei Hexchat kommt auch
Code:
HTTP/1.1 502 Proxy Error ( Der angegebene SSL-Port ist nicht zulässig. Forefront TMG wurde nicht zur Unterstützung von SSL-An
|
AW: IRC-Bot als Anfänger?
Mal ne andere Frage:
Wie heißt denn das OnMessage-Ereignis in der neuen Version? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:22 Uhr. |
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