Skip to content

Direct Messages

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.

Send

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


var application_id: int = 123456789012345678

var target_id: int = 987654323109876543

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:
        var message := "ready to queue?"

        client.send_user_message(target_id, message, _on_message_sent)


func _on_message_sent(result: DiscordClientResult, message_id: int) -> void:
    if result.successful():
        print("✅ Message sent successfully (message id: %s)" % message_id)
    else:
        print("❌ Failed to send message: %s" % result.error())

Supress Double Notification

Tell Discord client that you are already showing the chat so it shouldn't notificate the user about new messages (don't forget to turn off when not showing chat anymore):

1
client.set_showing_chat(true)

Receive

GDScript
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
extends Node


var application_id: int = 123456789012345678

var client := DiscordClient.new()


func _ready() -> void:
    client.set_application_id(application_id)
    client.set_message_created_callback(_on_message_created)


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


func _on_message_created(result: DiscordClientResult, message_id: int) -> void:
    var message = client.get_message_handle(message_id)

    if message is DiscordMessageHandle:
        print("New message from %s: %s" % [message.author_id(), message.content()])

Watch for changes so you can update the game messages in your game too:

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


var application_id: int = 123456789012345678

var client := DiscordClient.new()


func _ready() -> void:
    client.set_application_id(application_id)
    client.set_message_created_callback(_on_message_created)
    client.set_message_updated_callback(_on_message_updated)


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


func _on_message_created(result: DiscordClientResult, message_id: int) -> void:
    var message = client.get_message_handle(message_id)

    if message is DiscordMessageHandle:
        print("New message from %s: %s" % [message.author_id(), message.content()])


func _on_message_updated(message_id: int) -> void:
    var message = client.get_message_handle(message_id)

    if message is DiscordMessageHandle:
        print("Message from %s updated: %s" % [message.author_id(), message.content()])

Remember to also watch for messages that are deleted:

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_message_created_callback(_on_message_created)
    client.set_message_updated_callback(_on_message_updated)
    client.set_message_deleted_callback(_on_message_deleted)


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


func _on_message_created(result: DiscordClientResult, message_id: int) -> void:
    var message = client.get_message_handle(message_id)

    if message is DiscordMessageHandle:
        print("New message from %s: %s" % [message.author_id(), message.content()])


func _on_message_updated(message_id: int) -> void:
    var message = client.get_message_handle(message_id)

    if message is DiscordMessageHandle:
        print("Message from %s updated: %s" % [message.author_id(), message.content()])


func _on_message_deleted(message_id: int, channel_id: int) -> void:
    var message = client.get_message_handle(message_id)

    if message is DiscordMessageHandle:
        print("Message from %s in %s deleted" % [message.author_id(), channel_id])

References