Releases: serenity-rs/serenity
v0.5.7
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
- [client] Fix erroneous deadlock detection messages (@Lymia) c:d1266fc
- [http] Fix some routing issues (@zeyla) c:04b410e
Misc.
- Slightly reword a cache update comment (@acdenisSK) c:3a58090
v0.5.6
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
- [model]
impl AsRef<MessageId> for Message(@Mishio595) c:1de3937 - [model] Add
Fromimpls forGame, genericifyGameparams (@zeyla)
c:e1332a5, c:a4c3fec - [http] Make
http::fire,http::requestpublic (@zeyla) c:0d55363 - [framework] Add no-parse getters and advancer to
Args(@acdenisSK)
c:73ab20f - [model] Add support for new
PRIORITY_SPEAKERpermission (@Erk-)
c:2179623
Fixed
- [client] Don't delay Ready event with cache enabled (@zeyla) c:12d5321
- [framework] Handle no delimiters in
Args(@acdenisSK) c:e5ea6c1,
c:9568e3b - [client] Add missing
mut, fixing no-framework compilation (@acdenisSK)
c:90c7ec4 - [framework] Check if message is empty in
Args(@acdenisSK) c:0501020 - [client] Fix potential cache deadlocking when dispatching (@zeyla)
c:f064d65 - [framework] Pass failed sub-command to default command (@Lakelezz)
c:db21036 - [framework] Fix default command upon shortcut prefix (@Lakelezz) c:8f128b2
Changed
Misc.
- [model] Fix
ChannelId::send_message's dead links (@acdenisSK) c:7a93557 - [model] Add note about cache in
UserId::getdocs (@zeyla) c:e2873c8 - [general] Reduce required rustc to 1.25.0 (@zeyla) c:f3f22d7, c:b324774
- [model] Make
GuildId::memberuse cache when possible (@Roughsketch)
c:21eb42f - [framework] Reword some
StandardFramework::complex_bucketdocs
(@acdenisSK) c:02de778 - [framework] Internally refactor
positions(@acdenisSK) c:2a6c3b1 - [framework] Update
Configurationdefault value listings (@zeyla)
c:602c5a7 - [http] Maintain a single, re-used HTTP client (@zeyla) c:8c0e5a3
- [http] Redo the HTTP module internally (@zeyla) c:a0b0dd2, c:4648f58,
c:8918201, c:8301333, c:bbbf638, c:9a863bd, c:c458099, c:aa437d4 - [docs] Don't return Result from tests (@acdenisSK) c:e290b03
- [docs] Fix all dead links in permissions (@Erk-) c:869fff5
v0.5.5
This release is mostly a bugfix release. Thanks to the following for their
contributions:
Added
- [framework] Add
Args::rest(@acdenisSK) c:9b2cd75 - [model] Add
Message::guild_idstructfield (@foxbot, @zeyla) c:a9e8626,
c:3121f90 - [framework] Improve logic for displaying help (@Lakelezz) c:7937025
- [http] Add
http::ratelimiting::offset(@zeyla) c:55555b8 - [cache] Make the Cache Update API public (@zeyla) c:9e56062
- [utils] Add associated consts in
utils::Colour(@zeyla) c:bbfc8e2 - [model]
impl From<&ID> for IDfor all Id types ([@Zelya]) c:9e45642,
c:530ea76 - [cache] Add a Message cache API (@zeyla) c:e602630
- [voice] Add
streamer::ffmpeg_optioned(@zeyla) c:5dab87b, c:1f3a57e - [model] Implement Mentionable for
GuildChannel(@Mishio595) c:ce8da79 - [framework] Allow nil prefixes in DMs (@acdenisSK) c:10bbffe
- [model] Implement
MentionableforChannelCategory,Group,
PrivateChannel(@zeyla) c:dd3744b, c:8ce8234, c:d11d916, c:5abc7d1 - [framework] Add checks for groups (@Lakelezz) c:29480e5
- [framework] Support multiple prefixes for command groups (@Lakelezz)
c:305d200 - [framework] Add default commands for command groups (@Lakelezz) c:40c8248,
c:8aefde0
Fixed
- [framework] Handle debug impls better (@acdenisSK) c:caeab28, c:7eac4d5
- [framework] Reorder some dispatch checks to fix an owner override bug
(@acdenisSK) c:8114a7a, c:93f453b - [framework] Force
Args::find{,_n}to be quote-aware (@acdenisSK)
c:f0f06b7 - [framework] Fix an
Argstest (@zeyla) c:2ef660e - [framework] Fix command visibility on no help (@Lakelezz) c:aeb89af
- [framework] Add missing
Send + Syncbounds onCheck(@acdenisSK)
c:f09b661 - [utils] Fix
utils::is_nsfwslicing (@acdenisSK, @zeyla) c:0067c33,
c:ccd2506 - [utils] Fix
nsfw-case inutils::is_nsfw(@zeyla) c:bd4aa0a - [framework] Don't assume all characters at end are 1-length (@acdenisSK)
c:4e4dcb1 - [framework] Don't suggest command if no command is related to input
(@Lakelezz) c:614402f
Changed
Misc.
- [framework] Fix example typo (@perryprog) c:d0d363f
- [framework] Add more docs to
Args(@acdenisSK) c:04b0be1 - [general] Fix extraneous spaces at the end of lines (@zeyla) c:6ddfef8
- [http] Add (late) april fool's functions (@TheUnitedStatesOfAmerica)
c:5ffdcea - Rename 6e1edde
- [framework] Remove some repitition repition (@acdenisSK) c:10f7548,
c:1ec1086 - [docs] Add more docs to
CreateEmbed::fields(@acdenisSK) c:703d135 - [docs] Remove some dead links (@acdenisSK, @Lakelezz) c:eae624e,
c:4cf83d0 - [docs] Remove old notice about
CreateEmbed::field(@acdenisSK) c:5b66ace - [examples] Add
CreateEmbed::fieldandCreateEmbed::fieldsusage to example
11 (@drklee3) c:a9a2c27 - [general] Monomorphize all functions (@zeyla) c:7b9764c
- [general] Update README logo URI (@zeyla) c:2ff765b
- [docs] Fix doc links with no anchor (@zeyla) c:0d6e019
- [docs] Add docs for
Args::new(@acdenisSK) c:b520ec7 - [general] Fix some clippy lints (@zeyla) c:9da7669
v0.5.4
Thanks to the following for their contributions:
-
[docs] Document example binding names for EventHandler method signatures
(@acdenisSK) c:08a7110 -
[model] Implement
MentionableforCurrentUser(@zeyla) c:4a24c90 -
[model] Implement
From<CurrentUser> for Userand
From<&CurrentUser> for User(@zeyla) c:af7f176 -
[framework] Add option for bots to work only in certain channels (@vityafx)
c:457a17e -
[framework] Differentiate in help whether a command is unavailable in DMs or
guilds (@Lakelezz) c:89a18aa -
[framework] Improve
Argsdocs (@acdenisSK) c:2603063 -
[model] Add
Message::mentions_user_id,Message::mentions_user
(@Lakelezz) c:1162e68 -
[docs] Update voice example 06 to make joining join the command invoker's
voice channel (@drklee3) c:a80aab2 -
[framework] Fix a framework example so it makes sense (@acdenisSK)
c:63fe032 -
[model] Remove deadlocking in
Member::highest_role_info(@zeyla)
c:c659bbd -
[framework] Dispatch to a threadpool only if required (@Lakelezz)
c:23c5398 -
[framework] Fix strikethrough behaviour (@Lakelezz) c:32c3bed
-
[general] Fix links to the new repo location (@Lakelezz, @zeyla)
c:152fe3d c:0324e01 -
[framework] Switch to
str::match_indicesfor some Args ops (@acdenisSK)
c:cc6b567 -
[framework] Remove
if length == 1branch in Args functions (@acdenisSK)
c:6346975 -
[framework] Optimize
Args::find,Args::find_n(@acdenisSK) c:5ba521b -
[framework] Revamp
Argsfrom the ground up (@acdenisSK) c:ff9edc0
v0.5.3
Thanks to the following for their contributions:
Added
- [http] Take
Dateheader into account when ratelimiting (@zeyla)
c:40db3c0 - [general] Add new join messages (@zeyla) c:36d7a54
Fixed
- [voice] Send silence frames upon connection (@FelixMcFelix) c:83a0c85
- [general] Remove spurious import warning (@acdenisSK) c:64dcced
- [docs] Fix dead link (@Lakelezz) c:42063a2
- [model] Fix "Guild Member Chunk" deserializations (@zeyla) c:fd77a91
- [voice] Fix voice hang (@FelixMcFelix) c:e546fa2
- [client] Fix panics on some guild member updates in certain situations
(@zeyla) c:526c366
Misc.
- [gateway] Clarify shard sequence-off log (@zeyla) c:7f9c01e
- [client] Log more information about failed deserializations (@zeyla)
- [framework] Reword command macro docs (@acdenisSK) c:a481df6
v0.5.1
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
- [framework] Add way to register middleware functions directly on
CreateCommand(@acdenisSK) c:d193975 - [model] Add
Message::member(@zeyla) c:ce2952a - [http, model] Add functions to reorder a guild's channels (@zeyla)
c:ab1f11a - [voice] Add multiple audio stream playback, volume control, and pausing
(@FelixMcfelix) c:324a288
Fixed
- [framework] Fix incorrect skipping for some prefixes (@ConcurrentMarxistGC)
c:76bcf7d - [framework] Trim content after prefix mentions (@Lakelezz) c:27c83e8
- [voice] Strip RTP header extensions if present (@indiv0) c:e4612ac
- [voice] Fix voice websocket loop termination (@indiv0) c:55fa37a
- [model] Account for guild owners in member hierarchy check (@zeyla)
c:03a7e3e - [model] Check message ID count in
delete_messages(@zeyla) c:92c91b8 - [model] Correctly set newly created roles' positions on new roles (@zeyla)
c:5a0b8a6 - [voice] Fix an odd-to-use
Into<Option<Box<T>>>bound (@zeyla) c:eee3168 - [framework] Fix case insensitivity for aliases (@Lakelezz) c:d240074
- [docs] Fix broken docs links caused by model module changes (@zeyla)
c:8578d5f
Misc.
v0.4.8
v0.5.0
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:
- [@acdenisSK]
- [@caemor]
- [@drklee3]
- [@fenhl]
- [@Flat]
- [@ftriquet]
- [@hsiW]
- [@indiv0]
- [@jhelwig]
- [@jkcclemens]
- [@Lakelezz]
- [@MOZGIII]
- [@nabijaczleweli]
- [@Roughsketch]
- [@tahahawa]
- [@thelearnerofcode]
- [@timotree3]
- [@UninterestinAcc]
- [@zeyla]
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
ConnectionStagederiveCopy([@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 ofAsRef([@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
Defaulton IDs andCurrentUser([@acdenisSK]) [c:0881e18] - [client] Add a threadpool for event dispatches ([@zeyla]) [c:1fa83f7],
[c:3e14067], [c:f2c21ef] - [model] Fall back to
str::parseifparse_usernamefails ([@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::aliasespublic ([@acdenisSK]) [c:8c83866] - [model]
impl FromStr for ReactionType([@acdenisSK]) [c:2032a40],
[c:84706f1] - [builder] Make trait bounds more generic, from
Into<String>toDisplay
([@acdenisSK]) [c:05dad71] - [framework, internal, model, utils] Derive
Debugon more public types
([@thelearnerofcode]) [c:e5a6f3a] - [model] Change
PrivateChannel::sayto 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
cmdfunction toCreateCommandandCreateGroup
([@acdenisSK]) [c:e748d1f] - [model] Add
Reaction::messagefunction ([@Roughsketch]) [c:fd19446] - [model] Add
Reaction::channelfunction ([@zeyla]) [c:e02a842] - [model] Add
Reaction::userfunction ([@zeyla]) [c:82b87f1] - [model] Implement
Deserializefor{,Gateway,Voice}Event([@zeyla])
[c:c3aa63f] - [framework] Add
help()toCreateGroup([@Lakelezz]) [c:39a1435] - [framework] Add a way to execute code when a command is registered
([@acdenisSK]) [c:f61816c] - [framework] Add
before/aftermiddleware toCommand([@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_LOGpermission ([@Lakelezz]) [c:612e973] - [model] Fallback to
str::parseonChannelIdFromStrimpl ([@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
animatedfield toEmojiandReactionType([@zeyla])
[c:f2fa349] - [framework] Better support for multiple delimiters on
Args([@Lakelezz])
[c:62647f5] - [model] Update
Regionto include new voice regions ([@Flat]) [c:d264cc3] - [framework] Add
Args::iter_quoted([@acdenisSK]) [c:032c5a7] - [model] Add missing
numimplementations on models ([@zeyla]) [c:0b1f684] - [client] Add an event for shard connection changes ([@zeyla]) [c:7e46d8f]
- [model] Implement or derive
serde::Serializeon all models ([@zeyla])
[c:25dddb6] - [model] Further generic-ify `reaction_us...
v0.4.3
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
Fixed
Misc.
- [model] Add some docs to
BanOptions(@acdenisSK) c:c99091d - [model] Have
Guild::has_permsuseGuild::member_permissions(@zeyla)
c:1b7101f - [http] Slightly clarify ratelimiting documentation (@zeyla) c:3be6e2e
- [docs] Fix ping bot example (@ThatsNoMoon) c:800e58f
- [docs] Use consistent token names in examples (@zeyla) c:e219a6a
v0.4.2
This release contains the regular bugfixes, new features and slight behaviour changes.
Thanks to the following people for their contributions:
Added
- [general] Add a way to change a role's position (@Flat) c:f47a0c8
- [general] Add logging and dotenv to example 07 (@zeyla) c:d50b129
- [general] Add owner + quit function to example 07 (@zeyla) c:41f26b3
- [framework] Add
PartialEqimpls and doc-tests toArgs(@acdenisSK) c:f9e5e76 - [framework] Add "zero-copy" parsing to
Args(@acdenisSK) c:9428787 - [framework] Add a debug impl to
DispatchError(@acdenisSK) c:a58de97
Fixed
- [general] Fix clippy warnings (@hsiW) c:fbd6258
- [model] Fall back to
str::parseifutils::parse_usernamefails (@acdenisSK) c:292ceda - [model] Fix
User::has_role(@zeyla) c:d3015a0ff - [gateway] Fix shard connection (@zeyla) c:585ac6e
- [gateway] Fix shard shutdown via
Context(@zeyla) c:3616585 - [framework] Fix
allow_whitespace(@UninterestinAcc) c:e694766 - [framework, gateway, cache] Properly update emojis in the cache, fix shard re-tries and do some cleanup to
help_commands.rs(@Lakelezz) c:e02d5fb
Changed
- [model] Do equality and hashing on just the user's id (@acdenisSK) c:b7cdf15
- [model] defer to
delete_messageif there's just one message to delete (@acdenisSK) c:c7aa27d - [model] Use the underlaying integer value of
ChannelType(@acdenisSK) c:e57b510
Misc.
- [general] Update dependencies (@zeyla) c:2219bb3
- [general] Re-export parking_lot's
MutexandRwLockfrom the prelude (@zeyla) c:74ec713 - [general] Update the version in
Cargo.tomlto actually bev0.4.2(@Caemor) c:5829c67 - [general] Cleanup gitignore to have comments (@hsiW) c:ce4f8c2
- [gateway] Use update syntax for
Shard(@efyang) c:fcc4e2c - [model] Deprecate some methods on
Channel(@zeyla) c:23ff6f