IRCaBot: Modern IRC Chat Log Solution

IRCaBot: A Modern Solution for IRC Chat Logging

Why IRC Still Matters

The IRC protocol can be compared to an ancient mammoth among the abundance of modern chat platforms, but it remains an immortal classic. To this day, IRC is actively used as a tool for organizing chats among software developers (such as freenode, libera chat, and many others), as well as for corporate chats that require easy initial setup and simple maintenance.

For old-school developers, IRC is a familiar tool from way back, and for corporate networks, it’s a lightweight way to create a chat without user registration, databases, or any hardware requirements. In other words: a reliable, time-tested machine.

The Need for Logging

IRC is scalable and incredibly lightweight, but it has one major flaw: users have no chat history for the time they were offline. There are solutions for individual users to accumulate offline messages (like ZNC or Quassel Core), but they aren’t suitable for storing the entire chat history for public use. And the need for logging is real: how many corporate gems and valuable developer discussions are lost without a trace!

One could complain about switching to Slack, Discord, Rocket Chat, or even Jabber, but in many cases, it makes sense to adapt to the solutions already in use.

What Is IRCaBot?

IRCaBot (from the Russian “Irka” and “bot”) is a lightweight logger implemented in C++ (using the Qt library for networking and inter-thread communication). The project is distributed under the free GPLv3 license. The application features a web interface for user interaction and supports connecting to an unlimited number of servers and channels, nickname authentication (via NickServ), and trigger commands for sending predefined responses in chat.

Web Interface Features

  • Displays connection status to servers and a list of channels.
  • Shows current online users for each chat.
  • Nicknames in the log are highlighted in red or green depending on whether the user is currently present in the chat. This can be helpful when deciding whether to join a chat.

Privacy and Logging Details

Logs do not contain exact timestamps, as in most cases only the date matters in IRC. This feature is partly aimed at protecting the privacy of chat participants whose logs are published. For similar reasons, there is an option to hide messages from the log: messages starting with a dot appear as “Blinded message” without their actual content.

IRCaBot does not use databases. Logs are stored as text files and organized by /server/channel/year/month/day.txt. Pretty HTML isn’t always necessary, so there’s an option to download the log as a raw text file: just add .txt to the URL for a specific date.

Search Functionality

Of course, there’s search! The web interface includes the ability to search messages, including with regular expressions—a favorite feature for the core audience of this classic messenger. Search is performed in the current directory. For a global search across all chat history, open the page with the root log directory (where you select the year). Search results provide a link to the specific date along with all matching messages.

The web interface is built without JavaScript, which privacy enthusiasts will appreciate.

Resource Usage

Resource consumption fits perfectly with the IRC paradigm: the application, connected to several chats on two servers and with active web interface use, consumes less than 20MB of RAM and negligible CPU time.

How to Get Started

The source code and ready-to-use binaries (for Windows and Debian) can be found in the main git repository or on SourceForge. IRCaBot is a monolithic application. On Windows, it’s distributed as a binary with a statically linked Qt library, so there are no additional dependencies. For Unix-like systems, you’ll need to run a command like this (for Debian):

sudo apt install qt5-default

A configuration file is required to run the application. You can generate a sample config file with comments using the --example OUTPUT_FILE_NAME parameter. For more usage information, use the --help (or -h) parameter.

Leave a Reply