Протокол IRC сравним с древним мамонтом среди обилия современных чатов, но является бессмертной классикой. По сей день IRC активно используется в качестве инструмента для организации чатов разработчиков программного обеспечения (freenode, libera chat и множество других), а также для организации корпоративных чатов, требующих легкость первого запуска и простоту обслуживания.

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

Зачем

IRC является масштабируемым и беспрецедентно легковесным, но с одним большим изъяном: у пользователя отсутствует история чатов за время его оффлайна. Для конкретно взятого пользователя существуют решения, обеспечивающие накопление оффлайн-сообщений (ZNC, Quassel Core), но для хранения всей истории чата и ее публичного использования они не подходят. А нужда в логировании имеет место быть: сколько корпоративных перлов и ценных бесед разработчиков проходит бесследно! Можно долго ворчать про переход на Slack, Discord или Rocket Chat и даже Jabber, но во многих случаях рационально адаптироваться под уже используемые решения.

Что

IRCaBot (от русс. "Ирка" и "бот") — легковесный логгер, реализованный на C++ (с использованием библиотеки Qt в сетевой части и межпотоковом взаимодействии). Проект распространяется под свободной лицензией GPLv3. Приложение имеет веб-интерфейс для взаимодействия с конечным пользователем и поддерживает подключение к неограниченному количеству серверов и каналов, авторизацию своего никнейма (через службу NickServ) и команды-триггеры для выдачи заданных ответов в чат.

Веб-интерфейс отображает статус подключения к серверам и список каналов. Для каждого чата показывается текущий онлайн со списком пользователей. Никнеймы в логе подсвечиваются красным или зеленым цветом также в зависимости от присутствия конкретного пользователя в чате в настоящий момент. Опция может быть полезной при принятии решения о входе в чат.

Логи не содержат точного времени, так как в большинстве случаев в IRC важна только дата. Отчасти эта особенность объясняется стремлением к приватности участников чата, лог которого публикуется. По схожим соображениям существует опция сокрытия сообщений из лога: сообщения, начинающиеся с точки, попадают в лог в виде текста "Blinded message" без их фактического содержания.

IRCaBot не использует базы данных. Логи хранятся в виде текстовых файлов и сортируются по принципу /сервер/канал/год/месяц/день.txt. Красивый html нужен не всегда, поэтому существует опция взятия лога с сервера в виде исходного текстовика: для этого в URL-строку конкретной даты дописывается .txt .

Поиск. Куда же без него! В веб-интерфейс встроена возможность поиска по сообщениям, в том числе с использованием регулярных выражений — любимцев основной аудитории древнейшего мессенджера! Поиск осуществляется в текущей директории. Для глобального поиска по всей имеющейся истории чата необходимо открыть страницу с корневой директорией лога (ту, где предлагается выбрать год). Поисковая выдача представляет из себя ссылку на конкретную дату с приведением тут же всех сообщений, удовлетворяющих запросу.

Веб-интерфейс выполнен без JavaScript. Параноики приватности рады.

Потребление ресурсов отлично вписывается в парадигму IRC: приложение, подключенное к нескольким чатам на двух серверах, при активном использовании веб-интерфейса потребляет меньше 20МБ ОЗУ и совсем незаметные центы процессорного времени.

Как

Исходный код и готовые бинарные файлы (под Windows и Debian) можно найти в основном гит-репозитории, либо на SourceForge. IRCaBot является монолитным приложением. Под Windows распространяется бинарный файл со статично слинкованной библиотекой Qt, поэтому дополнительных зависимостей нет, а для unix-like операционных систем потребуется выполнить команду вроде этой (для Debian): sudo apt install qt5-default.

Для запуска требуется конфигурационный файл. Пример конфигурационного файла с комментариями можно получить через параметр --example OUTPUT_FILE_NAME. Для дополнительной информации об использовании воспользуйтесь параметром --help (либо -h).

Комментарии (0)