NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
crates.io · #4035 most downloaded on crates.io
A Rust library for the Discord API.
Last release 9 months ago
20 Dec 2025
Release timing varies
gaps range from 9 days to 1.1 years
Nearly every release is documented
notes for 59 of the last 60 stable releases
2 versions withdrawn
withdrawn after publishing
10 years old
97 releases · first in 2016
This compiles all of the changes that had accumulated since the prior release, and, unless another minor release is warranted, constitutes as the last
This compiles all of the changes that had accumulated since the prior release,
and, unless another minor release is warranted, constitutes as the last release
for the 0.12.x series.
We also extend our heartfelt thanks to @jamesbt365, who passed away a few
months ago. We deeply appreciate his code contributions, which started back in
2023, as well as his social contributions for helping people with using
Serenity, Songbird, and Poise, on Github and/or Discord. We were saddened to
hear that he's no longer with us, but we hope he rests well.
Thanks to the following for their contributions:
Member::distinctContentSafeOptions::show_discriminatorPURCHASE_NOTIFICATION message typeMessage::message_snapshotsPartialEq and Eq for ActivityData?with_components in webhooksavatar field to PartialMemberImageHash usable as key in std containersbanner to Member and PartialMemberflags to EditWebhookMessage and EditInteractionResponseget_user_voice_state endpointresolved data to ComponentInteractionDataapplied_tags field to ExecuteWebhookattachment_size_limit fieldMessage::super_reactOrd impl for RoleGuild::features documentationGuild::preferred_locale, it is only available to guilds with the COMMUNITY featureOne column per quarter.
This is a hotfix release to fix broken behaviour of Message::author_permissions before it is relied on.
This is a hotfix release to fix broken behaviour of Message::author_permissions before it is relied on.
Thanks to the following for their contributions:
_in variants.From<&User> has been added to CreateEmbedAuthor, to avoid consuming the user.Message::author_permissions now respects permission overrides, as it is documented to.Message::author_permissions now respects SEND_MESSAGES_IN_THREADS when used in threads.Guild::threads has been expanded.Thanks to the following for their contributions:
Thanks to the following for their contributions:
Message(Id)::link_ensured can be replaced by Message(Id)::link if recieved via event, or MessageId::link if the message was recieved via a HTTP request.CreateInteractionResponse::PremiumRequired has been deprecated and replaced with Premium Buttons.GuildChannel::permissions_for_user has been deprecated, use the new Message::author_permissions helper or Guild::user_permissions_in.CreateButton now implements From<Button>.User::display_name has been added, as users may have two different names now.CurrentApplicationInfo.GuildMemberFlags have been added.USE_EXTERNAL_APPS permission has been added.MessageReferenceKind has been added to start supporting forwarding.{PartialGuild, Guild}::partial_member_permissions has been added for more efficent permissions checkingunstable_discord_api.Message::author_permissions helper has been added, alongside Permissions::dm_permissions.unstable_discord_api-1 no longer fail to deserialise.GuildId::members_iter documentation.CreateAttachment documentation has been updated to be more consistent with other builders.CreateEmbedAuthor documentation can now spell embed correctly.AuthorizingIntegrationOwners is now usable, as the field was previously private.Partial)Guild::member_permissions is now usable without cache.ChannelId::delete_messages documentation has been expanded to document the single item case.BulkBanResponse have been made public.bulk_ban endpoint is now usable, previously unusable due to Send issues.Continuing with the deprecations started in 0.12.1, many more methods and fields have been deprecated in order to make an easier upgrade path to 0.13.
Thanks to the following for their contributions:
Continuing with the deprecations started in 0.12.1, many more methods and fields have been deprecated in order to make an easier upgrade path to 0.13.
These deprecation messages include a migration path, it is recommended to go one by one using cargo check and migrate each warning to reduce the burden migrating to 0.13. Following is a list of the deprecation PRs and the justification for these changes.
Channel::is_nsfw method was wrong, useless, and served better by GuildChannel::nsfwMember::highest_role_info is now strictly less powerful than the new Guild::member_highest_role and can avoid a cache lookup if used correctly.Guild::is_large is less accurate than Guild::largeMessage::is_own is super simple to implement yourselfMessage::is_private simply checks if Message::guild_id is none.Event::PresencesReplace does not exist, and is a relic from when serenity supported user accounts.TeamMember::permissions is always ["*"], so is useless.CreateMessage::enforce_nonce, to prevent sending duplicate messages.EditProfile::banner, allowing banners to be set for bots.ChannelId::get_thread_member.Guild::partial_member_permissions_in, which can be used to avoid fetching a Member in message events just to check permissions.From<User> for CreateEmbedAuthor, setting the author name and icon to the User's info.UserId::direct_message, so you don't need a full User to direct message.Http::default_allowed_mentions to set the AllowedMentions to be used with every request.Guild(Id)::bulk_ban, allowing bulk banning without hitting rate limits.In this release, the standard framework has been deprecated ( #2733 ).
Thanks to the following for their contributions:
In this release, the standard framework has been deprecated (#2733).
As Discord continues to endorse and evolve application commands (/... commands, user commands, message commands, etc.), the standard framework becomes increasingly outdated. Bots are also steadily losing (and already have lost) access to contents of messages, making it difficult to build a prefix-only bot. Unless you plan on restricting your bot to only accept commands in DMs, allowing its presence in only fewer than 100 guilds, or presenting a reasonable justification to Discord for permission to continue using message contents, you should migrate to application commands. We recommend poise, which supports writing both prefix and application commands with a #[command] macro like the standard framework.
Poise already exists and is better than the standard framework. Efforts should be directed at improving poise instead. To support application commands would require an overhaul of the standard framework, as they are special (for instance, Discord parses arguments on behalf of the bot and passes them as structured data, whereas for prefix commands, the bot must parse by itself).
RoleId::to_role_cached - Use Guild::roles instead.bitflags! types, resulting in a smaller memory footprint.guildid/guild instead.This release turned out to be one of serenity's largest ever, with well over 300 PRs in total! It contains quite a few major breaking changes to the A…
This release turned out to be one of serenity's largest ever, with well over 300 PRs in total! It contains quite a few major breaking changes to the API. Therefore, the changelog for this release also serves as a migration guide for users upgrading from the 0.11 series.
Thanks to the following for their contributions:
The closure-based API for constructing requests using the builder pattern has been ripped out and replaced. In place of closures, users must now pass in builder types directly. For example, in serenity 0.11, code like the following was very common:
let channel = guild
.create_channel(&http, |c| c.name("my-test-channel").kind(ChannelType::Text))
.await?;Now, users instead write the following code:
let builder = CreateChannel::new("my-test-channel").kind(ChannelType::Text);
let channel = guild.create_channel(&http, builder).await?;Or, inline like so:
let channel = guild
.create_channel(&http, CreateChannel::new("my-test-channel").kind(ChannelType::Text))
.await?;Note that in this particular example, the channel name is now a mandatory field that must be passed in when constructing the builder. Mutating the builder with subsequent calls to CreateChannel::name will change the underlying value. Additionally, all methods on builders now take mut self and return Self, instead of taking and returning &mut self/&mut Self. This allows for explicit construction as in the second example above. Also, builders no longer wrap a pub HashMap<&'static str, T>; the hashmap has been flattened into concrete private fields.
Some benefits to this new approach to builders are:
AttachmentType enum has been replaced with a CreateAttachment builder struct. This struct has the file, path, and url constructors that eagerly evaluate the data passed to them - CreateAttachment simply stores the resulting raw data. This is in contrast to AttachmentType which lazily carried filepaths/urls with it, and had data and filename methods for resolving them. Additionally, the CreateAttachment::to_base64 method can be used to manually encode an attachment if needed.EditAttachments builder struct has been added for use with the attachments method on the EditMessage, EditWebhookMessage, and EditInteractionResponse builders. This new builder provides finer control when editing a message's existing attachments or uploading additional ones. Also, the following methods have been renamed to more accurately reflect their behavior:| serenity v0.11 | serenity v0.12 |
|---|---|
EditMessage::attachment |
EditMessage::new_attachment |
EditMessage::add_existing_attachment |
EditMessage::keep_existing_attachment |
EditWebhookMessage::clear_existing_attachments |
EditWebhookMessage::clear_attachments |
EditInteractionResponse::clear_existing_attachments |
EditInteractionResponse::clear_attachments |
Collectors have been redesigned and simplified at no cost to expressibility. There is now a generic collector::collect function which takes a closure as argument, letting you filter events as they stream in.
ComponentInteractionCollector, ModalInteractionCollector, MessageCollector, and ReactionCollector) are simply convenience structs that wrap this underlying function.EventCollector is now deprecated, as its use usually involved anti-patterns around fallibility. However, its functionality can still be replicated using collector::collect. See example 10 for more details.RelatedId and RelatedIdsForEventType types have been removed as they were only used by EventCollector. Methods for retrieving them from events have also been removed; if users wish to extract "related" ids from an event, they should do so directly from the event's fields. The removed methods are the following:
Event::user_idEvent::guild_idEvent::channel_idEvent::message_idEventType::related_idsIn an effort to shorten long names and make import paths less unwieldy, Serenity now uses command instead of application_command in all places, except for the Permissions::USE_APPLICATION_COMMANDS constant. This includes methods on the Http, GuildId, Guild, PartialGuild, and Command types, as well as a few other miscellaneous places:
| serenity v0.11 | serenity v0.12 |
|---|---|
Http::*_{global,guild}_application_command* |
Http::*_{global,guild}_command* |
{GuildId,Guild,PartialGuild}::*_application_command* |
{GuildId,Guild,PartialGuild}::*_command* |
Command::*_global_application_command* |
Command::*_global_command* |
Interaction::application_command |
Interaction::command |
EventHandler::application_command_permissions_update |
EventHandler::command_permissions_update |
Route::ApplicationCommand* |
Route::Command* |
Permissions::use_application_commands |
Permissions::use_commands |
Additionally, the following command types have been renamed:
| serenity v0.11 | serenity v0.12 |
|---|---|
CreateApplicationCommand |
CreateCommand |
CreateApplicationCommandOption |
CreateCommandOption |
CreateApplicationCommandPermissionData |
CreateCommandPermission |
CreateApplicationCommandPermissionsData |
EditCommandPermissions |
CommandPermission |
CommandPermissions |
CommandPermissionData |
CommandPermission |
Furthermore, the methods on CreateCommandPermission, such as new, kind, etc. have been replaced with constructors for each type of permission, e.g. role, user, channel, etc., to avoid a possible mismatch between kind and the id that gets passed in.
Finally, the {GuildId,Guild,PartialGuild}::create_command_permission method has been renamed to edit_command_permission to more accurately reflect its behavior.
CacheRef type that wraps a reference into the cache. Other methods that returned a map, now return a wrapper type around a reference to the map, with a limited API to prevent accidental deadlocks. This all helps reduce the number of clones when querying the cache. Those wishing to replicate the old behavior can simply call .clone() on the return type to obtain the wrapped data.CacheSettings has new fields time_to_live, cache_guilds, cache_channels, and cache_users, allowing cache configuration on systems with memory requirements; whereas previously, memory-constrained systems were forced to disable caching altogether.PrivateChannels (aka DM channels) has been removed, as they are never sent across the gateway by Discord. Therefore, the Cache::{private_channel, private_channels} methods have been removed, and Cache::guild_channel has been renamed to just Cache::channel. Additionally, some uses of the Channel enum in return types have been replaced with either GuildChannel or PrivateChannel as seen fit.All *Id types have had their internal representations made private. Therefore, the API has changed as follows:
| serenity v0.11 | serenity v0.12 |
|---|---|
ExampleId(12345) |
ExampleId::new(12345) |
example_id.as_u64() |
example_id.get() |
Note that all *Id types now implement Into<u64> and Into<i64>. Additionally, attempting to instantiate an id with a value of 0 will panic.
Also, the implementations of FromStr for the UserId, RoleId, and ChannelId types now expect an integer rather than a mention string. The following table shows the new expected input strings:
| serenity v0.11 | serenity v0.12 | |
|---|---|---|
ChannelId |
<#81384788765712384> |
81384788765712384 |
RoleId |
<@&136107769680887808> |
136107769680887808 |
UserId |
<@114941315417899012> or <@!114941315417899012> |
114941315417899012 |
Users wishing to parse mentions should either parse into a Mention object, or use the utils::{parse_user_mention, parse_role_mention, parse_channel_mention} methods.
The various interaction types have been renamed as follows:
| serenity v0.11 | serenity v0.12 |
|---|---|
ApplicationCommandInteraction |
CommandInteraction |
MessageComponentInteraction |
ComponentInteraction |
ModalSubmitInteraction |
ModalInteraction |
Method names on interaction types have been shortened in the following way:
| serenity v0.11 | serenity v0.12 |
|---|---|
create_interaction_response |
create_response |
create_followup_message |
create_followup |
delete_original_interaction_response |
delete_response |
delete_followup_message |
delete_followup |
edit_original_interaction_response |
edit_response |
edit_followup_message |
edit_followup |
get_interaction_response |
get_response |
get_followup_message |
get_followup |
AutocompleteInteraction has been merged into CommandInteraction, along with its corresponding methods.kind field has been removed from each of the interaction structs.quick_modal method has been added to CommandInteraction and ComponentInteraction. See the docs for more details.The standard framework is now configurable at runtime, as the configure method now takes self by reference. In line with the builder changes, the Configuration and BucketBuilder builders are no longer closure-based and must be passed in directly. Also, the Framework trait has been reworked to accomodate more use cases than just text commands:
dispatch method now takes a FullEvent as argument instead of just a Message. This enum contains all the data that is passed to the EventHandler.init method has been added, that allows for more complex framework initialization, which can include executing HTTP requests, or accessing cache or shard data.As a result, the trait now accomodates alternative frameworks more easily, such as poise.
WsStream to WsClient.ShardManagerMonitor and ShardManagerMessage types have been removed. Their functionality has been replicated via methods directly on ShardManager. Any fields with type Sender<ShardManagerMessage>, as well as the Client::shard_manager field, have had their types changed to Arc<ShardManager>. The new methods on ShardManager are the following:
return_with_valueshutdown_finishedrestart_shardupdate_shard_latency_and_stageShardClientMessage and InterMessage enums were deemed redundant wrappers around ShardRunnerMessage and removed - users should use ShardRunnerMessage directly instead.ShardManagerError type is removed in favor of GatewayError.Shard::heartbeat_instants. Users should instead use the last_heartbeat_{sent,ack} methods, which now return Option<Instant> instead of Option<&Instant>.Shard::heartbeat_interval to return Option<Duration> instead of Option<u64>.Shard::check_heartbeat to do_heartbeat.ShardMessenger::new now takes &ShardRunner as argument instead of Sender<ShardRunnerMessage>.ShardRunnerMessage::AddCollector variant in favor of the ShardMessenger::add_collector method. This method adds the collectors immediately, whereas ShardRunnerMessage is polled periodically in a loop - this could occasionally cause collectors to drop the first event they received.serenity::client::bridge::{gateway,voice}::* have been moved into serenity::gateway. They are now gated behind the gateway feature instead of the client feature, however most users use these features in conjunction, and so should not see a change in required-enabled features.Serenity now uses Rust edition 2021, with an MSRV of Rust 1.74.
thread_id parameter to Http::{get,edit,delete}_webhook_message, Http::execute_webhook}, as well as Webhook::{get,delete}_message.audit_log_reason parameter to many Http methods and builder structs.EventHandler::shards_ready method.Default for many model types.button and select_menu methods to the following builders:
CreateInteractionResponseMessageCreateInteractionResponseFollowupEditInteractionResponseCreateMessageEditMessageEditWebhookMessageExecuteWebhookChannelId::create_forum_post and GuildChannel::create_forum_post.event_handler and raw_event_handler fields with pluralized event_handlers and raw_event_handlers in the following structs:
ShardManagerOptionsShardQueuerShardRunnerShardRunnerOptionsClientBuilderReactionRemoveEmoji and GuildAuditLogEntryCreate.serenity::all module, which re-exports most public items in the crate.CreateButton::custom_id method.{GuildId, Guild, PartialGuild}::edit_mfa_level.EditWebhookMessage endpoint by adding a new_attachments parameter to Http::edit_webhook_message, as well as the following methods to the EditWebhookMessage builder:
attachmentadd_existing_attachmentremove_existing_attachmentUser::global_name field, and by making discriminators on usernames optional and non-zero. In particular, the PresenceUser::discriminator and User::discriminator fields are now of type Option<NonZeroU16>.{GuildId,Guild,PartialGuild}::current_user_member method.User::static_face method, mirroring User::face.VOICE_CHANNEL_STATUS_UPDATE gateway event.GuildId::everyone_role method.CREATE_EVENTS and CREATE_GUILD_EXPRESSIONS permissions, and rename MANAGE_EMOJIS_AND_STICKERS to MANAGE_GUILD_EXPRESSIONS (the old name is still present but deprecated).FormattedTimestamp utility struct for representing a combination of a timestamp and a formatting style.utils::argument_convert::parse_message_url.Hash to Timestamp's derive list.typesize support.From<Into<String>> for AutocompleteChoice.Request::body_ref now returns Option<&T> instead of &Option<&T>.Typing::stop now returns bool instead of Option<()>. Also, Typing::start and any wrapper methods are now infallible.async:
ChannelId::nameContext::*Guild::{members_starting_with, members_containing, members_username_containing, members_nick_containing}Guild::default_channelPartialGuild::greater_member_hierarchyShardManager::newUserId::to_user_cachedError::Http variant.Guild::member to return Cow<'_, Member> instead of just Member.ShardManagerOptions to be owned (Arc is cheap to clone).u8.RequestBuilder::body from Option<&[u8]> to Option<Vec<u8>>.MessageInteraction non-exhaustive, and add a member field.Permissions::USE_SLASH_COMMANDS to USE_APPLICATION_COMMANDS.constants::OpCode to Opcode, and the same for voice_model::OpCode.ShardInfo for tracking Shard ids, and change ids from u64 to u32.Message::nonce field to a custom Nonce enum instead of a serde_json::Value.MembershipState, ScheduledEventStatus, and ScheduledEventType non-exhaustive.MessageActivityKind variants to use CamelCase instead of ALL_CAPS.CurrentPresence with a PresenceData struct.ActivityData in place of Activity for setting the current presence.set_activity methods to take an Option<ActivityData> to allow for clearing the current presence by passing in None.ClientBuilder, and adding an optional presence parameter to Shard::new.Unknown variants on enums are now changed to Unknown(u8). Also, the num method for those enums is removed; users should call u8::from instead.Member::edit to edit in place, and return Result<()> instead of Result<Message>.u32, u64, or NonZeroU64.{GuildId, Guild, PartialGuild}::delete to return Result<()>.impl From<String> for Timestamp with impl TryFrom<&str>.const:
LightMethod::reqwest_methodRatelimit::{limit, remaining, reset, reset_after}RequestBuilder::newChannel::{id, position, name}Error::is_cache_errEvent::event_typeEventType::nameGatewayIntents::*Permissions::*CommonFilterOptions::{filter_limit, collect_limit} fields from u32 to NonZeroU32.GuildChannel::message_count field from Option<u8> to Option<u32>.serenity::utils::colour module into serenity::model.CreateAllowedMentions::parse with all_users, all_roles, and everyone methods.ChannelId::name to return Result<String> instead of Option<String>.EventHandler methods if the cache feature is disabled. Relevant cache-dependant data is now passed in using Option.u32.Future for ClientBuilder with IntoFuture.ClientBuilder::{get_token, get_type_map, get_cache_settings} infallible.CacheUpdate::Output for ChannelDeleteEvent from () to Vec<Message>.Box:
CommandInteraction::memberComponentInteraction::messageModalInteraction::messageMessage::memberMessage::interactionCreateSelectMenuKind and ComponentInteractionDataKind enums to better enforce well-formation of requests.http module by re-exporting all types found in submodules at the top level and removinng access to the submodules themselves.ErrorResponse non-exhaustive, change the url field from Url to String, and add a method field.Http::ratelimiter field in Option, and remove the corresponding ratelimiter_disabled field.reason parameter to Http::{ban, kick}, and remove Http::{ban,kick}_with_reason.Route and RouteInfo enums, and add method and params fields to the Request struct.model::application module in the same way the http module was flattened.ThreadMembersUpdateEvent::member_count field from u8 to i16.GuildUpdateEvent::guild from PartialGuild to GuildReaction::member from Option<PartialMember> to MemberIntegration::guild_id from GuildId to Option<GuildId>IncidentUpdate::status from IncidentStatus to String (IncidentStatus is also removed){Guild,PartialGuild}::premium_subscription_count from u64 to Option<u64>InputText::value from String to Option<String>CurrentApplicationInfo::owner from User to Option<User>ScheduledEventMetadata::location from String to Option<String>Trigger::KeywordPreset from a tuple variant to a struct variantIncident::short_link to shortlinkThreadDeleteEvent::channels_id to channel_idsThreadMembersUpdateEvent::removed_members_ids to removed_member_idsInviteTargetType::EmmbeddedApplication to EmbeddedApplicationScope::RelactionshipsRead to RelationshipsReadCurrentUser to be a newtype around User, implement the Deref trait, and remove the guilds, invite_url, and invite_url_with_oauth2_scopes methods. The only method now unique to CurrentUser is edit. All other methods are available to call via deref coercion.model types non-exhaustive:
model::application::{Interaction, ActionRow, Button, SelectMenu, SelectMenuOption, InputText}model::application::{PartialCurrentApplicationInfo, Team, TeamMember, InstallParams}model::channel::{PartialGuildChannel, ChannelMention}model::gateway::{ActivityEmoji, ClientStatus}model::guild::{Ban, GuildPrune, GuildInfo, UnavailableGuild, GuildWelcomeScreen}model::guild::{ScheduledEventMetadata, ScheduledEventUser}model::guild::automod::{Rule, TriggerMetadata, Action, ActionExecution}model::misc::EmojiIdentifierCacheUpdate::Output for ChannelUpdateEvent from () to Channel. Also, make {Guild,PartialGuild}::user_permissions_in infallible and change Error::InvalidPermissions into a struct variant containing both the the required permissions as well as the present permissions.secrecy::SecretString to prevent them being leaked through Debug implementations, and so that they are zeroed when dropped.Strings to a dedicated ImageHash type which saves on space by storing the hash directly as bytes.rate_limit_per_user fields are now counted using a u16.position fields now hold a u16.positition fields now hold a u16.auto_archive_position fields are now an enum AutoArchivePosition.afk_timeout fields are now an enum AfkTimeout.DefaultReaction struct with a ForumEmoji enum.Sticker::sort_value field is now an Option<u16>.min_values and max_values fields for Select Menus now hold a u8.max_age invite field now holds a u32.max_uses invite field now holds a u8.ActivityParty current and maximum size are now of type u32.Ready::version field is now a u8.min_length and max_length fields for Input Text components now hold a u16.mention_total_limit field for automod triggers now holds a u8.RoleSubscriptionData::total_months_subscribed field is now a u16.{Http,ChannelId,GuildChannel}::create_public_thread to create_thread_from_message, and similarly rename create_private_thread to create_thread, to more accurately reflect their behavior. The corresponding endpoints have also been renamed from ChannelPublicThreads/ChannelPrivateThreads, to ChannelMessageThreads/ChannelThreads, respectively.ThreadDelete event now provides the full GuildChannel object for the deleted thread if it is present in the cache.ThreadUpdate event now provides the old thread's GuildChannel object if it is present in the cache.Webhook::source_guild and Webhook::source_channel fields have had their types changed from Option<PartialGuild>/Option<PartialChannel> to their own Option<WebhookGuild>/Option<WebhookChannel> types in order to avoid deserialization errors. These new types contain very few fields, but have methods for converting into PartialGuilds or Channels by querying the API.json::prelude module with public wrapper functions that abstract over both serde_json and simd-json.GatewayIntents::GUILD_BANS to GUILD_MODERATION (the old name is still present but is deprecated).CreateInteractionResponseMessage::flags to take InteractionResponseFlags instead of MessageFlags.ThreadMember into PartialThreadMember.GuildId::audit_logs.Guild::members_with_status to return impl Iterator<Item = &Member> instead of Vec<Member>.model::application::ResolvedTarget.model::guild::GuildContainer.EventHandler::{guild_unavailable, unknown}.EditProfile::{email, password, new_password}.serenity::json::from_number. Users should call .into() instead.Channel::Category variant, as GuildChannel::kind can already be ChannelType::Category. However, the Channel::category method is still available.Mention::Emoji variant.serenity::token::parse - use token::validate instead.absolute_ratelimits feature and replace it with a runtime configuration option.CacheAndHttp, and inline it as separate cache and http fields in the following structs:
ShardManagerOptionsShardQueuerShardRunnerShardRunnerOptionsClientVoiceServerUpdateEvent::channel_idResumedEvent::channel_idReady::{presences, private_channels, trace}InviteGuild::{text_channel_count, voice_channel_count}VoiceState::tokenIncidentUpdate::affected_components (and also the AffectedComponent struct)Maintenance::{description, stop, start}SelectMenu::valuesMessageUpdateEvent::{author, timestamp, nonce, kind, stickers}PartialGuild::{owner, permissions}InviteTargetType::NormalTrigger::HarmfulLinkFromStrAndCache and StrExt traits. Also removes model::{ChannelParseError,RoleParseError}, which conflicted with types of the same name from utils.model from the model::prelude, and don't re-export types from other libraries, like Deserialize or HashMap.DefaultAvatar enum.PartialOrd/Ord:
EventType enum. Instead of Event::event_type().name(), users should just call Event::name.PingInteraction::guild_locale field.This is the second iteration of 0.12's Release Candidate. Notable inclusions since the prior iteration are:
This is the second iteration of 0.12's Release Candidate. Notable inclusions since the prior iteration are:
This is the Release Candidate for v0.12.0. For the list of changes made (which there are a ton), see the CHANGELOG file at the root of the repository
This is the Release Candidate for v0.12.0. For the list of changes made (which there are a ton), see the CHANGELOG file at the root of the repository.
Thanks to the following for their contributions:
Thanks to the following for their contributions:
MessageComponentInteraction::edit_original_message() for editing the original message of the message component.std::str::FromStr for the ID types to allow converting from a string. This does not affect the pre-existing implementation on ChannelId, RoleId, and UserId.set_components() methods on EditInteractionResponse and EditWebhookMessagedelete_reaction and delete_reactions methods for deleting reactions to ChannelId, GuildChannel, and Message.base64 dependency to 0.21( #2077 ) Deprecate modifying command application permissions in bulk. The corresponding endpoint is already deprecated by Discord.
Special thanks to @mkrasnitski for writing this changelog ❤️
Thanks to the following for their contributions:
Timestamp usable regardless of the chrono or time features.BucketBuilder::await_ratelimits to 1 upon BucketBuilder::delay_action being set.EventHandler::ratelimit method.MessageUpdateEvent:
mention_channelsreactionscomponentssticker_itemsShard::handle_event publicly.User::member, as well as Message:{thread, application_id} fields.defer_ephemeral helper method to many interaction types.as_* and into_* helper methods to the Interaction type for converting to each of its respective variants.UserPublicFlags::ACTIVE_DEVELOPER flag.flagstotal_messages_sentavailable_tagsapplied_tagsdefault_reaction_emojidefault_thread_rate_limit_per_userdefault_sort_orderowner_id in thread and forum channels.SUPPRESS_NOTIFICATIONS message flag.Http::get_{guild,global}_application_commands_with_localizationsCommand::get_global_application_commands_with_localizations{GuildId,Guild,PartialGuild}::get_application_commands_with_localizationsremove_all_attachments method to EditMessage.Thanks to the following for their contributions:
Thanks to the following for their contributions:
Thanks to the following for their contributions:
Thanks to the following for their contributions:
GuildChannel::message_count ([@anden3])Thanks to the following for their contributions:
Thanks to the following for their contributions:
GuildChannel::message_count in a non-breaking way ([@GnomedDev])Auto Moderation feature ([@nickelc])app_permissions field on interactions ([@nickelc])Invite::expires_at field ([@mkrasnitski])discriminator" serde error for presence updates ([@nickelc])MessageType::AutoModerationAction enum variant ([@nickelc])CustomisedHelpData ([@mkrasnitski])CacheHttp for Arc<T> if T also implements it ([@mkrasnitski])model::application types ([@kangalio])Webhook to enable direct creation ([@mkrasnitski])interactions & oauth2 model types into the application module ([@nickelc])model feature is disabled ([@FallenWarrior2k])Thanks to the following for their contributions:
Thanks to the following for their contributions:
Ord and PartialOrd for Timestamp ([@tedtramonte]) [c:b1c3a62]audit_log::Action to represent unknown values ([@nickelc]) [c:b2ae872]SUPPRESS_EMBEDS flag for interaction response messages ([@nickelc]) [c:888c37f]Guild to PartialGuild ([@kangalio]) [c:475fc1f]clippy::pedantic lints ([@GnomedDev]) [c:dc22cf2]simd-json trait imports with json::prelude::* ([@nickelc]) [c:3e454cc]convert_ws_message ([@MelonShooter]) [c:8b2326c]Cow in utils/content_safe.rs to save on allocations ([@mkrasnitski]) [c:79a3cc8]dashmap 5.2.0 for the MSRV build job ([@nickelc]) [c:2898af2]simd-json to 0.4.14 ([@nickelc]) [c:0ba01a7]AttachmentType::data in EditRole::icon ([@mkrasnitski]) [c:c3ad0b2].git-blame-ignore-revs ([@nickelc]) [c:75df53e]chrono dependency in example 09 ([@acdenisSK]) [c:0450dde]This is a light release to fix compilation on https://docs.rs.
This is a light release to fix compilation on https://docs.rs.
Thanks to the following for their contributions:
[misc] Remove deprecated Error::description implementation ([@nickelc]) [c:63cdeec]
Thanks to the following for their contributions:
native-tls backend ([@nickelc]) [c:440f0fa]guild_id ([@nickelc]) [c:4dbf3d0]users argument to utils::content_safe ([@GnomedDev]) [c:c18e889]image_hash key ([@nickelc]) [c:985212a].git-blame-ignore-revs file ([@nickelc]) [c:3a3e399]CreateInteractionResponseData to set or unset the ephemeral flag ([@pascalharp]) [c:283af98]model::Timestamp from a UNIX timestamp ([@nickelc]) [c:66f8be7]FAILED_TO_MENTION_SOME_ROLES_IN_THREAD ([@nickelc]) [c:a75ac69]GatewayIntents ([@vaporoxx]) [c:14fc9c6]GUILD_MESSAGES intent bitflag ([@Bloectasy]) [c:6f28486]Webhook::get_message for retrieving messages sent by a webhook ([@GnomedDev]) [c:a2b388f]GenericId snowflake type for unspecific entities in audit logs ([@nickelc]) [c:146b1ac]Attachment option type ([@JellyWX]) [c:9866a85]Copy and Clone traits for the audit action enums ([@nickelc]) [c:dfac5d7]model::Timestamp ([@nickelc]) [c:3aca5ca]Default trait for all bitflags types ([@nickelc]) [c:92de3da]allowed_mentions in the ExecuteWebhook builder ([@mkrasnitski]) [c:71583c3]locale and guild_locale fields in interactions ([@Rstar284]) [c:b4d0765]data and filename methods to AttachmentType ([@mkrasnitski]) [c:ad9e987]ActivityTypes ([@nickelc]) [c:b4e4add]serde_json and simd-json ([@vicky5124]) [c:f61fae4]USE_EXTERNAL_STICKERS permission and audit log support for stickers ([@drklee3]) [c:1fbf1e9]Request system ([@drklee3]) [c:57582d2]Http::get_guilds ([@tylerd008]) [c:06d101b]Dispatch error hook ([@kangalio]) [c:c2130a8]Interaction to ModalSubmitInteraction ([@gradiuscypher]) [c:e187f73]EventHandler in an Arc directly to the Client ([@squili]) [c:16c2089]set_components to EditMessage ([@Chronophylos]) [c:57c0826]message_id field to audit log options for pinned/unpinned messages ([@nickelc]) [c:3a64da1]add_member to Guild and GuildId ([@vaporoxx]) [c:82c2415]allowed_mentions in EditMessage ([@acdenisSK]) [c:86dbaee]str::split_once for parsing webhooks and user tags ([@mkrasnitski]) [c:fbfe0cf]utils::content_safe ([@mkrasnitski]) [c:32cb31c]misc::Mention{able} into their own model/mention module ([@mkrasnitski]) [c:f5458f1]Permissions ([@devtomio]) [c:10410a2]Ratelimiter::new() ([@vaporoxx]) [c:f4f310d]Http ([@vaporoxx]) [c:f8bc937]CacheHttp requirements ([@vaporoxx]) [c:a36353b]Http::application_id in ready event handler ([@vaporoxx]) [c:c5f9cbe]target_id unconditionally ([@nickelc]) [c:c5dc80b]ResolvedTarget enum variants ([@nickelc]) [c:404ab03]model::misc ([@mkrasnitski]) [c:5a0e8f4]Guild::member_named's implementation to use utils::parse_user_tag ([@mkrasnitski]) [c:8c9670f]ArgumentConvert compatible without the cache feature ([@kangalio]) [c:cdaa70c]MESSAGE_CONTENT intent is now privileged ([@kangalio]) [c:63a1000]Option in more places in the ClientBuilder ([@vaporoxx]) [c:8bca94a]unstable_discord_api feature guard from the application commands ([@nickelc]) [c:1ce8060]Into<Content> ([@mkrasnitski]) [c:c9e4f27]shard_id methods synchronous ([@nickelc]) [c:787e7d9]ApplicationCommandInteractionDataResolved ([@nickelc]) [c:56cab22]ApplicationFlags bitflags in the application info structs ([@nickelc]) [c:33d402f]std::fmt imports and Display & Debug trait implementations ([@nickelc]) [c:7a8f2cf]parking_lot to 0.12 ([@xfix]) [c:d5b5970]async-tungstenite to 0.17 ([@nickelc]) [c:4ff348e]tokio::task::Builder usage behind a feature flag ([@Milo123459]) [c:9624af0]to_user and to_channel functions ([@Milo123459]) [c:1be625b]model::guild::audit_log module public ([@nickelc]) [c:7d99bcb]AuditLogs ([@nickelc]) [c:7823b6e]utils module ([@nickelc]) [c:5a4fd2a]Change struct into an enum with the actual types ([@nickelc]) [c:594a00d]dashmap to v5.1.0 ([@acdenisSK] [@vicky5124] [@Some-Dood]) [c:6298f67] [c:342fdbb] [c:28e0311]serde traits for the audit Action enum directly ([@nickelc]) [c:0f77d31]HttpBuilder to avoid unwrap calls ([@vaporoxx]) [c:89499b2]utils::token module ([@nickelc]) [c:97ea22f]utils::content_safe and dependants into its own module ([@nickelc]) [c:ab4e7fe]VoiceState with helper structs ([@nickelc]) [c:14e747d]Vec allocation by using the iterators directly ([@nickelc]) [c:4556594]emoij parameters in component builders to Into<ReactionType> ([@nickelc]) [c:8fe7127]levenshtein crate ([@nickelc]) [c:5f6ad2a]is_false function from the model::utils module ([@nickelc]) [c:5b43bdb]bitflags! macro for ApplicationFlags ([@nickelc]) [c:dd5661c]DateTime<Utc> with a newtype struct Timestamp ([@nickelc]) [c:1577efc]bitflags! macro with serde implementation ([@nickelc]) [c:4d5f4f1]nightly build job ([@nickelc]) [c:fbba88c]Route::stage_instances to &'static str ([@nickelc]) [c:a3dd38e]api! macro ([@nickelc]) [c:a95ac81]CacheUpdate into the cache::event module ([@nickelc]) [c:afba7f5]bitflags! macro instead of the undocumented macro ([@nickelc]) [c:701d759]GuildStatus with UnavailableGuild in the ready event ([@nickelc]) [c:5063de1]Permissions without an extra String allocation ([@nickelc]) [c:f26fb7f]Webhook::edit into three separate methods ([@mkrasnitski]) [c:1715476]RoleTags ([@nickelc]) [c:363a311]GuildWelcomeScreen and dependant types into a separate module ([@nickelc]) [c:bc46711]cdn! macro ([@nickelc]) [c:9a2cce8]DiscordJsonError ([@nickelc]) [c:080f5b0]GatewayIntents to model ([@Gentoli]) [c:f46bbc8]Http to take &JsonMap instead of JsonMap ([@mkrasnitski]) [c:b1389aa]actions-rs GitHub actions with equivalent commands ([@nickelc]) [c:48de0e5]clippy::unwrap_used for tests globally ([@nickelc]) [c:f9f6079]Examples build job by just checking instead of building ([@nickelc]) [c:34881b9]GuildWelcomeChannel and dependant types ([@nickelc]) [c:dfe38c2]hashmap_to_json_map function into the json module ([@nickelc]) [c:34c484c]Role creation and update into a helper function ([@nickelc]) [c:25cdfeb]EventHandler by removing redundant guild_id parameters ([@nickelc]) [c:a5f9a4f]GuildMembersChunkEvent struct manually ([@nickelc]) [c:ae93570]User's discriminator de-/serialization into the model::user module ([@nickelc]) [c:178f62c]model::id module ([@nickelc]) [c:68d5049]matches where the match expression is a bool to be more idiomatic ([@nickelc]) [c:cb5d090]HashMap values serialization in the other serde modules ([@nickelc]) [c:5ce8177]#[serde(with = "...")] ([@nickelc]) [c:173c1a6]HttpBuilder to be synchronous ([@Some-Dood]) [c:fa68bb1]category_id field of channel types to parent_id ([@AldanTanneo]) [c:cf1a897]ApplicationCommand message type to ChatInputCommand ([@HarmoGlace]) [c:bc9315c]DashMap in its internals ([@vicky5124]) [c:9e2b9df]Message::channel ([@kangalio]) [c:c889c7e]Results ([@acdenisSK]) [c:a8cd62d]Embed::colour an Option ([@drklee3]) [c:5223ea0]RichInvite::inviter optional and replace InviteUser with User ([@acdenisSK]) [c:82e5095]reqwest v0.11.7 and async-tungstenite v0.16 ([@nickelc]) [c:c80084c] [c:d1a3ded] [c:a168913]clippy::pedantic ([@nickelc]) [c:f6a3700]unused_imports warning ([@nickelc]) [c:a9d1919]Publish docs build job ([@nickelc]) [c:11fff2f]Route::ChannelsIdMessagesId ([@mkrasnitski]) [c:1a9bb54]Change::Type variant ([@nickelc]) [c:3f93af8]PermissionOverwrite ([@nickelc]) [c:1f13d70]AttachmentType::Image ([@mkrasnitski]) [c:0632019]communication_disabled_until data in member update & chunk events ([@nickelc]) [c:bb638c0]JOIN_MESSAGES constant to be up to date ([@acdenisSK]) [c:6219fec]e09_create_message_builder example when the time feature is enabled ([@nickelc]) [c:74f4396]builder,unstable_discord_api ([@Gentoli]) [c:eda64a6]ActivityFlags ([@nickelc]) [c:1725627]MessageFlags and missing constants ([@nickelc]) [c:1a0cc66]EmojiId serialization in the ReactionType serialization ([@nickelc]) [c:5114d80]UserId with ApplicationId ([@kangalio]) [c:4b2c4d9]Integration::synced_at ([@vicky5124]) [c:983d0e4]PresenceUser's discriminator field ([@acdenisSK]) [c:584d3a9]EmojiIdentifier's FromStr impl ([@kangalio]) [c:faebd0c]Message::edit's lifetimes ([@acdenisSK]) [c:22a3f64]Activity::url is a valid URL at a type-level ([@hybras]) [c:3f985b5]Presence::user to properly handle optional fields ([@kangalio]) [c:a3a861c]codespell ([@acdenisSK]) [c:4eee51c]titel -> title) ([@acdenisSK]) [c:519ea83]communication_disabled_until field if cached member exists ([@drklee3]) [c:7a8adfb]Error::Num enum variant ([@nickelc]) [c:2596927]ClientBuilder::application_id field ([@nickelc]) [c:d7ef273]Error::Rustls enum variant ([@nickelc]) [c:8d3a079]found_group_prefix parameter ([@vaporoxx]) [c:e283b51]update_cache_timeout from CacheAndHttp ([@vaporoxx]) [c:c2b9445]*tls_backend_marker features ([@vaporoxx]) [c:16661a3]client::Extras struct ([@nickelc]) [c:1ed7ac5]ApplicationInfo & BotApplication structs ([@nickelc]) [c:1e427c6]tokio 0.2 compatibility ([@xfix]) [c:04a57c3]#[doc(cfg(...))] ([@acdenisSK]) [c:602bcb6]model::guild::Target enum ([@nickelc]) [c:b767215]AuditLogs ([@nickelc]) [c:16dcc69]Error::description implementation ([@nickelc]) [c:63cdeec]Arc for reqwest::Client ([@vaporoxx]) [c:a1cdd7f]Component enum ([@nickelc]) [c:1e11fb4]arbitrary_precision feature ([@nickelc]) [c:bc77218]Activity ([@nickelc]) [c:4e7c60a]#[cfg(feature = "utils")] attributes on model methods ([@nickelc]) [c:0675fd1]NeverFails error type ([@nickelc]) [c:5774572]ClientBuilder ([@kangalio]) [c:e6039c4]VoiceRegion::vip field ([@almeidx]) [c:e748deb]Shard::is_shutdown ([@rasm47]) [c:0ccb793]Box indirection on framework. ([@Lakelezz]) [c:2f48379]GuildChannel::send_message note ([@MathyouMB]) [c:73ff5ba]kankyo::load() in example 06 ([@ben-brook]) [c:db101fd][model] Mark the model::GuildStatus enum as deprecated ([@nickelc]) [c:bd1342e]
Thanks to the following for their contributions:
timeout doc alias to various methods ([@Milo123459]) [c:1d05a1e]banner and accent_color fields to User ([@drklee3]) [c:9e10d54]get_* methods for many ClientBuilder fields ([@kangalio]) [c:90dae53]get_webhook_from_url ([@mkrasnitski]) [c:b026f00] [c:6bd2f74] [c:7b89775]cargo make to the Running Examples section ([@kafinsalim]) [c:47a297b]min_value and max_value to slash command options ([@kangalio]) [c:cfd518e]SUPPRESS_JOIN_NOTIFICATION_REPLIES system channel flag ([@almeidx]) [c:6121fd0]ClientBuilder for retrieving the current token ([@kangalio]) [c:6f87d25]poise to the "Projects extending Serenity" section ([@vicky5124]) [c:bfb5f13]STAGE_INSTANCE, STICKER, and THREAD ([@woongzeyi]) [c:0bc3ce0]defer helper methods for deferring interactions ([@Milo123459]) [c:d50628e]ApplicationCommand::version field ([@HarmoGlace]) [c:c85d44a]From<Datetime> for Timestamp ([@drklee3]) [c:b905554]#[required_permissions(perms)] requirements ([@woongzeyi]) [c:f9de6c5]set_component method to respective builders ([@JellyWX]) [c:99eba2b]ContextMenuCommand message type ([@HarmoGlace]) [c:2a571d3]model::guild::GuildStatus enum as deprecated ([@nickelc]) [c:bd1342e]Region ([@nickelc]) [c:2dcb9b3]slow_mode_rate/rate_limit methods and field ([@nickelc]) [c:5c1e31e]model::guild::Region enum as deprecated ([@nickelc]) [c:6d476cf]Attachments by calling Bytes::to_vec ([@nickelc]) [c:f630f32]write_all variant in the Attachment::download example ([@acdenisSK]) [c:a8b4e2f]Formatter::write_str directly instead of writeln for string literals ([@nickelc]) [c:6a0106c]permissions::PRESET_* constants ([@nickelc]) [c:fc7c76a]u64 value of AttachmentIds public ([@nickelc]) [c:5379d3e]*Id::created_at method by using Utc.timestamp_millis ([@nickelc]) [c:1977e9f]rustfmt edition to match library edition ([@mkrasnitski]) [c:4f2a73b]time from dependency tree ([@KaDiWa4]) [c:d9c8980]Configuration::prefix to accept types that implement ToString ([@mkrasnitski]) [c:738465f]tokio module behind tokio* features ([@nickelc]) [c:921ff6f]ClientBuilder::type_map_insert in examples where it makes sense ([@nickelc]) [c:c3358cf]tracing_subscriber initialization in the examples ([@nickelc]) [c:46f7608]tokio::spawn with spawn_named ([@Milo123459] [@acdenisSK]) [c:5f81d4a] [c:247c073] [c:b2197db]match with the matches! macro ([@Milo123459]) [c:6987175]Member parsing if User is not in the cache in ArgumentConvert ([@kangalio]) [c:6085aad]Sticker::pack_id as optional ([@Atakku]) [c:cf040cb]MessageComponentInteraction::message to not be partial ([@HarmoGlace]) [c:f915fee]Message::crosspost ([@OverHash]) [c:b180f21]ReactionType deserialization ([@nickelc]) [c:fe946df]InteractionApplicationCommandDataFlags ([@nickelc]) [c:62b9c84]permissions::PRESET_GENERAL ([@nickelc]) [c:707697e]#[help] to generate its variables without an extra underscore ([@JohnTheCoolingFan]) [c:df47df1]Permissions bitflags ([@AldanTanneo]) [c:0acabdf]command_attr's macros ([@Friz64]) [c:5b7a23c]MessageBuilder documentation ([@mbenoukaiss]) [c:eb29760]CreateApplicationCommandPermissions public and fix documentation links ([@squili]) [c:7392f3f]#[serde(deserialize_with = "..")] attribute ([@nickelc]) [c:e848af8]#[tokio::test] from synchronous tests ([@nickelc]) [c:0d1c88e]colour! macro ([@nickelc]) [c:096d1da]Thanks to the following for their contributions:
Thanks to the following for their contributions:
Client builder. ([@Splingush]) [c:ea8ec29]ApplicationCommandOption ([@Splingush]) [c:312ae16]Event to get related user, guild, channel, and message IDs ([@sbrocket]) [c:0aa1a6c]PartialEq, Eq, PartialOrd, Ord, and Hash for UserPublicFlags ([@KangarooCoder]) [c:e7ba5bf]Cache::channel_messages_field ([@kangalio]) [c:ca02662]Guild::stage_instances ([@HarmoGlace]) [c:13cf056]Http::new_with_token ([@squili]) [c:537753b]Parse trait and add support for most applicable model types ([@kangalio]) [c:eb14984]http::Error's Display implementation ([@kangalio]) [c:ce97f9e]Message builders ([@kangalio]) [c:0be7d1a]Interaction::user field ([@HarmoGlace]) [c:9d18334]GuildChannel::send_message work in threads ([@kangalio]) [c:fb203ae]GuildChannel collector functionality ([@kotx]) [c:413e3ef]MessageUpdateEvent ([@sbrocket]) [c:6192107]false to EditMessage::suppress_embeds ([@sbrocket]) [c:47b9afb]cliend_id typo ([@vicky5124]) [c:5cb9cb9]Interaction's Option fields if they are None ([@sbrocket]) [c:c21f052]parse_token ([@adumbidiot]) [c:3fba372]CreateSelectMenuOption's description method ([@HarmoGlace]) [c:cb30408]Thanks to the following for their contributions:
Thanks to the following for their contributions:
CacheHttp for Http ([@acdenisSK]) [c:5c9c194]Activity buttons ([@HarmoGlace]) [c:2635f7b]set_embed to EditMessage ([@Gabriel-Paulucci]) [c:073c22f]roles method on GuildId for retrieving the guild's roles ([@JellyWX]) [c:38a39f5]validate_token checks ([@kangalio]) [c:132fd68]application_id of Http when creating a Client ([@drklee3]) [c:1744883]Message::reply(_ping) ([@kangalio]) [c:22d2276]DiscordJsonError messages ([@HarmoGlace]) [c:97c01ee]create_webhook_with_avatar ([@JellyWX]) [c:d390ca1][model/http] Fix GuildEmbed removal to avoid breaking change ([@HarmoGlace]) [c:822406e]
Thanks to the following for their contributions:
[model] Silence warnings related to the deprecation of (Partial)Guild::region ([@acdenisSK]) [c:b995482]
Thanks to the following for their contributions:
Team::name field ([@HarmoGlace]) [c:07f15ad]MemberUpdate event ([@vicky5124]) [c:3a6eb58]content_type field to Attachment ([@vicky5124]) [c:1b17732]CreateEmbed::timestamp ([@legendofmiracles]) [c:d0b404d]Permissions instead of String for the PartialMember::permissions field ([@HarmoGlace]) [c:3b662e0]Unknown variant for new model types ([@acdenisSK]) [c:cdbd14b]before for accuracy in the framework example ([@sudomann]) [c:392a534]Message::mention_channels with constraints ([@zacck]) [c:8ab0800]guild_id ([@HarmoGlace]) [c:01f70db]DiscordJsonError::errors field if present ([@HarmoGlace]) [c:bab4d78](Partial)Guild::region ([@acdenisSK]) [c:b995482]dead_code lint for ClientBuilder::token ([@acdenisSK]) [c:8e13e74]ActivityType's documentation ([@Sei4or]) [c:dca5c45]mut modifiers in builder code ([@acdenisSK]) [c:9334af5]Thanks to the following for their contributions:
Thanks to the following for their contributions:
GuildChannel::{rtc_region, video_quality_mode} fields ([@drklee3]) [c:95c2f78]#[doc] comments using \$ ([@acdenisSK]) [c:dbc40cb] [c:cc184a4]User::public_flags field ([@miqbalrr] [@acdenisSK]) [c:b999f46] [c:8ab0305]Parse trait for some model types ([@kangalio]) [c:3088652]#[hook] macro ([@acdenisSK]) [c:412f5a9]EditGuild to match current Discord API ([@Lakelezz]) [c:feda47c]collector feature ([@acdenisSK]) [c:a04291f]Suggestions::{as_vec, join} methods public ([@Daggy1234]) [c:4186996]Activity constructor methods to use ToString ([@acdenisSK]) [c:859355c]Member ([@acdenisSK]) [c:909bf8e]#[doc] attributes ([@acdenisSK]) [c:166c248]allow_dm is false ([@acdenisSK]) [c:16e7556]Thanks to the following for their contributions:
Thanks to the following for their contributions:
#[doc(cfg)] ([@acdenisSK]) [c:b192609]Thanks to the following for their contributions:
Thanks to the following for their contributions:
#[doc] attributes to #[description] for groups ([@acdenisSK]) [c:1cbc935]MessageType ([@merlleu]) [c:8f38985] [c:e5ae947]#[lacking_conditions] and #[wrong_channel] ([@aria-7553]) [c:8931c4c]Member model ([@acdenisSK]) [c:810b033]unwrap() ([@Th3-M4jor]) [c:3f93c87]Guild, GuildId, PartialGuild, and Interaction ([@Th3-M4jor]) [c:abfbb9f]Http when building the Client ([@acdenisSK]) [c:0e2b648]similar_commands ([@Lakelezz]) [c:5892db2]cache feature for MembersIter and GuildId::members_iter ([@AriusX7]) [c:4ed30c3]tracing 0.1.23 ([@nickelc]) [c:2a21347]embeds field in MessageUpdateEvent back to Embed ([@cab404]) [c:8133a43]log feature for tracing ([@DrBluefall]) [c:73e6d8a]ShardManagerContainer in the e06_sample_bot_structure example public ([@Daggy1234]) [c:dfd0b32]msg parameter when creating a tracing span ([@acdenisSK]) [c:cb6b528]token and add field kind to Webhook ([@acdenisSK]) [c:de72951]Available segment in help if empty. ([@Lakelezz]) [c:6b6e5fe]NotAuthor ([@Lakelezz]) [c:1ab52a0]MessageCollector ([@s0lst1ce]) [c:291e4f2]Client::data's documentation ([@aria-7553]) [c:2be89e2]Configuration::no_dm_prefix's documentation ([@aria-7553]) [c:4477690]tracing ([@acdenisSK]) [c:10de463]WebSocketGatewayClientExt::send_chunk_guild to not get disconnected by Discord's gateway ([@lapin-b]) [c:2f835a3]WebSocketGatewayClientExt::send_resume ([@Prof-Bloodstone]) [c:2854e6b]e05_command_framework example ([@dapper-gh]) [c:e59314e]Thanks to the following for their contributions:
Thanks to the following for their contributions:
0.2 and 1.0 ([@Lakelezz]) [c:580d6de]unstable_discord_api feature ([@nickelc]) [c:9a97f9b]Thanks to the following for their contributions:
Thanks to the following for their contributions:
command_attr crate ([@nickelc]) [c:ab8c82b][misc] Remove #[deprecated] items. ([@Lakelezz]) [c:aca54ac]
Thanks to the following for their contributions:
unstable_discord_api feature ([@acdenisSK]) [c:0b1fc27]RateLimitInfo ([@Lakelezz]) [c:aed3886]Display and Error traits for the check Reason ([@peppizza]) [c:2c9c64f]Message ([@Lakelezz]) [c:35c8f7b]guild_id, member, and self_video fields to VoiceState model ([@sam-kirby]) [c:7034564]EventType and conversion methods between Event ([@casey]) [c:f3e4a6b]Mentionable to return a struct that implements Display ([@Wolvereness]) [c:2624170]User::nick_in in Message::author_nick's documentation ([@Wolvereness]) [c:51dc943]Emoji methods to require Cache and Http. ([@Lakelezz]) [c:6aa2841]CheckResult with a simple Result<(), Reason> ([@Lakelezz]) [c:6e39727]u64 to usize to represent overflow in a message ([@SadiinsoSnowfall]) [c:b7b0318]ShardManagerContainer type in example 6 public ([@Daggy1234]) [c:59e09d0]#[doc] attribute on VerificationLevel to doc comments ([@nickelc]) [c:2b1e2fc]ReactionCollector ([@Th3-M4jor]) [c:7684323]ChannelId::messages_iter ([@acdenisSK]) [c:03a1f97]ApplicationId instead of u64 in MessageApplication (#1158) ([@sam-kirby]) [c:66e7add]EmojiIdentifier ([@AgathaSorceress]) [c:e8ae00f]PermissionOverwrites ([@acdenisSK]) [c:8fb18e6]Permission deserialisation ([@FelixMcFelix]) [c:b1bcc67]#[deprecated] items. ([@Lakelezz]) [c:aca54ac]extern crate in command_attr ([@acdenisSK]) [c:d6984a8]command_attr ([@acdenisSK]) [c:4729f26]_nonexhausive fields ([@KamranMackey]) [c:ac66a54]Thanks to the following for their contributions:
Thanks to the following for their contributions:
command_attr version to 0.3.2 ([@acdenisSK]) [c:b03df91]Thanks to the following for their contributions:
Thanks to the following for their contributions:
set_time by default. ([@Lakelezz]) [c:5399d44]MessageTooLong error ([@SadiinsoSnowfall]) [c:8b42790]Thanks to the following for their contributions:
Thanks to the following for their contributions:
Member::add_roles ([@acdenisSK]) [c:e6fd09b]Thanks to the following for their contributions:
Thanks to the following for their contributions:
#[doc] attribute on VerificationLevel to doc comments ([@nickelc]) [c:58e3d49]Thanks to the following for their contributions:
Thanks to the following for their contributions:
Shard::chunk_guilds to chunk_guild ([@james7132]) [c:50d9643]~ as a default command prefix ([@Qeenon]) [c:d9e9bf7]utils::shard_id accept the guild id with impl Into<u64> ([@JellyWX]) [c:85b5489]Thanks to the following for their contributions:
Thanks to the following for their contributions:
[misc] Fix all clippy warnings and deprecate Client::new ([@ikkerens]) [c:ffc2997]
Thanks to the following for their contributions:
GuildMembersChunkEvent and add nonce to ShardMessenger::chunk_guilds ([@TheElec]) [c:8c30b40]create_invite on ChannelId ([@acdenisSK]) [c:c0c2137]Clone for CacheAndHttp ([@acdenisSK]) [c:2b66828]if let Err with ? in example 5 ([@peppizza]) [c:b1187ce]writeln! macro instead of write! in example 5 ([@peppizza]) [c:c6150ae]super::super with absolute imports ([@nickelc]) [c:47e2f34]TypeMap to its crate ([@nickelc]) [c:519b67e]tokio/process and tokio/udp to the voice feature ([@nickelc]) [c:d514806]base64 and typemap_rev dependencies to their latest versions ([@Qeenon]) [c:ebd1241]GUILD_DELETE event ([@acdenisSK]) [c:b044b6d]Client::new ([@ikkerens]) [c:ffc2997]ReactionType's Display impl to support animated emojis ([@u5surf]) [c:f0a3947]Option from Message::channel_mentions ([@vicky5124]) [c:626bdfd]Thanks to the following for their contributions:
Thanks to the following for their contributions:
create_webhook methods to GuildChannel. ([@vicky5124]) [c:fb44a15]should_fail_common check earlier ([@acdenisSK]) [c:bab4b24]#[non_exhaustive] where applicable ([@LikeLakers2]) [c:9ee42f1]parse_emoji accept animated emojis ([@bdashore3]) [c:66e05ea]Thanks to the following for their contributions:
Thanks to the following for their contributions:
MessagesIter and messages_iter (#942) ([@AriusX7]) [c:a7e2f74]Display for Permissions (#939) ([@AriusX7]) [c:1eb2714]Group checks when displaying commands in help (#946) ([@AriusX7]) [c:f00f1c0]Message::reply (#943) ([@Qeenon]) [c:13bf356]It has long been .awaited for, but it's finally here! Serenity now leverages async functions, thanks to the tokio runtime.
It has long been .awaited for, but it's finally here! Serenity now leverages async functions, thanks to the tokio runtime.
A big thanks goes to [@Lakelezz]. Without the dedication to her efforts, it wouldn't have been possible to make the switch easily.
As that is a huge change, among other changes, this is actually a testing release. It is encouraged to consumers of this release to provide feedback for any warts you might encounter, be it missing features, or bugs. One important bug is the OOM bug. After a period of time has passed since the bot connected, there might be a big random spike in memory usage, prompting the OOM killer to shutdown the bot's process. It is unknown where the spike comes from, or when exactly does it occur. It doesn't happen to every bot either. If you find your bot suddenly using a lot of memory, or being killed, please let us know by opening an Issue.
Thanks to the following for their contributions:
nick field to PartialMember ([@asherkin]) [c:28f9f8a]mentions_current_user helper ([@mysteriouspants]) [c:e049bc1]nonce field to GuildMembersChunk and the event handler ([@mjsir911]) [c:614f99a]self_stream field to VoiceState ([@DimiDimit]) [c:c60f397]GuildId::name() ([@tverghis]) [c:d99bee9]typemap_rev ([@bdashore3]) [c:c1c7300]Message::reply take a content implementing std::fmt::Display ([@vicky5124]) [c:00683ef]Option<Message> in help command functions ([@MaxOhn]) [c:4472dec]Message::react return its Reaction ([@NieDzejkob]) [c:e7eb52d]CommandError with an alias to Box<dyn Error> ([@acdenisSK]) [c:a406d48]&mut Context with &Context ([@Th3-M4jor]) [c:3e4294b]unrecognised_command() not working if the last added group has prefixes ([@vicky5124]) [c:8040fa5] [c:760ed71] [c:21a5d8e]U: Into<UserId> type parameter for partial_guild::edit_member() ([@vicky5124]) [c:4227a52]Thanks to the following for their contributions:
Thanks to the following for their contributions:
MessageTooLong error ([@SadiinsoSnowfall]) [c:bb04fad]Thanks to the following for their contributions:
Thanks to the following for their contributions:
This is a small release to publish a bunch of fixes the current branch has accumulated.
This is a small release to publish a bunch of fixes the current branch has accumulated.
Thanks to the following for their contributions:
xsalsa20poly1305 crate for encryption in voice ([@tarcieri]) [c:3965e00]Message::content_safe ([@ks129]) [c:46db84a]User::nick_in unconditionally returning if the cache is passed ([@acdenisSK]) [c:9c198ed].mute(...) not preventing the bot from sending frames. ([@FelixMcFelix]) [c:638780e]Message::guild_id field in the Message::guild method ([@SOF3]) [c:84b04ba]permissions_for_role and permissions_for_user ([@7596ff]) [c:9356a5c]This release prevents a loop when requesting a restart of a Shard, resulting in the Shard hanging forever.
This release prevents a loop when requesting a restart of a Shard, resulting in the Shard hanging forever.
Thanks to the following for their contributions:
The last bugfix release was ironically broken because of a slight oversight. This release fixes that.
The last bugfix release was ironically broken because of a slight oversight. This release fixes that.
Thanks to the following for their contributions:
This release fixes Serenity's handling of Discord's new rebalances. You should no longer encounter many Ready events.
This release fixes Serenity's handling of Discord's new rebalances. You should no longer encounter many Ready events.
Thanks to the following for their contributions:
Another bugfix release. This time it fixes a panic that would occur when using a string delimiter and messages contained a unicode character after the
Another bugfix release. This time it fixes a panic that would occur when using a string delimiter and messages contained a unicode character after the delimiter.
Thanks to the following for their contributions:
This is a release for a critical bugfix.
This is a release for a critical bugfix.
In an attempt to fix one thing, other things broke. Any time Serenity made a request to a POST or PUT endpoint (such as creating reactions or banning users), Discord would return HTTP 400. This release corrects that.
Thanks to the following for their contributions:
Content-Length header ([@Lakelezz]) [c:f5dd8bf][all] Remove usage of deprecated std::Error functions ([@acdenisSK]) [c:ec306ee]
This is the last release for the 0.8.x series. 0.9.x will contain async/await support!
It is mostly comprised of bugfixes and quality of life changes.
While this is a minor release, a change that is technically breaking has been included. Some MessageBuilder methods were forgotten about when changing builders to mutably borrow in 0.8.0. This release fixes that.
Thanks to the following for their contributions:
[model] Add guild_id into the Reaction model struct ([@Elinvynia]) [c:820d50e]
[model] Add missing guild_id to various events ([@NovusTheory]) [c:3ca41fd]
[model] Add support for client statuses ([@KamranMackey]) [c:5f9a27a]
[http] make error module public ([@vivianhellyer]) [c:d2b19a2]
[builder] Reexport Timestamp from the builder's module. ([@acdenisSK]) [c:3a313c8]
[model] Implement various kick_with_reason() methods ([@vicky5124]) [c:5b0e9f3]
[framework] If finding the argument fails, return to the original position ([@acdenisSK]) [c:e005ef1]
[framework] Display groups without commands in help. ([@Lakelezz]) [c:d6b0038]
[model] Make Member::distinct() show the discriminator as a 4-digit number ([@natsukagami]) [c:a23acc7]
[http] Deserialize from slices in fire ([@Noituri]) [c:a44f16d]
[utils] &mut self instead of mut self for MessageBuilder methods ([@MaxOhn]) [c:91f10dd]
[utils] Implement Color type alias to Colour ([@Elinvynia]) [c:c3d5264]
[http] Only set the content type header if there's a body ([@acdenisSK]) [c:d851fea]
[framework] Store command names in lowercase when case-insensitivity is on ([@acdenisSK]) [c:8bba7b0]
[misc] Fix release dates ([@bikeshedder]) [c:f27c7c1]
[framework/docs] Fill in the missing attribute options ([@acdenisSK]) [c:683ff27]
[http/docs] Fix link to the fire method ([@acdenisSK]) [c:1361b33]
[framework] Fix strikethrough options refusing to accept name = value syntax ([@acdenisSK]) [c:581eb2f]
[framework/docs] Fix a broken link in docs ([@Elinvynia]) [c:48c4b59]
[misc] Fix a typo in the message builder example ([@TitusEntertainment]) [c:f2d0ad5]
[framework] Fix check_in_help being unaccounted for ([@acdenisSK]) [c:a692bcd]
[http] Support image URLs in add_file ([@Elinvynia]) [c:61bcfbc]
[http] Add impls for borrowed Arcs to CacheHttp ([@acdenisSK]) [c:4b67d8e]
std::error::Error functions ([@acdenisSK]) [c:ec306ee]The next major release of Serenity, coupled with improvements, bugfixes and some breaking changes.
The next major release of Serenity, coupled with improvements, bugfixes and some breaking changes.
group! is now #[group]To stay consistent with the #[command], #[help] and #[check] macros,
the function-like group! procedural macro has also joined in to
the squad of the attribute procedural macros.
Thanks to the following for their contributions:
CacheRwLock in CacheAndHttp ([@Lakelezz]) [c:28a91c6]owner_privilege option ([@acdenisSK]) [c:d4b45f4]AttachmentType to use Cows instead ([@ikkerens]) [c:b5deb39]check macro ([@acdenisSK]) [c:0b3ad00]Event enum as untagged (serde) ([@CarlGroth]) [c:173f7fa]Guild::edit_role_position example ([@LeSeulArtichaut]) [c:346a7fe]utils feature without the model feature ([@Erk-]) [c:487fa04]Arc implementation for Framework ([@acdenisSK]) [c:05044b6]This release prevents a loop when requesting a restart of a Shard, resulting in the Shard hanging forever.
This release prevents a loop when requesting a restart of a Shard, resulting in the Shard hanging forever.
Thanks to the following for their contributions:
The last bugfix release was ironically broken because of a slight oversight. This release fixes that.
The last bugfix release was ironically broken because of a slight oversight. This release fixes that.
Thanks to the following for their contributions:
This release fixes Serenity's handling of Discord's new rebalances. You should no longer encounter many Ready events.
This release fixes Serenity's handling of Discord's new rebalances. You should no longer encounter many Ready events.
Thanks to the following for their contributions:
An emergency release to fix build breakage due to violation of SemVer for the command_attr crate.
An emergency release to fix build breakage due to violation of SemVer for the command_attr crate.
Thanks to the following for their contributions:
Thanks to the following for their contributions:
Small release including fixes for Discord API changes. Please note with this version the minimum supported version of Rust is 1.37.
Small release including fixes for Discord API changes. Please note with this version the minimum supported version of Rust is 1.37.
Thanks to the following for their contributions:
publicise the iterator ([@acdenisSK]) [c:1924946]A tiny release for a fix to voice
A tiny release for a fix to voice
Thanks to the following for their contributions:
ClientVoiceManager::remove to actually call Manager::remove ([@MOZGIII]) [c:2734e27]Nothing published for this version
An emergency release to fix a conflict in our `ring` dependency that prevents compilation if you pull in an older and newer version at the same time.
An emergency release to fix a conflict in our ring dependency that prevents compilation if you pull in an older and newer version at the same time.
Thanks to the following for their contributions:
Thanks to the following for their contributions:
Thanks to the following for their contributions:
Members in a Guild ([@Alch-Emi]) [c:aa1070d]MessageBuilder ([@AregevDev]) [c:720d9ad]ShardMessenger::chunk_guilds in Guild's member field ([@Alch-Emi]) [c:8e926f9]StandardFramework ([@Jerald]) [c:3a4e2ed]Roles in GuildChannels ([@Lakelezz]) [c:09c1e01]webpki and webpki-roots to the rustls_backend-feature ([@leo-lb]) [c:2439275]Thanks to the following for their contributions:
Thanks to the following for their contributions:
CacheHttp for Arc<Http> ([@Lakelezz]) [c:1a209e8]&str-parametres to impl AsRef<str> ([@xacrimon]) [c:abd84c2]voice::Audio's documentation with play_only ([@Mendess2526]) [c:e6c5d41]MessageBuilder::push_spoiler_* consistent with the other push_ functions ([@hyarsan]) [c:d2df2b9]Reason's doc-link by using enum ([@Lakelezz]) [c:a8f0387]create_invite's doc-example ([@Lakelezz]) [c:45d44cb]help_commands's module example ([@acdenisSK]) [c:8cdfd7c]A small release to address a severe deserialization bug.
A small release to address a severe deserialization bug.
Thanks to the following for their contributions:
Thanks to the following for their contributions:
Thanks to the following for their contributions:
Your coding agent can read these notes before it upgrades. Set up the MCP server →