IRC Client Library 6.0.0 released!
24 Feb 2019Version 6.0.0 of the Kitteh IRC Client Library has been released!
This is another MAJOR release coming fairly soon after the last one!
Oh no, I have to deal with breaking changes again!
Near-simultaneous to this release is version 5.1.1 which contains the only bug fix present in the 6.0.0 release. I plan to support 5.1.x with bug fixes for another few months, to allow time to update things. The breaking changes in this release are largely package or name changes, so the update process shouldn't be too bad regardless.
Let's talk changes!
New things
- Added
@MeCommandOnly
filter for the CTCP events, which now also have a parent interfaceCtcpEvent
. - CTCP handling is now friendlier, supporting even more broken input.
- Added convenience methods to
ModeStatusList
(now an interface!) to get mode statuses bychar
input.- For example, you could get a channel mode change event's bans with
event.getStatusList().getByMode('b');
- Also added
containsMode(char)
method.
- For example, you could get a channel mode change event's bans with
ModeStatus#isSetting()
has become#getAction()
, with anAction
enum, to make things a bit clearer.- This changes mode-related commands.
- IRCv3
message-tags
capability support.- This capability indicates to the server that you can handle message tags including client-only tags, as well as TAGMSG.
account-tag
,batch
, andserver-time
also independently indicate supporting message tags, but only enable their own tags. This capability indicates accepting arbitrary tags (which KICL always supports anyway!).- Capability is now automatically requested if the server supports it.
- Added method
MessageTag#isClientOnly()
to return true if a client-only tag (starts with+
). - Added
*TagMessageEvent
classes for receiving a TAGMSG, which is a message containing only tags. - Maximum line length is now over nine thousand, to compensate for increased allowed lengths in this capability.
- KICL now only keeps the last message tag of each name, per spec.
- Networking customizability and DNS improvements.
- You can now (why?) replace the Netty-based solution with your own, in the
Client
builder. - With access now to the
NetworkHandler
you can swap out the DNS resolver. - By default, the Netty system now uses a single
JavaResolver
for all connections, which should be sufficient for most setups. - I plan to write an improved resolver in the future, and welcome pull requests for such.
- You can now (why?) replace the Netty-based solution with your own, in the
Breaking changes
- Mode-related commands now use
ModeStatus.Action
instead of "need to read the javadocs" booleans. AwayCommand
methods renamed toaway
andnotAway
for clarity.PrivateEvent
no longer extendsMessageEvent
.- As part of making them accessible,
NettyManager
is nowNettyNetworkHandler
and its inner connection class is now outside and calledNettyConnection
. ProxyType
is now its own class in the network feature package.AcceptingTrustManagerFactory
, previously deprecated, is now removed.ModeStatusList
andModeStatus
are now interfaces (with default implementations).- Renamed
ModeStatusList
methods:getStatuses
->getAll
getStatusString
->getAsString
DefaultModeInfo
now properly lives in its own class.- Various packages migrated, mostly implementations.
Resolver
, the interface, moved to the network feature package.
Also
- Updated to latest (4.1.33) Netty.