Releases: Aiko-IT-Systems/DisCatSharp
v10.7.1-nightly-013
Added the missing ChannelInfo event type to the automatic event handler registration
Full Changelog: v10.7.1-nightly-012...v10.7.1-nightly-013
v10.7.1-nightly-012
New
- Added support for requesting and tracking voice channel start times!
- New event:
ChannelInfo - New API:
RequestChannelInfoAsync/RequestAndWaitForChannelInfoAsync - New entity:
DiscordChannelInfo(includesVoiceStartTimeandStatus) DiscordChannelnow exposesVoiceStartTimeandStatusproperties
- New event:
Internal
- Cleaned up cache mutation logic for soundboard sounds, channel info, and voice state events (no more double-writes or redundant lookups).
Full Changelog: v10.7.1-nightly-011...v10.7.1-nightly-012
v10.7.1-nightly-011
- Fixed an issue for oauth client calls where we used an outdated method to aquire oauth tokens (nightly-009)
- Followup regression fix for oauth client calls (nightly-010)
- This release makes interaction response calls bypass the rest queue to ensure an instant response way
Full Changelog: v10.7.1-nightly-008...v10.7.1-nightly-011
v10.7.1-nightly-008
Bug fix for users running their bot on canary v10.
It seems that discord nulled a deprecated field now which breaks when u start the bot fresh (reconnects weren't affected so far).
This now condionally skips that field.
We marked it as deprecated already long ago, but internally still relied on it.
What's Changed
- chore(deps): update dependency sentry to 6.3.1 by @renovate[bot] in #830
- chore(deps): update dependency microsoft.net.test.sdk to 18.4.0 by @renovate[bot] in #829
Full Changelog: v10.7.1-nightly-005...v10.7.1-nightly-008
v10.7.1-nightly-005
Regression fix of https://github.com/Aiko-IT-Systems/DisCatSharp/releases/tag/v10.7.1-nightly-004
Fixes some internal issues where cache wasn't correctly populated / referenced
Full Changelog: v10.7.1-nightly-004...v10.7.1-nightly-005
v10.7.1-nightly-004
✨ Features
- Nested configuration layout —
DiscordConfigurationproperties are now grouped intoApi,Gateway,Rest,Cache,Logging,Diagnostics, andTelemetrysub-objects. Old flat properties remain as[Deprecated]forwards. (#816) - DCS1201 analyzer + code fix — detects deprecated flat config properties with single-property and batch initializer rewrites. (
68c7ba40,bd5a4cee) - Ordered gateway dispatch — per-shard FIFO dispatch queue with configurable
DispatchMode(ConcurrentHandlers / SequentialHandlers) and bounded capacity. (#816) - Internal extension events — AppCommands, CommandsNext, Interactivity, Lavalink, and Voice now hook deterministic internal events instead of racing on public ones. (#816)
- Presence fast-path —
PRESENCE_UPDATErouted to a dedicated channel to avoid starving the main dispatch queue under high volume. (#819) - REST bucket-owned workers — each rate-limit bucket gets its own
BucketWorkerwith FIFO queue, independent concurrency, and automatic idle cleanup. (e4bb5cf9) - Bucket remap & recovery — atomic hash remapping when Discord returns a different bucket, worker migration on remap, and automatic recovery on faulted workers. (
084aeebc) - Queue depth limits —
MaxQueueDepthPerBucketcaps queued requests per bucket; exceeded →RestQueueFullException. (e4bb5cf9) - Circuit breaker — per-bucket consecutive-failure tracking with configurable threshold, cooldown, and half-open probing. (
084aeebc) - REST diagnostics API —
IRestDiagnosticsexposes active worker count, total queued requests, and per-bucket snapshots. (e4bb5cf9) - Emergency cancel —
CancelAllPendingRequests()drains all bucket queues immediately. (e4bb5cf9) - Timeout surface finalization — REST and gateway timeouts consolidated into
RestConfiguration,RestAdvancedConfiguration, andGatewayAdvancedConfigurationwith validation. (#824) - CancellationToken propagation — threaded through the full REST call chain from public API →
DiscordApiClient→RestClient→BucketWorker. (#825) - Async disposal —
DiscordClient,DiscordShardedClient,DiscordOAuth2Client, andDiscordWebhookClientimplementIAsyncDisposable. SyncDispose()bridges toDisposeAsync()for backward compat. (#827) - DCS1301 / DCS1302 analyzers — warn on sync
usingand.Dispose()on DisCatSharp client types, with auto code fixes. (#827)
🐛 Bug Fixes
- Fix Lavalink startup race where a very fast
Readyframe could be missed during session resume. (e5b5a12c) - Fix gateway crash when Discord sends heartbeat request with
d: null. (46545ca4) - Fix circuit breaker cooldown not refreshing after half-open probe failures, which could disable breaking during sustained outages. (
81dd5fb3) - Fix presence channel
TryWritesilently dropping events without logging during shutdown. (81dd5fb3) - Fix misleading "wrong shard" log message in ApplicationCommands. (
a6bca006) - Fix comma/newline formatting in DCS1201 initializer code fixes. (
36a3df0f)
📖 Documentation
- New article: Configuration Layout — full property reference and migration guide.
- New article: REST Client Architecture — queue/worker/circuit-breaker docs.
- New article: Timeout Configuration — all configurable timeouts with ranges and defaults.
- New article: Gateway Dispatch Ordering — dispatch modes and queue capacity.
- New article: Async Disposal Migration — step-by-step migration guide.
- Updated Presences & Activities for the new caching model.
📦 Analyzer
DisCatSharp.Analyzer 1.0.6 released alongside this PR.
| Rule | Severity | Description |
|---|---|---|
| DCS1103 | Warning | Removed DiscordClient.Presences property usage |
| DCS1201 | Warning | Deprecated flat config properties → nested layout |
| DCS1301 | Warning | Sync using → await using on client types |
| DCS1302 | Warning | .Dispose() → await .DisposeAsync() on client types |
⚠️ Breaking Changes
DiscordClient.Presencesremoved — use per-guildDiscordGuild.Presencesor cache queries instead.- 36 root
DiscordConfigurationproperties deprecated — still functional but emit DCS1201 warnings. Will be removed in a future release.
What's Changed
- fix(components): auto-correct min_values to 1 when select is required by @Lulalaby in #812
- chore(deps): update dependency discatsharp.analyzer to 1.0.3 by @renovate[bot] in #813
- chore(deps): update dependency sentry to 6.3.0 by @renovate[bot] in #815
- chore(deps): update getsentry/action-release action to v3.6.0 by @renovate[bot] in #818
- Fix for Static field written by instance method by @Lulalaby in #822
- Sodium: lazy AesGcm init, drop volatile, null-check guards, doc fix by @Copilot in #823
- feat: bring the core follow-up work to main by @Lulalaby in #828
Full Changelog: v10.7.1-nightly-003...v10.7.1-nightly-004
v10.7.1-nightly-003
DisCatSharp v10.7.1-nightly-003
Third nightly, and this one is the big one :3
A massive reliability and correctness pass across gateway, REST, interactivity, application commands, entities, and more. Also a breaking rename on the ban API — install DisCatSharp.Analyzer 1.0.3 and it will fix named-argument call sites for you automatically.
Note: The Sentry / telemetry rework already shipped in
nightly-002. Everything else below is new innightly-003.
Gateway reliability
- fixed heartbeat counter reset (was a no-op before — missed beats could silently accumulate)
- prevented task leaks from zombie heartbeat loops on reconnect
- synchronized session state across reconnects to prevent stale reads
- guarded all
GuildsInternalindexer accesses that could NRE on cache miss - null-guarded socket lock init and
guild_stickers_updateon uncached guild - thread-safe
ReadyGuildIdstracking
REST
- capped
retry_afterto prevent runaway backoff - cleaned up request linearization and response processing
- fixed
TaskSchedulerusage in async continuations
Interactivity
28 bug fixes across thread-safety, resource leaks, and crashes:
ComponentCollectRequest.Collectedis now properly initialized (was NRE before)ComponentPaginatorusesConcurrentDictionaryfor thread-safe request trackingIPaginatornow extendsIDisposableInteractivityExtensionproperly disposes its internal componentsGetCancellationTokenno longer leaksCancellationTokenSourceinstances
Application commands
- fixed equality checks — localizations now compared by value, not reference
- fixed thread-safety on shared static collections
- fixed shard ownership check order in interaction dedup
- fixed string choice comparison (
"01"and"1"are no longer treated as equal) - fixed command matching to use both name and type (not just name)
Entities & cache
- added guild collectibles to
DiscordMember - fixed stale cache in
GUILD_MEMBER_UPDATE - audited and fixed
NullValueHandlinginconsistencies across REST payloads
Ban API ⚠️
deleteMessageDays has been renamed to deleteMessageSeconds on BanAsync and BanMemberAsync to match what the Discord API actually expects.
Install DisCatSharp.Analyzer 1.0.3 — DCS1102 will detect and fix named-argument call sites automatically.
Configuration
ShardId/ShardCountnow validated inConnectAsyncLargeThresholdis now clamped to the Discord-allowed range (50–250)Validate()moved from constructor toConnectAsyncso DI/hosting setup still works
Sharding
- sharding rework part 1: session and shard lifecycle improvements
Sentry / telemetry (already in nightly-002)
- full telemetry rework with cleaner abstraction
- 429 responses no longer reported
- duplicate reports deduplicated
Misc fixes
- fixed version check crash when the latest GitHub release is a pre-release tag
- null-guard for
guild_stickers_updateon uncached guild - removed duplicate invite client assignment
What's Changed
- fix: sharding rework part 1 by @Lulalaby in #803
- refactor: remove duplicate invite Discord client assignment by @sentry[bot] in #805
- feat: add guild collectibles to members and fix stale cache in GUILD_MEMBER_UPDATE by @sentry[bot] in #807
- refactor: rework built-in Sentry telemetry and diagnostics by @Lulalaby in #804
- fix: ApplicationCommands equality, thread-safety, and validation audit by @Copilot in #810
- fix: address 28 interactivity audit findings (thread-safety, resource leaks, crashes) by @Copilot in #809
- fix(core): core library audit fixes by @Lulalaby in #811
New Contributors
Full Changelog: v10.7.1-nightly-001...v10.7.1-nightly-003
v10.7.1-nightly-001
DisCatSharp v10.7.1-nightly-001
First nightly after v10.7.0 is here :3
This release is mostly focused on parity updates, cache/internal reliability fixes, and a bunch of follow-up
cleanup after the big 10.7.0 release.
Highlights
Presence caching overhaul
A larger internal rework landed for presence caching and related gateway state handling.
This improves correctness around cached presence data, fixes several long-standing cache / mapping issues, and adds
more regression coverage around gateway cache behavior moving forward.
Discord parity updates
More Discord-side payloads, fields, and enums were synced up.
This includes follow-up work around:
- store-related payloads
- entitlement fields
- SKU / application fields
- guild powerup / applied boost payloads
- audit log follow-ups
- automod follow-ups
- message type parity
- OAuth scope parity
Application commands
Application-command checks-failed handling was cleaned up further.
This includes:
- dedicated
SlashCommandChecksFailedandContextMenuChecksFailedevents - modernized checks-failed flow using those events directly
- follow-up fixes around checks-failed behavior and execution logging
Fixes
This nightly also includes a bunch of fixes and cleanup:
- fixed incorrect interaction response posting / handler behavior
- fixed duplicate application-command execution logging
- fixed soundboard cache refresh / list follow-up issues
- fixed additional gateway / store dispatch follow-up issues
- fixed a Lavalink regression when switching the bot's voice channel
- stabilized experimental autocomplete interaction value handling
Framework support
- removed
.NET 8support - aligned packages with the current target framework matrix
- refreshed related native/build/package setup along the way
Other
A few documentation and article updates also landed alongside these changes.
What's Changed
- feat: sync guild powerup / applied boost payloads by @Lulalaby in #794
- fix soundboard sounds cache/list follow-up by @Lulalaby in #795
- Fix surfaced entitlement and application fields by @Lulalaby in #796
- fix!: use checks-failed events for app commands by @Lulalaby in #798
- chore(deps): update nuget packages to 10.0.51 by @renovate[bot] in #799
- chore(deps): update dependency discatsharp.analyzer to 1.0.1 by @renovate[bot] in #801
Full Changelog: v10.7.0...v10.7.1-nightly-001
v10.7.0
DisCatSharp v10.7.0
Warning
I am not feeling well enough to continue the changelog at this time.
Please refer for all changes to #changelogs in our Discord Server and the GitHub commit history.
I am really sorry. I will update this as soon as I can.
This release is a pretty big one.
It introduces a lot of new features, a full voice rewrite, and a ton of improvements across the board.
Also yes, I finally finished the audit log rewrite.
✨ Highlights
- Full support for Components V2
- New voice system (
DisCatSharp.Voice) with DAVE (E2EE) support - Support for .NET 10 & .NET 11
- AuditLog completely rewritten
- Built-in statistics support
- Lavalink 4.2.0 support (including LavaLyrics)
🔊 Voice Rewrite
VoiceNext is gone.
It has been replaced with:
DisCatSharp.VoiceDisCatSharp.Voice.Natives
This brings:
- Proper voice send/receive
- DAVE protocol support
- Better reconnect + diagnostics
🧠 New Features
- Invite target user system (allowlists, CSV support, job tracking)
- Message search + jump link fetching
- Components V2 + improved interactivity
- New modal components (checkboxes, radio groups, etc.)
- Scheduled event exceptions
- Guild utilities (member counts, hierarchy helpers)
- Activity + social layer support
🛠️ Improvements
- Major stability improvements (gateway, interactivity, voice)
- Improved pagination behavior
- Better logging & debugging controls
- OAuth2 improvements
🧨 Breaking Changes
MediaType→ContentType- URL fields now use
DiscordUri - Removed
dmPermission(useallowedContexts) - Lavalink rename:
RemoveQueue→RemoveFromQueue - VoiceNext removed entirely
- Some namespace changes in Interactivity
🧾 Notes
This release has been built up over many nightlies and includes a lot of fixes and smaller improvements that are not all listed here.
If you encounter issues, please report them.
What's Changed
- feat: Components V2 (prev: UI Kit) by @Lulalaby in #601
- chore(deps): update actions/setup-dotnet action to v4.3.0 by @renovate[bot] in #630
- chore(deps): update sentry-dotnet monorepo to 5.1.0 by @renovate[bot] in #633
- chore(deps): update getsentry/action-release action to v1.10.1 by @renovate[bot] in #635
- chore(deps): update getsentry/action-release action to v1.10.2 by @renovate[bot] in #637
- chore(deps): update dependency xunit.runner.visualstudio to 3.0.2 by @renovate[bot] in #636
- [Part 1] Some improvements made during working on Hatsune Miku by @Lulalaby in #632
- chore(deps): update getsentry/action-release action to v1.10.3 by @renovate[bot] in #639
- chore(deps): update dependency microsoft.net.test.sdk to 17.13.0 by @renovate[bot] in #640
- chore(deps): update getsentry/action-release action to v1.10.4 by @renovate[bot] in #641
- chore(deps-dev): bump esbuild from 0.19.12 to 0.25.0 in /DisCatSharp.Docs in the npm_and_yarn group across 1 directory by @dependabot[bot] in #642
- [Part 2] Some improvements made during working on Hatsune Miku by @Lulalaby in #638
- chore(deps): update getsentry/action-release action to v2 by @renovate[bot] in #644
- chore(deps): update nuget packages to 9.0.2 by @renovate[bot] in #645
- chore(deps): update nuget packages to 9.0.40 by @renovate[bot] in #646
- chore(deps): update dependency nuget.protocol to 6.13.1 - autoclosed by @renovate[bot] in #647
- chore(deps): update dependency microsoft.vssdk.buildtools to 17.13.2126 by @renovate[bot] in #648
- chore(deps): update sentry-dotnet monorepo to 5.1.1 by @renovate[bot] in #649
- chore(deps): update dependency fluentassertions to 8.1.0 by @renovate[bot] in #650
- chore(deps): update dependency fluentassertions to 8.1.1 by @renovate[bot] in #651
- chore(deps): update actions/upload-artifact action to v4.6.1 by @renovate[bot] in #652
- [Part 3] Some improvements made during working on Hatsune Miku by @Lulalaby in #643
- chore(deps): update nuget packages to 4.13.0 by @renovate[bot] in #653
- chore(deps): update sentry-dotnet monorepo to 5.2.0 by @renovate[bot] in #654
- chore(deps): update dependency nuget.protocol to 6.13.2 by @renovate[bot] in #655
- chore(deps): update getsentry/action-release action to v3 by @renovate[bot] in #656
- 🎉 net10 by @Lulalaby in #657
- chore(deps): update dependency community.visualstudio.toolkit.17 to 17.0.533 by @renovate[bot] in #658
- chore(deps): update getsentry/action-release action to v3.1.0 by @renovate[bot] in #659
- chore(deps): update sentry-dotnet monorepo to 5.3.0 by @renovate[bot] in #660
- chore(deps): update nuget packages to 9.0.3 by @renovate[bot] in #663
- chore(deps): update nuget packages by @renovate[bot] in #665
- chore(deps): update dependency fluentassertions to 8.2.0 by @renovate[bot] in #667
- chore(deps): update sentry-dotnet monorepo to 5.4.0 by @renovate[bot] in #668
- chore(deps): update actions/setup-dotnet action to v4.3.1 by @renovate[bot] in #669
- chore(deps): update webfactory/ssh-agent action to v0.9.1 by @renovate[bot] in #670
- chore(deps): update dependency system.runtime.compilerservices.unsafe to 6.1.1 by @renovate[bot] in #672
- chore(deps): update dependency system.memory to 4.6.1 by @renovate[bot] in #671
- chore(deps): update dependency system.valuetuple to 4.6.0 by @renovate[bot] in #673
- chore(deps): update actions/upload-artifact action to v4.6.2 by @renovate[bot] in #674
- chore(deps): update getsentry/action-release action to v3.1.1 by @renovate[bot] in #676
- chore(deps): update sentry-dotnet monorepo to 5.5.0 by @renovate[bot] in #679
- chore(deps): update dependency system.runtime.compilerservices.unsafe to 6.1.2 by @renovate[bot] in #680
- Update hosting.md by @KristalliDev in #683
- chore(deps): update nuget packages by @renovate[bot] in #682
- chore(deps): update sentry-dotnet monorepo to 5.5.1 by @renovate[bot] in #681
- chore(deps): update sentry-dotnet monorepo to 5.6.0 by @renovate[bot] in #684
- chore(deps): update sentry-dotnet monorepo to 5.12.0 by @renovate[bot] in #686
- chore(deps): update dependency xunit.runner.visualstudio to 3.1.2 by @renovate[bot] in #685
- chore(deps): update mcr.microsoft.com/devcontainers/universal docker tag to v3 by @renovate[bot] in #696
- chore(deps): update getsentry/action-release action to v3.2.0 by @renovate[bot] in #695
- chore(deps): update dependency system.memory to 4.6.3 by @renovate[bot] in #691
- chore(deps): update dependency microsoft.vssdk.buildtools to 17.14.2094 by @renovate[bot] in #689
- chore(deps): update dependency microsoft.codeanalysis.analyzers to v4 by @renovate[bot] in #690
- chore(deps): update nuget packages by @renovate[bot] in #697
- Implement standalone scoped dependency injection for ApplicationCommands by @Copilot in #701
- chore(deps): update actions/download-artifact action to v5 by @renovate[bot] in https://github.com/Aiko-IT-Syste...
v10.6.7
Version with some fixes. Please report any issues to us.
What's Changed
- feat: Components V2 (prev: UI Kit) by @Lulalaby in #601
- chore(deps): update actions/setup-dotnet action to v4.3.0 by @renovate in #630
- chore(deps): update sentry-dotnet monorepo to 5.1.0 by @renovate in #633
- chore(deps): update getsentry/action-release action to v1.10.1 by @renovate in #635
- chore(deps): update getsentry/action-release action to v1.10.2 by @renovate in #637
- chore(deps): update dependency xunit.runner.visualstudio to 3.0.2 by @renovate in #636
- [Part 1] Some improvements made during working on Hatsune Miku by @Lulalaby in #632
Full Changelog: v10.6.6...v10.6.7