⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 idirc.pas

📁 photo.163.com 相册下载器 多线程下载
💻 PAS
📖 第 1 页 / 共 4 页
字号:
end;

procedure TIdIRC.CommandPING(ASender: TIdCommand);
begin
  Pong(ASender.Params[0]);
  if Assigned(FOnPingPong) then
  begin
    OnPingPong(ASender.Context);
  end;
end;

procedure TIdIRC.CommandWALLOPS(ASender: TIdCommand);
var
  LTmp: String;
begin
  if Assigned(FOnWallops) then
  begin
    LTmp := copy(ASender.Params[1], 2, length(ASender.Params[1]) - 2);
    OnWallops(ASender.Context, FSenderNick, FSenderHost, LTmp);
  end;
end;

procedure TIdIRC.CommandTOPIC(ASender: TIdCommand);
begin
  if Assigned(FOnTopic) then
  begin
    OnTopic(ASender.Context, FSenderNick, FSenderHost, ASender.Params[0], ASender.Params[1]);
  end;
end;

procedure TIdIRC.CommandServerWelcome(ASender: TIdCommand);
begin
  if Assigned(FOnSWelcome) then
  begin
    FTmp.Add(ASender.UnparsedParams);
    OnServerWelcome(ASender.Context, FTmp);
    if FTmp.Count > 0 then
    begin
      FTmp.Clear;
    end;
  end;
end;

procedure TIdIRC.CommandUSERHOST(ASender: TIdCommand);
begin
  if Assigned(FOnUserInfo) then
  begin
    FTmp.Add(ASender.UnparsedParams);
    OnUserInfoReceived(ASender.Context, FTmp);
    if FTmp.Count > 0 then
    begin
      FTmp.Clear;
    end;
  end;
end;

procedure TIdIRC.CommandISON(ASender: TIdCommand);
begin
  if Assigned(FOnIsOnIRC) then
  begin
    OnIsOnIRC(ASender.Context, FSenderNick, FSenderHost);
  end;
end;

procedure TIdIRC.CommandENDOFWHOIS(ASender: TIdCommand);
begin
  if Assigned(FOnWhoIs) then
  begin
    FTmp.Add(ASender.UnparsedParams);
    OnWhoIs(ASender.Context, FTmp);
    if FTmp.Count > 0 then
    begin
      FTmp.Clear;
    end;
  end;
end;

procedure TIdIRC.CommandENDOFWHOWAS(ASender: TIdCommand);
begin
  if Assigned(FOnWhoWas) then
  begin
    FTmp.Add(ASender.UnparsedParams);
    OnWhoWas(ASender.Context, FTmp);
    if FTmp.Count > 0 then
    begin
      FTmp.Clear;
    end;
  end;
end;

procedure TIdIRC.CommandLISTEND(ASender: TIdCommand);
begin
  if Assigned(FOnSvrList) then
  begin
    FTmp.Add(ASender.UnparsedParams);
    OnServerListReceived(ASender.Context, FTmp);
    if FTmp.Count > 0 then
    begin
      FTmp.Clear;
    end;
  end;
end;

procedure TIdIRC.CommandINVITING(ASender: TIdCommand);
begin
  if Assigned(FOnInviting) then
  begin
    OnInviting(ASender.Context, FSenderNick, FSenderHost);
  end;
end;

procedure TIdIRC.CommandSUMMONING(ASender: TIdCommand);
begin
  if Assigned(FOnSummon) then
  begin
    OnSummon(ASender.Context, FSenderNick, FSenderHost);
  end;
end;

procedure TIdIRC.CommandENDOFINVITELIST(ASender: TIdCommand);
begin
  if Assigned(FOnINVList) then
  begin
    FTmp.Add(ASender.UnparsedParams);
    OnInvitationListReceived(ASender.Context, FSenderNick, FTmp);
    if FTmp.Count > 0 then
    begin
      FTmp.Clear;
    end;
  end;
end;

procedure TIdIRC.CommandENDOFEXCEPTLIST(ASender: TIdCommand);
begin
  if Assigned(FOnEXCList) then
  begin
    FTmp.Add(ASender.UnparsedParams);
    OnExceptionListReceived(ASender.Context, FSenderNick, FTmp);
    if FTmp.Count > 0 then
    begin
      FTmp.Clear;
    end;
  end;
end;

procedure TIdIRC.CommandENDOFWHO(ASender: TIdCommand);
begin
  if Assigned(FOnWho) then
  begin
    FTmp.Add(ASender.UnparsedParams);
    OnWho(ASender.Context, FTmp);
    if FTmp.Count > 0 then
    begin
      FTmp.Clear;
    end;
  end;
end;

procedure TIdIRC.CommandENDOFNAMES(ASender: TIdCommand);
begin
  if Assigned(FOnNickList) then
  begin
    FTmp.Add(ASender.UnparsedParams);
    OnNicknamesListReceived(ASender.Context, FSenderNick, FTmp);
    if FTmp.Count > 0 then
    begin
      FTmp.Clear;
    end;
  end;
end;

procedure TIdIRC.CommandENDOFLINKS(ASender: TIdCommand);
begin
  if Assigned(FOnKnownSvrs) then
  begin
    FTmp.Add(ASender.UnparsedParams);
    OnKnownServersListReceived(ASender.Context, FTmp);
    if FTmp.Count > 0 then
    begin
      FTmp.Clear;
    end;
  end;
end;

procedure TIdIRC.CommandENDOFBANLIST(ASender: TIdCommand);
begin
  if Assigned(FOnBanList) then
  begin
    FTmp.Add(ASender.UnparsedParams);
    OnBanListReceived(ASender.Context, FSenderNick, FTmp);
    if FTmp.Count > 0 then
    begin
      FTmp.Clear;
    end;
  end;
end;

procedure TIdIRC.CommandENDOFINFO(ASender: TIdCommand);
begin
  if Assigned(FOnUserInfo) then
  begin
    FTmp.Add(ASender.UnparsedParams);
    OnUserInfoReceived(ASender.Context, FTmp);
    if FTmp.Count > 0 then
    begin
      FTmp.Clear;
    end;
  end;
end;

procedure TIdIRC.CommandENDOFMOTD(ASender: TIdCommand);
begin
  if Assigned(FOnMOTD) then
  begin
    FTmp.Add(ASender.UnparsedParams);
    OnMOTD(ASender.Context, FTmp);
    if FTmp.Count > 0 then
    begin
      FTmp.Clear;
    end;
  end;
end;

procedure TIdIRC.CommandREHASHING(ASender: TIdCommand);
begin
  if Assigned(FOnRehash) then
  begin
    OnRehash(ASender.Context, FSenderNick, FSenderHost);
  end;
end;

procedure TIdIRC.CommandENDOFUSERS(ASender: TIdCommand);
begin
  if Assigned(FOnSvrUsers) then
  begin
    FTmp.Add(ASender.UnparsedParams);
    OnServerUsersListReceived(ASender.Context, FTmp);
    if FTmp.Count > 0 then
    begin
      FTmp.Clear;
    end;
  end;
end;

procedure TIdIRC.CommandENDOFSTATS(ASender: TIdCommand);
begin
  if Assigned(FOnSvrStats) then
  begin
    FTmp.Add(ASender.UnparsedParams);
    OnServerStatsReceived(ASender.Context, FTmp);
    if FTmp.Count > 0 then
    begin
      FTmp.Clear;
    end;
  end;
end;

procedure TIdIRC.CommandSERVLISTEND(ASender: TIdCommand);
begin
  //
end;

procedure TIdIRC.CommandSTIME(ASender: TIdCommand);
begin
  if Assigned(FOnSvrTime) then
  begin
    OnServerTime(ASender.Context, ASender.Params[0], ASender.Params[1]);
  end;
end;

procedure TIdIRC.CommandSERVICE(ASender: TIdCommand);
begin
  if Assigned(FOnService) then
  begin
    OnService(ASender.Context);
  end;
end;

procedure TIdIRC.CommandSVERSION(ASender: TIdCommand);
begin
  if Assigned(FOnSvrVersion) then
  begin
    OnServerVersion(ASender.Context, ASender.Params[0], ASender.Params[1], ASender.Params[2]);
  end;
end;

procedure TIdIRC.CommandCHANMODE(ASender: TIdCommand);
begin
  if Assigned(FOnChanMode) then
  begin
    OnChannelMode(ASender.Context);
  end;
end;

procedure TIdIRC.CommandOPER(ASender: TIdCommand);
begin
  if Assigned(FOnOp) then
  begin
    OnOp(ASender.Context, FSenderNick, FSenderHost, ASender.Params[0]);
  end;
end;

//============================================================================//

procedure TIdIRC.ParseCTCPQuery(CTCPQuery, AChannel: String);
var
  CTCP: String;
  LTmp: String;
  LTmp1: String;
begin
  CTCP := CTCPQuery;
  LTmp := Fetch(CTCP, #32);
  LTmp1 := CTCP;

  case PosInStrArray(LTmp1, IdIRCCTCP) of
    0: { ACTION }
      begin
        //if Assigned(FOnAction) then
        //  FOnAction(FSenderNick, AChannel, LTmp1);
      end;
    1: { SOUND }
      begin
        if Assigned(FOnCTCPQry) then
        begin
          FOnCTCPQry(nil, FSenderNick, AChannel, LTmp, LTmp1, LTmp, LTmp);
        end;
      end;
    2: { PING }
      begin
        if Assigned(FOnCTCPQry) then
        begin
          FOnCTCPQry(nil, FSenderNick, AChannel, LTmp, LTmp1, LTmp, Ltmp);
        end;
        OnCTCPReply(nil, FSenderNick, LTmp, LTmp1, ltmp, ltmp, ltmp);
      end;
    3: { FINGER }
      begin
        if Assigned(FOnCTCPQry) then
        begin
          FOnCTCPQry(nil, FSenderNick, AChannel, LTmp, LTmp1, LTmp, Ltmp);
        end;
        OnCTCPReply(nil, FSenderNick, LTmp, Replies.Finger, ltmp, ltmp, ltmp);
      end;
    4: { USERINFO }
      begin
        if Assigned(FOnCTCPQry) then
        begin
          FOnCTCPQry(nil, FSenderNick, AChannel, LTmp, LTmp1, Ltmp, ltmp);
        end;
        OnCTCPReply(nil, FSenderNick, LTmp, Replies.UserInfo, ltmp, ltmp, ltmp);
      end;
    5: { VERSION }
      begin
        if Assigned(FOnCTCPQry) then
        begin
          FOnCTCPQry(nil, FSenderNick, AChannel, LTmp, LTmp1, ltmp, ltmp);
        end;
        OnCTCPReply(nil, FSenderNick, LTmp, Replies.Version, ltmp, ltmp, ltmp);
      end;
    6: { CLIENTINFO }
      begin
        if Assigned(FOnCTCPQry) then
        begin
          FOnCTCPQry(nil, FSenderNick, AChannel, LTmp, LTmp1, ltmp, ltmp);
        end;
        OnCTCPReply(nil, FSenderNick, LTmp, Replies.ClientInfo, ltmp, ltmp, ltmp);
      end;
    7: { TIME }
      begin
        if Assigned(FOnCTCPQry) then
        begin
          FOnCTCPQry(nil, FSenderNick, AChannel, LTmp, LTmp1, ltmp, ltmp);
        end;
        OnCTCPReply(nil, FSenderNick, LTmp, Format(RSIRCTimeIsNow, [DateTimeToStr(now)]), ltmp, ltmp, ltmp);
      end;
    8: { ERROR }
      begin
        if Assigned(FOnCTCPQry) then
        begin
          FOnCTCPQry(nil, FSenderNick, AChannel, LTmp, LTmp1, ltmp, ltmp);
        end;
      end;
    9: { DCC }
      begin
        ParseDCC(LTmp1);
      end;
    else
      if Assigned(FOnCTCPQry) then
      begin
        FOnCTCPQry(nil, FSenderNick, AChannel, LTmp, LTmp1, ltmp, ltmp);
      end;
  end;
end;

procedure TIdIRC.ParseCTCPReply(CTCPReply, AChannel: String);
var
  CTCP: String;
  LTmp: String;
  LTmp1: String;
begin
  CTCP := CTCPReply;
  LTmp := Fetch(CTCP, #32);
  LTmp1 := CTCP;

  if PosInStrArray(LTmp1, IdIRCCTCP) = 9 then { DCC }
  begin
    { FIXME: To be completed. }
  end
  else if Assigned(FOnCTCPRep) then
  begin
    FOnCTCPRep(nil, FSenderNick, AChannel, LTmp, LTmp1, ltmp, ltmp);
  end;
end;

procedure TIdIRC.ParseDCC(ADCC: String);
var
  LTmp: String;
  LTmp1, LTmp2, LTmp3: String;
begin
  LTmp := ADCC;
  LTmp1 := Fetch(LTmp, #32);
  LTmp2 := Fetch(LTmp, #32);
  LTmp3 := Fetch(LTmp, #32);
  //
  case PosInStrArray(LTmp1, IdIRCDCC) of
    0: {SEND}
      begin
        if Assigned(FOnDCCSend) then
        begin
          FOnDCCSend(nil, FSenderNick, LTmp2, LTmp3, StrToInt(LTmp1), StrToInt(LTmp));
        end;
      end;
    1: {CHAT}
      begin
        if Assigned(FOnDCCChat) then
        begin
          FOnDCCChat(nil, FSenderNick, LTmp2, StrToInt(LTmp3));
        end;
      end;
    2: {RESUME}
      begin
        if Assigned(FOnDCCResume) then
        begin
          FOnDCCResume(nil, FSenderNick, LTmp2, LTmp1, StrToInt(Ltmp1), StrToInt(LTmp3));
        end;
      end;
    3: {ACCEPT}
      begin
        if Assigned(FOnDCCAccept) then
        begin
          FOnDCCAccept(nil, FSenderNick, LTmp2, LTmp1, StrToInt(LTmp3), StrToInt(LTmp));
        end;
      end;
  end;
end;

//============================================================================//

procedure TIdIRC.SetNickname(AValue: String);
begin
  if not Connected then
  begin
    FNickname := AValue;
  end
  else
    Raw(Format('NICK %s', [AValue])); {do not localize}
end;

procedure TIdIRC.SetUsername(AValue: String);
begin
  if not Connected then
  begin
    FUsername := AValue;
  end
  else
    Raw(Format('USER %s %s %s :%s', [AValue, GetUserMode, '*', FRealName]));  {do not localize}
end;

procedure TIdIRC.SetIdIRCUserMode(AValue: TIdIRCUserModes);
begin
  FUserMode := AValue;
end;

procedure TIdIRC.SetIdIRCReplies(AValue: TIdIRCReplies);
begin
  FReplies.Assign(AValue);
end;

function TIdIRC.IsChannel(AChannel: String): Boolean;
begin
  //Result := (Length(AChannel) > 0) and CharIsInSet(AChannel, 1, ['&','#','+','!']);  {do not localize}
  Result := False;
  if Length(AChannel) > 0 then begin
    if CharIsInSet(AChannel, 1, ['&','#','+','!']) then begin  {do not localize}
     Result := True;
    end;
  end;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -