vNEXT (in development) * Away support: * Added sendAway() method * Added UserAway event and fanned-out ChannelAway * Away message is now updated in the UserState * Added IrcClient.localUser property, returning the local User * Deprecated ServerState.localNickname in favour of localUser. * (Internal) improved the way byte buffers are used to reduce array copying and clean up code v1.0.1 * Fixed issue with very long packets not fitting in buffers after TLS decryption. * Improved error message when IrcClient.connect() is called while already connected * Made IrcClient.disconnect() block until the disconnect has been processed. This will be a very short period of time, and allows callers to immediately call connect() again afterwards if they wish * Fixed various issues with disconnecting TLS connections not behaving correctly v1.0.0 * Replaced Ktor dependency with custom socket handling, which fixes fatal issue when connecting to servers over TLS that request a client certificate. * Added NicknameChangeRequired event for the case when a nickname is not allowed during connection and *MUST* be changed * BREAKING: Added 'PreferIPv6' behaviour config, defaulting to true. With this configuration KtIrc will try to use IPv6 if the server publishes AAAA records. * BREAKING: Default port is now 6697, TLS is enabled by default v0.11.0 * Added SourcedEvent interface for events that have a user source attached * Added ChannelJoinFailed event * Added ChannelMembershipAdjustment interface for events that concern users joining/leaving channels * Added missing user parameter to ModeChangedEvent v0.10.3 * Fix issue parsing CTCPs when the content contained multi-byte chars * Fixed multiple issues when receiving malformed input from the server: * Invalid server-time tags are now ignored and the current time used * PRIVMSGs, NOTICEs and TOPICs with no target/message are now ignored * CAPs with invalid or missing arguments are now ignored * Better handling for duplicate JOIN messages * Ignored messages are now logged more consistently v0.10.2 * Fix handling of multiple long lines sometimes dropping part of the line * Support lines with 8191 bytes of tags, as allowed by the message-tags spec * Fix a few more instances of occasional ConcurrentModificationExceptions v0.10.1 * Added NickChangeFailed event for when nicknames are in use, banned, etc * Added sendPart method * Fix occasional ConcurrentModificationException when adding state * (Internal) Moved message processors into their own package * (Internal) Added ExperimentalIrcClient interface for features not yet ready for release v0.10.0 * Batch start and end events are no longer included in BatchReceived events * Batches now expose complete metadata from their start event * Added support for labelled-replies capability and label message tags * Added support for message-tags capability after it moved from draft * Added new methods for sending raw lines to the IRC server * send(tagMap(...), command, arguments) replaces send(line) * send(command, arguments) is available if no tags are to be sent * the line is built automatically (with spaces/' :' added appropriately) * send(line) is deprecated and will be removed after v1.0.0 * Add 'alwaysEchoMessages' behaviour that makes it easier to deal with servers that don't support the echo message capability * Added TargetedEvent, a subclass of IrcEvent, for all events that are targeted to a user or channel * (Internal) Added annotation to track removal of deprecated methods * (Internal) Migrate unit tests to use Mockk instead of Mockito v0.9.0 * Improve DSL for creating an IrcClient to allow parameters to be passed to server and profile e.g. IrcClient { server("irc.example.com", 6667) } * Add behaviour options * requestModesOnJoin - automatically sends a MODE request when joining a channel * Events now have a `metadata` property instead of a `time` (and time is available in metadata) * IrcEvent.time is now deprecated but will remain until after v1.0.0. * Metadata now contains the message ID, if any. * ActionReceived.messageId and MessageReceived.messageId are now deprecated, to be removed after v1.0.0. * Metadata now contains the event's batch ID, if any. * Added support for batches * All events in a batch are buffered until the batch is finished * The events are then published together in a single `BatchReceived` event * Added support for CHGHOST messages * (Internal) Improve performance when the MessageHandler is finding a processor for a message * (Internal) Introduced event mutators * Event mutators are now responsible for handling changing events in response to state e.g. ChannelFanOutMutator creates Channel* events for global quits/nick changes/etc * Event handlers now just handle events, and don't return anything v0.8.0 * Added support for SCRAM-SHA-1 and SCRAM-SHA-256 SASL mechanisms * Added MotdLineReceived event * Added topic events and state * Add utility method IrcClient.isChannel(String) to identify if a target is a channel or not * (Internal) Move event handlers into their own package v0.7.0 * Fixed experimental API warnings when using IrcClient * BREAKING: IrcClients are now constructed using a DSL * Users of the library no longer need to care about the implementing class * Facilitates adding more options in the future without breaking existing implementations * SASL improvements * The enabled mechanisms can now be configured (in the SASL DSL) * Added support for EXTERNAL mechanism, disabled by default * Now attempts to renegotiate if the server doesn't recognise the SASL mechanism that was tried * Added UserNickChanged and corresponding ChannelNickChanged events * Added ServerConnectionError, raised when connecting to the server fails * (Internal) Minor version updates for Gradle, Kotlin and JUnit v0.6.0 * Changed USER command to not send the server name, per modern standards * Added support for SASL authentication (with PLAIN mechanism) * Removed some unused test code * Fixed handling of user mode changes on channels (op/deop/etc) * Message extensions: * Added support for IRCv3 message tags v3.3 * Exposed message IDs in MessageReceived and ActionReceived events * When sending a message you can now indicate what it is in reply to * Added sendTagMessage() to send message tags without any content * The reply() utility automatically marks messages as a reply * Added react() utility to send a reaction client tag * State is now reset when the client is disconnected, so you can immediately reconnect * (Internal) improved how coroutines and channels are used in LineBufferedSocket v0.5.0 * Server state: * Added ServerConnecting and ServerDisconnected events * Server status now starts as Disconnected rather than Connecting * Improved error message when features are of an unexpected type * Channel modes: * CHANMODES feature is now stored as an array, not a single comma-separated string * Added ChanModeType enum, and method in ServerState to get the type of a mode * Added ModeChanged event, for user and channel mode changes and discovery * Added modes and modesDiscovered to ChannelState * Other new events: * Added MotdFinished event * Added UserAccountChanged event * Added ChannelUserKicked event * Added NoticeReceived event * Added CtcpReplyReceived event * Improved some documentation v0.4.0 * Added CtcpReceived and ActionReceived events * Added sendCtcp and sendAction message builders * Fix issue with messages being sent out of order, which sometimes caused problems connecting to passworded servers * Added 'network' server feature * Added serverName field to ServerState v0.3.1 * Added more documentation to public methods/classes * Fixed exception when sending multiple lines at once (e.g. when connecting!) v0.3.0 * Simplified how messages are constructed. Instead of: client.send(joinMessage("#channel")) Now use: client.sendJoin("#channel") * Added reply utility to easily send replies to message events * Server state improvements: * Added status field to ServerState * ServerConnected event is emitted as soon as the socket is connected * ServerReady event is emitted after logging in, negotiating, etc * Added extra debugging to show what type of events are being dispatched * Added ChannelQuit event, raised for each channel a user is in when they quit * (Internal) Event handlers can now return more events to emit v0.2.1 * Added documentation and reduced visibility of some internal methods/classes * (Internal) Enabled Travis, Codacy and Coveralls v0.2.0 * Added support for connecting over TLS * BREAKING: Simplified how event handlers are registered * BREAKING: Improved use of coroutines so users don't have to worry about them * (Internal) Upgraded to Gradle 5.1.1