Протокол IRC сравним с древним мамонтом среди обилия современных чатов, но является бессмертной классикой. По сей день IRC активно используется в качестве инструмента для организации чатов разработчиков программного обеспечения (freenode, libera chat и множество других), а также для организации корпоративных чатов, требующих легкость первого запуска и простоту обслуживания.
Для разработчиков старой школы IRC является привычным инструментом с давних времен, а для корпоративных сетей это легкий инструмент создания чата без регистрации пользователей, баз данных и каких-либо требований к железу. Образно говоря: надежный автомат, проверенный временем.
Зачем
IRC является масштабируемым и беспрецедентно легковесным, но с одним большим изъяном: у пользователя отсутствует история чатов за время его оффлайна. Для конкретно взятого пользователя существуют решения, обеспечивающие накопление оффлайн-сообщений (ZNC, Quassel Core), но для хранения всей истории чата и ее публичного использования они не подходят. А нужда в логировании имеет место быть: сколько корпоративных перлов и ценных бесед разработчиков проходит бесследно! Можно долго ворчать про переход на Slack, Discord или Rocket Chat и даже Jabber, но во многих случаях рационально адаптироваться под уже используемые решения.
![](https://habrastorage.org/getpro/habr/upload_files/7c4/fe9/a22/7c4fe9a22ec120b061ae36669f0f64bf.png)
Что
IRCaBot (от русс. "Ирка" и "бот") — легковесный логгер, реализованный на C++ (с использованием библиотеки Qt в сетевой части и межпотоковом взаимодействии). Проект распространяется под свободной лицензией GPLv3. Приложение имеет веб-интерфейс для взаимодействия с конечным пользователем и поддерживает подключение к неограниченному количеству серверов и каналов, авторизацию своего никнейма (через службу NickServ) и команды-триггеры для выдачи заданных ответов в чат.
![](https://habrastorage.org/getpro/habr/upload_files/6d7/376/7f8/6d73767f840c2bf29b73fd9a8dc1f70e.png)
Веб-интерфейс отображает статус подключения к серверам и список каналов. Для каждого чата показывается текущий онлайн со списком пользователей. Никнеймы в логе подсвечиваются красным или зеленым цветом также в зависимости от присутствия конкретного пользователя в чате в настоящий момент. Опция может быть полезной при принятии решения о входе в чат.
![](https://habrastorage.org/getpro/habr/upload_files/e07/22c/f86/e0722cf86a87ac8facf45eb3ed35ea08.png)
Логи не содержат точного времени, так как в большинстве случаев в IRC важна только дата. Отчасти эта особенность объясняется стремлением к приватности участников чата, лог которого публикуется. По схожим соображениям существует опция сокрытия сообщений из лога: сообщения, начинающиеся с точки, попадают в лог в виде текста "Blinded message" без их фактического содержания.
IRCaBot не использует базы данных. Логи хранятся в виде текстовых файлов и сортируются по принципу /сервер/канал/год/месяц/день.txt
. Красивый html нужен не всегда, поэтому существует опция взятия лога с сервера в виде исходного текстовика: для этого в URL-строку конкретной даты дописывается .txt
.
![](https://habrastorage.org/getpro/habr/upload_files/98b/f4b/a9a/98bf4ba9aa8062ff1b7613bce6cd7371.png)
Поиск. Куда же без него! В веб-интерфейс встроена возможность поиска по сообщениям, в том числе с использованием регулярных выражений — любимцев основной аудитории древнейшего мессенджера! Поиск осуществляется в текущей директории. Для глобального поиска по всей имеющейся истории чата необходимо открыть страницу с корневой директорией лога (ту, где предлагается выбрать год). Поисковая выдача представляет из себя ссылку на конкретную дату с приведением тут же всех сообщений, удовлетворяющих запросу.
![](https://habrastorage.org/getpro/habr/upload_files/82b/2b1/ac2/82b2b1ac251487ddbef917b13b3e5b74.png)
Веб-интерфейс выполнен без JavaScript. Параноики приватности рады.
Потребление ресурсов отлично вписывается в парадигму IRC: приложение, подключенное к нескольким чатам на двух серверах, при активном использовании веб-интерфейса потребляет меньше 20МБ ОЗУ и совсем незаметные центы процессорного времени.
Как
Исходный код и готовые бинарные файлы (под Windows и Debian) можно найти в основном гит-репозитории, либо на SourceForge. IRCaBot является монолитным приложением. Под Windows распространяется бинарный файл со статично слинкованной библиотекой Qt, поэтому дополнительных зависимостей нет, а для unix-like операционных систем потребуется выполнить команду вроде этой (для Debian): sudo apt install qt5-default
.
Для запуска требуется конфигурационный файл. Пример конфигурационного файла с комментариями можно получить через параметр --example OUTPUT_FILE_NAME
. Для дополнительной информации об использовании воспользуйтесь параметром --help
(либо -h
).
![](https://habrastorage.org/getpro/habr/upload_files/432/040/2e2/4320402e20e911572a2b20e8a69b242d.png)