Потребность в написании собственной софтины с поддержкой IRC-протокола возникла у меня не так давно. В «интернетах» видел различные реализации IRC-клиентов. Сначала бросил свой взгляд в сторону ActiveIRC, но потом решил не заморачиваться с ним и поработать с idIRC (как минимум, в шестой версии Borland Delphi уже должен быть). Чем может быть полезен IRC-клиент? Ну, во-первых, практика — в жизни всё может пригодиться. Во-вторых, можно поиграться и написать собственный бот (особенно, если нет времени или желания изучать mIRC-скриптинг).

Итак, что понадобится: на форму кидаем TListBox (для вывода туда списка пользователей IRC-канала) и два TMemo или TMemo и TEdit (окно с чатом и строка для ввода текста). Располагаем примерно так, как на скриншоте илл как-то по-своему. Ну, и самое основное — idIRC (со вкладки Indy Clients на палитре компонентов). Первоначально этого хватит, все напантовки (менюшку, форму с авторизацией и т.п.) можно добавить потом.

Самое основное: в свойствах idIRC прописываем:
• Host — сервер (например, irc.forestnet.org)
• Port — порт (6667 или 6669)
• Nick — имя пользователя
• AllNick — запасной ник (вдруг первый уже кем-то занят)
• Password — пароль (если не зарегистрированы, можно оставить поле пустым)
• Replies — всё, что будет отображаться при запросе User Info (можно задать, например, название и версию клиента).
В принципе, этого достаточно.

Если вы уже прикрутили форму с авторизацией — отлично, если нет — тоже неплохо. Объявляем глобальную переменную (или константу) типа string, присваиваем имя канала (например ‘#yoohoo’). Прописываем в нужном событии (во втором случае — это Form.OnCreate) следующее:

idIrc1.Connect();
idIrc1.Join (channel);

В обработчике событий idIRC1.OnJoined  должно быть следующее:

var i: integer;
begin
try
i:=0;
ListBox1.Clear;
for i := 0 to iDiRC1.Users.Count - 1 do
ListBox1.Items.Add(iDiRC1.Users.Items[i].Nick);
except
ListBox1.Items.Add('Что-то не так...');
end;

Таким образом, мы получили список пользователей на конкретном канале и заполнили им ListBox1.

Теперь в обработчике событий idIRC1.onMessage добавляем:
if AChannel <> nil then
Memo1.Lines.Add ('<' + AUser.Nick + '> ' + content)
else
Memo1.Lines.Add ('> приват от ' + AUser.Nick + ': ' + content);

На всякий случай: AUser — пользователь, написавший сообщение (в приват или на канал — значения не имеет), AChannel — канал (если nil — значит в приват) и Content — собственно сообщение. Когда основная часть клиента будет дописана, можно вполне заменить TMemo на TRichEdit и прикрутить обработчик цветов. Ах, и чуть не забыл: желательно также будет отображать и время события, отображаемого в Memo1 (на том, как это сделать, останавливаться не буду).

Теперь в обработчике TEdit или TMemo onKeyPress пишем:

if (length(Edit1.text)=0) or (Key <> #13) then
begin
Memo1.Lines.Add ('<' + idIRC1.Nick + '> ' + Edit1.Text;
idIRC1.Say (channel, Edit1.text);
end;

В idIRC1.OnAction прописываем:

Memo1.Lines.Add ('*** ' + Content);

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

Ну вот, даже этого уже достаточно, чтобы запустить наш «клиент» и посмотреть как он будет работать. При запуске (или нажатии соответствующей кнопки на форме авторизации) наш «клиент» будет подключаться к серверу, заходить на нужный канал (до подключения сразу к нескольким каналам и переключения окошек с ними нам ещё далеко), получать список пользователей канала (он, кстати, обрабатываться должен вручную — при возникновении определённых событий), ну и сможет отправлять сообщения на канал и получать их. Этого вполне достаточно (даже можно было обойтись и без списка пользователей), чтобы написать простенький IRC-бот, который что-нибудь бы там делал. :)

Но всё же лучше разобраться с остальными событиями idIRC, для чего они нужны:
• onAway — когда какой-нибудь пользователь меняет статус на «away» (нет на месте)
• onBan — когда кого-то банят (в т.ч. и вас)
• onConnect и onConnected — когда только начинаем устанавливать соединение и когда соединение уже установлено
• onOp и onDeop — когда кого-то назначают опом или когда кого-то разжаловали из операторов
• onVoice и onDevoice — когда кому-то дали войс или отобрали его
• onDisconnect и onDisconnected — когда только задумали отключиться (там ещё всё поправимо) и когда уже отключились
• onJoin и onJoined — когда только заходим на канал и когда уже зашли на него
• onKick и onKicked — когда кого-то кикнули и когда кикнули вас :P
• onNickChange и onNickChanged — когда кто-то меняет ник, и когда ник меняете вы
• onNickIsInUse — когда выбранное имя уже кем-то используется и даже запасной ник не помогает (можно, например, приписать случайные символы к выбранному нику)
• onPart и onParted — когда кто-то покидает канал, и когда вы сами покинули канал
• onPingPong — ну, и так понятно :)
По идее, этого вполне достаточно для обработки основных событий, которые могут возникнуть.

Если напишете что-то интересное или вовсе гениальное — хвастайтесь. :)

2 коммент. к записи “Свой IRC-клиент на Delphi”

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

  • @StM: ну, для чего именно я писал ирц-клиент, ты и сам в курсе + для одного рабочего прожекта пригодились возможности ирц-протокола.

Оставить комментарий

Также Вы можете войти с помощью: Yandex Google Вконтакте Mail.ru Twitter Loginza MyOpenID OpenID WebMoney

Последние комментарии

Облачко

.рф 02 2012 Apple avidemux Beeline Canon delphi facebook fail Google Intellect Money Italiano LOL Mail.ru MoneyMail OTP-банк PayPal PR Qiwi roverpad roverpc RURU Tele2 twitter ubuntu WebMoney wifi WikiLeaks wikipedia YouTube Адлер Александр II Астана Банк Русский Стандарт Белоруссия Белых Богородск Волгателеком Вятка Две звезды ЕГЭ ЕдРо Екатеринбург ЖКХ Жириновский Задорнов Идеи Израиль КХСМ Казахстан Карусель Каспаров Киев Кирово-Чепецк Котельнич Ленин Лукашенко МТС МакДоналдс Мегафон Михалков Молоток Москва Московская область Наша Russia Нижегородская область Нижний Новгород Николай II Нововятск Один против всех Одноклассники Павел I Пенза Плехов Польша Путин Пятёрочка РЖД Распутин Роисся Романовы Российская империя Россия США Санкт-Петербург Саранск Сбербанк Сергиев Посад Слободской Соловьёв Украина Фарафонов Финляндия Ходорковский Царское село Челябинск ЭПС Эр-телеком Яндекс аварии банки безопасность блог большая разница бюрократизм вКонтакте видеообработка визы винда виртуальная карта власть вредные привычки выборы выставка глупости глюки гости дела военные дела духовные долги дом-2 забавное законы катаклизмы кино кодинг конкурсы копирайты кредит культура лотереи ляпота медицина метро мытищи налоги непонимашки образование олимпиада опросы открытая студия памятники паранойя паспорт переписка перепись персональные данные пластиковые карты поединок поезда показуха полезные ссылки политика посткроссинг почта праздники программа передач пусть говорят путешествия пьянство работа реклама русский язык сберкнижки связь сервис совок спам справедливость среда обитания страхование сувениры таможня телевидение терминалы технологии транспорт фауна финансы фотосъёмка футбол футубра хамство химия хостеры цены чтиво

Ссылки

  • Строительство и реконструкция: коттедж. Строительство домов, коттеджей. .

Статистика

Рейтинг блогов