Upgrade from 10.6.4 to 10.6.6
Important
This version introduces breaking changes and numerous enhancements. Please review the details carefully before upgrading.
Important
We dropped support for .NET 7 in favor of newer features and major improvements in speed and stability.
Warning
This release contains important bug fixes and improvements. We recommend you to upgrade to this version as soon as possible.
What changed?
❕ Breaking Changes
- DiscordRoleTags: We removed the
IsPremiumSubscriberandIsLinkedRolefields due to an overhaul of the tag system. You can now determine the actual type of role by referencing DiscordRole.RoleType. It's not officially returned by Discord, but instead calculated by analyzing the role tags combinations. - DiscordEmoji.TryFromName: Additional required parameter
bool includeApplicationwas added to match Discord's changes in handling emoji lookups. This was to account for different emoji types (Unicode, Guild, Application). - TryGetMemberAsync method signature change: The return type for
TryGetMemberAsyncwas changed frombooltoTask<DiscordMember?>to align with asynchronous patterns and allow for better error handling and member retrieval. - ImageTool renamed to MediaTool: This was necessary due to the support of additional media types, like MP3 and OGG, for soundboard functionality.
- ImageFormat renamed to MediaFormat: This was also necessary for the support of additional media types.
- DiscordMessage.Components type change:
IReadOnlyCollection<DiscordActionRowComponent>was changed toIReadOnlyCollection<DiscordComponent>due to Discord allowing new components not necessarily wrapped in action rows, breaking the previous assumption of a static structure. - DiscordAttachment flags renamed: The flag values in
AttachmentFlagswere prefixed withIsto be consistent with other flag names across the codebase. - DiscordFollowupMessageBuilder, DiscordInteractionResponseBuilder, DiscordWebhookBuilder method renaming: The
AddMentionandAddMentionsmethods were renamed toWithAllowedMentionandWithAllowedMentionsfor better clarity and consistency.
➕ Additions
Added Entities
WaveformConverterWaveformVisualizerAudioHelperDiscordGuildMemberSearchParamsDiscordGuildMemberSearchValidatorDiscordMemberFilterDiscordMemberPaginationFilterDiscordQueryDiscordRangeQueryDiscordSafetySignalsDiscordSearchGuildMembersResponseDiscordSupplementalGuildMemberDefaultQueueEntryLavalinkQueueDiscordApplicationEmojiDiscordClanSettings(Not release for bots)DiscordGuildJoinRequestDiscordGuildJoinRequestSearchResult(Not release for bots)DiscordGuildMembershipScreeningFieldResponseDiscordRecurrenceRuleNWeekdayDiscordScheduledEventRecurrenceRuleDiscordScheduledEventRecurrenceRuleValidatorDiscordPremiumButtonComponentDiscordActivityInstanceDiscordInteractionCallbackDiscordInteractionCallbackResponseDiscordInteractionResourceDiscordForwardedMessageDiscordMessageSnapshotDiscordSubscriptionDiscordSoundboardSoundGuildJoinRequestCreateEventArgsGuildJoinRequestDeleteEventArgsGuildJoinRequestUpdateEventArgsGuildSoundboardSoundCreateEventArgsGuildSoundboardSoundDeleteEventArgsGuildSoundboardSoundUpdateEventArgsGuildSoundboardSoundsUpdateEventArgsSoundboardSoundsEventArgsSubscriptionCreateEventArgsSubscriptionUpdateEventArgsVoiceChannelEffectSendEventArgsDisCatSharpUserExceptionDiscordJsonException
Added Events
GuildSoundboardSoundCreatedGuildSoundboardSoundUpdatedGuildSoundboardSoundDeletedGuildSoundboardSoundsUpdatedSoundboardSoundsGuildJoinRequestCreatedGuildJoinRequestUpdatedGuildJoinRequestDeletedVoiceChannelEffectSendSubscriptionCreatedSubscriptionUpdated
Added Enums
JoinSourceTypeMemberSortTypeApplicationCommandHandlerTypeApplicationExplicitContentFilterApplicationVerificationEligibilityFlagsBadgeTypeBannerTypeJoinRequestStatusTypePlayStyleRoleTypeRecurrenceRuleFrequencyRecurrenceRuleWeekdayEmbedFlagsEmbedMediaFlagsReferenceTypeSubscriptionStatusAnimationTypeMediaFormat
Added Properties
LavalinkTrack.UserDataDiscordClient.RegisteredEventhandlersDiscordConfiguration.HasActivitiesEnabledDiscordConfiguration.ActivityHandlerTypeDiscordApplicationCommand.HandlerTypeDiscordMember.PrimaryGuildDiscordRoleTags.GuildConnectionsDiscordRoleTags.PremiumSubscriberDiscordAttachment.ClipParticipantsDiscordAttachment.ClipCreatedAtDiscordMessage.ChannelTypeDiscordMessage.MessageSnapshotsDiscordMessage.HasMessageReferenceDiscordMessage.HasMessageSnapshotsDiscordMessage.SoundboardSoundsDiscordEntitlement.BranchesDiscordEntitlement.ConsumedDiscordEntitlement.DeletedDiscordEntitlement.GiftCodeBatchIdDiscordEntitlement.GiftCodeFlagsDiscordEntitlement.GifterUserIdDiscordEntitlement.PromotionIdDiscordEntitlement.SubscriptionIdDiscordSubscription.RenewalSkuIdsDiscordSubscription.EntitlementIdsDiscordSubscription.CurrentPeriodStartsAtDiscordSubscription.CurrentPeriodEndsAtDiscordSubscription.CanceledAtDiscordSubscription.CountryDiscordUser.PrimaryGuildDiscordApplicationgot extended with additional properties, which are too many to list
Added Enum Values
ApplicationCommandTypePrimaryEntryPoint
ChannelTypeLobby
DiscordEventSubscriptionCreatedSubscriptionUpdatedVoiceChannelEffectSendGuildSoundboardSoundCreatedGuildSoundboardSoundUpdatedGuildSoundboardSoundDeletedGuildSoundboardSoundsUpdatedSoundboardSoundsGuildJoinRequestCreatedGuildJoinRequestUpdatedGuildJoinRequestDeleted
DiscordIntentsGuildExpressions
MemberFlagsAutomodQuarantinedUsernameDmSettingsUpsellAcknowledgedAutomodQuarantinedClanTag
MembershipScreeningFieldTypeTextInputParagraphMultipleChoice
PermissionsUseExternalApps
ComponentTypeFile
InteractionResponseTypeLaunchActivity
AttachmentFlagsIsClipIsThumbnailIsRemixIsSpoilerIsAnimated
MessageFlagsHasSnapshots
MessageTypePollResultChannelLinkedToLobbyGiftingPromptGuildJoinRequestAcceptedGuildJoinRequestRejected
Added Methods
DiscordClient.RequestAndWaitForSoundboardSoundsAsyncDiscordClient.GetEntitlementAsyncDiscordClient.GetSkuSubscriptionsAsyncDiscordClient.GetSkuSubscriptionAsyncDiscordClient.GetApplicationEmojisAsyncDiscordClient.GetApplicationEmojiAsyncDiscordClient.CreateApplicationEmojiAsyncDiscordClient.ModifyApplicationEmojiAsyncDiscordClient.DeleteApplicationEmojiAsyncDiscordClient.GetStickerPackAsyncDiscordClient.ListDefaultSoundboardSoundsAsyncDiscordChannel.SendSoundboardSoundAsyncDiscordEmoji.FromApplicationEmoteDiscordGuild.GetCurrentMemberVoiceStateAsyncDiscordGuild.CreateSoundboardSoundAsyncDiscordGuild.ModifySoundboardSoundAsyncDiscordGuild.DeleteSoundboardSoundAsyncDiscordGuild.GetSoundboardSoundAsyncDiscordGuild.ListSoundboardSoundsAsyncDiscordMember.GetVoiceStateAsyncDiscordRoleTags.DetermineRoleTypeDiscordMessage.ForwardMessageAsyncDiscordUser.OAuth2UpdateApplicationRoleConnectionAsyncDiscordSoundboardSound.DeleteSoundboardSoundAsync
🛠️ Fixes
- Fixed a rare case where embed fields throw an exception if old embeds are received from Discord
- Fixed an issue with banning members while providing
delete_message_days/delete_message_seconds - Fixed a possible parser error
- Fixed a rare case where paginations on interactions could fail with
Message not found - Fixed component pagination
- Fixed an NRE within events that broke bots: Ensured
Interaction.Guildfalls back to partial guild data when null. - Fixed an issue where
ApplicationRoleConnectionMetadatahad only internal constructors - Fixed invalid API routes for
UpdateCurrentUserApplicationRoleConnectionAsyncandGetCurrentUserApplicationRoleConnectionAsync - Fixed max poll duration: Increased from
7days to32days (768hours) to align with new limits. - Fixed poll creation on
EditOriginalResponseAsync: Enabled creating polls when the original response is deferred. - Fixed a critical NRE in interaction create dispatches
- Fixed a NRE in audit log processing
⚠️ Removals
- Removed
AutoCompleteRequestandModalSubmitfromApplicationCommandTypedue to incorrect implementation. - Removed
DiscordApplication.Owners. UseDiscordApplication.Membersinstead. - Removed the enum
ExplicitContentFilterLevel - Removed
ApplicationCommandRequireDisCatSharpDeveloperAttributeandRequireDisCatSharpDeveloperAttribute
📚 Documentation
- New article about GCP Attachments
- New article about ElasticSearch-Based Member Search
- Extended articles about Lavalink, including the recent refactor of the queue system
- Documented more internal and private code to make library development easier.
- Added missing documentation for public code.
Future Roadmap
DisCatSharp.Voice (On Hold)
We're working on DisCatSharp.Voice which is set to replace the existing DisCatSharp.VoiceNext. It's planned to have better performance, stability and maintainability than its predecessor. Particularly, this will bring back the receiving of incoming audio. Please note that any details are subject to change as development progresses.
Audit Log Functionality Enhancement (On Hold)
We want to revamp how we implement the Discord audit log API. This will enhance the functionality and ease-of-use. The enhancements we are planning are still in the developmental phase and might change.
Caching System Overhaul (Planned)
A major overhaul of our caching system is planned. The goal of this proposed rewrite is to increase reliability, performance and to add flexibility in how data is stored and retrieved. We are still in the cenceptual stage for this.
DisCatSharp.CommandNext Revamp (Proposed)
A complete rewrite of DisCatSharp.CommandsNext is proposed. We want to rewrite this for improved maintainability and for potential performance and usability improvements.
Feedback and Community Engagement
Your input makes DisCatSharp better! We warmly invite you to share feedback, suggestions, or report bugs.
Talking to us helps shape the future of DisCatSharp, ensuring it meets everyones needs and expectations.
- Join the Conversation: Have ideas or questions? Join our Discord community to discuss features, get help, or just chat with fellow developers.
- Contribute: Interested in contributing? Check out our GitHub repository to see how you can contribute code, documentation, or report issues.
- Stay Updated: Follow our news channel on Discord to stay up to date on the latest developments.
Your involvement is invaluable to us, and we look forward to growing and improving DisCatSharp together with you and everyone else!