Асечные страсти

altСервисы для мгновенного обмена сообщениями плодятся как грибы, однако старушка Аська не собирается сдавать позиции. Чего с ней только не случалось! Ее создали на «святой» земле, продали американскому монстру, а тот и вовсе передал ее в руки российских бизнесменов. Несмотря на все перетрубации, аська все еще популярна среди простых смертных и в ее рядах наблюдается пополнение.

Такое положение дел не оставляет нам выбора как взять и разобраться во всех тонкостях асечного протокола.

Немного истории

Появилась на свет ICQ в большом израильском городе Тель-Авив. Изначально ее хотели использовать только для обеспечения связи между несколькими удаленными друг от друга компьютерами. Именно так и появилась всем известная аська.

После создания ICQ никто не планировал выпускать ее на паблик и пытаться как-то монетизировать. Разработчики лишь хотели облегчить себе работу, путем экономии времени (еще бы, какой гик не любит общаться прямо со своего рабочего места?).

Первыми маркетинговыми шагами можно считать распространение среди своих друзей. Только потом проект был выложен в сеть и каждый желающий мог воспользоваться удобной болталкой.
Сказать, что у нее мгновенно появились пользователи, значит, не сказать ничего. ICQ появилась на тысячах компьютерах разных стран мира буквально за пару дней, и потребность в кнопке скачать ICQ стала невообразимой.

В 1998 году ICQ была приобретена компанией AOL за 407 миллионов долларов. А разработчики переквалифицировались в инвесторов. Мировая сеть ежедневно, можно даже сказать ежесекундно разрастается и расширяется. Каждый день в ICQ регистрируются тысячи новых пользователей. Многие имеют по несколько UIN’ов, один нужен для работы, один для дома, другой для знакомств и т. д. Вот такая вот хорошая вещь аська.

Ася + Delphi

Для взаимодействия с асечным протоколом уже давно существует провереннный временем компонент — ICQClient. Написал этот чудесный компонент не кто-то, а наш с вами соотечественник — Александр Демченко aka Coban2k. К сожалению, автор забросил поддержку компонента, но его дело не умерло. Ныне за совершенствованием проекта занимается Царь Иоанн XIII.

По указанному линку можно найти последнюю версию компонента, а также примеры использования.

Работаем с компонентом

Ну вот, теперь давайте перейдем к установке компонента. У меня Delphi 7 и я скачал компонент TICQClient_v1.35_alpha index.php?action=dlattach;topic=13747.0;attach=25.

Устанавливается компонент как обычная библиотека. Не забудьте прописать путь к компоненту в настройках (если он автоматом не прописался).

Ну все, установку закончили. Переходим к более близкому знакомству. Компонент находится на вкладке Samples, бросаем его на форму и смотрим свойства.


UIN и Password. Как вы уже наверное поняли, это ваш уин и пароль
ICQServer: String — ICQ сервер, следует использовать: ‘login.icq.com’
ICQPort: Word — ICQ port, следует использовать: ‘5190’
ContactList: Tstrings — Контакт лист пользователя, *посылается только при логине*. Каждая строчка — UIN номер.
ConvertToPlaintext: Boolean — Если это свойство установить в TRUE, тогда сообщения, приходящие в RTF(Rich Text Format) формате, автоматически будут сконвертированы в простой текст(plain text).
AutoAwayMessage: String — Авто-ответ пользователя. В обычной ICQ это ответ на ‘Read Away-message’.
VisibleList: Tstrings — Visible лист пользователя. Каждая строка — UIN номер. Посылается, когда вы переходите в invisible статус. Добавлять пользователя можно в любое время.
InvisibleList: Tstrings — Invisible лист пользователя. Каждая строка — UIN номер. Посылается, когда вы переходите в статус отличный от invisible. Добавлять пользователя можно в любое время. Вот эти основные свойства с которыми нам предстоит работать. Теперь взглянем на события:

Login(Status: LongWord = S_ONLINE) — Процедура устанавливает соединение с сервером, вы сразу переходите в статус Status, который по умолчанию S_ONLINE

procedure Disconnect — Отсоединиться от сервера.

SendMessage(UIN: LongWord; Msg: String) — Послать сообщение UIN’у.
AddContact(UIN: LongWord): Boolean — Добавление UIN’а в ваш контакт лист после логина. UIN автоматически добавляется в ContactList TStrings.
RemoveContact(UIN: LongWord) procedure — Удаляет UIN из вашего контакт листа. Используйте пока вы в онлайне.

С мат частью немного разобрались. Приступим к программировании ICQ bot. Открываем Delphi и создаем новый проект. Голую форму приводим примерно вот к такому виду:


Я добавил Edit для уина и MaskEdit для пароля. Две Button для коннекта и дисконекта. ListBox для ответов и Memo для событий. Теперь начинаем кодить. По нажатию на кнопку коннект пишем следующий код:

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
IcqClient1.UIN:=StrToint(Edit1.Text);
ICqClient1.Password:=MaskEdit1.Text;
IcqClient1.Login(0);
Memo1.Lines.Add(‘Подключение…’);
SpeedButton1.Enabled:=False;
SpeedButton2.Enabled:=True;
end;
В первой и во второй строке мы читаем Уин и пароль, далее мы начинаем коннектится к серверу после чего добавляем события в Memo. Активируем кнопку дисконекта , а кнопку коннекта деактивируем чтобы не было повторного коннекта. Далее пишем что будет делать бот после коннекта:

procedure TForm1.ICQClient1Login(Sender: TObject);
begin
Image1.Picture.LoadFromFile(‘1.png’);
StatusBar1.Panels[0].Text:=’Онлайн’;
Memo1.Lines.Add(‘Онлайн’);
end;
Здесь все просто, загружаем фото в Image, добавляем сообщение в статус бар и мемо. Дальше самое интересное. Что будет делать бот после получения сообщения от пользователя. Конечно же он должен ему ответить, а отвечать мы будем сообщениями из листбокса, взятые рандомным образом:

procedure TForm1.ICQClient1MessageRecv(Sender: TObject; Msg, UIN: String);
Var
Message_s:String;
begin
Message_s:=ListBox1.Items.Strings[Random(4)];
Memo1.Lines.Add(‘От — ‘+UIN+’ ‘+ Msg);
Memo1.Lines.Add(‘Кому — ‘+Uin+’ ‘ + ‘(‘+’Я ‘+Message_S+’)’);
IcqClient1.SendMessage(StrToInt(Uin),’Я ‘+Message_S);
end;
Что делает первая строчка — я уже говорил. Далее мы банально добавляем событие в мемо и в конце отправляем пользователю сообщение. Осталось запрограммировать кнопку дисконнекта. Пожалуй, это самый простой код:

procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
IcqClient1.Disconnect;
SpeedButton1.Enabled:=True;
SpeedButton2.Enabled:=False;
Image1.Picture.LoadFromFile(‘2.png’);
StatusBar1.Panels[0].Text:=’Офлайн’;
Memo1.Lines.Add(‘Отключен’);
end;

Понравилась статья? Поделиться с друзьями: