📄 idirc.pas
字号:
TIdIRCReplies = class(TPersistent)
protected
FFinger: String;
FVersion: String;
FUserInfo: String;
FClientInfo: String;
public
constructor Create;
procedure Assign(Source: TPersistent); override;
published
property Finger: String read FFinger write FFinger;
property Version: String read FVersion write FVersion;
property UserInfo: String read FUserInfo write FUserInfo;
property ClientInfo: String read FClientInfo write FClientInfo;
end;
{ TIdIRCReadThread }
TIdIRCReadThread = class(TIdThread)
protected
FClient: TIdIRC;
FRecvData: string;
procedure Run; override;
public
constructor Create(AClient: TIdIRC); reintroduce;
end;
{ TIdIRC }
TIdIRCUserMode = (umInvisible, umOperator, umServerNotices, umWallops);
TIdIRCUserModes = Set of TIdIRCUserMode;
TIdIRCState = (csDisconnect, csDisconnected, csConnecting, csLoggingOn, csConnected);
TIdIRCUpdateType = (utTopic, utMode, utNicks);
TIdIRCOnMessage = procedure (Sender: TObject; AUser: TIdIRCUser; AChannel: TIdIRCChannel; Content: String) of object;
TIdIRCOnJoin = procedure (Sender: TObject; AUser: TIdIRCUser; AChannel: TIdIRCChannel) of object;
TIdIRCOnJoined = procedure (Sender: TObject; AChannel: TIdIRCChannel) of object;
TIdIRCOnPart = procedure (Sender: TObject; AUser: TIdIRCUser; AChannel: TIdIRCChannel) of object;
TIdIRCOnParted = procedure (Sender: TObject; AChannel: TIdIRCChannel) of object;
TIdIRCOnKick = procedure (Sender: TObject; AUser, AVictim: TIdIRCUser; AChannel: TIdIRCChannel) of object;
TIdIRCOnKicked = procedure (Sender: TObject; AUser: TIdIRCUser; AChannel: TIdIRCChannel) of object;
TIdIRCOnNickChange = procedure (Sender: TObject; AUser: TIdIRCUser; ANewNick: String) of object;
TIdIRCOnTopic = procedure (Sender: TObject; AUser: TIdIRCUser; AChannel: TIdIRCChannel; const AChanName, ATopic : String) of object;
TIdIRCOnQuit = procedure (Sender: TObject; AUser: TIdIRCUser) of object;
TIdIRCOnNames = procedure (Sender: TObject; AUsers : TIdIRCUsers; AChannel: TIdIRCChannel) of object;
TIdIRCOnInvite = procedure (Sender: TObject; AUser: TIdIRCUser; AChannel: String) of object;
TIdIRCOnError = procedure (Sender: TObject; AUser: TIdIRCUser; ANumeric, AError: String) of object;
TIdIRCOnAway = procedure (Sender: TObject; AUser: TIdIRCUser) of object;
TIdIRCOnWallops = procedure (Sender: TObject; AUser: TIdIRCUser; AContent: String) of object;
TIdIRCOnSystem = procedure (Sender: TObject; AUser: TIdIRCUser; ACmdCode: Integer; ACommand, AContent: String) of object;
TIdIRCOnRaw = procedure (Sender: TObject; AUser: TIdIRCUser; ACommand, AContent: String;
var Suppress: Boolean) of object;
TIdIRCOnOp = procedure (Sender: TObject; AUser: TIdIRCUser; AChannel: TIdIRCChannel; ATarget: TIdIRCUser) of object;
TIdIRCOnBan = procedure (Sender: TObject; AUser: TIdIRCUser; AChannel: TIdIRCChannel; AHostmask: String) of object;
TIdIRCOnChannelMode = procedure (Sender: TObject; AUser: TIdIRCUser; AChannel: TIdIRCChannel; AChanName: String; AModes: String) of object;
TIdIRCOnChannelModeChanged = procedure (Sender: TObject; AUser: TIdIRCUser; AChannel: TIdIRCChannel) of object;
TIdIRCOnUserMode = procedure (Sender: TObject; AModes: String) of object;
TIdIRCOnInviting = procedure (Sender: TObject; ANick, AChannel: String) of object;
TIdIRCOnKill = procedure (Sender: TObject; User: TIdIRCUser; AVictim, AReason: String) of object;
TIdIRCOnUnknownCommand = procedure (Sender: TObject; AUser: TIdIRCUser; ACommand, AContent: String) of object;
TIdIRCOnCTCPQuery = procedure (Sender: TObject; User: TIdIRCUser; AChannel: TIdIRCChannel;
Command, Args: String; var ASuppress: Boolean) of object;
TIdIRCOnCTCPReply = procedure (Sender: TObject; AUser: TIdIRCUser; AChannel: TIdIRCChannel;
Command, Args: String) of object;
TIdIRCOnSend = procedure (Sender: TObject; ACommand: String) of object;
TIdIRCOnNicksInUse = procedure (Sender: TObject; var ANick: String) of object;
TIdIRCOnSocketError = procedure (Sender: TObject; ASocket, AMsg: String) of object;
TIdIRCOnNoTopic = procedure (Sender: TObject; AChannel: TIdIRCChannel; AContent: String) of object;
TIdIRCOnAwayChange = procedure (Sender: TObject; AContent: String) of object;
TIdIRCOnNickChanged = procedure (Sender: TObject; AOldNick: String) of object;
TIdIRCOnDCCChat = procedure(Sender: TObject; ANick, AIp, APort: String) of object;
TIdIRCOnDCCSend = procedure(Sender: TObject; ANick, AIp, APort, AFileName, AFileSize: String) of object;
TIdIRCOnDCCResume = procedure(Sender: TObject; ANick, APort, AFileName, APosition: String) of object;
TIdIRCOnDCCAccept = procedure(Sender: TObject; ANick, APort, AFileName, APosition: String) of object;
TIdIRCOnLinks = procedure(Sender: TObject; AMask, AServer, AHopCount, AServerInfo: String) of object;
TIdIRCOnList = procedure(Sender: TObject; AChans: TStringList; APosition: Integer; ALast: Boolean) of object;
// TIdIRCOnChannelMode = procedure (Sender: TObject; Nick, Address, Channel: String) of object;
TIdIRC = class(TIdTCPClient)
protected
{ Property fields }
FNick: String;
FAltNick: String;
FUsername: String;
FRealName: String;
FServer: String;
//FPort: Integer;
FPassword: String;
FUserMode: TIdIRCUserModes;
FAway: Boolean;
FNotify: TStringList;
FReplies: TIdIRCReplies;
FState: TIdIRCState;
FCurrentNick: String;
FData: TObject;
{ Event handlers }
FOnMessage: TIdIRCOnMessage;
FOnNotice: TIdIRCOnMessage;
FOnAction: TIdIRCOnMessage;
FOnConnect: TNotifyEvent;
FOnDisconnect: TNotifyEvent;
FOnJoin: TIdIRCOnJoin;
FOnJoined: TIdIRCOnJoined;
FOnPart: TIdIRCOnPart;
FOnParted: TIdIRCOnParted;
FOnKick: TIdIRCOnKick;
FOnKicked: TIdIRCOnKicked;
FOnNickChange: TIdIRCOnNickChange;
FOnNickChanged: TIdIRCOnNickChanged;
FOnTopic: TIdIRCOnTopic;
FOnQuit: TIdIRCOnQuit;
FOnNames: TIdIRCOnNames;
FOnInvite: TIdIRCOnInvite;
FOnPingPong: TNotifyEvent;
FOnError: TIdIRCOnError;
FOnAway: TIdIRCOnAway;
FOnNowAway: TIdIRCOnAwayChange;
FOnUnAway: TIdIRCOnAwayChange;
FOnWallops: TIdIRCOnWallops;
FOnSystem: TIdIRCOnSystem;
FOnRaw: TIdIRCOnRaw;
FOnOp: TIdIRCOnOp;
FOnDeop: TIdIRCOnOp;
FOnBan: TIdIRCOnBan;
FOnUnban: TIdIRCOnBan;
FOnVoice: TIdIRCOnOp;
FOnDevoice: TIdIRCOnOp;
FOnChannelMode: TIdIRCOnChannelMode;
FOnChannelModeChanged: TIdIRCOnChannelModeChanged;
FOnUserMode: TIdIRCOnUserMode;
FOnUserModeChanged: TNotifyEvent;
FOnInviting: TIdIRCOnInviting;
FOnKill: TIdIRCOnKill;
FOnUnknownCommand: TIdIRCOnUnknownCommand;
FOnCTCPQuery: TIdIRCOnCTCPQuery;
FOnCTCPReply: TIdIRCOnCTCPReply;
FOnStateChange: TNotifyEvent;
FOnSend: TIdIRCOnSend;
FOnReceive: TIdIRCOnSend;
FOnNicksInUse: TIdIRCOnNicksInUse;
FOnSocketError: TIdIRCOnSocketError;
FOnNoTopic: TIdIRCOnNoTopic;
FOnDCCChat: TIdIRCOnDCCChat;
FOnDCCSend: TIdIRCOnDCCSend;
FOnDCCResume: TIdIRCOnDCCResume;
FOnDCCAccept: TIdIRCOnDCCAccept;
FOnLinks: TIdIRCOnLinks;
FOnList: TIdIRCOnList;
// FOnChannelMode: TIdIRCOnChannelMode;
FOnChannelUpdate: TIdIRCOnChannelUpdate;
{ Other fields }
FList: TStringList;
FListLast: Integer;
Token: TStringList;
FullCommand: String;
SenderNick: String;
SenderAddress: String;
Command: String;
Content: String;
FChannels: TIdIRCChannels;
FUsers: TIdIRCUsers;
FUser: TIdIRCUser;
FIRCThread: TIdIRCReadThread;
{ Socket }
FBuffer: String;
{ Socket event handlers }
procedure SocketDataAvailable;
//procedure SocketSessionClosed(Sender: TObject);
//procedure SocketSessionConnected(Sender: TObject);
{ Property methods }
procedure SetNick(AValue: String);
function GetNick: String;
procedure SetAltNick(AValue: String);
procedure SeTIdIRCUsername(AValue: String);
procedure SetRealName(AValue: String);
procedure SetPassword(AValue: String);
procedure SeTIdIRCUserMode(AValue: TIdIRCUserModes);
procedure SeTIdIRCReplies(AValue: TIdIRCReplies);
//procedure SetServer(Value: String);
//procedure SetPort(Value: Integer);
//function GetConnected: Boolean;
//function GetLocalHost: String;
//function GetLocalIPAddr: String;
//procedure SetSocksServer(Value: String);
//procedure SetSocksPort(Value: String);
{ Other methods }
procedure SeTIdIRCState(AState: TIdIRCState);
procedure TokenizeCommand;
function MatchCommand: Integer;
procedure ParseCommand;
function MatchDCC(ADCC: String): Integer;
function MatchCTCP(ACTCP: String): Integer;
procedure ParseDCC(ADCC: String);
procedure ParseCTCPQuery;
procedure ParseCTCPReply;
function ParseChannelModeChange(AChannelToken: Integer): Boolean;
function ParseUserModeChange: Boolean;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure Loaded; override;
procedure Connect(const ATimeout: Integer = IdTimeoutDefault); override;
procedure Disconnect(AForce: Boolean); reintroduce; overload;
function IsChannel(AChannel: String): Boolean;
function IsOp(ANick: String): Boolean;
function IsVoice(ANick: String): Boolean;
function MatchHostmask(AAddress, AHostmask: PChar): Boolean;
procedure Raw(ALine: String);
procedure Say(ATarget, AMsg: String);
procedure Notice(ATarget, AMsg: String);
procedure Action(ATarget, AMsg: String);
procedure CTCPQuery(ATarget, ACommand, AParameters: String);
procedure CTCPReply(ATarget, ACTCP, AReply: String);
procedure Join(AChannels : String; const AKeys: String =''); {Do not Localize}
procedure Part(AChannels : String; const AReason: String = ''); {Do not Localize}
procedure Kick(AChannel, ANick, AReason: String);
procedure Quit(AReason: String);
procedure Mode(AChannel, AModes : String; const AParams: String = ''); {Do not Localize}
procedure GetTopic(AChannel: String);
procedure SetTopic(AChannel, ATopic: String);
procedure SetAwayMessage(AMsg: String);
procedure ClearAwayMessage;
function GetModeString: String;
{ Public properties }
//property Connected: Boolean read GetConnected;
property Away: Boolean read FAway;
property Notify: TStringList read FNotify write FNotify;
property State: TIdIRCState read FState;
property Channels: TIdIRCChannels read FChannels;
property Users: TIdIRCUsers read FUsers;
property IRCThread: TIdIRCReadThread read FIRCThread;
//property LocalHost: String read GetLocalHost;
//property LocalIPAddr: String read GetLocalIPAddr;
//property Data: TObject read FData write FData;
published
{ Published properties }
property Nick: String read GetNick write SetNick;
property AltNick: String read FAltNick write SetAltNick;
property Username: String read FUsername write SeTIdIRCUsername;
property RealName: String read FRealName write SetRealName;
//property Server: String read FServer write SetServer;
//property Port: Integer read FPort write SetPort;
property Port default IdPORT_IRC;
property Password: String read FPassword write SetPassword;
property Replies: TIdIRCReplies read FReplies write SeTIdIRCReplies;
property UserMode: TIdIRCUserModes read FUserMode write SeTIdIRCUserMode;
//property SocksServer: String read FSocksServer write SetSocksServer;
//property SocksPort: String read FSocksPort write SetSocksPort;
{ Published events }
property OnMessage: TIdIRCOnMessage read FOnMessage write FOnMessage;
property OnNotice: TIdIRCOnMessage read FOnNotice write FOnNotice;
property OnAction: TIdIRCOnMessage read FOnAction write FOnAction;
property OnConnect: TNotifyEvent read FOnConnect write FOnConnect;
property OnDisconnect: TNotifyEvent read FOnDisconnect write FOnDisconnect;
property OnJoin: TIdIRCOnJoin read FOnJoin write FOnJoin;
property OnJoined: TIdIRCOnJoined read FOnJoined write FOnJoined;
property OnPart: TIdIRCOnPart read FOnPart write FOnPart;
property OnParted: TIdIRCOnParted read FOnParted write FOnParted;
property OnKick: TIdIRCOnKick read FOnKick write FOnKick;
property OnKicked: TIdIRCOnKicked read FOnKicked write FOnKicked;
property OnNickChange: TIdIRCOnNickChange read FOnNickChange write FOnNickChange;
property OnNickChanged: TIdIRCOnNickChanged read FOnNickChanged write FOnNickChanged;
property OnTopic: TIdIRCOnTopic read FOnTopic write FOnTopic;
property OnQuit: TIdIRCOnQuit read FOnQuit write FOnQuit;
property OnNames: TIdIRCOnNames read FOnNames write FOnNames;
property OnInvite: TIdIRCOnInvite read FOnInvite write FOnInvite;
property OnPingPong: TNotifyEvent read FOnPingPong write FOnPingPong;
property OnError: TIdIRCOnError read FOnError write FOnError;
property OnAway: TIdIRCOnAway read FOnAway write FOnAway;
property OnNowAway: TIdIRCOnAwayChange read FOnNowAway write FOnNowAway;
property OnUnAway: TIdIRCOnAwayChange read FOnUnAway write FOnUnAway;
property OnWallops: TIdIRCOnWallops read FOnWallops write FOnWallops;
property OnSystem: TIdIRCOnSystem read FOnSystem write FOnSystem;
property OnRaw: TIdIRCOnRaw read FOnRaw write FOnRaw;
property OnOp: TIdIRCOnOp read FOnOp write FOnOp;
property OnDeop: TIdIRCOnOp read FOnDeop write FOnDeop;
property OnBan: TIdIRCOnBan read FOnBan write FOnBan;
property OnUnban: TIdIRCOnBan read FOnUnban write FOnUnban;
property OnVoice: TIdIRCOnOp read FOnVoice write FOnVoice;
property OnDevoice: TIdIRCOnOp read FOnDevoice write FOnDevoice;
property OnChannelMode: TIdIRCOnChannelMode read FOnChannelMode write FOnChannelMode;
property OnChannelModeChanged: TIdIRCOnChannelModeChanged read FOnChannelModeChanged write FOnChannelModeChanged;
property OnUserMode: TIdIRCOnUserMode read FOnUserMode write FOnUserMode;
property OnUserModeChanged: TNotifyEvent read FOnUserModeChanged write FOnUserModeChanged;
property OnInviting: TIdIRCOnInviting read FOnInviting write FOnInviting;
property OnKill: TIdIRCOnKill read FOnKill write FOnKill;
property OnUnknownCommand: TIdIRCOnUnknownCommand read FOnUnknownCommand write FOnUnknownCommand;
property OnCTCPQuery: TIdIRCOnCTCPQuery read FOnCTCPQuery write FOnCTCPQuery;
property OnCTCPReply: TIdIRCOnCTCPReply read FOnCTCPReply write FOnCTCPReply;
property OnStateChange: TNotifyEvent read FOnStateChange write FOnStateChange;
property OnSend: TIdIRCOnSend read FOnSend write FOnSend;
property OnReceive: TIdIRCOnSend read FOnReceive write FOnReceive;
property OnNicksInUse: TIdIRCOnNicksInUse read FOnNicksInUse write FOnNicksInUse;
property OnSocketError: TIdIRCOnSocketError read FOnSocketError write FOnSocketError;
property OnNoTopic: TIdIRCOnNoTopic read FOnNoTopic write FOnNoTopic;
property OnDCCChat: TIdIRCOnDCCChat read FOnDCCChat write FOnDCCChat;
property OnDCCSend: TIdIRCOnDCCSend read FOnDCCSend write FOnDCCSend;
property OnDCCResume: TIdIRCOnDCCResume read FOnDCCResume write FOnDCCResume;
property OnDCCAccept: TIdIRCOnDCCAccept read FOnDCCAccept write FOnDCCAccept;
property OnLinks: TIdIRCOnLinks read FOnLinks write FOnLinks;
property OnList: TIdIRCOnList read FOnList write FOnList;
// property OnChannelMode: TIdIRCOnChannelMode read FOnChannelMode write FOnChannelMode;
property OnChannelUpdate: TIdIRCOnChannelUpdate read FOnChannelUpdate write FOnChannelUpdate;
End;//TIdIRC
const
{ RFC1459 specifies 15 as the maximum token count in any one line. }
{ I changed this to 30, becuase 15 causes problems on servers that don't stick to RFC - MRE - 4/16/02}
IdIrcMinTokenCount: Byte = 30;
implementation
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -