Repository navigation
Discord Troubleshooting
English · Deutsch · Español · Languages
Your Discord status does not appear, looks wrong, or the connection keeps failing? Work through the symptoms below — every diagnosis needs only the Stream view and the daily log.
Setup basics (portal uploads, client ID, bundled files): see Discord-Setup.
-
Check the Stream view connection line. It reports one of three states: Not connected (no Discord desktop app, activity disabled, or empty client ID), Connecting…, or Connected — Discord shows the Rivulet status. When it is stuck on Not connected, use the Reconnect button — it rebuilds the adapter and retries the handshake without an app restart.
-
Is the toggle on? Settings → Discord Rich Presence → Show activity on Discord must be enabled and the Application client ID must be filled in. An empty client ID keeps the adapter off by design.
-
Is Discord running? The Rich Presence IPC only exists while the Discord desktop app is open (browser Discord is not enough). The adapter reconnects automatically with a growing backoff once Discord appears.
-
Read the log. Log locations:
- Windows:
%LOCALAPPDATA%\Rivulet\logs\ - Linux/macOS: the local user data directory under
Rivulet/logs/
Connectedin the Stream view but no card in Discord is Discord-side caching — the client can take a few minutes (or a restart) to render a new icon or asset; the wire delivery is then already proven by the log. - Windows:
Every status push logs exactly one of these lines:
Discord Rich Presence SET_ACTIVITY delivered activity=<status> game=<game name>
→ Discord accepted the payload. If the card still looks stale, restart Discord — the delivery is proven.
Discord Rich Presence IPC unavailable error=… backoff_secs=N
→ The adapter could not reach Discord's IPC socket. Typical causes: Discord not running, a second Discord installation (e.g. PTB/Canary) owning the pipe, or a socket permission problem. The adapter retries with exponential backoff up to 30 s; a Reconnect in the Stream view forces an immediate retry.
- The client ID must be 17–20 digits, numeric only. Settings shows an immediate warning if you pasted the application URL or an incomplete ID — copy the numeric Application ID from Developer Portal → General Information.
- The ID is validated and persisted on Apply; a wrong-looking value never silently disables the adapter.
- Discord resolves the presence only for an application that exists and has
Rich Presence enabled. If the ID is valid but nothing renders, open
Rich Presence → Art Assets in the portal and confirm the artwork was
saved under the asset key
rivulet_logo.
-
Framing/handshake errors in the log (e.g.
Protocol error,HandshakeIncomplete) usually mean something else is listening on the Discord IPC pipe. Close other apps that emulate Discord (launchers, chat overlays) and press Reconnect. -
Rejected payload (error 4000): Rivulet validates every payload against
Discord's rules before sending (empty
details, overlong status/game text128 chars, implausible asset keys are filtered out) and Settings warns on Apply. A 4000 in the log therefore points at a portal-side asset problem rather than the payload — re-check the art asset key.
-
Still nothing? Run the live handshake probe while Discord is open:
powershell -File scripts/test-discord-handshake.ps1(from a repository checkout). AREADYreply proves the IPC path, framing and client ID; the reply also echoes the resolved art asset IDs.
- The server member list always shows only the app icon plus the registered app name ("Rivulet") — never the status lines. The detailed status appears on the profile card / detail view. This is Discord's rendering rule; the icon comes from the portal App Icon upload.
- The status labels follow the Rivulet UI language (Recording/Aufnahme, …) — switch the app language to change the wording.
Security: never paste stream keys, OAuth tokens, or application secrets into wiki pages, screenshots, issue reports, or logs.