Rich Presence
Warning
Prerequisites:
Any code from the prerequisites can be omitted to make it easier to read. If you do want the complete code, look at the repository examples.
The official documentation explain which field. This is their image that summary the location of wich field:
Type
Define the type of your activity (playing, streaming, watching, ...):
| GDScript |
|---|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 | extends Node
var application_id: int = 123456789012345678
var client := DiscordClient.new()
func _ready() -> void:
client.set_application_id(application_id)
var activity := DiscordActivity.new()
activity.set_type(DiscordActivityTypes.PLAYING)
client.update_rich_presence(activity, _on_rich_presence_updated)
func _process(_delta: float) -> void:
Discord.run_callbacks()
func _on_rich_presence_updated(result: DiscordClientResult) -> void:
if result.successful():
print("✅ Rich presence updated!")
|
Details and State
Details is the main description of what the player is doing in the game (Quick Match, Ranked, ARAM) and state is a secondary description inside that context (In Queue, In Match, In a group).
| GDScript |
|---|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 | extends Node
var application_id: int = 123456789012345678
var client := DiscordClient.new()
func _ready() -> void:
client.set_application_id(application_id)
var activity := DiscordActivity.new()
activity.set_type(DiscordActivityTypes.PLAYING)
activity.set_details("Tutorial")
activity.set_state("In Group")
client.update_rich_presence(activity, _on_rich_presence_updated)
func _process(_delta: float) -> void:
Discord.run_callbacks()
func _on_rich_presence_updated(result: DiscordClientResult) -> void:
if result.successful():
print("✅ Rich presence updated!")
|
Timestamps
Can be used to tell others for how long the user is doing that activity or when it will end (set_end()).
| GDScript |
|---|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 | extends Node
var application_id: int = 123456789012345678
var client := DiscordClient.new()
func _ready() -> void:
client.set_application_id(application_id)
var activity := DiscordActivity.new()
activity.set_type(DiscordActivityTypes.PLAYING)
activity.set_details("Tutorial")
activity.set_state("In Group")
var timestamps := DiscordActivityTimestamps.new()
var ten_minutes_ago: int = int(Time.get_unix_time_from_system() - 600)
timestamps.set_start(ten_minutes_ago * 1000)
activity.set_timestamps(timestamps)
client.update_rich_presence(activity, _on_rich_presence_updated)
func _process(_delta: float) -> void:
Discord.run_callbacks()
func _on_rich_presence_updated(result: DiscordClientResult) -> void:
if result.successful():
print("✅ Rich presence updated!")
|
Note
Discord expects the time in milliseconds, while Godot Time gives you in seconds.
Assets
If you setted assets through the Discord Developer Portal, you can use them here to change some images as you need.
| GDScript |
|---|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 | extends Node
var application_id: int = 123456789012345678
var client := DiscordClient.new()
func _ready() -> void:
client.set_application_id(application_id)
var activity := DiscordActivity.new()
activity.set_type(DiscordActivityTypes.PLAYING)
activity.set_details("Tutorial")
activity.set_state("In Group")
var timestamps := DiscordActivityTimestamps.new()
var ten_minutes_ago: int = int(Time.get_unix_time_from_system() - 600)
timestamps.set_start(ten_minutes_ago * 1000)
activity.set_timestamps(timestamps)
var assets := DiscordActivityAssets.new()
assets.set_large_image("surprise")
assets.set_large_text("Surprise")
assets.set_small_image("happy-face")
assets.set_small_text("Happy face")
assets.set_invite_cover_image("thumbnail")
activity.set_assets(assets)
client.update_rich_presence(activity, _on_rich_presence_updated)
func _process(_delta: float) -> void:
Discord.run_callbacks()
func _on_rich_presence_updated(result: DiscordClientResult) -> void:
if result.successful():
print("✅ Rich presence updated!")
|
Field URLs
Some fields can be turned in links.
| GDScript |
|---|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43 | extends Node
var application_id: int = 123456789012345678
var client := DiscordClient.new()
func _ready() -> void:
client.set_application_id(application_id)
var activity := DiscordActivity.new()
activity.set_type(DiscordActivityTypes.PLAYING)
activity.set_details("Tutorial")
activity.set_state("In Group")
var timestamps := DiscordActivityTimestamps.new()
var ten_minutes_ago: int = int(Time.get_unix_time_from_system() - 600)
timestamps.set_start(ten_minutes_ago * 1000)
activity.set_timestamps(timestamps)
var assets := DiscordActivityAssets.new()
assets.set_large_image("surprise")
assets.set_large_text("Surprise")
assets.set_small_image("happy-face")
assets.set_small_text("Happy face")
assets.set_invite_cover_image("thumbnail")
activity.set_assets(assets)
activity.set_details_url("https://github.com/thiagola92/discord-social-sdk/tree/main")
activity.set_state_url("https://store.godotengine.org/asset/thiagola92/discord-social-sdk/")
client.update_rich_presence(activity, _on_rich_presence_updated)
func _process(_delta: float) -> void:
Discord.run_callbacks()
func _on_rich_presence_updated(result: DiscordClientResult) -> void:
if result.successful():
print("✅ Rich presence updated!")
|
It's possible to add up to two buttons (normally they are links like "Buy on Steam!").
| GDScript |
|---|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48 | extends Node
var application_id: int = 123456789012345678
var client := DiscordClient.new()
func _ready() -> void:
client.set_application_id(application_id)
var activity := DiscordActivity.new()
activity.set_type(DiscordActivityTypes.PLAYING)
activity.set_details("Tutorial")
activity.set_state("In Group")
var timestamps := DiscordActivityTimestamps.new()
var ten_minutes_ago: int = int(Time.get_unix_time_from_system() - 600)
timestamps.set_start(ten_minutes_ago * 1000)
activity.set_timestamps(timestamps)
var assets := DiscordActivityAssets.new()
assets.set_large_image("surprise")
assets.set_large_text("Surprise")
assets.set_small_image("happy-face")
assets.set_small_text("Happy face")
assets.set_invite_cover_image("thumbnail")
activity.set_assets(assets)
activity.set_details_url("https://github.com/thiagola92/discord-social-sdk/tree/main")
activity.set_state_url("https://store.godotengine.org/asset/thiagola92/discord-social-sdk/")
var issue_button := DiscordActivityButton.new()
issue_button.set_label("Report bugs")
issue_button.set_url("https://github.com/thiagola92/discord-social-sdk/issues")
activity.add_button(issue_button)
client.update_rich_presence(activity, _on_rich_presence_updated)
func _process(_delta: float) -> void:
Discord.run_callbacks()
func _on_rich_presence_updated(result: DiscordClientResult) -> void:
if result.successful():
print("✅ Rich presence updated!")
|
Buttons are only visible to others
Use a secondary account to see or ask a friend to print screen (which one is easier for you).
Status Text
| GDScript |
|---|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50 | extends Node
var application_id: int = 123456789012345678
var client := DiscordClient.new()
func _ready() -> void:
client.set_application_id(application_id)
var activity := DiscordActivity.new()
activity.set_type(DiscordActivityTypes.PLAYING)
activity.set_details("Tutorial")
activity.set_state("In Group")
var timestamps := DiscordActivityTimestamps.new()
var ten_minutes_ago: int = int(Time.get_unix_time_from_system() - 600)
timestamps.set_start(ten_minutes_ago * 1000)
activity.set_timestamps(timestamps)
var assets := DiscordActivityAssets.new()
assets.set_large_image("surprise")
assets.set_large_text("Surprise")
assets.set_small_image("happy-face")
assets.set_small_text("Happy face")
assets.set_invite_cover_image("thumbnail")
activity.set_assets(assets)
activity.set_details_url("https://github.com/thiagola92/discord-social-sdk/tree/main")
activity.set_state_url("https://store.godotengine.org/asset/thiagola92/discord-social-sdk/")
var issue_button := DiscordActivityButton.new()
issue_button.set_label("Report bugs")
issue_button.set_url("https://github.com/thiagola92/discord-social-sdk/issues")
activity.add_button(issue_button)
activity.set_status_display_type(DiscordStatusDisplayTypes.STATE)
client.update_rich_presence(activity, _on_rich_presence_updated)
func _process(_delta: float) -> void:
Discord.run_callbacks()
func _on_rich_presence_updated(result: DiscordClientResult) -> void:
if result.successful():
print("✅ Rich presence updated!")
|
Party
Inform others about your party/group state.
Do not forget that you can change the message that appears before the party size through set_state().
| GDScript |
|---|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56 | extends Node
var application_id: int = 123456789012345678
var client := DiscordClient.new()
func _ready() -> void:
client.set_application_id(application_id)
var activity := DiscordActivity.new()
activity.set_type(DiscordActivityTypes.PLAYING)
activity.set_details("Tutorial")
activity.set_state("In Group")
var timestamps := DiscordActivityTimestamps.new()
var ten_minutes_ago: int = int(Time.get_unix_time_from_system() - 600)
timestamps.set_start(ten_minutes_ago * 1000)
activity.set_timestamps(timestamps)
var assets := DiscordActivityAssets.new()
assets.set_large_image("surprise")
assets.set_large_text("Surprise")
assets.set_small_image("happy-face")
assets.set_small_text("Happy face")
assets.set_invite_cover_image("thumbnail")
activity.set_assets(assets)
activity.set_details_url("https://github.com/thiagola92/discord-social-sdk/tree/main")
activity.set_state_url("https://store.godotengine.org/asset/thiagola92/discord-social-sdk/")
var issue_button := DiscordActivityButton.new()
issue_button.set_label("Report bugs")
issue_button.set_url("https://github.com/thiagola92/discord-social-sdk/issues")
activity.add_button(issue_button)
activity.set_status_display_type(DiscordStatusDisplayTypes.STATE)
var party := DiscordActivityParty.new()
party.set_id("party1234")
party.set_current_size(1)
party.set_max_size(5)
activity.set_party(party)
client.update_rich_presence(activity, _on_rich_presence_updated)
func _process(_delta: float) -> void:
Discord.run_callbacks()
func _on_rich_presence_updated(result: DiscordClientResult) -> void:
if result.successful():
print("✅ Rich presence updated!")
|
Party Secret
Secrets are used to pass information to people that want to join you in the game/party/group.
The section Game Invites will show how is used.
At the moment buttons doesn't work while you are using party secrets.
| GDScript |
|---|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61 | extends Node
var application_id: int = 123456789012345678
var client := DiscordClient.new()
func _ready() -> void:
client.set_application_id(application_id)
var activity := DiscordActivity.new()
activity.set_type(DiscordActivityTypes.PLAYING)
activity.set_details("Tutorial")
activity.set_state("In Group")
var timestamps := DiscordActivityTimestamps.new()
var ten_minutes_ago: int = int(Time.get_unix_time_from_system() - 600)
timestamps.set_start(ten_minutes_ago * 1000)
activity.set_timestamps(timestamps)
var assets := DiscordActivityAssets.new()
assets.set_large_image("surprise")
assets.set_large_text("Surprise")
assets.set_small_image("happy-face")
assets.set_small_text("Happy face")
assets.set_invite_cover_image("thumbnail")
activity.set_assets(assets)
activity.set_details_url("https://github.com/thiagola92/discord-social-sdk/tree/main")
activity.set_state_url("https://store.godotengine.org/asset/thiagola92/discord-social-sdk/")
#var issue_button := DiscordActivityButton.new()
#issue_button.set_label("Report bugs")
#issue_button.set_url("https://github.com/thiagola92/discord-social-sdk/issues")
#activity.add_button(issue_button)
activity.set_status_display_type(DiscordStatusDisplayTypes.STATE)
var party := DiscordActivityParty.new()
party.set_id("party1234")
party.set_current_size(1)
party.set_max_size(5)
activity.set_party(party)
# Cannot be used with buttons.
var secrets := DiscordActivitySecrets.new()
secrets.set_join("your-join-secret")
activity.set_secrets(secrets)
client.update_rich_presence(activity, _on_rich_presence_updated)
func _process(_delta: float) -> void:
Discord.run_callbacks()
func _on_rich_presence_updated(result: DiscordClientResult) -> void:
if result.successful():
print("✅ Rich presence updated!")
|
Limit platforms that can join your activity.
| GDScript |
|---|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63 | extends Node
var application_id: int = 123456789012345678
var client := DiscordClient.new()
func _ready() -> void:
client.set_application_id(application_id)
var activity := DiscordActivity.new()
activity.set_type(DiscordActivityTypes.PLAYING)
activity.set_details("Tutorial")
activity.set_state("In Group")
var timestamps := DiscordActivityTimestamps.new()
var ten_minutes_ago: int = int(Time.get_unix_time_from_system() - 600)
timestamps.set_start(ten_minutes_ago * 1000)
activity.set_timestamps(timestamps)
var assets := DiscordActivityAssets.new()
assets.set_large_image("surprise")
assets.set_large_text("Surprise")
assets.set_small_image("happy-face")
assets.set_small_text("Happy face")
assets.set_invite_cover_image("thumbnail")
activity.set_assets(assets)
activity.set_details_url("https://github.com/thiagola92/discord-social-sdk/tree/main")
activity.set_state_url("https://store.godotengine.org/asset/thiagola92/discord-social-sdk/")
#var issue_button := DiscordActivityButton.new()
#issue_button.set_label("Report bugs")
#issue_button.set_url("https://github.com/thiagola92/discord-social-sdk/issues")
#activity.add_button(issue_button)
activity.set_status_display_type(DiscordStatusDisplayTypes.STATE)
var party := DiscordActivityParty.new()
party.set_id("party1234")
party.set_current_size(1)
party.set_max_size(5)
activity.set_party(party)
# Cannot be used with buttons.
var secrets := DiscordActivitySecrets.new()
secrets.set_join("your-join-secret")
activity.set_secrets(secrets)
activity.set_supported_platforms(DiscordActivityGamePlatforms.DESKTOP)
client.update_rich_presence(activity, _on_rich_presence_updated)
func _process(_delta: float) -> void:
Discord.run_callbacks()
func _on_rich_presence_updated(result: DiscordClientResult) -> void:
if result.successful():
print("✅ Rich presence updated!")
|
References