= Changelog == Next version (in development) * No changes yet == v1.1.1 (2019-03-14) * Fix occasional buffer overflow issue on TLS connections. == v1.1.0 (2019-03-13) * 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 * (Internal) Converted README, LICENCE and CHANGELOG to Asciidoc. == v1.0.1 (2019-03-10) * 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 (2019-03-09) * 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 (2019-03-06) * 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 (2019-02-26) * 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 (2019-02-25) * 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 (2019-02-24) * 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 (2019-02-21) * 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 (2019-02-15) * 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 (2019-02-12) * 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 (2019-02-07) * 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 (2019-02-06) * 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 (2019-02-05) * 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 (2019-02-04) * 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 (2019-02-04) * Added more documentation to public methods/classes * Fixed exception when sending multiple lines at once (e.g. when connecting!) == v0.3.0 (2019-02-03) * 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 (2019-02-03) * Added documentation and reduced visibility of some internal methods/classes * (Internal) Enabled Travis, Codacy and Coveralls == v0.2.0 (2019-02-02) * 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 == v0.1.0 (2019-02-01) * Initial release