Version numbers follow Semantic Versioning.
-
Breaking: Fixed a erroneous implementation of the IRCv3 tags: This crate now no longer differentiates between empty and missing IRCv3 tag values (e.g.
@key
is equivalent to@key=
). The type of theIRCTags
struct has changed to hold aHashMap<String, String>
instead of aHashMap<String, Option<String>>
.Where as re-stringifying messages with the above distinction was flawless before, this information is now intentionally discarded during parsing. This means
@key=
becomes@key
if the message is parsed and re-stringified (This is the recommended and confirming way, according to the standard).See also: #186 and #196
-
Breaking: Removed
ban()
,unban()
,timeout()
anduntimeout()
since they are no longer supported by Twitch. They were previously deprecated in v4.1.0 (#197) -
Breaking: Fixed typo in RoomStateMessage's follower mode (was
follwers_only
, is nowfollowers_only
. (#200) -
Breaking:
SubMysteryGift::sender_total_gifts
is now anOption
because the tag is missing when Twitch gift subs during SUBtember (#215) -
Minor: Added support for reply-parent tags (#189)
-
Minor: Tokens in
CredentialsPair
andUserAccessToken
are now redacted in theirDebug
output. Same applies to theclient_secret
inRefreshingLoginCredentials
. (#199) -
Minor: Added example demonstrating usage of
metrics-collection
feature as well as an exemplary grafana dashboard template. (#203, #208)
- Minor: Removed unused features from the
chrono
dependency (#185) - Bugfix: Upgraded dependencies to eliminate vulnerability in the
webpki
crate. (#193)
- Breaking: A lot of details regarding the metrics collection system have been reworked. (#160)
- Switched from using the
metrics
crate to using thepromtheus
crate. - Usage of the new library and new config types now allows you to specify a
Registry
(from theprometheus
crate) to register the metrics on, instead of being forced to use one global registry like with themetrics
crate. - The config option
metrics_identifier
in the config has been replaced by aMetricsConfig
enum, which now allows complete flexibility regarding what labels are added to the metrics. (Previously, onlyclient => a_value_chosen_by_you
could be added, and adding it was mandatory due to the API design I had chosen previously.) - This also means you can now specify any amount of additional
key => value
label pairs to be placed on the exported metrics. I imagine this to be useful to export any kind of metadata about your application/use-case. - The metrics have been renamed from
twitch_irc_*
totwitchirc_*
to align with the prometheus naming conventions. twitch_irc_reconnects
has been renamed totwitchirc_connections_failed
to better reflect what it actually counts.- Added
twitchirc_connections_created
as the obvious counterpart to aforementioned metric.
- Switched from using the
- Breaking: Handle
emote_sets
asString
s since not all of them are in factu64
s (#162) - Breaking: Removed
ChatClient::say_in_response
andChatClient::reply_to_privmsg
in favour of a new API design (Chatclient::say_in_reply_to
) which does the same thing as the previous functions, just with a sleeker API design. (#166) - Breaking: Removed support for parsing
HOSTTARGET
messages (Twitch has removed Host mode since 2022-10-03) (#183) - Minor: Added
me
andme_in_reply_to
methods to send/me
messages. (#170) - Minor: Implement
Clone
forRefreshingLoginCredentials
. (#176) - Minor: Implement
Eq
for many structs. (#177)
- Minor: Mark
ban
,unban
,timeout
anduntimeout
methods as deprecated (Due to Twitch removing support for these commands on 2023-02-18: https://discuss.dev.twitch.tv/t/deprecation-of-chat-commands-through-irc/40486) (#181)
- Breaking: Updated
metrics
to version 0.18. (#146) - Breaking: Implement user login fetching via the API when using
RefreshingLoginCredentials
. (#144) - Breaking: It was possible to trip up the channel joinery logic of the client pretty good by joining channels with a comma in them. Added a basic validation step to
TwitchIRCClient.login
andTwitchIRCClient.set_wanted_channels
to ensure channel names are in a sane format - these two functions now return aResult
that you will have to handle in your code. The underlying used validation function is exported for use astwitch_irc::validate::validate_login
. (#149, #154, #156) - Breaking: This library now no longer uses the
log
crate for logging. All logging is now done viatracing
. This allows you to now differentiate log messages by async task, by connection, and if configured, even by client if your application is running multiple clients. A new configuration option has been introduced for this:config.tracing_identifier
. (#151) - Breaking: Renamed the
refreshing-token
feature torefreshing-token-native-tls
to reflect the fact that it pulls in the OS's native TLS library (e.g. OpenSSL/Schannel). Added therefreshing-token-rustls-native-roots
andrefreshing-token-rustls-webpki-roots
feature flags to complement the other parts of the library where you can choose between the three options. (#153) - Minor: Implement
Clone
forRefreshingLoginCredentials
(#143) - Minor: Added feature flag
transport-ws-rustls-native-roots
to allow websocket connections powered by rustls using the OS-native root certificates. (#146) - Minor: Updated some further dependencies:
async-tungstenite
0.13
->0.17
rustls-native-certs
0.5
->0.6
tokio-rustls
0.22
->0.23
tokio-util
0.6
->0.7
webpki-roots
0.21
->0.22
- Bugfix: Fixed
FollowersOnlyMode
enum not being exported from the crate. (#135)
-
Breaking: Transports were refactored slightly: Renamed
twitch_irc::TCPTransport
toSecureTCPTransport
, addedPlainTCPTransport
for plain-text IRC connections. Renamedtwitch_irc::WSSTransport
toSecureWSTransport
, addedPlainWSTransport
for plain-text IRC-over-WebSocket-connections. Refactored feature flags: This crate used to only have thetransport-tcp
andtransport-wss
feature flags. The following is the new list of feature flags relevant to transports:transport-tcp
enablesPlainTCPTransport
transport-tcp-native-tls
enablesSecureTCPTransport
using OS-native TLS functionality (and using the root certificates configured in your operating system).transport-tcp-rustls-native-roots
enablesSecureTCPTransport
using rustls, but still using the root certificates configured in your operating system.transport-tcp-rustls-webpki-roots
enablesSecureTCPTransport
using rustls with root certificates provided bywebpki-roots
(Mozilla's root certificates). This is the most portable since it does not rely on OS-specific functionality.transport-ws
(notice this is nowws
instead ofwss
) - EnablesPlainWSTransport
transport-ws-native-tls
- EnablesSecureWSTransport
using native TLS (same as above)transport-ws-rustls-webpki-roots
- EnablesSecureWSTransport
using rustls with Mozilla's root certificates (same as above)
Some accompanying items have also been made
pub
in the crate. -
Breaking: Updated
metrics
to version 0.16. -
Minor: Added
timeout
,untimeout
,ban
andunban
methods toTwitchIRCClient
(#110) -
Minor: Added
serde
feature, adding the ability to serialize or deserialize the command structs using serde. (#120) -
Minor: Metrics are no longer initialized, undoing the change introduced with v2.2.0 (#129)
- Bugfix: Fixed fields on
UserAccessToken
being all private, preventing library users from constructing the type (as part of theRefreshingLoginCredentials
system). (#101, #103) - Reduce the amount of dependencies used. (#96)
- Update
metrics
dependency to v0.14. Metrics are now registered with a description when the client is created. (#97) - Chore: Fix all the clippy warnings in the project.
- Minor: Added
say_in_response
andreply_to_privmsg
methods toTwitchIRCClient
(#84)
- Updates to tokio v1.0 (#75)
- Reverts to tokio v0.2 (#56)
This release was later yanked because the tokio 0.3 upgrade was incomplete. Multiple versions of tokio were specified in the dependencies.
- Minor: Updated to tokio v0.3. (#48)
- Minor: Added a new config option to specify connect timeout. (#48)
- Bugfix: Fixed client sporadically locking up as a result of the TLS connection setup not having a timeout. (#48)
- Bugfix: Fixed compile error when default features were disabled. (#21)
- Breaking: Renamed
Error::ClientClosed
toError::RemoteUnexpectedlyClosedConnection
to clarify intent - Minor: Added
event_id
toUserNoticeMessage
to allow parsing undocumented types of events. - Minor: Client previously returned
Error::ClientClosed
in cases where that error wasnt appropriate (when the client was closed due to some other error that had occurred previously) - the error that caused a connection to close down is now kept as long as needed and every time the connection is used after this error, a clone of the original cause is returned. - Bugfix: Fixed
UserStateMessage
not being exported (pub).
- Bugfix: Include all features in the documentation on docs.rs.
- Minor: Gracefully work around a Twitch bug regarding emote indices.
- Bugfix: Fixed possible issue with messages getting sent out in the wrong order after connection setup.
This was the initial release.