IRC Client Library 3.0.0 released!

Version 3.0.0 of the Kitteh IRC Client Library has been released!

As this is a major update, there's a lot to discuss. I'm breaking it down into non-breaking and breaking changes, with headings under each for changes worth talking more about.

Non-breaking Changes

STS Support

Strict Transport Security is a mechanism that lets servers specify to clients to only connect securely. Support for the draft IRCv3 specification for STS has been added. The documentation covers using STS in detail.

Customizable Default Messages

It is now possible to define the messages sent by default in the following situations:

The DefaultMessageMap allows you to specify, for each DefaultMessageType, the default message to use in the above scenarios. A default implementation is provided and is used automatically, though you can implement DefaultMessageMap yourself. Perhaps you want the reconnection message to be dynamic. Now you can do this.

Breaking Changes

All sections below, including separate headings, include some breaking changes.

A change to shading / relocating

KICL's libraries (MBassador, Netty) have been, until this point, shaded and relocated in the distributed jar file. This is no longer the default. Instead, the default jar you acquire by the groupId and artifactId does not have either shaded, and the compiled classes in that jar do not expect the library classes to be relocated. Instead, you must include these libraries yourself.

However, if you wish to continue using a pre-shaded, pre-relocated jar file you can acquire it with the maven classifier conveniently named shaded.

Account / Nickname / Username Naming Consistency

Previously, the words 'account', 'nickname', and 'username' had been overlapping in meaning. Account is now exclusively used to refer to a registered account with the server.

Flexible Message Delay

Message delay handling has been completely rewritten. The methods for setting a numeric delay are no longer present because that is no longer the only way to affect messages sent by the client.

You can now define what is effectively a supplier of MessageSendingQueue, a new class that takes messages in and sends them to a consumer when it chooses, via a function that takes in the Client currently in use. This can be done in the builder, and can be updated at any point via a method on Client which will cause an immediate change in actively used MessageSendingQueue.

Two implementations are provided: