Kybrien - Even Richer Discord Presence

Even Richer Discord Presence : the complete Discord Rich Presence plugin for Unreal

Even Richer Discord Presence lets your game drive a Discord profile, status lines, art, timers, party size, profile buttons, and the Ask to Join flow for your multiplayer games.

No third-party DLL, no deprecated SDK, no external dependency. The plugin speaks the Discord IPC protocol directly, in clean engine-native C++, with full source included. (UE 5.5 | 5.6 | 5.7 | 5.8)

-> Website (later)

-> Even Richer Presence Documentation

-> Youtube tutorials (later)

-> Discord

What you get
  • THE complete Discord Rich Presence feature set for Unreal, in one subsystem

  • Zero-dependency: no bundled DLL, no discord-rpc, no Game SDK, full C++ source

  • Drop-in setup: paste your Discord App ID in Project Settings and you are connected

  • 20 Blueprint nodes and 6 events, every one of them tooltipped

  • Profile buttons, up to two clickable links on your profile

  • Ask to Join and join-request handling, ready to wire to your session system

  • Survives a Discord restart: auto-reconnect, presence restored, events re-subscribed

  • A plugin that works in packaged builds.

What's included
  • Subsystem : a GameInstanceSubsystem, no Game Instance wiring, no manual callback pump, reachable from any Blueprint through a single compact Discord node.

  • Presence : Details, State, large and small art with hover text, elapsed timer, countdown, activity type (Playing / Listening to / Watching / Competing in), status display type, clickable Details and State lines.

  • Profile buttons : up to two buttons with links rendered on the Discord profile.

  • Multiplayer : Set Multiplayer Session publishes party and secrets in one node, Party Id is derived from the join secret so every member groups together automatically. The join secret is handed back to your game untouched.

  • Ask to Join : On Join Request gives you the asking user (name, avatar URL), Respond To Join Request answers Yes / No / Ignore.

  • Connection : auto-connect on startup, connect-on-demand, exponential backoff reconnect, presence restoration, automatic re-subscription.

  • Helpers : Unix time now, time-from-now, button builder, Discord avatar URL (handles animated avatars and default fallbacks).

  • Diagnostics : actionable warnings for the cases Discord fails silently, party too small for a join button, party full, buttons and secrets conflicting.

Why Even Richer instead of alternatives
  • Not deprecated: the existing Unreal options wrap discord-rpc, a library Discord itself abandoned. Even Richer talks the IPC protocol directly.

  • Zero dependency: no precompiled DLL shipped with your game, no ThirdParty module.

  • Blueprint-first: every surface exposed as friendly nodes.

  • Complete: every Rich Presence field Discord accepts is exposed, including profile buttons and activity type.

  • Maintained: built and supported by the developer of Twitch StreamSync, recognised for its discord support.

Technical Details
  • Engine: UE 5.5 -> 5.8.

  • Platforms: Windows (Win64), editor and packaged builds.

  • Requirements: the Discord desktop client must be running on the same machine, and a Discord application ID from the Developer Portal.

  • Scope: this plugin drives Discord's presence and Ask to Join UI and hands your game the session token.

This plugin does NOT implement networking, matchmaking or level travel, you have to connect it to your existing session system (listen server, Steam, EOS).

Support

===================== DISCLAIMER ======================

EVEN RICHER DISCORD PRESENCE IS AN INDEPENDENT UNREAL ENGINE

PLUGIN AND IS NOT AFFILIATED WITH, ENDORSED BY, OR SPONSORED BY

DISCORD INC. ALL DISCORD TRADEMARKS, LOGOS, AND BRAND NAMES

ARE THE PROPERTY OF THEIR RESPECTIVE OWNERS.

=====================================================

1 Like

[UPDATE] 1.1 - First Even Richer Presence Update - Quality of life and Fixes

Mostly a “stop failing silently” pass. Discord refuses a lot of things without telling you, and the plugin now names the field instead of leaving you with a blank profile. Plus the off switch that connect on demand quietly took away.

:electric_plug: There is a real off switch now

Before connect on demand existed, unticking Auto Connect On Startup was enough to keep the plugin quiet. Then any presence node started reopening the connection on its own, so the only way to actually turn it off was a Branch in front of every Discord call.

Project Settings → Plugins → Even Richer Discord Presence → Enabled
Untick it and nothing connects, nothing publishes, every node is a no-op. One line in the log at startup, then silence.

Connect does not override it, it’s basically for devs only.

:video_game: PIE stopped fighting with itself

Every PIE client made its own game instance and its own connection to the same Discord account. Four clients meant four connections overwriting each other’s presence and a log with four interleaved copies of everything.

-> Only the first instance connects now, the others log one line saying why

Only Connect On First Instance In PIE, on by default, editor only, packaged builds never read it.
Calling Connect explicitly still overrides it, so you can still get a second instance connected to test the Ask to Join flow.

:link: Set Presence Links

Details Url and State Url were only reachable through Set Advanced Presence, which replaces the whole activity. Using one link meant rebuilding the entire struct on every text update.

New node, two pins, merges into the presence already set. Both pins empty removes them.

:warning: State Url still will not render while a party is published, Discord merges the party count into that line. Details Url is unaffected.

:dart: Also fixed

|> Connect with an empty pin works now

It used to log an error and give up even with a valid ID sitting in Project Settings. It falls back to it.

|> Your profile stops blinking

Connect on an already live connection forced a full close and handshake. If you called it on BeginPlay, that happened on every level load.

|> Display only party counters survive

A party published with sizes and no join secret showed a counter, then lost it on the very next Set Presence. Discord refuses buttons alongside a join secret, but never alongside a party.

|> An activity carrying only links no longer wipes your presence

|> Restart Elapsed Timer over a countdown

It silently turned the countdown into a progress bar. Still allowed, it just tells you now.

:mag: New diagnostics

Discord validates the activity as a whole, so one bad field takes the entire presence down. Text, art, everything, with a code 4000 and no clue which field. Now the plugin will tell you if :

A button URL that starts with neither http:// nor https://
Any field past Discord’s length limit, named, with its length
Hover text set with no image key, which renders nowhere at all
A join secret from On Join that your game never published back, the step everyone forgets

And the Client ID gets checked as you paste it in Project Settings. Pasting the Client Secret instead of the Application ID is caught immediately now.

:zap: More Optimized

Set Presence is meant to be callable every frame, so: no more per frame allocations, one less struct copy, and an unchanged payload is not rebuilt or resent. Warnings that used to fire on every single call now fire once per session.