Ja na bazie źródła od jednego Niemca, który napisał kod bota w Delphi do czytania pamięci procesu emulatora WinUAE Kaillera i dzięki temu stworzył bota ircowego który komentuje na IRC'u przebieg meczu online w Amigową wersję Sensible World of Soccer. Ja owego bota nieco zmodyfikowałem i zamiast niespełniającego pokładane nadzieje IdIRC z pakietu Indy użyłem komponentów z pakietu Vortex, dostępnego na torrym. Szczerze polecam ten pakiet użyłem go dynamicznie. Przykład fragmentu kodu dla rejoina na kanał:
procedure TMainForm.IRCAfterKicked(Nickname, Channel, Reason : string);
begin
AddToLog(IRC.IRCOptions.GetUserNick + ' kicked from: ' + Channel +
' by: ' + Nickname + ' (' + Reason + ')');
IRC.Join(Channel, '');
end;
Działa idealnie, po kompnięciu bot dodaje informację do loga w Memo procedurą AddToLog i wraca na kanał o ile nie został zbanowany. Nie napisałeś jak obsługujesz IRC'a, ale jeżeli piszesz pod VCL, a nie pod WinAPI i "gołych" socketach to szczerze polecam pakiet Vortex.
procedure TMainForm.ConnectBtnClick(Sender : TObject);
begin
if ServerEdit.Enabled = True then
begin
ServerEdit.Enabled := False;
ServerEdit.Color := ColorsArray[ServerEdit.Enabled];
ConnectBtn.Enabled := False;
IRC := TVortex.Create(Self);
RandNumber := Random(9999);
IRC.Server(ServerEdit.Text, '6667');
IRC.SetIRCName(BotRealName);
IRC.OnConnect := IRCConnect;
IRC.OnDisconnect := IRCDisconnect;
IRC.BeforeDisconnect := IRCBeforeDisconnect;
IRC.OnNickInUse := IRCNickInUse;
IRC.OnServerError := IRCServerError;
IRC.AfterJoined := IRCAfterJoined;
IRC.AfterParted := IRCAfterParted;
IRC.AfterNickChanged := IRCNickChanged;
IRC.OnMOTD := IRCMOTD;
IRC.AfterKicked := IRCAfterKicked;
IRC.AuthOptions.Enabled := True;
IRC.AuthOptions.System := 'UNIX';
IRC.AuthOptions.Ident := 'reporter';
IRC.IRCOptions.SetUserIdent := 'reporter';
IRC.SetMyNick(Base_NickName + IntToStr(RandNumber));
TButton(Sender).Enabled := False;
IRC.AuthOptions.StartAuth;
IRC.Connect;
end
else
begin
if IRC <> nil then
begin
IRC.Disconnect(False, 'Reporter Bot disconnected by User');
IRC.Free;
end;
end;
end;