Главная | Регистрация | Вход
Среда, 06.08.2025, 15:05
Приветствую Вас Гость | RSS
Навигация:
Категории:
Базы данных [9]
Графика и Игры [0]
Интернет и Сети [0]
Компоненты и Классы [0]
Мультимедиа [0]
ОС и Железо [0]
Программа и Интерфейс [0]
Технологии [0]
Файловая система [0]
Программирование на Delphi [23]
Обучающие статьи [26]
Небольшие уроки по Delphi
Синтаксис [0]
Рабочий стол [0]
qwerty [0]
Чат сайта:
Главная » Статьи » Обучающие статьи

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

Для начала определимся для чего он вообще нужен. Многие из Вас выбрали протокол ICQ (OSKAR) для общения в сети. Это очень удобный вариант для обмена мгновенными сообщениями. Но ведь можно использовать, так называемую, "аську" и для получения ценной для Вас информации. Вот здесь то и приходят на помощь боты! Так кто же он такой? ICQ-бот - компьютерная программа, работающая по протоколу ICQ и выполняющая различные функции. Принцип работы: бот принимает входящие сообщения, анализирует их и отсылает результат выполнения и/или выполняет нужную команду. Существует несколько типов ботов. Чат-боты - на каком-либо UIN закреплена программа, имитирующая общение. Но так есть и информационные боты. Они способны выдать по запросу переводы слов, текущие курсы валют, прогноз погоды по более чем 2000 городов мира, выполняют функции органайзера с возможностью установить напоминания на указанное время/дату и т.д. набор функций и интеллект бота напрямую зависит от желания и возможностей разработчика.

Вот и мы сегодня попробуем "воспитать" свое собственное чадо. Это будет очень простой бот, смособный обработать лишь одну команду. Реализация прозвучит на языке Object Pascal. Ну что ж приступим!

Рабочую версию компонента TIcqClient можно найти в каталоге файлов этого сайта.

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

Приступим непосредственно к разработке. Устанавливаем свойства компонентов:

Code
Label1.Caption:="UIN:";  
Label2.Caption:="Пароль:";  
Edit1.Text/Edit2.Text:="";  
Edit1.MaxLength:=9;  
Edit2.MaxLength:=8;  
Button1.Caption:="Вход";  
Button2.Caption:="Выход";  
Memo1.ReadOnly:=True;  
Memo1.ScrollBars:=ssVertical;  
Memo1.Lines.Clear; //удалить строку Memo1  
Timer1.Enabled:=False;  
Timer1.Interval:=110000;  
ICQClient1.ConvertToPlaintext:=True;

Поясню зачем нужен таймер. Для ICQClient1 есть обработчик события KeepAlive. KeepAlive нужно отсылать каждые две минуты на сервер для того, чтобы нас "помечали" как находищийся пользователь в сети.

Теперь поместит на форму кнопку Button1 и процедуре обработки клика впишем следующий код. Это у нас будет соединение с сервером. Так же мы сразу будем проверять, не оставил ли пользователь пустыми поля с ICQ аккаунтом и будем результат работы выводить в Memo1.

Code
//Проверка на заполненность полей с ICQ аккаунтом  
if (Edit1.Text = '') or (Edit2.Text = '') or //пустые поля  
(Length(Edit1.Text) < 5) or (Length(Edit2.Text) < 3) //Если UIN меньше 5 символов и пароль меньше 3  
then  
  begin  
  MessageDlg('Не правельно заполнены поля!',mtInformation,[mbOk],0); //Выводим сообщение об ошибке  
  Exit;  
end;  
rec := True; //Удачное соединение  
ICQClient1.UIN := StrToInt(Edit1.Text); //забираем UIN  
ICQClient1.Password := Edit2.Text; //забираем пароль  
ICQClient1.Login(); //Соединяемся с сервером  
Memo1.Lines.Add('Соединение с сервером ICQ...'); //Выводим текущее состояние (соединение)

Далее мы проверяем установлено ли соединение с сервером. Это событие OnLogin для ICQClient1. Это удачное соединение.

Code
if ICQClient1.LoggedIn then //если соединение установлено  
  begin  
  Memo1.Lines.Add('Соединение с сервером установлено.'); //Добавляю в Memo1 строку о текущем положении  
  Timer1.Enabled := True; //Включаю таймер  
end;

Для провала при подключении используем следующий код и добавляем его в обработчик события OnConnectionFailed опять же для ICQClient1.

Code
if not rec then Exit; //Если мы нажали на кнопку "Выход", то не нужно пытаться соединиться  
  Memo1.Lines.Add('Не удалось соединиться с сервером.');  
  if MessageDlg('Попытаться соединиться еще раз?',mtInformation,[mbOk,mbCancel],0) = mrOk  
  then  
  begin  
  ICQClient1.Login();  
  Memo1.Lines.Add('Соединение с сервером ICQ...');  
end;

Для таймера используем следующий код:

Code
ICQClient1.SendKeepAlive; //посылаем KeepAlive (Зачем? Описываль выше :)

Далее для кнопки Button2 используем функцию разрыва связи с сервером:

Code
if not ICQCLient1.LoggedIn then  
MessageDlg('Соединение с сервером не установлено!',mtInformation,[mbOk],0)  
  else  
  begin  
  rec := False;  
  ICQCLient1.Disconnect;  
  Memo1.Lines.Add('Соединение с сервером оборвано.');  
Timer1.Enabled := False;  
end;

А теперь непосредственно и "сердце" нашего бота. Даже не сердце а интелект. Сейчас мы его научим обрабатывать пришедшие сообщения. Для этого мы воспользуемся обработчиком события OnMessageRecv. Ничего сложного. Вот пример кода.

Code
var  
icq: cardinal;  
  begin  
  icq := StrToInt(UIN);  
  Memo1.Lines.Add(UIN + ': ' + Msg); //Добавляем полученное сообщение в Memo1  
if Msg="Привет" then  
  ICQClient1.SendMessage(icq,'Привет'); //Отсылаем ответ, мол здравствуйте! Рады вас слышать!  
  else  
  ICQClient1.SendMessage(icq,'Извините, мне не о чем с Вами поговорить... :)');  
end;

Вот так, друзья мои! Таким не сложным кодом можно создать собственного бота-болтуна и наделить его отличной разговорной базой! smile Но это уже скучная и рутинная работа. Желаю Вам творческих успехов, меньше ошибок и больше кода!

Категория: Обучающие статьи | Добавил: NekitoS (20.04.2009)
Просмотров: 3417 | Рейтинг: 5.0/4 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа
Поиск
Контакты
ICQ:306182
Статистика
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Copyright "Delphi Project Ltd" © 2025