EOMY.NET
Хостинг EOMY.NET: Форум поддержки
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
RSS Feed  

Создаем ICQ-бота средствами Delphi

 
Начать новую тему   Ответить на тему    Список форумов EOMY.NET -> Программирование для PC (Windows/Linux/DOS)
Создаем ICQ-бота средствами Delphi
Автор Сообщение
onyx
11 1110 1000
11 1110 1000


Зарегистрирован: 02.04.2007
Сообщения: 1061
Откуда: Минск
598 Монеты

СообщениеДобавлено: Чт, 03 Янв, 2008 17:36    Заголовок сообщения: Создаем ICQ-бота средствами Delphi Ответить с цитатой

Доброго времени суток!

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

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

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

Для начала нам потребуется компонент, на основе которого и будет работать наш бот! Будем использовать TICQClient. Прошу заметить один очень важный момент! Нужно загрузить и использовать именно последнюю версию данного компонента, иначе работоспособность я не гарантирую. Это связано с тем, что в самом протоколе произошли изменения и старая версия просто-напросто не работает. Качаем отсюда.

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

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

Код:
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.

Код:
//Проверка на заполненность полей с 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. Это удачное соединение.

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



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

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


Для таймера используем следующий код:
Код:
ICQClient1.SendKeepAlive; //посылаем KeepAlive (Зачем? Описываль выше :))



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

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


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

Код:
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 Желаю Вам творческих успехов, меньше ошибок и больше кода! Wink

(c) onyx Smile
_________________
DelphiLand.net - Территория Delphi :: Исходники, компоненты, программы, статьи, журнал, форум.
Последние новости. И многое, многое другое!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Amethyst
Хостинг — это наше всё!
Хостинг — это наше всё!


Зарегистрирован: 21.11.2007
Сообщения: 200

717 Монеты

СообщениеДобавлено: Пт, 04 Янв, 2008 18:02    Заголовок сообщения: Ответить с цитатой

а ты случайно не знаеш как сделать бота на C++
а то делфи нету Crying or Very sad
_________________
новости бокса
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Megazoll
Пол-пирога
Пол-пирога


Зарегистрирован: 22.05.2007
Сообщения: 82

5166 Монеты

СообщениеДобавлено: Пт, 04 Янв, 2008 21:27    Заголовок сообщения: Ответить с цитатой

http://sourceforge.net/projects/icqkid2
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
onyx
11 1110 1000
11 1110 1000


Зарегистрирован: 02.04.2007
Сообщения: 1061
Откуда: Минск
598 Монеты

СообщениеДобавлено: Пт, 04 Янв, 2008 22:54    Заголовок сообщения: Ответить с цитатой

Amethyst, сорь... Располагаю только Делфями. Smile
_________________
DelphiLand.net - Территория Delphi :: Исходники, компоненты, программы, статьи, журнал, форум.
Последние новости. И многое, многое другое!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
onyx
11 1110 1000
11 1110 1000


Зарегистрирован: 02.04.2007
Сообщения: 1061
Откуда: Минск
598 Монеты

СообщениеДобавлено: Пт, 07 Мар, 2008 07:26    Заголовок сообщения: Ответить с цитатой

Кстати, эту статью напечатали в журнале "Мой интернет". Smile
Подробнее
Я рад. Smile
_________________
DelphiLand.net - Территория Delphi :: Исходники, компоненты, программы, статьи, журнал, форум.
Последние новости. И многое, многое другое!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов EOMY.NET -> Программирование для PC (Windows/Linux/DOS) Часовой пояс: GMT
Страница 1 из 1

 


Rambler's Top100   Рейтинг@Mail.ru    



Powered by phpBB © 2001, 2005 phpBB Group