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
IsPremiumSubscriber
andIsLinkedRole
fields 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 includeApplication
was 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
TryGetMemberAsync
was changed frombool
toTask<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
AttachmentFlags
were prefixed withIs
to be consistent with other flag names across the codebase. - DiscordFollowupMessageBuilder, DiscordInteractionResponseBuilder, DiscordWebhookBuilder method renaming: The
AddMention
andAddMentions
methods were renamed toWithAllowedMention
andWithAllowedMentions
for better clarity and consistency.
➕ Additions
Added Entities
WaveformConverter
WaveformVisualizer
AudioHelper
DiscordGuildMemberSearchParams
DiscordGuildMemberSearchValidator
DiscordMemberFilter
DiscordMemberPaginationFilter
DiscordQuery
DiscordRangeQuery
DiscordSafetySignals
DiscordSearchGuildMembersResponse
DiscordSupplementalGuildMember
DefaultQueueEntry
LavalinkQueue
DiscordApplicationEmoji
DiscordClanSettings
(Not release for bots)DiscordGuildJoinRequest
DiscordGuildJoinRequestSearchResult
(Not release for bots)DiscordGuildMembershipScreeningFieldResponse
DiscordRecurrenceRuleNWeekday
DiscordScheduledEventRecurrenceRule
DiscordScheduledEventRecurrenceRuleValidator
DiscordPremiumButtonComponent
DiscordActivityInstance
DiscordInteractionCallback
DiscordInteractionCallbackResponse
DiscordInteractionResource
DiscordForwardedMessage
DiscordMessageSnapshot
DiscordSubscription
DiscordSoundboardSound
GuildJoinRequestCreateEventArgs
GuildJoinRequestDeleteEventArgs
GuildJoinRequestUpdateEventArgs
GuildSoundboardSoundCreateEventArgs
GuildSoundboardSoundDeleteEventArgs
GuildSoundboardSoundUpdateEventArgs
GuildSoundboardSoundsUpdateEventArgs
SoundboardSoundsEventArgs
SubscriptionCreateEventArgs
SubscriptionUpdateEventArgs
VoiceChannelEffectSendEventArgs
DisCatSharpUserException
DiscordJsonException
Added Events
GuildSoundboardSoundCreated
GuildSoundboardSoundUpdated
GuildSoundboardSoundDeleted
GuildSoundboardSoundsUpdated
SoundboardSounds
GuildJoinRequestCreated
GuildJoinRequestUpdated
GuildJoinRequestDeleted
VoiceChannelEffectSend
SubscriptionCreated
SubscriptionUpdated
Added Enums
JoinSourceType
MemberSortType
ApplicationCommandHandlerType
ApplicationExplicitContentFilter
ApplicationVerificationEligibilityFlags
BadgeType
BannerType
JoinRequestStatusType
PlayStyle
RoleType
RecurrenceRuleFrequency
RecurrenceRuleWeekday
EmbedFlags
EmbedMediaFlags
ReferenceType
SubscriptionStatus
AnimationType
MediaFormat
Added Properties
LavalinkTrack.UserData
DiscordClient.RegisteredEventhandlers
DiscordConfiguration.HasActivitiesEnabled
DiscordConfiguration.ActivityHandlerType
DiscordApplicationCommand.HandlerType
DiscordMember.PrimaryGuild
DiscordRoleTags.GuildConnections
DiscordRoleTags.PremiumSubscriber
DiscordAttachment.ClipParticipants
DiscordAttachment.ClipCreatedAt
DiscordMessage.ChannelType
DiscordMessage.MessageSnapshots
DiscordMessage.HasMessageReference
DiscordMessage.HasMessageSnapshots
DiscordMessage.SoundboardSounds
DiscordEntitlement.Branches
DiscordEntitlement.Consumed
DiscordEntitlement.Deleted
DiscordEntitlement.GiftCodeBatchId
DiscordEntitlement.GiftCodeFlags
DiscordEntitlement.GifterUserId
DiscordEntitlement.PromotionId
DiscordEntitlement.SubscriptionId
DiscordSubscription.RenewalSkuIds
DiscordSubscription.EntitlementIds
DiscordSubscription.CurrentPeriodStartsAt
DiscordSubscription.CurrentPeriodEndsAt
DiscordSubscription.CanceledAt
DiscordSubscription.Country
DiscordUser.PrimaryGuild
DiscordApplication
got extended with additional properties, which are too many to list
Added Enum Values
ApplicationCommandType
PrimaryEntryPoint
ChannelType
Lobby
DiscordEvent
SubscriptionCreated
SubscriptionUpdated
VoiceChannelEffectSend
GuildSoundboardSoundCreated
GuildSoundboardSoundUpdated
GuildSoundboardSoundDeleted
GuildSoundboardSoundsUpdated
SoundboardSounds
GuildJoinRequestCreated
GuildJoinRequestUpdated
GuildJoinRequestDeleted
DiscordIntents
GuildExpressions
MemberFlags
AutomodQuarantinedUsername
DmSettingsUpsellAcknowledged
AutomodQuarantinedClanTag
MembershipScreeningFieldType
TextInput
Paragraph
MultipleChoice
Permissions
UseExternalApps
ComponentType
File
InteractionResponseType
LaunchActivity
AttachmentFlags
IsClip
IsThumbnail
IsRemix
IsSpoiler
IsAnimated
MessageFlags
HasSnapshots
MessageType
PollResult
ChannelLinkedToLobby
GiftingPrompt
GuildJoinRequestAccepted
GuildJoinRequestRejected
Added Methods
DiscordClient.RequestAndWaitForSoundboardSoundsAsync
DiscordClient.GetEntitlementAsync
DiscordClient.GetSkuSubscriptionsAsync
DiscordClient.GetSkuSubscriptionAsync
DiscordClient.GetApplicationEmojisAsync
DiscordClient.GetApplicationEmojiAsync
DiscordClient.CreateApplicationEmojiAsync
DiscordClient.ModifyApplicationEmojiAsync
DiscordClient.DeleteApplicationEmojiAsync
DiscordClient.GetStickerPackAsync
DiscordClient.ListDefaultSoundboardSoundsAsync
DiscordChannel.SendSoundboardSoundAsync
DiscordEmoji.FromApplicationEmote
DiscordGuild.GetCurrentMemberVoiceStateAsync
DiscordGuild.CreateSoundboardSoundAsync
DiscordGuild.ModifySoundboardSoundAsync
DiscordGuild.DeleteSoundboardSoundAsync
DiscordGuild.GetSoundboardSoundAsync
DiscordGuild.ListSoundboardSoundsAsync
DiscordMember.GetVoiceStateAsync
DiscordRoleTags.DetermineRoleType
DiscordMessage.ForwardMessageAsync
DiscordUser.OAuth2UpdateApplicationRoleConnectionAsync
DiscordSoundboardSound.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.Guild
falls back to partial guild data when null. - Fixed an issue where
ApplicationRoleConnectionMetadata
had only internal constructors - Fixed invalid API routes for
UpdateCurrentUserApplicationRoleConnectionAsync
andGetCurrentUserApplicationRoleConnectionAsync
- Fixed max poll duration: Increased from
7
days to32
days (768
hours) 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
AutoCompleteRequest
andModalSubmit
fromApplicationCommandType
due to incorrect implementation. - Removed
DiscordApplication.Owners
. UseDiscordApplication.Members
instead. - Removed the enum
ExplicitContentFilterLevel
- Removed
ApplicationCommandRequireDisCatSharpDeveloperAttribute
andRequireDisCatSharpDeveloperAttribute
📚 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!