Blueprint API
DiscordPulse exposes one Blueprint-friendly Game Instance subsystem with:
- 22 callable or pure Blueprint nodes
- 9 bindable Blueprint events
- 3 Blueprint enums
- 2 Blueprint structs
- 20 configurable Rich Presence activity fields
All DiscordPulse nodes are available from:
Get Game Instance Subsystem
Class = Discord Presence SubsystemAlways validate the returned subsystem before using it. In UE 5.7, do not fetch
the subsystem from Blueprint Game Instance Event Init; Game Instance
Subsystems do not exist yet when that event runs.
Return Values And Asynchronous Results
Most callable nodes return EDiscordPresenceResult.
For activity nodes, an immediate Success means the request passed local
validation and was submitted. It does not prove Discord displayed the
activity.
Bind these events before initialization:
On Discord Activity Updated
On Discord ErrorOn Discord Activity Updated confirms Discord accepted an activity update.
Initialization Nodes
Initialize Discord Presence
Loads the Discord Social SDK, creates the client, starts callback polling, and begins connecting.
| Pin | Type | Description |
|---|---|---|
Application Id | String | Required numeric Discord application ID |
Optional Steam App Id | String | Optional numeric Steam application ID used for launch registration |
Auto Register | Boolean | Attempts Discord launch-command registration when no Steam ID is supplied |
Require Discord Running | Boolean | Fails initialization when Discord desktop is not detected |
| Return Value | EDiscordPresenceResult | Immediate local initialization result |
Calling this again with the same Application ID is safe. Calling it with a new Application ID restarts the SDK session.
Shutdown Discord Presence
Stops callback polling, clears local state, disconnects the Discord client, and releases the SDK library handle.
| Pin | Type | Description |
|---|---|---|
| Return Value | EDiscordPresenceResult | Shutdown result |
Safe to call more than once.
Restart Discord Presence
Shuts down the current session and initializes again.
| Pin | Type | Description |
|---|---|---|
Application Id | String | Required numeric Discord application ID |
Optional Steam App Id | String | Optional numeric Steam application ID |
Auto Register | Boolean | Attempts launch-command registration |
Require Discord Running | Boolean | Requires Discord desktop to be detected |
| Return Value | EDiscordPresenceResult | Immediate restart result |
Is Discord Presence Initialized
| Output | Type | Description |
|---|---|---|
| Return Value | Boolean | Whether the subsystem owns a valid initialized SDK client |
Is Discord Running
| Output | Type | Description |
|---|---|---|
| Return Value | Boolean | Best-known Discord desktop and SDK connection state |
Desktop process detection is best effort. SDK activity and error callbacks are authoritative after initialization.
Get Last Discord Error
| Output | Type | Description |
|---|---|---|
| Return Value | String | Latest human-readable plugin or SDK error |
Get Last Discord Result
| Output | Type | Description |
|---|---|---|
| Return Value | EDiscordPresenceResult | Latest structured result value |
Get Last Discord Error Code
| Output | Type | Description |
|---|---|---|
| Return Value | Integer | Latest native or Discord SDK error code |
Full Activity Nodes
Set Discord Activity
Submits a complete FDiscordPresenceActivity.
| Pin | Type | Description |
|---|---|---|
Activity | FDiscordPresenceActivity | Full Rich Presence activity |
| Return Value | EDiscordPresenceResult | Immediate submission result |
Wait for On Discord Activity Updated or On Discord Error for the final
asynchronous result.
Update Discord Activity
Alias for Set Discord Activity.
| Pin | Type | Description |
|---|---|---|
Activity | FDiscordPresenceActivity | Full replacement activity |
| Return Value | EDiscordPresenceResult | Immediate submission result |
Clear Discord Activity
Clears the desired and cached activity, then asks Discord to remove the currently displayed Rich Presence when the SDK client is ready.
| Pin | Type | Description |
|---|---|---|
| Return Value | EDiscordPresenceResult | Clear result |
Returns Not Initialized when no SDK client exists.
Reset Discord Activity
Resets the cached activity and clears Discord when initialized.
| Pin | Type | Description |
|---|---|---|
| Return Value | EDiscordPresenceResult | Reset result |
Safe before initialization; returns Success when there is no SDK client.
Get Current Discord Activity
| Output | Type | Description |
|---|---|---|
| Return Value | FDiscordPresenceActivity | Last activity accepted by Discord |
This is not simply the latest requested activity.
Convenience Presence Nodes
Set Simple Presence
Creates an activity containing only details and state.
| Pin | Type | Description |
|---|---|---|
Details | String | Primary activity text |
State | String | Secondary activity text |
| Return Value | EDiscordPresenceResult | Immediate submission result |
Set Presence With Images
Creates an activity with text and image assets.
| Pin | Type | Description |
|---|---|---|
Details | String | Primary activity text |
State | String | Secondary activity text |
Large Image Key | String | Uploaded Discord asset key or supported image URL |
Large Image Text | String | Large-image hover text |
Small Image Key | String | Optional uploaded asset key |
Small Image Text | String | Optional small-image hover text |
| Return Value | EDiscordPresenceResult | Immediate submission result |
Discord saves uploaded asset keys in lowercase.
Set Presence With Time
Creates an activity with optional elapsed time.
| Pin | Type | Description |
|---|---|---|
Details | String | Primary activity text |
State | String | Secondary activity text |
Use Elapsed Time | Boolean | Sets the start timestamp to the current UTC Unix time |
| Return Value | EDiscordPresenceResult | Immediate submission result |
Set Presence For Main Menu
Publishes the built-in activity:
Details = "In Main Menu"
State = "Preparing a run"| Pin | Type | Description |
|---|---|---|
| Return Value | EDiscordPresenceResult | Immediate submission result |
Set Presence For Level
Publishes the supplied level name and starts elapsed time.
Details = "Playing <LevelName>"
State = "<LevelName>"| Pin | Type | Description |
|---|---|---|
Level Name | String | Displayed level name |
| Return Value | EDiscordPresenceResult | Immediate submission result |
Set Presence For Match
Publishes a mode name, player counts, party values, and elapsed time.
Details = "Playing <ModeName>"
State = "<CurrentPlayers> of <MaxPlayers> players"| Pin | Type | Description |
|---|---|---|
Mode Name | String | Match or game-mode name |
Current Players | Integer | Current party size; negative values are clamped to zero |
Max Players | Integer | Maximum party size; negative values are clamped to zero |
| Return Value | EDiscordPresenceResult | Immediate submission result |
This convenience node does not set a Party ID or Join Secret. Use
Set Discord Activity for joinable matches.
Clear Presence
Alias for Clear Discord Activity.
| Pin | Type | Description |
|---|---|---|
| Return Value | EDiscordPresenceResult | Clear result |
Invite Node
Respond To Discord Join Request
Responds to a pending request received from
On Discord Join Request Received.
| Pin | Type | Description |
|---|---|---|
User Id | String | User ID supplied by the incoming request event |
Response | EDiscordPresenceJoinResponse | Yes, No, or Ignore |
| Return Value | EDiscordPresenceResult | Immediate response result |
Yes sends a positive reply through the Social SDK. No and Ignore remove
the pending request locally because the SDK helper does not expose a distinct
reject reply.
Utility Node
Get Discord Unix Timestamp Now
Static pure utility node that returns the current UTC Unix timestamp.
| Output | Type | Description |
|---|---|---|
| Return Value | Integer 64 | Timestamp suitable for activity start and end fields |
Blueprint Events
| Event | Payload | Fires When |
|---|---|---|
On Discord Initialized | Application Id | Local SDK initialization and connection startup complete |
On Discord Initialization Failed | Result, Error Code, Error Message | Initialization fails |
On Discord Activity Updated | Activity | Discord accepts an activity update |
On Discord Activity Cleared | None | A clear request completes locally |
On Discord Disconnected | Error Code, Error Message | Discord becomes unavailable after being known as running |
On Discord Error | Result, Error Code, Error Message | A plugin or SDK operation fails |
On Discord Join Requested | Secret | The local user accepts an invite and Discord supplies a join secret |
On Discord Spectate Requested | Secret | Compatibility event; not expected from the current Social SDK activity implementation |
On Discord Join Request Received | User | Another Discord user requests to join the current activity |
FDiscordPresenceActivity
FDiscordPresenceActivity is the full Rich Presence configuration struct.
| Field | Type | Purpose |
|---|---|---|
Details | String | Primary activity text; Discord limit is 128 UTF-8 bytes |
State | String | Secondary activity text; Discord limit is 128 UTF-8 bytes |
Large Image Key | String | Large uploaded asset key or supported image URL |
Large Image Text | String | Large-image hover text |
Small Image Key | String | Small uploaded asset key |
Small Image Text | String | Small-image hover text |
Start Timestamp | Integer 64 | Unix timestamp used for elapsed time |
End Timestamp | Integer 64 | Unix timestamp used for countdown/end time |
Party Id | String | Stable party or lobby identifier |
Party Size | Integer | Current party size |
Party Max | Integer | Maximum party size |
Join Secret | String | Opaque secret delivered to joining users |
Spectate Secret | String | Legacy compatibility field; ignored with a warning |
Match Secret | String | Legacy compatibility field; ignored with a warning |
Button 1 Label | String | First activity button label |
Button 1 Url | String | First activity button URL |
Button 2 Label | String | Second activity button label |
Button 2 Url | String | Second activity button URL |
Is Instance | Boolean | Legacy compatibility field; ignored |
Activity Type | EDiscordPresenceActivityType | Playing, Streaming, Listening, or Watching |
Both the label and URL are required for each activity button.
FDiscordPresenceUser
Supplied by On Discord Join Request Received.
| Field | Type | Notes |
|---|---|---|
User Id | String | Populated from the Social SDK invite |
Username | String | May be empty in the current wrapper |
Discriminator | String | May be empty in the current wrapper |
Avatar | String | May be empty in the current wrapper |
Is Bot | Boolean | Defaults to false; may not be populated |
EDiscordPresenceResult
| Value | Meaning |
|---|---|
Success | The synchronous operation succeeded locally or the asynchronous request was submitted |
Not Initialized | The operation requires an initialized SDK client |
Invalid Client ID | Application ID is empty, non-numeric, zero, or out of range |
Discord Not Running | Discord was not detected or an SDK operation reported it unavailable |
SDK Load Failed | The runtime SDK library could not be found or loaded |
SDK Call Failed | Discord rejected or failed an SDK operation |
Unsupported Platform | Compatible SDK binaries were not linked for the target |
Unknown Error | The failure did not map to a more specific result |
EDiscordPresenceActivityType
| Value | Purpose |
|---|---|
Playing | Standard game activity and recommended default |
Streaming | Streaming activity type |
Listening | Listening activity type |
Watching | Watching activity type |
EDiscordPresenceJoinResponse
| Value | Behavior |
|---|---|
Yes | Sends a positive join-request reply through the Social SDK |
No | Removes the pending request locally |
Ignore | Removes the pending request locally |
Recommended Blueprint Pattern
Local Player Controller: Event BeginPlay
-> Is Local Controller
-> Branch (True)
-> Get Game Instance Subsystem
Class = Discord Presence Subsystem
-> Is Valid
-> Bind On Discord Activity Updated
-> Bind On Discord Error
-> Initialize Discord Presence(ApplicationId)
-> Branch: Return Value == Success
True:
-> Set Simple Presence("In Main Menu", "Preparing a run")Do not update Rich Presence every frame. Publish only when meaningful game state changes.