Skip to content

v10.7.1-nightly-003

Pre-release
Pre-release

Choose a tag to compare

@Lulalaby Lulalaby released this 29 Mar 19:23
· 79 commits to main since this release
ca9a7e8

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 in nightly-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 GuildsInternal indexer accesses that could NRE on cache miss
  • null-guarded socket lock init and guild_stickers_update on uncached guild
  • thread-safe ReadyGuildIds tracking

REST

  • capped retry_after to prevent runaway backoff
  • cleaned up request linearization and response processing
  • fixed TaskScheduler usage in async continuations

Interactivity

28 bug fixes across thread-safety, resource leaks, and crashes:

  • ComponentCollectRequest.Collected is now properly initialized (was NRE before)
  • ComponentPaginator uses ConcurrentDictionary for thread-safe request tracking
  • IPaginator now extends IDisposable
  • InteractivityExtension properly disposes its internal components
  • GetCancellationToken no longer leaks CancellationTokenSource instances

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 NullValueHandling inconsistencies 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.3DCS1102 will detect and fix named-argument call sites automatically.

Configuration

  • ShardId / ShardCount now validated in ConnectAsync
  • LargeThreshold is now clamped to the Discord-allowed range (50–250)
  • Validate() moved from constructor to ConnectAsync so 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_update on 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