Skip to content

Relationships

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.

Get all

The best way to get all relationships is to listen for status changes and wait for the status READY.

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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
extends Node


var application_id: int = 123456789012345678

var client := DiscordClient.new()


func _ready() -> void:
    client.set_application_id(application_id)
    client.set_status_changed_callback(_on_status_changed)


func _process(_delta: float) -> void:
    Discord.run_callbacks()


func _on_status_changed(status: DiscordClientStatus.Enum, _error: DiscordClientError.Enum, _error_detail: int) -> void:
    var enum_str: String = Discord.enum_to_string(status, DiscordClientStatus.id)

    print("Status changed to %s" % enum_str)

    if status == DiscordClientStatus.READY:
        _on_status_ready()


func _on_status_ready() -> void:
    var online_in_game: Array[DiscordRelationshipHandle] = client.get_relationships_by_group(
        DiscordRelationshipGroupType.ONLINE_PLAYING_GAME
    )

    print("=== Online - In Game (%s)" % online_in_game.size())

    for relationship in online_in_game:
        var user = relationship.user()

        if user is DiscordUserHandle:
            var display_str := "🟣 %s" % user.display_name()

            if relationship.discord_relationship_type() == DiscordRelationshipType.FRIEND:
                display_str += " 👾"

            if relationship.game_relationship_type() == DiscordRelationshipType.FRIEND:
                display_str += " 🎮"

            print(display_str)

    var online_elsewhere: Array[DiscordRelationshipHandle] = client.get_relationships_by_group(
        DiscordRelationshipGroupType.ONLINE_ELSEWHERE
    )

    print("=== Online - Elsewhere (%s)" % online_elsewhere.size())

    for relationship in online_elsewhere:
        var user = relationship.user()

        if user is DiscordUserHandle:
            var display_str := "🟢 %s" % user.display_name()

            if relationship.discord_relationship_type() == DiscordRelationshipType.FRIEND:
                display_str += " 👾"

            if relationship.game_relationship_type() == DiscordRelationshipType.FRIEND:
                display_str += " 🎮"

            print(display_str)

    var offline: Array[DiscordRelationshipHandle] = client.get_relationships_by_group(
        DiscordRelationshipGroupType.OFFLINE
    )

    print("=== Online - Elsewhere (%s)" % offline.size())

    for relationship in offline:
        var user = relationship.user()

        if user is DiscordUserHandle:
            var display_str := "âš« %s" % user.display_name()

            if relationship.discord_relationship_type() == DiscordRelationshipType.FRIEND:
                display_str += " 👾"

            if relationship.game_relationship_type() == DiscordRelationshipType.FRIEND:
                display_str += " 🎮"

            print(display_str)

Get changes

If you already got all the relationships once, there is no reason to get everything again so it's better just to listen for changes.

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
extends Node


var application_id: int = 123456789012345678

var client := DiscordClient.new()


func _ready() -> void:
    client.set_application_id(application_id)
    client.set_relationship_groups_updated_callback(_on_relationship_updated)


func _process(_delta: float) -> void:
    Discord.run_callbacks()


func _on_relationship_updated(user_id: int) -> void:
    var user = client.get_user(user_id)

    if user is DiscordUserHandle:
        var display_str := "User %s status changed to" % user.display_name()
        var relationship: DiscordRelationshipHandle = user.relationship()

        if user.status() == DiscordStatusType.OFFLINE:
            display_str += " âš«"
        elif user.game_activity() == null:
            display_str += " 🟢"
        elif user.game_activity() != null:
            display_str += " 🟣"

        if relationship.discord_relationship_type() == DiscordRelationshipType.FRIEND:
            display_str += " 👾"

        if relationship.game_relationship_type() == DiscordRelationshipType.FRIEND:
            display_str += " 🎮"

        print(display_str)

References