Skip to content

feat(discord): add Discord Rich Presence integration#18

Merged
flexiondotorg merged 3 commits intomainfrom
discord
Mar 22, 2026
Merged

feat(discord): add Discord Rich Presence integration#18
flexiondotorg merged 3 commits intomainfrom
discord

Conversation

@flexiondotorg
Copy link
Copy Markdown
Member

Summary

Adds complete Discord Rich Presence integration allowing now playing information to be displayed in Discord user status. Includes RPC client lifecycle management with debounce, pause timeout, and reconnect backoff. Configurable via settings with i18n translations. Accessible via tray menu toggle.

Changes

  • Core Discord RPC module with client lifecycle, event handling, and reconnection logic
  • Debounce mechanism to prevent rapid RPC updates (1s default)
  • Pause timeout to clear Rich Presence after 2s of playback pause
  • Exponential backoff reconnection strategy (up to 30s)
  • Configuration integration with enable/disable toggle
  • Internationalization support for tray menu
  • Tray menu toggle for Discord Rich Presence
  • Documentation of privacy and terms for Discord integration
  • Bug fix: prevent debounce timer reset from blocking Rich Presence updates

Testing

  • Manual verification of Rich Presence display in Discord during playback
  • Testing pause timeout clears presence after configured duration
  • Verification of tray menu toggle enable/disable functionality
  • Testing reconnection logic after Discord client restarts
  • Configuration persistence across application restarts

- Add Discord RPC configuration and i18n translations
- Implement core Discord presence module with playback tracking
- Add tray menu toggle to control presence visibility
- Include privacy and terms documentation
- Wire Discord module into main process lifecycle

Signed-off-by: Martin Wimpress <code@wimpress.io>
Remove scheduleUpdate() call from playbackTimeDidChange handler, which
was continuously resetting the 1s debounce timer before sendActivity()
could execute. The handler now only updates position; timestamps are
calculated fresh at send time, preserving accuracy.

Signed-off-by: Martin Wimpress <code@wimpress.io>
- Move @xhayper/discord-rpc from planned to current dependencies
- Update i18n record count and config table with notification and
  Discord toggles
- Document playbackTimeDidChange debounce pitfall in architecture notes
- Resolve Discord Client ID and update field names, button behaviour,
  and reconnect backoff details
- Replace pseudocode with event subscription table and clarify toggle
  behaviour

Signed-off-by: Martin Wimpress <code@wimpress.io>
Copy link
Copy Markdown
Contributor

@cubic-dev-ai cubic-dev-ai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

1 issue found across 14 files

Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="src/integrations/discord-presence/index.ts">

<violation number="1" location="src/integrations/discord-presence/index.ts:63">
P1: This optional-chaining pattern can throw at runtime when `client.user` is undefined; chain `.catch` safely as well.</violation>
</file>

Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review.

@flexiondotorg flexiondotorg merged commit 5e2d4db into main Mar 22, 2026
11 checks passed
@flexiondotorg flexiondotorg deleted the discord branch March 22, 2026 14:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant