Activity Reference
Use Set Discord Activity with FDiscordPresenceActivity when the convenience nodes do not expose enough control.
Update Semantics
Activity updates are asynchronous:
Set Discord Activitychecks that DiscordPulse is initialized.- The plugin builds and submits a Discord activity.
- The node immediately returns a local result.
- Discord later accepts or rejects the update through a callback.
On Discord Activity Updatedfires on success.On Discord Errorfires on failure.
An immediate Success does not prove Discord displayed the activity.
Get Current Discord Activity returns the last activity accepted by Discord, not simply the latest requested activity.
Activity Fields
| Field | Purpose | Notes |
|---|---|---|
Details | Primary activity text | Discord limit: 128 UTF-8 bytes |
State | Secondary activity text | Discord limit: 128 UTF-8 bytes |
LargeImageKey | Large uploaded asset key or supported image URL | Use the saved lowercase portal key |
LargeImageText | Large-image hover text | Discord limit: 128 UTF-8 bytes |
SmallImageKey | Small uploaded asset key | Usually a Discord portal asset key |
SmallImageText | Small-image hover text | Discord limit: 128 UTF-8 bytes |
StartTimestamp | Unix timestamp used for elapsed time | Use Get Discord Unix Timestamp Now |
EndTimestamp | Unix timestamp used for countdown/end time | Use 0 to omit |
PartyId | Stable party or lobby identifier | Recommended for joinable activities |
PartySize | Current party size | Negative values are clamped to 0 |
PartyMax | Maximum party size | Negative values are clamped to 0 |
JoinSecret | Opaque secret delivered to joining users | Makes the party public in the submitted activity |
Button1Label, Button1Url | First activity button | Both values are required |
Button2Label, Button2Url | Second activity button | Both values are required |
ActivityType | Playing, Streaming, Listening, or Watching | Most games should use Playing |
Migration-Only Fields
These fields remain in the struct for compatibility but are not published by the current Social SDK integration:
| Field | Behavior |
|---|---|
SpectateSecret | Ignored and logged as a warning |
MatchSecret | Ignored and logged as a warning |
Is Instance | Ignored and logged at verbose level |
Simple Activity
Details = "Playing My Game"
State = "Main Menu"Equivalent convenience node:
Set Simple Presence("Playing My Game", "Main Menu")Images
Upload Rich Presence assets for the same Discord application used by Initialize Discord Presence.
LargeImageKey = "game_logo"
LargeImageText = "My Game"
SmallImageKey = "rank_gold"
SmallImageText = "Gold Rank"Rules:
- Use the saved asset key, not the display name.
- Discord saves uploaded keys in lowercase.
- Newly uploaded assets may need time to propagate.
- First prove simple presence works before testing images.
Timestamps
Elapsed time:
StartTimestamp = Get Discord Unix Timestamp Now
EndTimestamp = 0Countdown:
StartTimestamp = 0
EndTimestamp = future Unix timestampIf both timestamps are 0, no timer is submitted.
Parties And Join Secrets
PartyId = "lobby-eu-42"
PartySize = 2
PartyMax = 4
JoinSecret = "opaque-join-token"Use a stable PartyId for the lobby lifetime. Keep JoinSecret opaque and validate it in your own matchmaking or session system.
A useful joinable activity should have:
- Non-empty
PartyId PartySizelower thanPartyMax- Non-empty
JoinSecret
See Invites And Join Requests.
Buttons
DiscordPulse supports up to two activity buttons:
Button1Label = "Wishlist"
Button1Url = "https://store.steampowered.com/app/your_app"
Button2Label = "Community"
Button2Url = "https://discord.gg/your_invite"If only a label or only a URL is supplied, DiscordPulse ignores the incomplete button and logs a warning. Discord decides which client surfaces display activity buttons.
Recommended Update Strategy
Publish only when meaningful state changes:
Main Menu Opened -> Set Presence For Main Menu
Level Loaded -> Set Presence For Level
Match Started -> Set Discord Activity with party and timestamp
Match Updated -> Set Discord Activity with new party state
Match Ended -> Set Simple Presence or Clear PresenceDo not update presence every frame.