LightIRC - это современный графический WEB IRC-клиент, написанный на flash, над которым по сей день работает немецкий разработчик. Сайт клиента www.lightirc.com.

Плюсы:

Минусы:

Сервер политики безопасности

Дело в том, что перед созданием сокетного соединения, flash сам запрашивает файл политики, в котором указываются разрешенные для соединения порты. На каждый IP адрес свой файл политики.
Работаем через SSH клиент в Linux сервере Debian 7 от супер пользователя root в любой папке.
  1. Скачиваем socketpolicy.pl:
    wget https://raw.githubusercontent.com/dimst/IRC/master/socketpolicy.pl
  2. Даём файлу права на выполение:
    chmod +x socketpolicy.pl
  3. Запускаем сервер в фоне:
    ./socketpolicy.pl &
  4. Открываем 873 порт в файерволле:
    iptables -A INPUT -p tcp -m tcp --dport 873 -j ACCEPT
Почему от root? Потому что сервер политики безопасности должен работать на 873 порту, а порты ниже 1000 может открывать приложение, запущенное только от root. Один из вариантов запускать socketpolicy не от root описан в этой статье.

Установка LightIRC

Работаем через SSH клиент в Linux сервере Debian 7 от обычного пользователя.
  1. Переходим в папку сайта, в которую будем устаналивать LightIRC:
    cd /home/dim/www/dim.st
  2. Скачиваем LightIRC:
    wget https://raw.githubusercontent.com/dimst/IRC/master/lightirc-1.3.4-build160.zip
  3. Распаковываем скачанный архив:
    unzip lightirc-1.3.4-build160.zip
  4. Переходим в распакованный архив:
    cd lightIRC
  5. Создаём конфигурационный файл config.js:
    nano config.js

Настройка LightIRC

Редактируем файл config.js под свой IRC-сервер:
// ----------------------------------------
// Полный конфигурационный файл config.js
// для IRC WEB-клиента LightIRC 1.3.4 от DiM
// Инструкция по установке и настройке
// https://dim.st/irc/lightirc
// ----------------------------------------

var params = {};

// IRC сервер, к которому пользователи LightIRC будут подключаться
params.host = "dreamterra.net";

// порт IRC сервера (по-умолчанию 6667)
// UPD 15.02.17: к 6665-6669 портам LightIRC подключаться не будет ( http://redmine.lightirc.com/projects/lightirc/wiki/Flash_Policy_setup_instructions )
// в IRC сервере специально для LightIRC откроем отдельный порт
params.port = 6664;

// порт сервера политики безопасности (по-умолчанию 843)
// https://dim.st/irc/lightirc#_0
params.policyPort = 843;

// кодировка (по-умочланию utf-8)
params.charset = "windows-1251";

// предлагаемый ник перед подключением (по-умолчанию lightIRC_%)
// знак % - уникальное случайное пятизначное число
params.nick = "dreamer_%";

// альтернативный ник, если основной занят
params.nickAlternate = "_dreamer_%";

// запоминать указанный вами ник?
// (по-умолчанию false)
// true - да, false - нет
params.rememberNickname = true;

// скобки вокруг ника в чате. в данном случае будет выглядеть так:
// (dreamer_13154)
// по умлочанию < >
params.nickPrefix = "(";
params.nickPostfix = ")";

// показывать значки статуса на канале (+,%,@,&,~) перед ником окне чата?
// true - да, false - нет. по-умолчанию true
params.showNickPrefixes = false;

// показывать графические иконки статуса на канале (+,%,@,&,~) перед ником окне чата?
// true - да, false - нет. по-умолчанию false
params.showNickPrefixIcons = false;

// пароль сервера
//params.password = "";

// идент (по-умолчанию случайно сгенерированное число)
params.ident = "www";

// реальное имя
// по-умолчанию "lightIRC.com Flash IRC Client"
params.realname = "Пользуюсь LightIRC";

// сообщение при отключении (quit)
// по-умолчанию "lightIRC.com Flash IRC Client"
params.quitMessage = "Я был счастливым пользователем LightIRC";

// язык WEB клиента (по-умолчанию en - английский)
params.language = "ru";

// путь до директории с языками
// по-умолчанию "language/"
params.languagePath = "language/";

// открывать приват при двойном клике по нику пользователя в списке?
// true - да, false - нет (по-умолчанию true)
params.enableQueries = true;

// канал на автозаход. несколько каналов указывать через запятую
// если автозаход не нужен, закомментировать строку
params.autojoin = "#dreamterra"

// команды, выполняемые после подключения пользователя к IRC серверу
// сюда можно вписать, например, заход на закрытый ключом канал "/join #канал ключ"
// или установка какого то мода наник "/mode $me +x"
// несколько команд указывать через запятую
params.perform = "";

// список команд, которые будут запрещены для использования
// например смена ника, заход на каналы: "nick,join"
params.blockedCommands = "";

// пропускать все сообщения от IRC сервера через javascript обработчик?
// javascript обработчики находятся в конце конфига
// true - да, false - нет (по-умолчанию false)
params.loopServerCommands = false;

// пропускать все сообщения от пользователя через javascript обработчик?
// javascript обработчики находятся в конце конфига
// true - да, false - нет (по-умолчанию false)
params.loopClientCommands = false;

// переподключаться, если разорвалось соединение?
// true - да, false - нет (по-умолчанию true)
params.autoReconnect = true;

// показывать ошибку, если сервер политики безопасности не работает?
// true - да, false - нет (по-умолчанию true)
params.showSecurityError = true;

// свой текст ошибки соединения с сервером политики безопасности
params.customSecurityErrorMessage="Временные неполадки, попробуйте позже.";

// открывать ссылки в чате в новом окне? рекомендуется, чтоб не закрыть сам чат
// по-умолчанию "_blank" - в новом окне
params.targetFrame = "_blank";

// маска бана, если пользователь LightIRC кого-то забанит
// по-умолчанию "*!%ident%@*"
params.defaultBanmask = "*!%ident%@%host%";

// делать /who запрос на каждого пользователя?
// это потребуется для параметра "userListCustomFormatting"
// не рекомендуется использовать в больших IRC сетях из за повышения нагрузки
// true - да, false - нет (по-умолчанию false)
params.performContinousWhoRequests = false;

// путь до файла с css-стилями (тема оформления)
// по-умолчанию доступные темы:
// black.css, blue.css, darkorange.css, green.css, lightblue.css, yellow.css
// любую тему оформления можно отредактировать или создать свою
params.styleURL = "css/darkorange.css";

// показывать навигацию по открытым окнам (каналам)?
// true - да, false - нет (по-умолчанию true)
params.showNavigation = true;

// расположение кнопок открытых окон (каналов)
// bottom - снизу, top - сверху, left - слева, right - справа
// по-умолчанию "bottom"
params.navigationPosition = "bottom";

// пароль ника для идентификации у NickServ
//params.identifyPassword = "";

// сообщение от NickServ, при виде которого будет появляться всплывающее окно,
// в котором нужно будет указать пароль от ника
// укажите точное сообщение, которое используется в вашей IRC сети
// иначе всплывающее окно работать не будет
// по-умолчанию "NickServ:This nickname is registered"
params.identifyMessage="NickServ:Ник, который вы сейчас используете, зарегистрирован и защищен.";

// команда идентификации у NickServ
// по-умолчанию "/msg NickServ identify %pass%"
params.identifyCommand="/msg NickServ identify %pass%";

// показывать кнопку регистрации ника?
// true - да, false - нет (по-умолчанию false)
params.showRegisterNicknameButton = true;

// ник сервиса регистрации ника (по-умолчанию "NickServ")
params.registerNicknameServiceName = "NickServ";

// команда регистрации ника
// по-умолчанию "/msg NickServ register %password% %mail%"
params.registerNicknameCommand = "/msg NickServ register %password% %mail%";

// показывать кнопку регистрации канала?
// true - да, false - нет (по-умолчанию false)
params.showRegisterChannelButton = true;

// ник сервиса регистрации канала (по-умолчанию "ChanServ")
params.registerChannelServiceName = "ChanServ";

// команда регистрации канала
// по-умолчанию "/msg ChanServ register %channel% %password% %description%"
params.registerChannelCommand = "/msg ChanServ register %channel% %password% %description%";

// активировать звуковые уведомления при обращении и сообщениях в привате?
// true - да, false - нет (по-умолчанию true)
// этот параметр можно будет изменить в самом web клиенте после подключения к IRC в настройках
params.soundAlerts = true;

// активировать звуковые уведомления при сообщениях на каналах?
// true - да, false - нет (по-умолчанию false)
params.soundOnNewChannelMessage = false;

// показывать время перед ником в чате?
// true - да, false - нет (по-умолчанию true)
// этот параметр можно будет изменить в самом web клиенте после подключения к IRC в настройках
params.showTimestamps = true;

// формат времени перед ником в чате (по-умолчанию "[HH:mm:ss]")
params.timestampFormat = "HH:mm:ss ";

// показывать сообщения о входах/выходах пользователей?
// true - да, false - нет (по-умолчанию true)
// этот параметр можно будет изменить в самом web клиенте после подключения к IRC в настройках
params.showJoinPartMessages = true;

// НЕ делать окно привата активным, если тебе кто то написал?
// true - да, false - нет (по-умолчанию false)
// этот параметр можно будет изменить в самом web клиенте после подключения к IRC в настройках
params.showNewQueriesInBackground = false;

// размер шрифта в строке ввода и в самом чате
// этот параметр можно будет изменить в самом web клиенте после подключения к IRC в настройках
params.fontSize = "14";

// показывать окно сервера после подключения?
// true - да, false - нет (по-умолчанию true)
params.showServerWindow = true;

// показывать поле ввода ника перед подключением к IRC? 
// true - да, false - нет (по-умолчанию false)
params.showNickSelection = true;

// показывать поле ввода пароля от ника перед подключением к IRC?
// true - да, false - нет (по-умолчанию false)
params.showIdentifySelection = false;

// показывать поле ввода пароля от сервера перед подключением к IRC?
// true - да, false - нет (по-умолчанию false)
params.showServerPasswordSelection = false;

// показывать настройки канала?
// true - да, false - нет (по-умолчанию true)
params.showChannelCentral = true;

// показывать кнопку меню (настройки, сменить ник, войти на
// канал/список каналов и т.д.) после подключения?
// true - да, false - нет (по-умолчанию true)
params.showMenuButton = true;

// показывать кнопку для показа списка всех каналов сети в меню?
// true - да, false - нет (по-умолчанию true)
params.showListButton = true;

// показывать кнопку смена ника в меню?
// true - да, false - нет (по-умолчанию true)
params.showNickChangeButton = true;

// показывать кнопку опций в меню?
// true - да, false - нет (по-умолчанию true)
params.showOptionsButton = true;

// показывать кнопку с настройками канала в меню?
// true - да, false - нет (по-умолчанию true)
params.showChannelCentralButton = true;

// показывать кнопку для входа на канал в меню?
// true - да, false - нет (по-умолчанию true)
params.showJoinChannelButton = true;

// показывать кнопку для выхода с канала в меню?
// true - да, false - нет (по-умолчанию true)
params.showPartChannelButton = true;

// показывать кнопку регистрации канала в меню?
// true - да, false - нет (по-умолчанию false)
params.showRegisterChannelButton = true;

// показывать кнопку регистрации ника в меню?
// true - да, false - нет (по-умолчанию false)
params.showRegisterNicknameButton = true;

// показывать кнопку со смайлами?
// true - да, false - нет (по-умолчанию true)
params.showEmoticonsButton = true;

// смайлы: преобразование символов в картинки
params.emoticonList = ":)->smile.gif,;)->wink.gif,:D->biggrin.gif,:P->tongue.gif,:(->sad.gif,:$->blushing.gif,:O->ohmy.gif,(H)->cool.gif,:|->mellow.gif,Oo->blink.gif,:'(->crying.gif,:S->unsure.gif,:[->mad.gif";

// путь до директории со смайлами
// по-умолчанию "emoticons/"
params.emoticonPath = "emoticons/";

// показывать кнопку фоматирования теста (жирность, подчеркивание, наклонный текст)?
// true - да, false - нет (по-умолчанию true)
params.showRichTextControls = true;

// показывать кнопку изменения цвета текста?
// true - да, false - нет (по-умолчанию true)
params.showRichTextControlsForegroundColor = true;

// показывать кнопку изменения цвета фона текста?
// true - да, false - нет (по-умолчанию true)
params.showRichTextControlsBackgroundColor = true;

// показывать кнопку отправки сообщения?
// true - да, false - нет (по-умолчанию true)
params.showSubmitButton = true;

// показывать блок-заголовок с названием и темой канала?
// true - да, false - нет (по-умолчанию true)
params.showChannelHeader = true;

// формат верхнего блока-заголовка
// по-умолчанию "%channel% [%users%] [%mode%] %topic%"
params.channelHeader = "%channel% [%mode% %users% чел] %topic%";

// показывать в чате сообщения: входы, выходы, смены ника, топиков, модов?
// true - да, false - нет (по-умолчанию true)
params.showInfoMessages = true;

// показывать идент и хост (user@host.ru) у входящих/выходящих на канал пользователей?
// true - да, false - нет (по-умолчанию false)
params.showVerboseUserInformation = true;

// ширина колонки со списком пользователей канала (справа), по-умолчанию 150
params.userListWidth = "150";

// показывать вместо символов статуса (+,%,@,&,~) перед ником в списке пользователей
// графические иконки?
// true - да, false - нет (по-умолчанию false)
params.useUserListIcons = true;

// путь до директории с иконками
// по-умолчанию "icons/"
params.iconPath = "icons/";

// указать свои иконки
//userListCustomIcons = "";

// свой формат списка пользователей
// подробнее http://redmine.lightirc.com/projects/lightirc/wiki/Custom_user_list_appearance
//params.userListCustomFormatting="";

// показывать подробную информацию о пользователе, если навести курсор на его ник?
// true - да, false - нет (по-умолчанию false)
params.showUserListInformationPopup = true;

// информация о пользователе во всплывающем окне
// чтобы окно было не пустым, должен быть активным параметр performContinousWhoRequests
// по-умолчанию "nick,ident,realname,host"
params.userListInformationPopupItems = "nick,ident,realname,host";

// дополнительные команды в меню, вызываемое кликом правой кнопки мыши по нику
// в списке пользователей
//params.contextMenuInternalEvent="";

// дополнительные команды в меню, вызываемые с помощью javascript
// функция onContextMenuSelect
//params.contextMenuExternalEvent="";

//---------------ВЕБ КАМЕРА---------------

// активировать модуль WEB камеры?
// этот модуль платный и требует дополнительной установки
// true - да, false - нет (по-умолчанию false)
params.webcam = false;

// IP или хост для Red5/Wowza сервера
//params.rtmp = "";

// показывать окошко со своим изображением?
// true - да, false - нет (по-умолчанию true)
//params.webcamPreviewBox = true; 

// режим веб-камерты только приватный
// true - да, false - нет (по-умолчанию false)
//params.webcamPrivateOnly = false;

// режим веб-камерты только публичный
// true - да, false - нет (по-умолчанию false)
//params.webcamPublicOnly = false;

// показывать только видео, без звука?
// true - да, false - нет (по-умолчанию false)
//params.webcamVideoOnly = false;

// только звук, без видео?
// true - да, false - нет (по-умолчанию false)
//params.webcamAudioOnly = false;

// список каналов, на которых модуль веб-камеры не будет работать
//params.webcamChannelBlacklist = "";

// список только тех каналов, на которых модуль веб-камеры будет работать
//params.webcamChannelWhitelist = "";

//---------------ФУНКЦИИ---------------

function sendCommand(command) {
  swfobject.getObjectById('lightIRC').sendCommand(command);
}
function onChatAreaClick(nick) {
  //alert("onChatAreaClick: "+nick);
}

function onContextMenuSelect(type, nick) {
  alert("onContextMenuSelect: "+nick+" for type "+type);
}

function onServerCommand(command) {
  return command;
}

for(var key in params) {
  params[key] = params[key].toString().replace(/%/g, "%25");
}

//----------------------------------------
// Оригинальная документация находится по адресу
// http://redmine.lightirc.com/projects/lightirc/wiki/Customization_parameters
//----------------------------------------
Проверяем работу LightIRC - откроем в браузере
http://сайт/lightIRC


Официальная документация LightIRC на английском.