IRC клиент на Delphi
Меню

Категории каталога
TCL\TK [1]
Здесь собраны статьи, посвященные программированию на TCL\TK
Разное [1]
Здесь собраны различные интересные статьи по программированию
Visual Basic [1]
Здесь собраны статьи по программированию на Visual Basic`e
Delphi [1]
Здесь собраны статьи по программированию на Delphi

Поиск по каталогу

Полезные ссылки

Наш опрос
На каком языке Вы предпочитаете писать свои программы?

[ Результаты · Архив опросов ]

Всего ответов: 69


Понедельник, 2024-10-07, 5:15 AM

» Статьи » Программирование » Delphi

IRC клиент на Delphi
На самом деле, есть много способов написания IRC-клиента. Во-первых, это прямая работа с IRC-протоколом. Дело весьма напряжное, и помочь в нем тебе сможет либо старый добрый Indy, либо библа WSocket из комплекта интернет-компонентов ICS (Internet Component Suite). Собственно, если посмотреть на www.torry.net/irc.htm - список наиболее популярных IRC-компонентов, можно обнаружить, что большая их часть именно так и поступает - использует Indy либо WSocket. Заметь, при этом они не стесняются требовать у тебя десятки долларов за использование их софта. Компонент ActiveIRC лишен этого недостатка, поэтому именно про него я сегодня и расскажу.

ActiveIRC Component
Представляет он собой обычный бесплатный ActiveX компонент. В поставку компонента входит файл "ActiveIRC installer.exe" плюс документация. По большому счету, никакой документации к нему и не требуется - все предельно ясно, но для интереса можно и ознакомиться - там есть описание нескольких полезных функций.

После запуска обозначенного exe-файла тут же появится сообщение... об удачной установке. Но радоваться еще рано, т.к. если ты запустишь Delphi и откроешь в компонентах вкладку "ActiveX", то, разумеется, ничего не найдешь. Почему? Да потому, что разбаловались Вы, батенька, и привыкли, что инсталлятор делает все за Вас. На самом же деле он только переносит свой OCX файл в WINDOWS\SYSTEM, а регистрировать его придется уже ручками: component -> import ActiveX control -> ActiveIrc ActiveX -> выбрать файл Activeirc.ocx из системного каталога и инсталлировать его. Теперь он появится во вкладке ActiveX, и его можно смело класть на форму.

Наша форма будет довольно простой, состоящей из следующих элементов: 4 компонента Edit, 4 Кнопки, 3 Label, 1 Memo и собственно сам ActiveIRC.

А теперь проставим названия:

Label1 - свойство "caption" - "Сервер:"
Label2 - свойство "caption" - "Порт:"
Label3 - свойство "caption" - "Ник:"
Button1 - свойство "caption" - "CONNECT"
Button2 - свойство "сaption" - "JOIN"
Button3 - свойство "caption" - "Leave"
Button4 - свойство "caption" - "Сказать"

Label'ы 1-3 будут сопровождать соответствующие Edit'ы. Также можешь создать Edit'ы для ввода других данных, которые могут тебе понадобиться. Для них существуют свойства Email, FullName и Ident (в последнем обычно прописано "localhost").

У каждой кнопки есть свой caption. Он соответствует назначению каждой кнопки. Например, Button1 - CONNECT, отвечает за соединение с сервером. JOIN - зайти на канал.

В общем-то, можно обойтись и без батонов - вместо них написать обработчик OnKeyDown для Edit4 (в нем мы будем писать наши сообщения). Например, обработка команды "/JOIN #LOVE" сведется к удалению из строки всех символов от "/" до "#" и запуску процедуры: ActiveIrc1.Join ('#LOVE');.

Коннект и общение
Для коннекта к серверу и передачи данных о пользователе мы с тобой слепили кнопку "CONNECT". Давай посмотрим на ее событие OnClick:

ActiveIrc1.server:= edit1.Text;
ActiveIrc1.port:= strtoint (edit2.text);
ActiveIrc1.nick:= edit3.Text;
ActiveIrc1.Connect;

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

Как ты, наверное, догадался, главным компонентом у нас будет Memo1. Именно в нем будут отображаться все сообщения. А поскольку каждое сообщение - это уже событие (я имею в виду Event), давай создадим необходимые обработчики:

OnConsole - как только ты получаешь очередную порцию данных, например, служебная инфа от сервера, активизируется это событие. Единственное, что оно может дать - это переменную text, содержащую в себе само сообщение, поэтому пиши: memo1.lines.add (text);.

OnIRCReady - когда IRC-сервак будет готов принимать твои команды и свойство IsConnected примет значение TRUE, вызывается этот Event. В его обработчик достаточно написать, допустим, уведомление об этом: Memo1.Lines.Add ('Готов к труду и обороне!');.

OnMessage - сообщение, отправленное любым пользователем на канале, активирует этот Event. Естественно, что и возвращает он нам: channel - имя канала, user - ник юзера, text - собственно само сообщение. В его обработчик я написал: memo1.Lines.Add('('+channel+')'+user+'> '+text);. Заметь, что в этом случае к каждой мессаге будет приплюсовываться имя канала, с которого она отправлена. Это необходимо, если пользователь беседует на нескольких каналах, а при этом для чата используется всего одно окно. Вот пример такого сообщения:

(#Xakep)Petrovis> Да, наш админ тоже этим страдает :).

OnPrivateMessage - если какой-нибудь пользователь соизволил сделать на тебя /msg, т.е. отправить личное сообщение, придется обработать этот Event. Как это сделать - решать тебе (тут большой простор для фантазии, особенно для бывалого скриптера), но я сделал просто: memo1.Lines.Add('Приват от '+user+'--> '+text);.

OnUserJoins - в его обработчик ты можешь записать реакцию на приджойнившегося к каналу юзера. Я сделал простое уведомление:

memo1.Lines.Add('Пришел товарищ '+user+' на канал: '+channel+'!');

Ничто не мешает тебе сделать автоматическое приветствие в духе:

if User = 'Petya'
then ActiveIRC.Say (Edit5.text, 'Привет, уважаемый! Давно ждал тебя :)');

OnUserKick - когда скрипты только входили в моду, это событие было крайне необходимо для любителей сетевых разборок. После того как на канале кто-то кого-то кикнет, в твое распоряжение поступят константы: channel - канал, kickedby - имя обидчика, UserKicked - имя обиженного, Reason - основание. Как реагировать на это событие - решать тебе.

OnUserQuits - твоя реакция на чей-то уход с канала. В этом событии содержится имя покинувшего IRC-сервер пользователя.

События изучили, теперь перейдем к самому кодингу. Начнем с OnClick для кнопки "JOIN": ActiveIrc1.Join(edit5.Text), а в OnClick для "LEAVE", соответственно - ActiveIrc1.Leave;. Чтобы послать сообщение на канал или лично юзеру, нам понадобится кнопка "Сказать". Строчка ActiveIrc1.Say(edit5.Text,edit4.Text); позволит отправить на канал сообщение из Edit5 (Edit4 - это имя канала), но если первым аргументом будет прописан чей-то ник, то у этого пользователя откроется окно с приват-сообщением.

Полезные функции
Помимо той основы, что я описал, у этого компонента присутствуют еще несколько интересных функций:

boolean Raw(string: command) - напрямую отправляет команду IRC-серверу без обработки ActiveIRC. В случае успеха возвращает TRUE.

boolean CTCPRequest(string nick, string ctcp, string info) - направляет пользователю

CTCP-запрос. Очень поможет, если тебе захочется узнать:

VERSION - версию его IRC-софта.

PING - пинг к юзеру.

TIME - локальное время юзера. Действительно, это бывает полезным, особенно если ты любишь разговаривать с иностранцами.

boolean CTCPReply(string nick, string ctcp, string reply) - отвечает на CTCP-запрос.

boolean GetChannelMode(string channel, string mode) - возвращает тебе режим, в котором работает канал. Например:
i - invite only. Если ты не относишься к приглашенным - извини. Вход закрыт.
M - Moderated.
N - No external messages.
T - только ОПы могут устанавливать темы.

boolean GetUserMode(string channel, string user, string mode); - то же самое, но для пользователя. В данном случае он может быть либо о (ОП), либо v (войс).

И вновь продолжается бой!
Что ж, теперь у тебя в руках есть все необходимое. Осталось только напрячь свою фантазию, сделать красивый интерфейс и выложить полученный результат в инет для общего скачивания. Не будь жадным - выкладывай все бесплатно, а по возможности давай и сорсы. Так у тебя больше шансов быть замеченным. Вдруг ты задвинешь mIRC своим супернавороченным клиентом :).

Автор: Лозовский Александр

Источник: http://www.codenet.ru/progr/delphi/stat/irc.php

Категория: Delphi | Добавлено 2006-07-02 | Автор: Лозовский Александр
Просмотров: 2087 | Комментарии: 2 | Рейтинг: 1.0 |

Всего комментариев: 2
2 Nimbaza  
0
Хороший поисковик

1 sadsad  
0
Нехорошо чужие идеи тырить!

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Автор сайта - Дошевский Михаил (Blade)      Бесплатный конструктор сайтов - uCoz