Skip to content

Releases: serenity-rs/serenity

v0.5.7

08 Aug 23:08
Compare
Choose a tag to compare

This is a hotfix release for an incorrect warning about cache deadlocking during
event dispatches in the client and fixing some routing method typos due to the
HTTP rewrite.

Thanks to the following for their contributions:

Fixed

Misc.

v0.5.6

08 Aug 23:08
Compare
Choose a tag to compare

This is a bugfix release that fixes a long-standing bug causing shards to
randomly die under certain rare conditions when dispatching the Ready event,
and compilation of the cache and client features without the framework
feature. This also contains an internal rewrite of the HTTP module.

The minimum required rustc version is now pinned at 1.25.0.

Thanks to the following for their contributions:

Upgrade Path

Per c:01e3c33, Context::edit_profile has been deprecated. Call
serenity::http::edit_profile instead.

Added

Fixed

Changed

Misc.

v0.5.5

25 Jul 00:35
Compare
Choose a tag to compare

This release is mostly a bugfix release. Thanks to the following for their
contributions:

Added

Fixed

Changed

  • [model] Make Invite::guild and RichInvite::guild optional (@zeyla)
    c:3a647e3

Misc.

v0.5.4

07 Jun 22:10
Compare
Choose a tag to compare

Thanks to the following for their contributions:

v0.5.3

01 May 15:48
Compare
Choose a tag to compare

Thanks to the following for their contributions:

Added

Fixed

Misc.

v0.5.1

31 Jan 23:53
Compare
Choose a tag to compare

This release contains a number of fixes, a few more model helper methods, and
additional framework features.

Thanks to the following for their contributions:

Added

Fixed

Misc.

v0.4.8

31 Jan 23:54
Compare
Choose a tag to compare

This release contains a fix for managing panics in framework command dispatches.
A threadpool is now used, just like for event dispatches.

Fixed

  • [framework] Execute framework commands in a ThreadPool (@zeyla) c:5138193

v0.5.0

20 Jan 18:23
Compare
Choose a tag to compare

This release is a rewrite of the client and gateway internals with a minimal
amount of breaking changes for userland code. These changes are mainly to
prepare for Tokio and to reduce the number of atomic operations per received
event, reducing the number of atomic operations by roughly 85%. The framework
has also seen a rewrite, and is now centered around a trait-based design.

Thanks to the following for their contributions:

Upgrade Path

Per [c:91c8ec4], the Guild::default_channel and
Guild::default_channel_guarenteed methods now return
Option<Arc<Mutex<GuildChannel>>> instead of Option<GuildChannel>. This
avoids a clone. To access the channel, you just have to retrieve a read or write
lock by doing guild.default_channel()?.read() or
guild.default_channel()?.write().

Per [c:14b9222], there is a new Member::default_channel() function that
returns the default channel for the user. This no longer returns the channel
with the same ID as the guild itself, as this behaviour was changed by Discord.
A member's "default channel" is now the top-most channel that it has permission
to view. Accordingly, Guild::default_channel matches this behaviour.

Per [c:93e0a42], the library now uses the parking_lot crate's Mutex and
RwLock implementations over the stdlib's. parking_lots implementations are
more efficient, do not poison due to lock drops on unwinding, and implement
eventual fairness.

To account for this, change all Mutex lock retrievals and RwLock read and
write lock retrievals to not unwrap. parking_lot's Mutex::lock,
RwLock::read, and RwLock::write don't return Results, unlike the stdlib's.

Per [c:78c6df9], the Guild::features structfield is no longer a
Vec<Feature>. Discord adds guild features over time, which can cause guilds
with those new features to fail in deserialization. Instead, we're
future-proofing by making this a Vec<String>.

Per [c:65e3279], the CreateEmbed builder's field and fields functions no
longer take a builder as the argument, and instead take 3 arguments. For
example, code like this:

channel.send_message(|m| m
    .embed(|e| e
        .title("This is an embed")
        .field(|f| f
            .name("Test field")
            .value("Test value")
            .inline(true))));

Would now be this:

channel.send_message(|m| m
    .embed(|e| e
        .title("This is an embed")
        .field("Test field", "Test value", true)))

Per [c:ad0dcb3], shards can no longer have their afk property set, as this was
a leftover from user account support. This removes the afk parameter of the
Context::set_presence function, removal of the parameter from the
Shard::set_presence function, and the Shard::set_afk function.

Per [c:b328b3e], the client::EventHandler no longer prefixes all trait methods
with on_. An implementation that looks like this:

use serenity::client::{Context, EventHandler};
use serenity::model::Message;

struct Handler;

impl EventHandler for Handler {
    fn on_message(&self, _: Context, msg: Message) {
        // ...
    }
}

Now looks like this:

use serenity::client::{Context, EventHandler};
use serenity::model::channel::Message;

struct Handler;

impl EventHandler for Handler {
    fn message(&self, _: Context, msg: Message) {
        // ...
    }
}

(a note on the serenity::model::channel::Message import later.)

Per [c:b19b031], Client::new returns a Result, as it now creates some
essential information on instantiation instead of deferring it to when a
connection is started. You can probably just unwrap this Result.

Per [c:b8efeaf], [c:d5a9aa8], and [c:65233ad], the client and gateway internals
have been rebuilt to significantly reduce the number of atomic operations
(upwards of ~85%). This means that retrieval of shard information (like the
shard latency to the Discord gateway or the current connection status) are
retrieved via the encompassing [ShardManager][0.5.0:ShardManager] located on
the client. This can be inserted into the client's data structfield if you
need to access that information in event or framework command handlers. See
[this example][0.5.0:example-09] for more information. Additionally,
Context::quit to shutdown the shard no longer exists; go through the
ShardManager instead.

Per [c:aad4744], the framework's Args::list function has been renamed to
Args::multiple for consistency.

Per [c:f10b9d7], [c:1fd652b], [c:0aa55a2], the framework has been reworked to
be trait-based; thus as per [c:f61816c], [c:4e20277], allowed more useful functionality to commands.

Per [c:05f6ed4], the [client's close handle] has been removed, in favour of
doing so through the ShardManager.

Per [c:8c9baa7], the Guild::default_message_notifications, Guild::mfa_level,
PartialGuild::default_message_notifications, and PartialGuild::mfa_level
structfields are now enums to represent a stronger type, instead of u64s.

Per [c:bcd16dd], the model module has been broken up: instead of a giant root
module full of imports, types have been moved to where they fit. For example,
the Message, Reaction, and Channel structs are now in the model::channel
module. The RichInvite, Member, Role, and MfaLevel types are now in
model::guild. Refer to the commit message or the
[model module docs][0.5.0:model] for more information.

Per [c:be43836], the http::HttpError enum's InvalidRequest variant no longer
gives just the HTTP status code of the response. It now includes the full
Response instance.

Per [c:2edba81], the builder re-export in the utils module no longer exists
after being there in deprecation for a long time. Please import it like so:

// old
use serenity::utils::builder;

// new
use serenity::builder;

Added

  • [framework] Make the framework error's internal String public ([@acdenisSK])
    [c:3b9f0f8]
  • [client, gateway] Improve shard and shard runner logging ([@zeyla])
    [c:f0ee805]
  • [gateway] Have ConnectionStage derive Copy ([@acdenisSK]) [c:551f166]
  • [builder, framework, http, model] Replace Vec<T> parameter with more generic
    IntoIterator<Item=T> ([@ftriquet]) [c:b146501], [c:934eb3a]
  • [builder, gateway, model, voice] Make more parameters generic with trait
    bounds of AsRef ([@acdenisSK]) [c:e0e7617], [c:b62dfd4]
  • [framework, model] Add help command filtering, member prefix searching
    ([@Lakelezz]) [c:ee207b3]
  • [model] Add guild member filtering functions ([@Lakelezz]) [c:f26dad8]
  • [model] impl BanOptions for &str ([@acdenisSK]) [c:7c911d5]
  • [model] Derive Default on IDs and CurrentUser ([@acdenisSK]) [c:0881e18]
  • [client] Add a threadpool for event dispatches ([@zeyla]) [c:1fa83f7],
    [c:3e14067], [c:f2c21ef]
  • [model] Fall back to str::parse if parse_username fails ([@acdenisSK])
    [c:8c85664]
  • [model] Add a parsing fallback for RoleId ([@acdenisSK]) [c:5d4301b]
  • [http, model] Expand Audit Log support ([@acdenisSK]) [c:f491809]
  • [framework] Make Command::aliases public ([@acdenisSK]) [c:8c83866]
  • [model] impl FromStr for ReactionType ([@acdenisSK]) [c:2032a40],
    [c:84706f1]
  • [builder] Make trait bounds more generic, from Into<String> to Display
    ([@acdenisSK]) [c:05dad71]
  • [framework, internal, model, utils] Derive Debug on more public types
    ([@thelearnerofcode]) [c:e5a6f3a]
  • [model] Change PrivateChannel::say to accept a more generic argument
    ([@fenhl]) [c:a359f77]
  • [model] impl From<EmojiId, EmojiIdentifier> for ReactionType ([@fenhl])
    [c:68156c9]
  • [http] impl From<&Path> for AttachmentType ([@zeyla]) [c:7a5aa3c]
  • [model] Add GameType::Listening ([@hsiW], [@zeyla]) [c:40c5c12], [c:a17fea7]
  • [framework] Add cmd function to CreateCommand and CreateGroup
    ([@acdenisSK]) [c:e748d1f]
  • [model] Add Reaction::message function ([@Roughsketch]) [c:fd19446]
  • [model] Add Reaction::channel function ([@zeyla]) [c:e02a842]
  • [model] Add Reaction::user function ([@zeyla]) [c:82b87f1]
  • [model] Implement Deserialize for {,Gateway,Voice}Event ([@zeyla])
    [c:c3aa63f]
  • [framework] Add help() to CreateGroup ([@Lakelezz]) [c:39a1435]
  • [framework] Add a way to execute code when a command is registered
    ([@acdenisSK]) [c:f61816c]
  • [framework] Add before/after middleware to Command ([@acdenisSK])
    [c:4e20277]
  • [general] Switch from try_opt! macro to using ? operator ([@hsiW])
    [c:2d23d8b]
  • [framework] Make help commands customizable ([@Lakelezz]) [c:031fc92]
  • [model] Add VIEW_AUDIT_LOG permission ([@Lakelezz]) [c:612e973]
  • [model] Fallback to str::parse on ChannelId FromStr impl ([@acdenisSK])
    [c:0525ede]
  • [model] Add missing fields to Guild ([@zeyla]) [c:3d24033], [c:99d17d2],
    [c:2abeea5]
  • [framework] Add Args::len ([@acdenisSK]) [c:2c9b682], [c:b60d037],
    [c:143fddd]
  • [model] Add variant adapters to Channel ([@timotree3]) [c:f0a56f4]
  • [model] Add animated field to Emoji and ReactionType ([@zeyla])
    [c:f2fa349]
  • [framework] Better support for multiple delimiters on Args ([@Lakelezz])
    [c:62647f5]
  • [model] Update Region to include new voice regions ([@Flat]) [c:d264cc3]
  • [framework] Add Args::iter_quoted ([@acdenisSK]) [c:032c5a7]
  • [model] Add missing num implementations on models ([@zeyla]) [c:0b1f684]
  • [client] Add an event for shard connection changes ([@zeyla]) [c:7e46d8f]
  • [model] Implement or derive serde::Serialize on all models ([@zeyla])
    [c:25dddb6]
  • [model] Further generic-ify `reaction_us...
Read more

v0.4.3

01 Nov 20:41
Compare
Choose a tag to compare

This release contains bugfixes and marks the final release of the v0.4.x branch.
Future development will continue on the v0.5.x branch.

Thanks to the following for their contributions:

Added

Changed

  • [model] Rename Guild::permissions_for to Guild::permissions_in, keep an
    alias (@zeyla) c:dcac271

Fixed

  • [model] Make Member::permissions return guild-level permissions (@zeyla)
    c:d3eddc6

Misc.

v0.4.2

29 Oct 20:39
Compare
Choose a tag to compare

This release contains the regular bugfixes, new features and slight behaviour changes.

Thanks to the following people for their contributions:

Added

Fixed

Changed

Misc.