Hi,
Nickname?
Mein Test-Code:
Delphi-Quellcode:
//IRC = TIdIRC
IRC.OnPrivateMessage := HandleMsg;
IRC.OnNotice := HandleMsg;
IRC.OnWallops := HandleMsg2;
//IRC.OnRaw := HandleRaw;
IRC.Nickname := NickEdit.Text;
IRC.RealName := '
FAlter Bot';
IRC.Username := '
FAlterBot';
IRC.Host := ServerEdit.Text;
IRC.Port := StrToIntDef(PortEdit.Text,
IRC.Port);
IRC.Connect;
Muss natürlich noch verbessert werden... Ist ja erstmal nur zum Test.
Mfg
FAlter
[edit]
Aus der IdIRC.Pas: (
Indy 10)
Delphi-Quellcode:
procedure TIdIRC.CommandPRIVMSG(ASender: TIdCommand);
var
LTmp: String;
begin
if ASender.Params[0][1] = #1 then
begin
ParseCTCPQuery(ASender.Params[1], ASender.Params[0]);
end
else if Assigned(FOnPrivMessage) then
begin
LTmp := copy(ASender.Params[1], 2, length(ASender.Params[1]) - 2); ///!!!!!!!!!!!!!!!
OnPrivateMessage(ASender.Context, FSenderNick, FSenderHost, ASender.Params[0], LTmp);
end;
end;
In der markierten Zeile liegt ein Fehler. Das -2 ist falsch und kann sogar komplett weggelassen werden, ansonsten kommt da -1 hin. Das erklärt das Fehlen des letzten Buchstabens.
Die anderen Worte liegen vermutlich in Params[3]..Params[Count-1], schätz ich mal.
[/edit]
[edit]
Mit dieser Änderung gehts erstmal. Ist natürlich nicht gerade optimal, wenns erst auseinandergepflückt und hier wieder zusammengesetzt wird, erstmal reichts jedoch. Der Bot muss "liest" trotzdem schneller als ein Mensch.
Delphi-Quellcode:
procedure TIdIRC.CommandPRIVMSG(ASender: TIdCommand);
var
LTmp: String;
I: Integer;
begin
if ASender.Params[0][1] = #1 then
begin
ParseCTCPQuery(ASender.Params[1], ASender.Params[0]);
end
else if Assigned(FOnPrivMessage) then
begin
LTmp := copy(ASender.Params[1], 2, length(ASender.Params[1]));
for I := 2 to ASender.Params.Count - 1 do
LTmp := LTmp + ' ' + ASender.Params[I];
OnPrivateMessage(ASender.Context, FSenderNick, FSenderHost, ASender.Params[0], LTmp);
end;
end;
procedure TIdIRC.CommandNOTICE(ASender: TIdCommand);
var
LTmp: String;
I: Integer;
begin
if ASender.Params[0][1] = #1 then
begin
ParseCTCPReply(ASender.Params[1], ASender.Params[0]);
end
else if Assigned(FOnNotice) then
begin
LTmp := copy(ASender.Params[1], 2, length(ASender.Params[1]));
for I := 2 to ASender.Params.Count - 1 do
LTmp := LTmp + ' ' + ASender.Params[I];
OnNotice(ASender.Context, FSenderNick, FSenderHost, ASender.Params[0], LTmp);
end;
end;
[/edit]