Compare commits
73 Commits
Author | SHA1 | Date | |
---|---|---|---|
e206b11848 | |||
eea4812afb | |||
b51508fe33 | |||
11896d31ff | |||
27c7fa26f1 | |||
50e717daaa | |||
8927ba76b9 | |||
43198d0e99 | |||
5cac6404b0 | |||
899f8f4b02 | |||
78dbde81fd | |||
8de5c65cdc | |||
|
829e84c5d9 | ||
|
7a237ec460 | ||
e69c514b44 | |||
81eb0e4e45 | |||
1f2dac7a0e | |||
|
1d490a666f | ||
6fd58b0ddf | |||
dba8569ebc | |||
6121ce5418 | |||
|
d744144d6d | ||
|
c7a06b6d9a | ||
|
b24defd292 | ||
|
ae076a6403 | ||
|
a4cf76c323 | ||
|
23b4e05e83 | ||
|
58cbfe9345 | ||
|
245110f103 | ||
|
7389119992 | ||
|
a57c78146e | ||
|
0686fad440 | ||
|
4bda87c54d | ||
8c583b85b1 | |||
52f43b724c | |||
|
253013d0e9 | ||
1b43adba77 | |||
|
aa486d39c9 | ||
|
68cb2ddb44 | ||
|
30af177aa3 | ||
|
cbc0c85c76 | ||
|
ed4149e7a7 | ||
|
3b244f4a91 | ||
|
305d314224 | ||
|
0ee6a3268c | ||
|
b143809744 | ||
|
fab2efb88a | ||
|
063f559624 | ||
|
ce93ed4294 | ||
|
2b19fd9be2 | ||
|
f93fbe4a1b | ||
|
f78e2e9744 | ||
|
ea4324aba8 | ||
|
ffcf4090d6 | ||
|
d3d33216db | ||
|
c8db95e559 | ||
|
1eeec67690 | ||
|
4985d31a03 | ||
|
86ab81aff1 | ||
aedbc03f8c | |||
|
15ce1c0904 | ||
|
3a2ccc84f5 | ||
|
368b60e69c | ||
|
e43fdc7117 | ||
|
d026bbc872 | ||
|
c41396cdbb | ||
|
abb0cdb0c5 | ||
|
35c1895650 | ||
|
548349d9f8 | ||
|
68c8a42826 | ||
|
3e944683a4 | ||
|
6f288564cf | ||
|
aa39fb80e0 |
39
.github/ISSUE_TEMPLATE/BUG.yml
vendored
@@ -21,17 +21,23 @@ body:
|
||||
id: version
|
||||
attributes:
|
||||
label: Version
|
||||
description: What version of our software are you running?
|
||||
description: What version of the Discord Game SDK Godot plugin are you running?
|
||||
options:
|
||||
- 2.2
|
||||
- 2.1
|
||||
- 2.0
|
||||
- 1.5
|
||||
- 1.4
|
||||
- 1.3
|
||||
- 1.2
|
||||
- 1.1
|
||||
- 1.0
|
||||
- 1.0.0
|
||||
- 0.3.2
|
||||
- 0.3.1
|
||||
- 0.3.0
|
||||
- 0.2.4
|
||||
- 0.2.3
|
||||
- 0.2.2
|
||||
- 0.2.1
|
||||
- 0.2.0
|
||||
- 0.1.5
|
||||
- 0.1.4
|
||||
- 0.1.3
|
||||
- 0.1.2
|
||||
- 0.1.1
|
||||
- 0.1.0
|
||||
- Custom build
|
||||
validations:
|
||||
required: true
|
||||
@@ -39,8 +45,15 @@ body:
|
||||
id: gd-version
|
||||
attributes:
|
||||
label: Godot Version
|
||||
description: This addon is ONLY for 4.0 and above!
|
||||
placeholder: e.g. 4.0.2-stable
|
||||
description: This addon is ONLY for 4.1 and above!
|
||||
placeholder: e.g. 4.1.0-stable
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: steps_reproduce
|
||||
attributes:
|
||||
label: Exact steps to reproduce this error
|
||||
description: Tell what completely exactly you did from downloading and copying the plugin to the error. You can also drag and drop a zip file of how you would setup a fresh project with it.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
@@ -78,3 +91,5 @@ body:
|
||||
required: true
|
||||
- label: I tried restarting Discord and Godot completely.
|
||||
required: true
|
||||
- label: I did read the documentation https://github.com/vaporvee/discord-sdk-godot/wiki
|
||||
required: true
|
||||
|
65
.github/workflows/auto_wontfix.yml
vendored
Normal file
@@ -0,0 +1,65 @@
|
||||
name: Auto Wontfix Issues
|
||||
|
||||
on:
|
||||
issues:
|
||||
types: [opened, edited]
|
||||
|
||||
jobs:
|
||||
auto_wontfix:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Check for specific word in the issue
|
||||
uses: actions/github-script@v4
|
||||
with:
|
||||
github-token: ${{ secrets.WONTFIX_TOKEN }}
|
||||
script: |
|
||||
const wordToCheck = 'mac';
|
||||
const issue = context.payload.issue;
|
||||
|
||||
if (issue.body && issue.body.toLowerCase().includes(wordToCheck)) {
|
||||
const repo = context.repo.repo;
|
||||
const owner = context.repo.owner;
|
||||
const number = issue.number;
|
||||
const issueComment = "macOS is not supported, because loading libraries in Godot from third-party sources requires a paid developer certificate from Apple. You are welcome to compile and sign the library yourself.";
|
||||
|
||||
// Mark the issue as "wontfix"
|
||||
await octokit.issues.update({
|
||||
owner,
|
||||
repo,
|
||||
issue_number: number,
|
||||
state: 'closed',
|
||||
labels: ['wontfix']
|
||||
});
|
||||
|
||||
// Post a comment on the issue
|
||||
await octokit.issues.createComment({
|
||||
owner,
|
||||
repo,
|
||||
issue_number: number,
|
||||
body: issueComment
|
||||
});
|
||||
}
|
||||
if (issue.title && issue.title.toLowerCase().includes(wordToCheck)) {
|
||||
const repo = context.repo.repo;
|
||||
const owner = context.repo.owner;
|
||||
const number = issue.number;
|
||||
const issueComment = "macOS is not supported, because loading libraries in Godot from third-party sources requires a paid developer certificate from Apple. You are welcome to compile and sign the library yourself.";
|
||||
|
||||
// Mark the issue as "wontfix"
|
||||
await octokit.issues.update({
|
||||
owner,
|
||||
repo,
|
||||
issue_number: number,
|
||||
state: 'closed',
|
||||
labels: ['wontfix']
|
||||
});
|
||||
|
||||
// Post a comment on the issue
|
||||
await octokit.issues.createComment({
|
||||
owner,
|
||||
repo,
|
||||
issue_number: number,
|
||||
body: issueComment
|
||||
});
|
||||
}
|
1
.gitmodules
vendored
@@ -1,3 +1,4 @@
|
||||
[submodule "src/lib/godot-cpp"]
|
||||
path = src/lib/godot-cpp
|
||||
url = https://github.com/godotengine/godot-cpp
|
||||
branch = 4.2
|
||||
|
3
.vscode/c_cpp_properties.json
vendored
@@ -6,7 +6,8 @@
|
||||
"${default}",
|
||||
"${workspaceFolder}/src/lib/godot-cpp/gen/include",
|
||||
"${workspaceFolder}/src/lib/godot-cpp/include",
|
||||
"${workspaceFolder}/src/lib/godot-cpp/gdextension"
|
||||
"${workspaceFolder}/src/lib/godot-cpp/gdextension",
|
||||
"${workspaceFolder}/src/lib/godot-cpp/gen/include"
|
||||
],
|
||||
"defines": [
|
||||
"_DEBUG",
|
||||
|
@@ -1,8 +1,6 @@
|
||||
<img src="/project/assets/Banner.svg" alt="Project Banner" />
|
||||
|
||||
**Discord Game SDK support for GDScript in Godot Engine 4.0. with the easiest code pattern!**<br><br>
|
||||
**Please leave a star that would really help! And thanks to all the people that already starred this project! ❤️**
|
||||
<br />
|
||||
**Discord Game SDK support for GDScript in Godot Engine 4.1. with the easiest code pattern!**<br><br>
|
||||
<br />
|
||||
# [Quick start :rocket: (click here)](https://github.com/vaporvee/discord-sdk-godot/wiki)
|
||||
<br />
|
||||
@@ -14,9 +12,10 @@
|
||||
- Invites
|
||||
- Steam and launch command registering
|
||||
- User information
|
||||
- Relationship Manager (Get friendlist and its updates)
|
||||
- Overlay management
|
||||
- Editor Presence (optional)
|
||||
<img width="400px" src="https://camo.githubusercontent.com/e4ae18ce30a7731145376e1a85c384e9ea207420c09365e3fcdd455ef332ba98/68747470733a2f2f6769746875622d70726f64756374696f6e2d757365722d61737365742d3632313064662e73332e616d617a6f6e6177732e636f6d2f38303632313836332f3233383739343331392d35373164653262612d346635652d343062612d613263662d3839666365643963306366302e706e67">
|
||||
<img width="600px" src="https://raw.githubusercontent.com/vaporvee/discord-sdk-godot/main/project/assets/GodotEditorPresenceBanner.png">
|
||||
<br />
|
||||
|
||||
<br />
|
||||
|
15
SConstruct
@@ -1,10 +1,8 @@
|
||||
#!python
|
||||
import os
|
||||
|
||||
# Gets the standard flags CC, CCX, etc.
|
||||
env = SConscript("src/lib/godot-cpp/SConstruct")
|
||||
|
||||
# Check our platform specifics
|
||||
if env["platform"] == "macos":
|
||||
discord_library = "libdiscord_game_sdk.dylib"
|
||||
discord_library_second = "libdiscord_game_sdk_aarch64.dylib"
|
||||
@@ -25,17 +23,16 @@ if env["target"] == "template_debug":
|
||||
else:
|
||||
debugsuffix = ""
|
||||
|
||||
# make sure our binding library is properly includes
|
||||
env.Append(LIBPATH=["src/lib/discord_game_sdk/bin/"])
|
||||
sources = Glob("src/lib/discord_game_sdk/cpp/*.cpp")
|
||||
env.Append(CPPPATH=["src/lib/discord_game_sdk/cpp/"]) # this line for some reason doesn't get understanded by most linux distros
|
||||
env.Append(CPPPATH=["src/lib/discord_game_sdk/cpp/"])
|
||||
env.Append(LIBS=["discord_game_sdk"])
|
||||
|
||||
# tweak this if you want to use different folders, or more folders, to store your source code in.
|
||||
env.Append(CPPPATH=["src/"])
|
||||
sources += Glob("src/*.cpp")
|
||||
|
||||
# The finished exports
|
||||
env.Append(CPPDEFINES=["HOT_RELOAD_ENABLED"])
|
||||
|
||||
library = env.SharedLibrary(
|
||||
target="project/addons/discord-sdk-gd/bin/"
|
||||
+ libexportfolder
|
||||
@@ -51,11 +48,13 @@ env.Depends(
|
||||
Copy("$TARGET", "$SOURCE"),
|
||||
),
|
||||
)
|
||||
if(discord_library_second != ""):
|
||||
if discord_library_second != "":
|
||||
env.Depends(
|
||||
library,
|
||||
Command(
|
||||
"project/addons/discord-sdk-gd/bin/" + libexportfolder + discord_library_second,
|
||||
"project/addons/discord-sdk-gd/bin/"
|
||||
+ libexportfolder
|
||||
+ discord_library_second,
|
||||
"src/lib/discord_game_sdk/bin/" + discord_library_second,
|
||||
Copy("$TARGET", "$SOURCE"),
|
||||
),
|
||||
|
21
build.py
@@ -1,23 +1,28 @@
|
||||
import os
|
||||
import sys
|
||||
|
||||
yes = {'yes', 'y', 'ye', ''}
|
||||
no = {'no', 'n'}
|
||||
yes = {"yes", "y", "ye", ""}
|
||||
no = {"no", "n"}
|
||||
|
||||
if len(sys.argv) > 1:
|
||||
choice = sys.argv[1].removeprefix("-")
|
||||
else:
|
||||
sys.stdout.write(
|
||||
"Do you want to open only the built project instead of the Godot Editor after building? ([y]es/[n]o): ")
|
||||
"Do you want to open only the built project instead of the Godot Editor after building? ([y]es/[n]o): "
|
||||
)
|
||||
choice = input().lower()
|
||||
if choice in yes:
|
||||
os.system("python -m SCons && python -m SCons target=template_release && cd project && godot")
|
||||
elif choice in no:
|
||||
if os.name == 'nt':
|
||||
os.system(
|
||||
"python -m SCons && python -m SCons target=template_release && godot project\project.godot")
|
||||
"python -m SCons && python -m SCons target=template_release && cd project && godot"
|
||||
)
|
||||
elif choice in no:
|
||||
if os.name == "nt":
|
||||
os.system(
|
||||
"python -m SCons && python -m SCons target=template_release && godot project\project.godot"
|
||||
)
|
||||
else:
|
||||
os.system(
|
||||
"python -m SCons && python -m SCons target=template_release && godot project/project.godot")
|
||||
"python -m SCons && python -m SCons target=template_release && godot project/project.godot"
|
||||
)
|
||||
else:
|
||||
sys.stdout.write("Please respond with 'yes' or 'no'")
|
||||
|
BIN
project/Node
Before Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 1.0 KiB |
@@ -3,15 +3,15 @@
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://ufh1hha1ehui"
|
||||
path="res://.godot/imported/Debug.svg-c87ff9d4b4b0e718ec457560f6c420dc.ctex"
|
||||
path="res://.godot/imported/Debug.svg-97b25f5d09dbf04212867cd1a46cf368.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://addons/discord-sdk-gd/nodes/assets/Debug.svg"
|
||||
dest_files=["res://.godot/imported/Debug.svg-c87ff9d4b4b0e718ec457560f6c420dc.ctex"]
|
||||
source_file="res://addons/discord-sdk-gd/Debug.svg"
|
||||
dest_files=["res://.godot/imported/Debug.svg-97b25f5d09dbf04212867cd1a46cf368.ctex"]
|
||||
|
||||
[params]
|
||||
|
BIN
project/addons/discord-sdk-gd/Logo_V2_No_Bg.png
Normal file
After Width: | Height: | Size: 3.9 KiB |
@@ -2,16 +2,16 @@
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cq8lwj2matk6x"
|
||||
path="res://.godot/imported/flow_spritesheet.png-4637bb4103771b4d4bbc78a0bb858512.ctex"
|
||||
uid="uid://csl0e2px0cwc1"
|
||||
path="res://.godot/imported/Logo_V2_No_Bg.png-9c8178062d6891c8370df63a912bd8e2.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://addons/discord-sdk-gd/nodes/assets/flow_spritesheet.png"
|
||||
dest_files=["res://.godot/imported/flow_spritesheet.png-4637bb4103771b4d4bbc78a0bb858512.ctex"]
|
||||
source_file="res://addons/discord-sdk-gd/Logo_V2_No_Bg.png"
|
||||
dest_files=["res://.godot/imported/Logo_V2_No_Bg.png-9c8178062d6891c8370df63a912bd8e2.ctex"]
|
||||
|
||||
[params]
|
||||
|
7
project/addons/discord-sdk-gd/READ_ME_PLEASE.txt
Normal file
@@ -0,0 +1,7 @@
|
||||
MINIMUM GODOT VERSION: 4.2
|
||||
|
||||
PLEASE ACTIVATE THE PLUGIN UNDER Project -> Project Settings... -> Plugins -> DiscordSDK -> Status
|
||||
IGNORE THE RED ERRORS ON THE FIRST 2 RESTARTS
|
||||
READ THE TUTORIAL LINKED IN THE WINDOW THAT WILL OPEN ON PLUGIN ENABLE
|
||||
|
||||
If nothing works, enable the plugin and delete /addons/discord-sdk-gd/bin/.gdignore
|
30
project/addons/discord-sdk-gd/bin/discord-rpc-gd.gdextension
Normal file
@@ -0,0 +1,30 @@
|
||||
[configuration]
|
||||
|
||||
entry_symbol = "discordsdkgd_library_init"
|
||||
compatibility_minimum = 4.2
|
||||
|
||||
[libraries]
|
||||
|
||||
macos.debug = "macos/libdiscord_game_sdk_binding_debug.dylib"
|
||||
macos.release = "macos/libdiscord_game_sdk_binding.dylib"
|
||||
windows.debug.x86_64 = "windows/discord_game_sdk_binding_debug.dll"
|
||||
windows.release.x86_64 = "windows/discord_game_sdk_binding.dll"
|
||||
linux.debug.x86_64 = "linux/libdiscord_game_sdk_binding_debug.so"
|
||||
linux.release.x86_64 = "linux/libdiscord_game_sdk_binding.so"
|
||||
linux.debug.arm64 = "linux/libdiscord_game_sdk_binding_debug.so"
|
||||
linux.release.arm64 = "linux/libdiscord_game_sdk_binding.so"
|
||||
linux.debug.rv64 = "linux/libdiscord_game_sdk_binding_debug.so"
|
||||
linux.release.rv64 = "linux/libdiscord_game_sdk_binding.so"
|
||||
|
||||
[dependencies]
|
||||
|
||||
macos.debug = { "macos/libdiscord_game_sdk.dylib": "" }
|
||||
macos.release = { "macos/libdiscord_game_sdk.dylib": "" }
|
||||
windows.debug.x86_64 = { "windows/discord_game_sdk.dll": "" }
|
||||
windows.release.x86_64 = { "windows/discord_game_sdk.dll": "" }
|
||||
linux.debug.x86_64 = { "linux/libdiscord_game_sdk.so": "" }
|
||||
linux.release.x86_64 = { "linux/libdiscord_game_sdk.so": "" }
|
||||
linux.debug.arm64 = { "linux/libdiscord_game_sdk.so": "" }
|
||||
linux.release.arm64 = { "linux/libdiscord_game_sdk.so": "" }
|
||||
linux.debug.rv64 = { "linux/libdiscord_game_sdk.so": "" }
|
||||
linux.release.rv64 = { "linux/libdiscord_game_sdk.so": "" }
|
BIN
project/addons/discord-sdk-gd/bin/linux/libdiscord_game_sdk_binding.so
Executable file → Normal file
BIN
project/addons/discord-sdk-gd/bin/linux/libdiscord_game_sdk_binding_debug.so
Executable file → Normal file
@@ -1,4 +0,0 @@
|
||||
Version: 1.2
|
||||
Windows: build-1
|
||||
Linux: build-1
|
||||
MacOS: build-1
|
@@ -1,29 +0,0 @@
|
||||
[configuration]
|
||||
|
||||
entry_symbol = "discordsdkgd_library_init"
|
||||
|
||||
[libraries]
|
||||
|
||||
macos.debug = "bin/macos/libdiscord_game_sdk_binding_debug.dylib"
|
||||
macos.release = "bin/macos/libdiscord_game_sdk_binding.dylib"
|
||||
windows.debug.x86_64 = "bin/windows/discord_game_sdk_binding_debug.dll"
|
||||
windows.release.x86_64 = "bin/windows/discord_game_sdk_binding.dll"
|
||||
linux.debug.x86_64 = "bin/linux/libdiscord_game_sdk_binding_debug.so"
|
||||
linux.release.x86_64 = "bin/linux/libdiscord_game_sdk_binding.so"
|
||||
linux.debug.arm64 = "bin/linux/libdiscord_game_sdk_binding_debug.so"
|
||||
linux.release.arm64 = "bin/linux/libdiscord_game_sdk_binding.so"
|
||||
linux.debug.rv64 = "bin/linux/libdiscord_game_sdk_binding_debug.so"
|
||||
linux.release.rv64 = "bin/linux/libdiscord_game_sdk_binding.so"
|
||||
|
||||
[dependencies]
|
||||
|
||||
macos.debug = "bin/macos/libdiscord_game_sdk.dylib"
|
||||
macos.release = "bin/macos/libdiscord_game_sdk.dylib"
|
||||
windows.debug.x86_64 = "bin/windows/discord_game_sdk.dll"
|
||||
windows.release.x86_64 = "bin/windows/discord_game_sdk.dll"
|
||||
linux.debug.x86_64 = "bin/linux/libdiscord_game_sdk.so"
|
||||
linux.release.x86_64 = "bin/linux/libdiscord_game_sdk.so"
|
||||
linux.debug.arm64 = "bin/linux/libdiscord_game_sdk.so"
|
||||
linux.release.arm64 = "bin/linux/libdiscord_game_sdk.so"
|
||||
linux.debug.rv64 = "bin/linux/libdiscord_game_sdk.so"
|
||||
linux.release.rv64 = "bin/linux/libdiscord_game_sdk.so"
|
@@ -11,27 +11,27 @@ extends Node
|
||||
## [codeblock]
|
||||
## func _ready():
|
||||
## # Application ID
|
||||
## discord_sdk.app_id = 1099618430065324082
|
||||
## DiscordSDK.app_id = 1099618430065324082
|
||||
## # this is boolean if everything worked
|
||||
## print("Discord working: " + str(discord_sdk.get_is_discord_working()))
|
||||
## print("Discord working: " + str(DiscordSDK.get_is_discord_working()))
|
||||
## # Set the first custom text row of the activity here
|
||||
## discord_sdk.details = "A demo activity by vaporvee#1231"
|
||||
## DiscordSDK.details = "A demo activity by vaporvee#1231"
|
||||
## # Set the second custom text row of the activity here
|
||||
## discord_sdk.state = "Checkpoint 23/23"
|
||||
## DiscordSDK.state = "Checkpoint 23/23"
|
||||
## # Image key for small image from "Art Assets" from the Discord Developer website
|
||||
## discord_sdk.large_image = "game"
|
||||
## DiscordSDK.large_image = "game"
|
||||
## # Tooltip text for the large image
|
||||
## discord_sdk.large_image_text = "Try it now!"
|
||||
## DiscordSDK.large_image_text = "Try it now!"
|
||||
## # Image key for large image from "Art Assets" from the Discord Developer website
|
||||
## discord_sdk.small_image = "boss"
|
||||
## DiscordSDK.small_image = "boss"
|
||||
## # Tooltip text for the small image
|
||||
## discord_sdk.small_image_text = "Fighting the end boss! D:"
|
||||
## DiscordSDK.small_image_text = "Fighting the end boss! D:"
|
||||
## # "02:41 elapsed" timestamp for the activity
|
||||
## discord_sdk.start_timestamp = int(Time.get_unix_time_from_system())
|
||||
## DiscordSDK.start_timestamp = int(Time.get_unix_time_from_system())
|
||||
## # "59:59 remaining" timestamp for the activity
|
||||
## discord_sdk.end_timestamp = int(Time.get_unix_time_from_system()) + 3600
|
||||
## DiscordSDK.end_timestamp = int(Time.get_unix_time_from_system()) + 3600
|
||||
## # Always refresh after changing the values!
|
||||
## discord_sdk.refresh()
|
||||
## DiscordSDK.refresh()
|
||||
## [/codeblock]
|
||||
##
|
||||
## @tutorial(More information here): https://github.com/vaporvee/discord-sdk-godot/wiki/Quick-start
|
||||
|
@@ -1,17 +0,0 @@
|
||||
@tool
|
||||
extends EditorExportPlugin
|
||||
|
||||
func _export_file(_path, _type, features) -> void:
|
||||
if features.find("windows",0) != -1:
|
||||
if features.find("x86_64",0) != -1:
|
||||
add_shared_object("res://addons/discord-sdk-gd/bin/windows/discord_game_sdk.dll",[],"/")
|
||||
elif features.find("x86",0) != -1:
|
||||
add_shared_object("res://addons/discord-sdk-gd/bin/windows/discord_game_sdk_x86.dll",[],"/")
|
||||
elif features.find("linux",0) != -1:
|
||||
add_shared_object("res://addons/discord-sdk-gd/bin/linux/libdiscord_game_sdk.so",[],"/")
|
||||
elif features.find("macos",0) != -1:
|
||||
add_shared_object("res://addons/discord-sdk-gd/bin/macos/libdiscord_game_sdk.dylib",[],"/")
|
||||
add_shared_object("res://addons/discord-sdk-gd/bin/macos/libdiscord_game_sdk_aarch64.dylib",[],"/")
|
||||
|
||||
func _get_name():
|
||||
pass
|
BIN
project/addons/discord-sdk-gd/logo.png
Normal file
After Width: | Height: | Size: 3.9 KiB |
34
project/addons/discord-sdk-gd/logo.png.import
Normal file
@@ -0,0 +1,34 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://csl0e2px0cwc1"
|
||||
path="res://.godot/imported/logo.png-b59b4861dc0c64616d78af30082b08b5.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://addons/discord-sdk-gd/logo.png"
|
||||
dest_files=["res://.godot/imported/logo.png-b59b4861dc0c64616d78af30082b08b5.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
@@ -1,25 +1,29 @@
|
||||
[gd_scene load_steps=68 format=3 uid="uid://c1slhdnlsv2qt"]
|
||||
[gd_scene load_steps=9 format=3 uid="uid://c1slhdnlsv2qt"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://cq8lwj2matk6x" path="res://addons/discord-sdk-gd/nodes/assets/flow_spritesheet.png" id="4_gvc3o"]
|
||||
[ext_resource type="Texture2D" uid="uid://dnfq6kug4x6o2" path="res://addons/discord-sdk-gd/nodes/assets/Checked.svg" id="2_q6tao"]
|
||||
[ext_resource type="Texture2D" uid="uid://compmm3kviqqe" path="res://addons/discord-sdk-gd/nodes/assets/Unchecked.svg" id="3_5cyem"]
|
||||
[ext_resource type="Texture2D" uid="uid://dtc6ckladq0td" path="res://addons/discord-sdk-gd/nodes/assets/circle.svg" id="3_goflf"]
|
||||
|
||||
[sub_resource type="GDScript" id="GDScript_ak1tp"]
|
||||
resource_name = "Debug"
|
||||
script/source = "extends Node
|
||||
|
||||
func _ready():
|
||||
discord_sdk.connect(\"activity_join_request\",_on_activity_join_request)
|
||||
DiscordSDK.connect(\"activity_join_request\",_on_activity_join_request)
|
||||
|
||||
func _process(_delta):
|
||||
if(discord_sdk.get_is_discord_working()):
|
||||
$AnimatedSprite2D.play(\"default\")
|
||||
if(DiscordSDK.get_is_discord_working()):
|
||||
$Panel/TextureRect.self_modulate = Color(\"#3eff8d\")
|
||||
$Panel/TextureRect/AnimationPlayer.play(\"pulsate\")
|
||||
debug_text_update()
|
||||
else:
|
||||
$AnimatedSprite2D.stop()
|
||||
$AnimatedSprite2D.animation = \"gray\"
|
||||
$Panel/TextureRect.self_modulate = Color(\"#797979\")
|
||||
$Panel/TextureRect/AnimationPlayer.stop()
|
||||
debug_text_update()
|
||||
|
||||
|
||||
func debug_text_update():
|
||||
$Info.text = \"Application ID : {id}
|
||||
$Panel/Info.text = \"Application ID : {id}
|
||||
Details: {details}
|
||||
State: {state}
|
||||
|
||||
@@ -41,7 +45,7 @@ Is party public: {ppublic} (needs to be activated in Discord client settings)
|
||||
|
||||
Is instanced: {instanced}
|
||||
\"
|
||||
$Info.text = $Info.text.replace(\"{ppublic}\",str(discord_sdk.is_public_party)).replace(\"{instanced}\",str(discord_sdk.instanced)).replace(\"{ssecret}\",discord_sdk.spectate_secret).replace(\"{jsecret}\",discord_sdk.join_secret).replace(\"{msecret}\",discord_sdk.match_secret).replace(\"{mpartysize}\",str(discord_sdk.max_party_size)).replace(\"{cpartysize}\",str(discord_sdk.current_party_size)).replace(\"{partyid}\",discord_sdk.party_id).replace(\"{id}\",str(discord_sdk.app_id)).replace(\"{details}\",discord_sdk.details).replace(\"{state}\",discord_sdk.state).replace(\"{lkey}\",discord_sdk.large_image).replace(\"{ltext}\",discord_sdk.large_image_text).replace(\"{skey}\",discord_sdk.small_image).replace(\"{stext}\",discord_sdk.small_image_text).replace(\"{stimestamp}\",str(discord_sdk.start_timestamp)).replace(\"{etimestamp}\",str(discord_sdk.end_timestamp))
|
||||
$Panel/Info.text = $Panel/Info.text.replace(\"{ppublic}\",str(DiscordSDK.is_public_party)).replace(\"{instanced}\",str(DiscordSDK.instanced)).replace(\"{ssecret}\",DiscordSDK.spectate_secret).replace(\"{jsecret}\",DiscordSDK.join_secret).replace(\"{msecret}\",DiscordSDK.match_secret).replace(\"{mpartysize}\",str(DiscordSDK.max_party_size)).replace(\"{cpartysize}\",str(DiscordSDK.current_party_size)).replace(\"{partyid}\",DiscordSDK.party_id).replace(\"{id}\",str(DiscordSDK.app_id)).replace(\"{details}\",DiscordSDK.details).replace(\"{state}\",DiscordSDK.state).replace(\"{lkey}\",DiscordSDK.large_image).replace(\"{ltext}\",DiscordSDK.large_image_text).replace(\"{skey}\",DiscordSDK.small_image).replace(\"{stext}\",DiscordSDK.small_image_text).replace(\"{stimestamp}\",str(DiscordSDK.start_timestamp)).replace(\"{etimestamp}\",str(DiscordSDK.end_timestamp))
|
||||
|
||||
var user_request = {};
|
||||
|
||||
@@ -49,504 +53,87 @@ func _on_activity_join_request(user_requesting):
|
||||
print(user_requesting)
|
||||
user_request = user_requesting
|
||||
|
||||
func _on_button_pressed():
|
||||
func _on_accept_join_request_pressed():
|
||||
if(!user_request.is_empty()):
|
||||
discord_sdk.accept_join_request(user_request.id)
|
||||
DiscordSDK.accept_join_request(user_request.id)
|
||||
|
||||
func _on_line_edit_text_submitted(new_text):
|
||||
discord_sdk.send_invite(int(new_text),true,\"this is a test invite sent from godot\")
|
||||
func _on_invite_with_user_id_text_submitted(new_text):
|
||||
DiscordSDK.send_invite(int(new_text),true,\"this is a test invite sent from godot\")
|
||||
|
||||
func _on_line_edit_2_text_submitted(new_text):
|
||||
discord_sdk.accept_invite(int(new_text))
|
||||
func _on_accept_with_user_id_text_submitted(new_text):
|
||||
DiscordSDK.accept_invite(int(new_text))
|
||||
|
||||
func _on_button_2_pressed():
|
||||
print(discord_sdk.get_current_user())
|
||||
func _on_print_current_user_on_console_pressed():
|
||||
print(DiscordSDK.get_current_user())
|
||||
|
||||
func _on_check_button_toggled(button_pressed):
|
||||
func _on_toggle_sdk_toggled(button_pressed):
|
||||
if(button_pressed):
|
||||
debug_text_update()
|
||||
DiscordSDK.unclear()
|
||||
else:
|
||||
discord_sdk.clear()
|
||||
debug_text_update()
|
||||
DiscordSDK.clear(false)
|
||||
|
||||
func _on_print_friends_pressed():
|
||||
print(DiscordSDK.get_all_relationships())
|
||||
"
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_85oj4"]
|
||||
atlas = ExtResource("4_gvc3o")
|
||||
region = Rect2(512, 0, 512, 512)
|
||||
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_8abo6"]
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_vv4mb"]
|
||||
atlas = ExtResource("4_gvc3o")
|
||||
region = Rect2(1024, 0, 512, 512)
|
||||
[sub_resource type="Animation" id="Animation_mmtmn"]
|
||||
length = 0.001
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath(".:scale")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0.4),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Vector2(0.5, 0.5)]
|
||||
}
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_kwv3j"]
|
||||
atlas = ExtResource("4_gvc3o")
|
||||
region = Rect2(1536, 0, 512, 512)
|
||||
[sub_resource type="Animation" id="Animation_5u02v"]
|
||||
resource_name = "pulsate"
|
||||
loop_mode = 1
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath(".:scale")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 0.5, 1),
|
||||
"transitions": PackedFloat32Array(1, 1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector2(0.5, 0.5), Vector2(0.8, 0.8), Vector2(0.5, 0.5)]
|
||||
}
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_ij57t"]
|
||||
atlas = ExtResource("4_gvc3o")
|
||||
region = Rect2(2048, 0, 512, 512)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_w2du1"]
|
||||
atlas = ExtResource("4_gvc3o")
|
||||
region = Rect2(0, 512, 512, 512)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_4pma1"]
|
||||
atlas = ExtResource("4_gvc3o")
|
||||
region = Rect2(512, 512, 512, 512)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_fcoqp"]
|
||||
atlas = ExtResource("4_gvc3o")
|
||||
region = Rect2(1024, 512, 512, 512)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_tjcb7"]
|
||||
atlas = ExtResource("4_gvc3o")
|
||||
region = Rect2(1536, 512, 512, 512)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_oudh8"]
|
||||
atlas = ExtResource("4_gvc3o")
|
||||
region = Rect2(2048, 512, 512, 512)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_csja0"]
|
||||
atlas = ExtResource("4_gvc3o")
|
||||
region = Rect2(0, 1024, 512, 512)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_0xbpk"]
|
||||
atlas = ExtResource("4_gvc3o")
|
||||
region = Rect2(512, 1024, 512, 512)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_p84pv"]
|
||||
atlas = ExtResource("4_gvc3o")
|
||||
region = Rect2(1024, 1024, 512, 512)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_1gjwh"]
|
||||
atlas = ExtResource("4_gvc3o")
|
||||
region = Rect2(1536, 1024, 512, 512)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_mrm73"]
|
||||
atlas = ExtResource("4_gvc3o")
|
||||
region = Rect2(2048, 1024, 512, 512)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_8rkne"]
|
||||
atlas = ExtResource("4_gvc3o")
|
||||
region = Rect2(0, 1536, 512, 512)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_c15qo"]
|
||||
atlas = ExtResource("4_gvc3o")
|
||||
region = Rect2(512, 1536, 512, 512)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_74tpk"]
|
||||
atlas = ExtResource("4_gvc3o")
|
||||
region = Rect2(1024, 1536, 512, 512)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_v5nxq"]
|
||||
atlas = ExtResource("4_gvc3o")
|
||||
region = Rect2(1536, 1536, 512, 512)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_0mf44"]
|
||||
atlas = ExtResource("4_gvc3o")
|
||||
region = Rect2(2048, 1536, 512, 512)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_kb0hn"]
|
||||
atlas = ExtResource("4_gvc3o")
|
||||
region = Rect2(0, 2048, 512, 512)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_o22ug"]
|
||||
atlas = ExtResource("4_gvc3o")
|
||||
region = Rect2(512, 2048, 512, 512)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_21q7w"]
|
||||
atlas = ExtResource("4_gvc3o")
|
||||
region = Rect2(1024, 2048, 512, 512)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_gitfl"]
|
||||
atlas = ExtResource("4_gvc3o")
|
||||
region = Rect2(1536, 2048, 512, 512)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_8hg1o"]
|
||||
atlas = ExtResource("4_gvc3o")
|
||||
region = Rect2(2048, 2048, 512, 512)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_niuoc"]
|
||||
atlas = ExtResource("4_gvc3o")
|
||||
region = Rect2(0, 2560, 512, 512)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_mt5ft"]
|
||||
atlas = ExtResource("4_gvc3o")
|
||||
region = Rect2(512, 2560, 512, 512)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_ub7uo"]
|
||||
atlas = ExtResource("4_gvc3o")
|
||||
region = Rect2(1024, 2560, 512, 512)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_2uxnl"]
|
||||
atlas = ExtResource("4_gvc3o")
|
||||
region = Rect2(1536, 2560, 512, 512)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_bh4ts"]
|
||||
atlas = ExtResource("4_gvc3o")
|
||||
region = Rect2(2048, 2560, 512, 512)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_lcu0i"]
|
||||
atlas = ExtResource("4_gvc3o")
|
||||
region = Rect2(0, 3072, 512, 512)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_mmqt1"]
|
||||
atlas = ExtResource("4_gvc3o")
|
||||
region = Rect2(512, 3072, 512, 512)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_orode"]
|
||||
atlas = ExtResource("4_gvc3o")
|
||||
region = Rect2(1024, 3072, 512, 512)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_ricn8"]
|
||||
atlas = ExtResource("4_gvc3o")
|
||||
region = Rect2(1536, 3072, 512, 512)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_6ftll"]
|
||||
atlas = ExtResource("4_gvc3o")
|
||||
region = Rect2(2048, 3072, 512, 512)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_fm4jy"]
|
||||
atlas = ExtResource("4_gvc3o")
|
||||
region = Rect2(0, 3584, 512, 512)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_7qcot"]
|
||||
atlas = ExtResource("4_gvc3o")
|
||||
region = Rect2(512, 3584, 512, 512)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_2y47g"]
|
||||
atlas = ExtResource("4_gvc3o")
|
||||
region = Rect2(1024, 3584, 512, 512)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_gpr0t"]
|
||||
atlas = ExtResource("4_gvc3o")
|
||||
region = Rect2(1536, 3584, 512, 512)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_nn332"]
|
||||
atlas = ExtResource("4_gvc3o")
|
||||
region = Rect2(2048, 3584, 512, 512)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_jg384"]
|
||||
atlas = ExtResource("4_gvc3o")
|
||||
region = Rect2(0, 4096, 512, 512)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_g0wvw"]
|
||||
atlas = ExtResource("4_gvc3o")
|
||||
region = Rect2(512, 4096, 512, 512)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_e6fmf"]
|
||||
atlas = ExtResource("4_gvc3o")
|
||||
region = Rect2(1024, 4096, 512, 512)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_n1rtv"]
|
||||
atlas = ExtResource("4_gvc3o")
|
||||
region = Rect2(1536, 4096, 512, 512)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_365g3"]
|
||||
atlas = ExtResource("4_gvc3o")
|
||||
region = Rect2(2048, 4096, 512, 512)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_frkrx"]
|
||||
atlas = ExtResource("4_gvc3o")
|
||||
region = Rect2(0, 4608, 512, 512)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_j8adw"]
|
||||
atlas = ExtResource("4_gvc3o")
|
||||
region = Rect2(512, 4608, 512, 512)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_76fh7"]
|
||||
atlas = ExtResource("4_gvc3o")
|
||||
region = Rect2(1024, 4608, 512, 512)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_gmmrx"]
|
||||
atlas = ExtResource("4_gvc3o")
|
||||
region = Rect2(1536, 4608, 512, 512)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_rlh42"]
|
||||
atlas = ExtResource("4_gvc3o")
|
||||
region = Rect2(2048, 4608, 512, 512)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_wijf7"]
|
||||
atlas = ExtResource("4_gvc3o")
|
||||
region = Rect2(0, 5120, 512, 512)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_2n5hs"]
|
||||
atlas = ExtResource("4_gvc3o")
|
||||
region = Rect2(512, 5120, 512, 512)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_yrp6k"]
|
||||
atlas = ExtResource("4_gvc3o")
|
||||
region = Rect2(1024, 5120, 512, 512)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_w411h"]
|
||||
atlas = ExtResource("4_gvc3o")
|
||||
region = Rect2(1536, 5120, 512, 512)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_pe7po"]
|
||||
atlas = ExtResource("4_gvc3o")
|
||||
region = Rect2(2048, 5120, 512, 512)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_sr5kq"]
|
||||
atlas = ExtResource("4_gvc3o")
|
||||
region = Rect2(0, 5632, 512, 512)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_kgesr"]
|
||||
atlas = ExtResource("4_gvc3o")
|
||||
region = Rect2(512, 5632, 512, 512)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_vfk6x"]
|
||||
atlas = ExtResource("4_gvc3o")
|
||||
region = Rect2(1024, 5632, 512, 512)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_4d1t3"]
|
||||
atlas = ExtResource("4_gvc3o")
|
||||
region = Rect2(1536, 5632, 512, 512)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_6bexm"]
|
||||
atlas = ExtResource("4_gvc3o")
|
||||
region = Rect2(2048, 5632, 512, 512)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_tadlo"]
|
||||
atlas = ExtResource("4_gvc3o")
|
||||
region = Rect2(0, 6144, 512, 512)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_g2h20"]
|
||||
atlas = ExtResource("4_gvc3o")
|
||||
region = Rect2(512, 6144, 512, 512)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_x351d"]
|
||||
atlas = ExtResource("4_gvc3o")
|
||||
region = Rect2(1024, 6144, 512, 512)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_0jq3r"]
|
||||
atlas = ExtResource("4_gvc3o")
|
||||
region = Rect2(1536, 6144, 512, 512)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_1eeyl"]
|
||||
atlas = ExtResource("4_gvc3o")
|
||||
region = Rect2(0, 0, 512, 512)
|
||||
|
||||
[sub_resource type="SpriteFrames" id="SpriteFrames_kudgl"]
|
||||
animations = [{
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_85oj4")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_vv4mb")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_kwv3j")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_ij57t")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_w2du1")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_4pma1")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_fcoqp")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_tjcb7")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_oudh8")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_csja0")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_0xbpk")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_p84pv")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_1gjwh")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_mrm73")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_8rkne")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_c15qo")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_74tpk")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_v5nxq")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_0mf44")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_kb0hn")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_o22ug")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_21q7w")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_gitfl")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_8hg1o")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_niuoc")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_mt5ft")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_ub7uo")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_2uxnl")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_bh4ts")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_lcu0i")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_mmqt1")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_orode")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_ricn8")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_6ftll")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_fm4jy")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_7qcot")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_2y47g")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_gpr0t")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_nn332")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_jg384")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_g0wvw")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_e6fmf")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_n1rtv")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_365g3")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_frkrx")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_j8adw")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_76fh7")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_gmmrx")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_rlh42")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_wijf7")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_2n5hs")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_yrp6k")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_w411h")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_pe7po")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_sr5kq")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_kgesr")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_vfk6x")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_4d1t3")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_6bexm")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_tadlo")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_g2h20")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_x351d")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_0jq3r")
|
||||
}],
|
||||
"loop": true,
|
||||
"name": &"default",
|
||||
"speed": 30.0
|
||||
}, {
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_1eeyl")
|
||||
}],
|
||||
"loop": true,
|
||||
"name": &"gray",
|
||||
"speed": 5.0
|
||||
}]
|
||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_a7ofc"]
|
||||
_data = {
|
||||
"RESET": SubResource("Animation_mmtmn"),
|
||||
"pulsate": SubResource("Animation_5u02v")
|
||||
}
|
||||
|
||||
[node name="DebugNodeGroup" type="Node"]
|
||||
editor_description = "This is a Debug Node wich will show (only if the project runs) some usefull info and buttons/input"
|
||||
script = SubResource("GDScript_ak1tp")
|
||||
|
||||
[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."]
|
||||
position = Vector2(389, 477.375)
|
||||
scale = Vector2(0.14209, 0.14209)
|
||||
sprite_frames = SubResource("SpriteFrames_kudgl")
|
||||
frame_progress = 0.417812
|
||||
[node name="Panel" type="Panel" parent="."]
|
||||
anchors_preset = -1
|
||||
anchor_right = 0.373
|
||||
anchor_bottom = 1.0
|
||||
offset_left = -5.0
|
||||
offset_right = 0.303955
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="Info" type="RichTextLabel" parent="."]
|
||||
offset_left = 7.0
|
||||
offset_top = 6.0
|
||||
offset_right = 424.0
|
||||
offset_bottom = 312.0
|
||||
[node name="Info" type="RichTextLabel" parent="Panel"]
|
||||
layout_mode = 0
|
||||
offset_left = 12.0
|
||||
offset_top = 21.0
|
||||
offset_right = 429.0
|
||||
offset_bottom = 461.0
|
||||
theme_override_font_sizes/normal_font_size = 14
|
||||
text = "Application ID : {id}
|
||||
Details: {details}
|
||||
@@ -572,52 +159,109 @@ Is instanced: {instanced}
|
||||
"
|
||||
fit_content = true
|
||||
|
||||
[node name="PrintCurrentUserOnConsole" type="Button" parent="."]
|
||||
[node name="PrintCurrentUserOnConsole" type="Button" parent="Panel"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 4
|
||||
anchor_top = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_left = 7.0
|
||||
offset_top = 141.375
|
||||
offset_right = 240.0
|
||||
offset_bottom = 174.375
|
||||
offset_left = 12.0
|
||||
offset_top = 138.375
|
||||
offset_right = 245.0
|
||||
offset_bottom = 171.375
|
||||
grow_vertical = 2
|
||||
text = "Print current user on console"
|
||||
|
||||
[node name="AcceptInviteRequest" type="Button" parent="."]
|
||||
[node name="PrintFriends" type="Button" parent="Panel"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 4
|
||||
anchor_top = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_left = 7.0
|
||||
offset_top = 178.875
|
||||
offset_right = 149.0
|
||||
offset_bottom = 209.875
|
||||
offset_left = 12.0
|
||||
offset_top = 176.5
|
||||
offset_right = 204.0
|
||||
offset_bottom = 207.5
|
||||
grow_vertical = 2
|
||||
text = "Print friends on console"
|
||||
|
||||
[node name="AcceptJoinRequest" type="Button" parent="Panel"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 4
|
||||
anchor_top = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_left = 12.0
|
||||
offset_top = 212.875
|
||||
offset_right = 154.0
|
||||
offset_bottom = 243.875
|
||||
grow_vertical = 2
|
||||
text = "ACCEPT REQUEST"
|
||||
|
||||
[node name="InviteWithUserID" type="LineEdit" parent="."]
|
||||
[node name="InviteWithUserID" type="LineEdit" parent="Panel"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 4
|
||||
anchor_top = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_left = 6.0
|
||||
offset_top = 215.375
|
||||
offset_right = 205.0
|
||||
offset_bottom = 246.375
|
||||
offset_left = 11.0
|
||||
offset_top = 250.375
|
||||
offset_right = 210.0
|
||||
offset_bottom = 281.375
|
||||
grow_vertical = 2
|
||||
size_flags_horizontal = 0
|
||||
placeholder_text = "Invite with user_id here"
|
||||
|
||||
[node name="AcceptWithUserID" type="LineEdit" parent="."]
|
||||
[node name="AcceptWithUserID" type="LineEdit" parent="Panel"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 4
|
||||
anchor_top = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_left = 6.0
|
||||
offset_top = 250.875
|
||||
offset_right = 255.0
|
||||
offset_bottom = 281.875
|
||||
offset_left = 11.0
|
||||
offset_top = 286.875
|
||||
offset_right = 260.0
|
||||
offset_bottom = 317.875
|
||||
grow_vertical = 2
|
||||
placeholder_text = "Accept Invite with user_id here"
|
||||
|
||||
[connection signal="pressed" from="PrintCurrentUserOnConsole" to="." method="_on_button_2_pressed"]
|
||||
[connection signal="pressed" from="AcceptInviteRequest" to="." method="_on_button_pressed"]
|
||||
[connection signal="text_submitted" from="InviteWithUserID" to="." method="_on_line_edit_text_submitted"]
|
||||
[connection signal="text_submitted" from="AcceptWithUserID" to="." method="_on_line_edit_2_text_submitted"]
|
||||
[node name="ToggleSDK" type="CheckButton" parent="Panel"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 4
|
||||
anchor_top = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_left = 298.0
|
||||
offset_top = 157.375
|
||||
offset_right = 1144.0
|
||||
offset_bottom = 665.375
|
||||
grow_vertical = 2
|
||||
scale = Vector2(0.05, 0.05)
|
||||
theme_override_icons/checked = ExtResource("2_q6tao")
|
||||
theme_override_icons/unchecked = ExtResource("3_5cyem")
|
||||
theme_override_styles/focus = SubResource("StyleBoxEmpty_8abo6")
|
||||
button_pressed = true
|
||||
|
||||
[node name="TextureRect" type="TextureRect" parent="Panel"]
|
||||
self_modulate = Color(0.47451, 0.47451, 0.47451, 1)
|
||||
layout_mode = 1
|
||||
anchors_preset = -1
|
||||
anchor_left = 0.88
|
||||
anchor_top = 0.762
|
||||
anchor_right = 0.88
|
||||
anchor_bottom = 0.762
|
||||
offset_left = -28.8
|
||||
offset_top = -28.776
|
||||
offset_right = 28.0841
|
||||
offset_bottom = 28.1082
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
scale = Vector2(0.5, 0.5)
|
||||
pivot_offset = Vector2(29.0693, 29.0693)
|
||||
texture = ExtResource("3_goflf")
|
||||
|
||||
[node name="AnimationPlayer" type="AnimationPlayer" parent="Panel/TextureRect"]
|
||||
libraries = {
|
||||
"": SubResource("AnimationLibrary_a7ofc")
|
||||
}
|
||||
|
||||
[connection signal="pressed" from="Panel/PrintCurrentUserOnConsole" to="." method="_on_print_current_user_on_console_pressed"]
|
||||
[connection signal="pressed" from="Panel/PrintFriends" to="." method="_on_print_friends_pressed"]
|
||||
[connection signal="pressed" from="Panel/AcceptJoinRequest" to="." method="_on_accept_join_request_pressed"]
|
||||
[connection signal="text_submitted" from="Panel/InviteWithUserID" to="." method="_on_invite_with_user_id_text_submitted"]
|
||||
[connection signal="text_submitted" from="Panel/AcceptWithUserID" to="." method="_on_accept_with_user_id_text_submitted"]
|
||||
[connection signal="toggled" from="Panel/ToggleSDK" to="." method="_on_toggle_sdk_toggled"]
|
||||
|
@@ -1,4 +0,0 @@
|
||||
<svg width="16" height="14" viewBox="0 0 16 14" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M1.35776 4.35954C0.15745 6.80425 -0.158183 9.20437 0.0679444 11.5772C1.29133 12.4811 2.66066 13.1685 4.11639 13.6096C4.44417 13.1687 4.73422 12.701 4.98346 12.2115C4.51007 12.0346 4.05317 11.8165 3.61804 11.5596C3.73256 11.4765 3.84456 11.3909 3.95279 11.3079C5.21891 11.9033 6.60083 12.212 7.99997 12.212C9.39912 12.212 10.781 11.9033 12.0472 11.3079C12.1566 11.3972 12.2686 11.4828 12.3819 11.5596C11.9459 11.8169 11.4882 12.0355 11.014 12.2127C11.2629 12.7021 11.553 13.1694 11.881 13.6096C13.338 13.1703 14.7084 12.4832 15.932 11.5785C16.1887 8.91658 15.71 6.52885 14.6441 4.35954H1.35776ZM3.90119 8.15294C3.90119 9.03386 4.55307 9.74992 5.34212 9.74992C6.14627 9.74992 6.76795 9.03386 6.78179 8.15294C6.79563 7.27203 6.14879 6.54967 5.3396 6.54967C4.53042 6.54967 3.90119 7.27203 3.90119 8.15294ZM9.21815 8.15294C9.21815 9.03386 9.86752 9.74992 10.6578 9.74992C11.462 9.74992 12.0824 9.03386 12.0962 8.15294C12.1101 7.27203 11.4683 6.54967 10.6578 6.54967C9.84738 6.54967 9.21815 7.27203 9.21815 8.15294Z" fill="#5865F2"/>
|
||||
<path d="M4.31337 0.711094C4.97409 0.378693 5.67883 0.1583 6.39124 0C6.67624 0.478046 6.93634 0.995727 7.16285 1.50181C7.43169 1.45692 7.70147 1.4403 7.97234 1.43708V1.43666C7.97402 1.43666 7.97578 1.43708 7.97746 1.43708C7.97907 1.43708 7.98082 1.43666 7.98271 1.43666V1.43708C8.25308 1.4403 8.5231 1.45692 8.79187 1.50181C9.01852 0.995727 9.27877 0.478046 9.56334 0C10.2761 0.1583 10.9807 0.378693 11.6415 0.711094C11.6264 1.29423 11.5887 1.85296 11.5124 2.42051C11.7685 2.58482 12.0385 2.72584 12.2781 2.91819C12.522 3.10544 12.7702 3.28458 12.9907 3.50357C13.4312 3.21235 13.8976 2.93868 14.3777 2.6971C14.8955 3.25402 15.3798 3.85511 15.7752 4.52774C15.5165 4.9441 15.1789 5.43899 14.8223 5.88763H1.13254C0.823832 5.50544 0.490472 5.01534 0.179688 4.52774C0.575141 3.85511 1.05924 3.25402 1.57697 2.6971C2.05728 2.93868 2.52351 3.21235 2.96401 3.50357C3.18451 3.28458 3.43322 3.10544 3.67673 2.91819C3.9164 2.72584 4.18607 2.58482 4.44266 2.42051C4.3662 1.85296 4.32848 1.29423 4.31337 0.711094Z" fill="#5865F2"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 2.1 KiB |
11
project/addons/discord-sdk-gd/nodes/assets/circle.svg
Normal file
@@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg id="Ebene_1" data-name="Ebene 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 44.72 44.72">
|
||||
<defs>
|
||||
<style>
|
||||
.cls-1 {
|
||||
fill: #fff;
|
||||
}
|
||||
</style>
|
||||
</defs>
|
||||
<circle class="cls-1" cx="22.36" cy="22.36" r="22.36"/>
|
||||
</svg>
|
After Width: | Height: | Size: 290 B |
@@ -2,16 +2,16 @@
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://c70jidlptani4"
|
||||
path="res://.godot/imported/Group_1.svg-8cf36058739c5884a9a47a4dfa7d001a.ctex"
|
||||
uid="uid://dtc6ckladq0td"
|
||||
path="res://.godot/imported/circle.svg-ca71b895eb1c5e7e6f2f2afe081d28dd.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://addons/discord-sdk-gd/nodes/assets/Group_1.svg"
|
||||
dest_files=["res://.godot/imported/Group_1.svg-8cf36058739c5884a9a47a4dfa7d001a.ctex"]
|
||||
source_file="res://addons/discord-sdk-gd/nodes/assets/circle.svg"
|
||||
dest_files=["res://.godot/imported/circle.svg-ca71b895eb1c5e7e6f2f2afe081d28dd.ctex"]
|
||||
|
||||
[params]
|
||||
|
Before Width: | Height: | Size: 272 KiB |
@@ -1,12 +0,0 @@
|
||||
## [color=yellow]PLEASE IGNORE![/color] This is a important Node wich gets automatically added as Singleton.
|
||||
##
|
||||
## The DiscordSDKLoader Node automatically gets added as Singleton while installing the addon.
|
||||
## It has to run in the background to comunicate with Discord.
|
||||
## You don't need to use it.
|
||||
##
|
||||
## @tutorial: https://github.com/vaporvee/discord-sdk-godot/wiki
|
||||
class_name core_updater
|
||||
extends Node
|
||||
|
||||
func _process(delta) -> void:
|
||||
discord_sdk.coreupdate()
|
@@ -3,6 +3,7 @@
|
||||
## The DiscordSDK Debug Node will show info about the current values of its variables and some buttons to change them.
|
||||
##
|
||||
## @tutorial: https://github.com/vaporvee/discord-sdk-godot/wiki
|
||||
@tool
|
||||
extends Node
|
||||
|
||||
func _ready() -> void:
|
||||
|
23
project/addons/discord-sdk-gd/nodes/discord_autoload.gd
Normal file
@@ -0,0 +1,23 @@
|
||||
## This is a GDscript Node wich gets automatically added as Autoload while installing the addon.
|
||||
##
|
||||
## It can run in the background to comunicate with Discord.
|
||||
## You don't need to use it unless you are using EditorPresence. If you remove it make sure to run [code]DiscordSDK.run_callbacks()[/code] in a [code]_process[/code] function.
|
||||
##
|
||||
## @tutorial: https://github.com/vaporvee/discord-sdk-godot/wiki
|
||||
@tool
|
||||
extends Node
|
||||
class_name DiscordSDKLoaderAutoload
|
||||
|
||||
func _process(_delta) -> void:
|
||||
if GDExtensionManager.get_loaded_extensions().has("res://addons/discord-sdk-gd/bin/discord-rpc-gd.gdextension"):
|
||||
if ProjectSettings.get_setting("DiscordSDK/EditorPresence/enabled",false) && Engine.is_editor_hint():
|
||||
if DiscordSDK.app_id != 1108142249990176808:
|
||||
DiscordSDK.app_id = 1108142249990176808
|
||||
DiscordSDK.details = ProjectSettings.get_setting("application/config/name")
|
||||
DiscordSDK.state = "Editing: \""+ str(get_tree().edited_scene_root.scene_file_path).replace("res://","") +"\""
|
||||
DiscordSDK.large_image = "godot"
|
||||
DiscordSDK.large_image_text = str(Engine.get_version_info().string)
|
||||
DiscordSDK.start_timestamp = int(Time.get_unix_time_from_system())
|
||||
DiscordSDK.refresh()
|
||||
if DiscordSDK.app_id == 1108142249990176808 || !Engine.is_editor_hint():
|
||||
DiscordSDK.run_callbacks()
|
@@ -3,5 +3,5 @@
|
||||
name="DiscordSDK"
|
||||
description="Discord Game SDK support for GDScript in Godot"
|
||||
author="vaporvee"
|
||||
version="2.2"
|
||||
version="1.0.0"
|
||||
script="plugin.gd"
|
||||
|
@@ -2,40 +2,35 @@
|
||||
extends EditorPlugin
|
||||
|
||||
const DiscordSDKDebug = preload("res://addons/discord-sdk-gd/nodes/debug.gd")
|
||||
const DiscordSDKDebug_icon = preload("res://addons/discord-sdk-gd/nodes/assets/Debug.svg")
|
||||
const DiscordSDKDebug_icon = preload("res://addons/discord-sdk-gd/Debug.svg")
|
||||
var loaded_DiscordSDKDebug = DiscordSDKDebug.new()
|
||||
|
||||
|
||||
const ExportPlugin = preload("res://addons/discord-sdk-gd/export.gd")
|
||||
var loaded_exportplugin = ExportPlugin.new()
|
||||
|
||||
var restart_window: ConfirmationDialog = preload("res://addons/discord-sdk-gd/restart_window.tscn").instantiate()
|
||||
|
||||
func _enter_tree() -> void:
|
||||
add_custom_type("DiscordSDKDebug","Node",DiscordSDKDebug,DiscordSDKDebug_icon)
|
||||
add_autoload_singleton("DiscordSDKLoader", "res://addons/discord-sdk-gd/nodes/core_updater.gd")
|
||||
add_export_plugin(loaded_exportplugin)
|
||||
ProjectSettings.set_setting("DiscordSDK/EditorPresence/enabled",false)
|
||||
ProjectSettings.set_as_basic("DiscordSDK/EditorPresence/enabled",true)
|
||||
ProjectSettings.set_initial_value("DiscordSDK/EditorPresence/enabled",false)
|
||||
|
||||
func _enable_plugin() -> void:
|
||||
print("DiscordSDK Addon got enabled (PLEASE RESTART THE EDITOR)")
|
||||
ProjectSettings.set_setting("DiscordSDK/EditorPresence/enabled",false)
|
||||
ProjectSettings.set_initial_value("DiscordSDK/EditorPresence/enabled",false)
|
||||
ProjectSettings.set_restart_if_changed("DiscordSDK/EditorPresence/enabled",true)
|
||||
if FileAccess.file_exists(ProjectSettings.globalize_path("res://") + "addons/discord-sdk-gd/bin/.gdignore"):
|
||||
DirAccess.remove_absolute(ProjectSettings.globalize_path("res://") + "addons/discord-sdk-gd/bin/.gdignore")
|
||||
add_autoload_singleton("DiscordSDKAutoload","res://addons/discord-sdk-gd/nodes/discord_autoload.gd")
|
||||
restart_window.connect("confirmed", save_no_restart)
|
||||
restart_window.connect("canceled", save_and_restart)
|
||||
EditorInterface.popup_dialog_centered(restart_window)
|
||||
print("IGNORE THE RED ERROR MESSAGES BEFORE THE SECOND RESTART!")
|
||||
|
||||
func _disable_plugin() -> void:
|
||||
print("DiscordSDK Addon got disabled")
|
||||
remove_autoload_singleton("DiscordSDKLoader")
|
||||
remove_autoload_singleton("DiscordSDKAutoload")
|
||||
FileAccess.open("res://addons/discord-sdk-gd/bin/.gdignore",FileAccess.WRITE)
|
||||
remove_custom_type("DiscordSDKDebug")
|
||||
ProjectSettings.clear("DiscordSDK/EditorPresence/enabled")
|
||||
push_warning("Please restart the editor to dully disable the DiscordSDK plugin")
|
||||
|
||||
func _process(_delta):
|
||||
if(ProjectSettings.get_setting("DiscordSDK/EditorPresence/enabled")&&!get_editor_interface().is_playing_scene()):
|
||||
if(discord_sdk.app_id != 1108142249990176808):
|
||||
discord_sdk.app_id = 1108142249990176808
|
||||
discord_sdk.details = ProjectSettings.get_setting("application/config/name")
|
||||
discord_sdk.state = "Editing: \""+ str(get_tree().edited_scene_root.scene_file_path).replace("res://","") +"\""
|
||||
discord_sdk.large_image = "godot"
|
||||
discord_sdk.large_image_text = str(Engine.get_version_info().string)
|
||||
discord_sdk.start_timestamp = int(Time.get_unix_time_from_system())
|
||||
discord_sdk.refresh()
|
||||
if(discord_sdk.app_id == 1108142249990176808):
|
||||
discord_sdk.coreupdate()
|
||||
func save_and_restart() -> void:
|
||||
EditorInterface.save_all_scenes()
|
||||
EditorInterface.restart_editor(true)
|
||||
|
||||
func save_no_restart() -> void:
|
||||
EditorInterface.restart_editor(false)
|
||||
|
128
project/addons/discord-sdk-gd/restart_window.tscn
Normal file
@@ -0,0 +1,128 @@
|
||||
[gd_scene load_steps=9 format=3 uid="uid://byc4c6d5tpomq"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://csl0e2px0cwc1" path="res://addons/discord-sdk-gd/Logo_V2_No_Bg.png" id="1_0svbg"]
|
||||
|
||||
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_1t7mm"]
|
||||
|
||||
[sub_resource type="Theme" id="Theme_swwco"]
|
||||
Button/styles/focus = SubResource("StyleBoxEmpty_1t7mm")
|
||||
|
||||
[sub_resource type="GDScript" id="GDScript_7v43l"]
|
||||
resource_name = "RestartWindow"
|
||||
script/source = "extends ConfirmationDialog
|
||||
|
||||
|
||||
func _ready():
|
||||
canceled.connect(_on_canceled)
|
||||
confirmed.connect(_on_confirmed)
|
||||
|
||||
func _on_canceled():
|
||||
EditorInterface.restart_editor(false)
|
||||
|
||||
func _on_confirmed():
|
||||
EditorInterface.restart_editor(true)
|
||||
"
|
||||
|
||||
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_5vqdt"]
|
||||
|
||||
[sub_resource type="Image" id="Image_wf00a"]
|
||||
data = {
|
||||
"data": PackedByteArray(255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 227, 227, 227, 36, 224, 224, 224, 168, 224, 224, 224, 233, 224, 224, 224, 236, 224, 224, 224, 170, 231, 231, 231, 31, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 227, 227, 227, 36, 224, 224, 224, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 239, 230, 230, 230, 30, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 224, 224, 224, 168, 224, 224, 224, 255, 224, 224, 224, 186, 224, 224, 224, 32, 224, 224, 224, 33, 224, 224, 224, 187, 224, 224, 224, 255, 225, 225, 225, 167, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 224, 224, 224, 237, 224, 224, 224, 255, 224, 224, 224, 33, 255, 255, 255, 0, 255, 255, 255, 0, 227, 227, 227, 36, 224, 224, 224, 255, 224, 224, 224, 234, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 224, 224, 224, 237, 224, 224, 224, 255, 224, 224, 224, 33, 255, 255, 255, 0, 255, 255, 255, 0, 229, 229, 229, 38, 224, 224, 224, 255, 224, 224, 224, 229, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 224, 224, 224, 164, 224, 224, 224, 255, 224, 224, 224, 187, 225, 225, 225, 34, 227, 227, 227, 36, 224, 224, 224, 192, 224, 224, 224, 255, 224, 224, 224, 162, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 224, 224, 224, 24, 225, 225, 225, 215, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 229, 224, 224, 224, 32, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 224, 224, 224, 24, 224, 224, 224, 216, 224, 224, 224, 255, 224, 224, 224, 210, 224, 224, 224, 161, 224, 224, 224, 232, 224, 224, 224, 231, 225, 225, 225, 159, 230, 230, 230, 30, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 224, 224, 224, 107, 224, 224, 224, 255, 224, 224, 224, 210, 230, 230, 230, 20, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 224, 224, 224, 105, 230, 230, 230, 20, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 221, 224, 224, 224, 130, 255, 255, 255, 1, 255, 255, 255, 1, 225, 225, 225, 134, 224, 224, 224, 224, 225, 225, 225, 223, 224, 224, 224, 132, 255, 255, 255, 1, 255, 255, 255, 6, 224, 224, 224, 137, 224, 224, 224, 231, 224, 224, 224, 255, 255, 255, 255, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 130, 225, 225, 225, 133, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 129, 224, 224, 224, 137, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 65, 224, 224, 224, 255, 224, 224, 224, 220, 225, 225, 225, 223, 224, 224, 224, 255, 226, 226, 226, 61, 224, 224, 224, 65, 224, 224, 224, 255, 224, 224, 224, 222, 224, 224, 224, 231, 224, 224, 224, 255, 227, 227, 227, 62, 255, 255, 255, 0, 255, 255, 255, 0, 224, 224, 224, 255, 224, 224, 224, 255, 225, 225, 225, 67, 224, 224, 224, 255, 224, 224, 224, 219, 224, 224, 224, 222, 224, 224, 224, 255, 227, 227, 227, 63, 225, 225, 225, 67, 224, 224, 224, 255, 224, 224, 224, 219, 224, 224, 224, 230, 224, 224, 224, 255, 227, 227, 227, 63, 255, 255, 255, 0, 255, 255, 255, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 225, 225, 225, 127, 224, 224, 224, 129, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 225, 225, 225, 126, 225, 225, 225, 135, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 221, 225, 225, 225, 127, 255, 255, 255, 0, 255, 255, 255, 1, 224, 224, 224, 128, 224, 224, 224, 220, 224, 224, 224, 219, 225, 225, 225, 127, 255, 255, 255, 0, 255, 255, 255, 5, 225, 225, 225, 134, 224, 224, 224, 229, 224, 224, 224, 255, 255, 255, 255, 0),
|
||||
"format": "RGBA8",
|
||||
"height": 16,
|
||||
"mipmaps": false,
|
||||
"width": 16
|
||||
}
|
||||
|
||||
[sub_resource type="ImageTexture" id="ImageTexture_gdtpn"]
|
||||
image = SubResource("Image_wf00a")
|
||||
|
||||
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_7v0rg"]
|
||||
|
||||
[node name="RestartWindow" type="ConfirmationDialog"]
|
||||
title = "Restart required"
|
||||
initial_position = 2
|
||||
size = Vector2i(430, 500)
|
||||
visible = true
|
||||
transient = false
|
||||
unresizable = true
|
||||
theme = SubResource("Theme_swwco")
|
||||
ok_button_text = "Restart"
|
||||
cancel_button_text = "Save and restart"
|
||||
script = SubResource("GDScript_7v43l")
|
||||
|
||||
[node name="Panel" type="Panel" parent="."]
|
||||
anchors_preset = 5
|
||||
anchor_left = 0.5
|
||||
anchor_right = 0.5
|
||||
offset_left = 8.0
|
||||
offset_top = 8.0
|
||||
offset_right = 422.0
|
||||
offset_bottom = 451.0
|
||||
grow_horizontal = 2
|
||||
mouse_filter = 1
|
||||
|
||||
[node name="VBoxContainer" type="VBoxContainer" parent="Panel"]
|
||||
custom_minimum_size = Vector2(400, 0)
|
||||
layout_mode = 1
|
||||
anchors_preset = 5
|
||||
anchor_left = 0.5
|
||||
anchor_right = 0.5
|
||||
offset_left = -200.0
|
||||
offset_right = 200.0
|
||||
offset_bottom = 389.0
|
||||
grow_horizontal = 2
|
||||
|
||||
[node name="HSeparator" type="HSeparator" parent="Panel/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
mouse_filter = 1
|
||||
theme_override_constants/separation = 15
|
||||
theme_override_styles/separator = SubResource("StyleBoxEmpty_5vqdt")
|
||||
|
||||
[node name="HBoxContainer" type="HBoxContainer" parent="Panel/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 4
|
||||
size_flags_vertical = 4
|
||||
theme_override_constants/separation = 10
|
||||
|
||||
[node name="DocsIcon" type="TextureRect" parent="Panel/VBoxContainer/HBoxContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 8
|
||||
size_flags_vertical = 4
|
||||
texture = SubResource("ImageTexture_gdtpn")
|
||||
stretch_mode = 2
|
||||
|
||||
[node name="LinkButton" type="LinkButton" parent="Panel/VBoxContainer/HBoxContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 4
|
||||
size_flags_vertical = 8
|
||||
mouse_default_cursor_shape = 16
|
||||
theme_override_font_sizes/font_size = 24
|
||||
text = "HOW TO USE"
|
||||
uri = "https://github.com/vaporvee/discord-sdk-godot/wiki"
|
||||
|
||||
[node name="TextureRect" type="TextureRect" parent="Panel/VBoxContainer"]
|
||||
custom_minimum_size = Vector2(128, 128)
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 4
|
||||
size_flags_vertical = 0
|
||||
texture = ExtResource("1_0svbg")
|
||||
expand_mode = 1
|
||||
|
||||
[node name="RichTextLabel" type="RichTextLabel" parent="Panel/VBoxContainer"]
|
||||
custom_minimum_size = Vector2(400, 250)
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 4
|
||||
size_flags_vertical = 0
|
||||
mouse_filter = 1
|
||||
theme_override_font_sizes/normal_font_size = 16
|
||||
theme_override_styles/normal = SubResource("StyleBoxEmpty_7v0rg")
|
||||
bbcode_enabled = true
|
||||
text = "[center]Thanks for enabling the
|
||||
[rainbow][b]Discord Game SDK Plugin[/b][/rainbow]
|
||||
made by vaporvee. ❤️
|
||||
|
||||
|
||||
You need to [wave][b]restart[/b][/wave] the editor to fully enable this plugin!
|
||||
Do you want to [wave][b]save[/b][/wave] your project before restarting?
|
||||
(Error messages after the first restart are normal. Please ignore them)"
|
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 109 KiB |
Before Width: | Height: | Size: 209 KiB After Width: | Height: | Size: 444 KiB |
BIN
project/assets/GodotEditorPresenceBanner.png
Normal file
After Width: | Height: | Size: 367 KiB |
34
project/assets/GodotEditorPresenceBanner.png.import
Normal file
@@ -0,0 +1,34 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dp4u0g6gvyt0a"
|
||||
path="res://.godot/imported/GodotEditorPresenceBanner.png-5d1b012e64655706e9686e0163b65d30.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/GodotEditorPresenceBanner.png"
|
||||
dest_files=["res://.godot/imported/GodotEditorPresenceBanner.png-5d1b012e64655706e9686e0163b65d30.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
184
project/assets/GodotEditorPresenceBanner.svg
Normal file
After Width: | Height: | Size: 350 KiB |
37
project/assets/GodotEditorPresenceBanner.svg.import
Normal file
@@ -0,0 +1,37 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://08bj2tfacvhm"
|
||||
path="res://.godot/imported/GodotEditorPresenceBanner.svg-e0420faa20460520008caa2101993296.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/GodotEditorPresenceBanner.svg"
|
||||
dest_files=["res://.godot/imported/GodotEditorPresenceBanner.svg-e0420faa20460520008caa2101993296.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
svg/scale=1.0
|
||||
editor/scale_with_editor_scale=false
|
||||
editor/convert_colors_with_editor_theme=false
|
34
project/assets/Logo_V2_No_Bg_Small.png.import
Normal file
@@ -0,0 +1,34 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bjns3n0prshdy"
|
||||
path="res://.godot/imported/Logo_V2_No_Bg_Small.png-6c9c0ba88b8e0a9cb7aa1acb948a1191.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/Logo_V2_No_Bg_Small.png"
|
||||
dest_files=["res://.godot/imported/Logo_V2_No_Bg_Small.png-6c9c0ba88b8e0a9cb7aa1acb948a1191.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
@@ -8,18 +8,17 @@ custom_features=""
|
||||
export_filter="all_resources"
|
||||
include_filter=""
|
||||
exclude_filter=""
|
||||
export_path="../../uizkgiuzfv/discord_sdk_demo.exe"
|
||||
export_path="../../eexport/windows/discord-sdk-godot-demo.exe"
|
||||
encryption_include_filters=""
|
||||
encryption_exclude_filters=""
|
||||
encrypt_pck=false
|
||||
encrypt_directory=false
|
||||
script_encryption_key=""
|
||||
|
||||
[preset.0.options]
|
||||
|
||||
custom_template/debug=""
|
||||
custom_template/release=""
|
||||
debug/export_console_script=1
|
||||
debug/export_console_wrapper=1
|
||||
binary_format/embed_pck=true
|
||||
texture_format/bptc=true
|
||||
texture_format/s3tc=true
|
||||
@@ -27,9 +26,6 @@ texture_format/etc=false
|
||||
texture_format/etc2=false
|
||||
binary_format/architecture="x86_64"
|
||||
codesign/enable=false
|
||||
codesign/identity_type=0
|
||||
codesign/identity=""
|
||||
codesign/password=""
|
||||
codesign/timestamp=true
|
||||
codesign/timestamp_server_url=""
|
||||
codesign/digest_algorithm=1
|
||||
@@ -63,3 +59,43 @@ Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorActi
|
||||
ssh_remote_deploy/cleanup_script="Stop-ScheduledTask -TaskName godot_remote_debug -ErrorAction:SilentlyContinue
|
||||
Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue
|
||||
Remove-Item -Recurse -Force '{temp_dir}'"
|
||||
|
||||
[preset.1]
|
||||
|
||||
name="Linux/X11"
|
||||
platform="Linux/X11"
|
||||
runnable=true
|
||||
dedicated_server=false
|
||||
custom_features=""
|
||||
export_filter="all_resources"
|
||||
include_filter=""
|
||||
exclude_filter=""
|
||||
export_path="../../eexport/linux/discord-sdk-godot-demo.x86_64"
|
||||
encryption_include_filters=""
|
||||
encryption_exclude_filters=""
|
||||
encrypt_pck=false
|
||||
encrypt_directory=false
|
||||
|
||||
[preset.1.options]
|
||||
|
||||
custom_template/debug=""
|
||||
custom_template/release=""
|
||||
debug/export_console_wrapper=1
|
||||
binary_format/embed_pck=true
|
||||
texture_format/bptc=true
|
||||
texture_format/s3tc=true
|
||||
texture_format/etc=false
|
||||
texture_format/etc2=false
|
||||
binary_format/architecture="x86_64"
|
||||
ssh_remote_deploy/enabled=false
|
||||
ssh_remote_deploy/host="user@host_ip"
|
||||
ssh_remote_deploy/port="22"
|
||||
ssh_remote_deploy/extra_args_ssh=""
|
||||
ssh_remote_deploy/extra_args_scp=""
|
||||
ssh_remote_deploy/run_script="#!/usr/bin/env bash
|
||||
export DISPLAY=:0
|
||||
unzip -o -q \"{temp_dir}/{archive_name}\" -d \"{temp_dir}\"
|
||||
\"{temp_dir}/{exe_name}\" {cmd_args}"
|
||||
ssh_remote_deploy/cleanup_script="#!/usr/bin/env bash
|
||||
kill $(pgrep -x -f \"{temp_dir}/{exe_name} {cmd_args}\")
|
||||
rm -rf \"{temp_dir}\""
|
||||
|
@@ -2,38 +2,40 @@ extends Node
|
||||
|
||||
func _ready() -> void:
|
||||
set_activity()
|
||||
discord_sdk.connect("activity_join_request",_on_activity_join_request)
|
||||
discord_sdk.connect("activity_join",_on_activity_join)
|
||||
discord_sdk.connect("activity_spectate",_on_activity_spectate)
|
||||
DiscordSDK.connect("activity_join_request",_on_activity_join_request)
|
||||
DiscordSDK.connect("activity_join",_on_activity_join)
|
||||
DiscordSDK.connect("activity_spectate",_on_activity_spectate)
|
||||
DiscordSDK.connect("relationships_init",_on_relationship_init)
|
||||
DiscordSDK.connect("updated_relationship", _on_updated_relationship)
|
||||
|
||||
func set_activity() -> void:
|
||||
discord_sdk.clear()
|
||||
discord_sdk.app_id = 1099618430065324082
|
||||
discord_sdk.details = "A demo activity by vaporvee#1231"
|
||||
discord_sdk.state = "Checkpoint 23/23"
|
||||
DiscordSDK.clear(false)
|
||||
DiscordSDK.app_id = 1099618430065324082
|
||||
DiscordSDK.details = "A demo activity by vaporvee#1231"
|
||||
DiscordSDK.state = "Checkpoint 23/23"
|
||||
|
||||
discord_sdk.large_image = "example_game"
|
||||
discord_sdk.large_image_text = "Try it now!"
|
||||
discord_sdk.small_image = "boss"
|
||||
discord_sdk.small_image_text = "Fighting the end boss! D:"
|
||||
discord_sdk.end_timestamp = int(Time.get_unix_time_from_system()) + 3600 # +1 hour in unix time
|
||||
DiscordSDK.large_image = "example_game"
|
||||
DiscordSDK.large_image_text = "Try it now!"
|
||||
DiscordSDK.small_image = "boss"
|
||||
DiscordSDK.small_image_text = "Fighting the end boss! D:"
|
||||
DiscordSDK.end_timestamp = int(Time.get_unix_time_from_system()) + 3600 # +1 hour in unix time
|
||||
|
||||
# It is NOT recommended to manage secrets locally! It's meant to be a payload wich the server
|
||||
# understands and returns the other variables like current_party_size, party_id etc. Most of the values must differ from the others.
|
||||
# It is NOT recommended to manage secrets locally! It's meant to be a payload wich the server understands and
|
||||
# returns the other variables like current_party_size, party_id etc. Most of the values must differ from the others.
|
||||
var my_secret: String = str(randi_range(0,999999))
|
||||
|
||||
discord_sdk.party_id = "mylobbycanbeeverything_" + my_secret
|
||||
discord_sdk.current_party_size = 1
|
||||
discord_sdk.max_party_size = 4
|
||||
discord_sdk.match_secret = "m_" + my_secret #better use seeds with 1 to 1 range instead of just chars
|
||||
discord_sdk.join_secret = "j_" + my_secret
|
||||
discord_sdk.spectate_secret = "s_" + my_secret
|
||||
discord_sdk.is_public_party = true
|
||||
discord_sdk.instanced = true #required for spectate
|
||||
#discord_sdk.start_timestamp = int(Time.get_unix_time_from_system())
|
||||
discord_sdk.register_command("C:\\Users\\yanni\\Desktop\\demo\\discord_sdk.exe")
|
||||
#discord_sdk.register_steam(1389990)
|
||||
discord_sdk.refresh()
|
||||
DiscordSDK.party_id = "mylobbycanbeeverything_" + my_secret
|
||||
DiscordSDK.current_party_size = 1
|
||||
DiscordSDK.max_party_size = 4
|
||||
DiscordSDK.match_secret = "m_" + my_secret #better use seeds with 1 to 1 range instead of just chars
|
||||
DiscordSDK.join_secret = "j_" + my_secret
|
||||
DiscordSDK.spectate_secret = "s_" + my_secret
|
||||
DiscordSDK.is_public_party = true
|
||||
DiscordSDK.instanced = true #required for spectate
|
||||
#DiscordSDK.start_timestamp = int(Time.get_unix_time_from_system())
|
||||
DiscordSDK.register_command(r"C:\Users\yanni\Desktop\demo\DiscordSDK.exe")
|
||||
#DiscordSDK.register_steam(1389990)
|
||||
DiscordSDK.refresh()
|
||||
|
||||
var user_request: Dictionary;
|
||||
|
||||
@@ -42,19 +44,20 @@ func _on_activity_join_request(user_requesting) -> void:
|
||||
user_request = user_requesting
|
||||
|
||||
func _on_activity_join(secret) -> void:
|
||||
if(discord_sdk.join_secret != secret):
|
||||
discord_sdk.current_party_size = clamp(int(secret) + 1, 0, discord_sdk.max_party_size)
|
||||
discord_sdk.party_id = secret.replace("j_","mylobbycanbeeverything_")
|
||||
discord_sdk.match_secret = secret.replace("j_","m_")
|
||||
discord_sdk.join_secret = secret
|
||||
discord_sdk.spectate_secret = secret.replace("j_","s_")
|
||||
discord_sdk.refresh()
|
||||
if(DiscordSDK.join_secret != secret):
|
||||
DiscordSDK.current_party_size = clamp(int(secret) + 1, 0, DiscordSDK.max_party_size)
|
||||
DiscordSDK.party_id = secret.replace("j_","mylobbycanbeeverything_")
|
||||
DiscordSDK.match_secret = secret.replace("j_","m_")
|
||||
DiscordSDK.join_secret = secret
|
||||
DiscordSDK.spectate_secret = secret.replace("j_","s_")
|
||||
DiscordSDK.refresh()
|
||||
|
||||
func _on_activity_spectate(secret) -> void:
|
||||
print(secret)
|
||||
|
||||
func _on_toggle_sdk_toggled(button_pressed):
|
||||
if(button_pressed):
|
||||
set_activity()
|
||||
else:
|
||||
discord_sdk.clear()
|
||||
func _on_relationship_init():
|
||||
print("initialized")
|
||||
|
||||
func _on_updated_relationship(relationship):
|
||||
print(relationship)
|
||||
|
||||
|
@@ -1,13 +1,9 @@
|
||||
[gd_scene load_steps=7 format=3 uid="uid://dyc3kseph4el7"]
|
||||
[gd_scene load_steps=4 format=3 uid="uid://dyc3kseph4el7"]
|
||||
|
||||
[ext_resource type="Script" path="res://main.gd" id="1_kl8ri"]
|
||||
[ext_resource type="Texture2D" uid="uid://b3qm246m7pnsx" path="res://assets/Logo_V2.png" id="2_gd222"]
|
||||
[ext_resource type="Texture2D" uid="uid://dnfq6kug4x6o2" path="res://addons/discord-sdk-gd/nodes/assets/Checked.svg" id="3_wajuo"]
|
||||
[ext_resource type="Texture2D" uid="uid://compmm3kviqqe" path="res://addons/discord-sdk-gd/nodes/assets/Unchecked.svg" id="4_8hvtu"]
|
||||
[ext_resource type="Script" path="res://addons/discord-sdk-gd/nodes/debug.gd" id="6_ujijw"]
|
||||
|
||||
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_phc3u"]
|
||||
|
||||
[node name="Node" type="Node"]
|
||||
script = ExtResource("1_kl8ri")
|
||||
|
||||
@@ -23,7 +19,7 @@ color = Color(0.345098, 0.396078, 0.94902, 1)
|
||||
|
||||
[node name="Sprite2D" type="Sprite2D" parent="."]
|
||||
texture_filter = 4
|
||||
position = Vector2(580, 308)
|
||||
position = Vector2(789, 330.5)
|
||||
scale = Vector2(0.408203, 0.408203)
|
||||
texture = ExtResource("2_gd222")
|
||||
|
||||
@@ -33,10 +29,10 @@ anchor_left = 0.293
|
||||
anchor_top = 0.59
|
||||
anchor_right = 0.736
|
||||
anchor_bottom = 0.727
|
||||
offset_left = -0.536011
|
||||
offset_top = -0.319977
|
||||
offset_right = 0.12793
|
||||
offset_bottom = -0.0960388
|
||||
offset_left = 208.464
|
||||
offset_top = 22.18
|
||||
offset_right = 209.128
|
||||
offset_bottom = 22.4039
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
size_flags_horizontal = 4
|
||||
@@ -46,20 +42,3 @@ text = "[center][font s=60]DiscordSDK Test"
|
||||
|
||||
[node name="DiscordSDKDebug" type="Node" parent="."]
|
||||
script = ExtResource("6_ujijw")
|
||||
|
||||
[node name="ToggleSDK" type="CheckButton" parent="."]
|
||||
anchors_preset = 4
|
||||
anchor_top = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_left = 293.0
|
||||
offset_top = 142.375
|
||||
offset_right = 1139.0
|
||||
offset_bottom = 650.375
|
||||
grow_vertical = 2
|
||||
scale = Vector2(0.05, 0.05)
|
||||
theme_override_icons/checked = ExtResource("3_wajuo")
|
||||
theme_override_icons/unchecked = ExtResource("4_8hvtu")
|
||||
theme_override_styles/focus = SubResource("StyleBoxEmpty_phc3u")
|
||||
button_pressed = true
|
||||
|
||||
[connection signal="toggled" from="ToggleSDK" to="." method="_on_toggle_sdk_toggled"]
|
||||
|
@@ -8,15 +8,12 @@
|
||||
|
||||
config_version=5
|
||||
|
||||
[DiscordSDK]
|
||||
|
||||
EditorPresence/enabled=false
|
||||
|
||||
[application]
|
||||
|
||||
config/name="GDExtension DiscordSDK Test Project"
|
||||
config/tags=PackedStringArray("vaporvee")
|
||||
run/main_scene="res://main.tscn"
|
||||
config/features=PackedStringArray("4.0")
|
||||
config/features=PackedStringArray("4.2")
|
||||
boot_splash/bg_color=Color(0.25098, 0.305882, 0.929412, 1)
|
||||
boot_splash/image="res://assets/Banner_v1.png"
|
||||
boot_splash/fullsize=false
|
||||
@@ -24,7 +21,7 @@ config/icon="res://assets/Logo_V2.png"
|
||||
|
||||
[autoload]
|
||||
|
||||
DiscordSDKLoader="*res://addons/discord-sdk-gd/nodes/core_updater.gd"
|
||||
DiscordSDKAutoload="*res://addons/discord-sdk-gd/nodes/discord_autoload.gd"
|
||||
|
||||
[display]
|
||||
|
||||
|
14
release.py
@@ -2,10 +2,24 @@ import os
|
||||
from distutils.dir_util import copy_tree
|
||||
import shutil
|
||||
|
||||
folder_path = "project/addons/discord-sdk-gd/bin/windows"
|
||||
|
||||
# Filter files that end with 'TMP' or 'exp' or 'lib'
|
||||
matching_files = [
|
||||
file for file in os.listdir(folder_path) if file.endswith(("TMP", "exp", "lib"))
|
||||
]
|
||||
|
||||
for file in matching_files:
|
||||
file_path = os.path.join(folder_path, file)
|
||||
os.remove(file_path)
|
||||
|
||||
if os.path.exists("release/ADDON-Discord-SDK-Godot/addons"):
|
||||
shutil.rmtree("release/ADDON-Discord-SDK-Godot/addons", ignore_errors=True)
|
||||
|
||||
copy_tree("project/addons/", "release/temp/ADDON-Discord-SDK-Godot/addons")
|
||||
open(
|
||||
"release/temp/ADDON-Discord-SDK-Godot/addons/discord-sdk-gd/bin/.gdignore", "a"
|
||||
).close()
|
||||
|
||||
shutil.make_archive("release/ADDON-Discord-SDK-Godot", "zip", "release/temp/")
|
||||
|
||||
|
8
setup.py
@@ -6,6 +6,12 @@ import os
|
||||
with zipfile.ZipFile("src/lib/discord_game_sdk.zip", "r") as zip_ref:
|
||||
zip_ref.extractall("src/lib/discord_game_sdk/")
|
||||
|
||||
# Patch the SDK to actually build, since it's missing an include
|
||||
with open("src/lib/discord_game_sdk/cpp/types.h", "r+") as f:
|
||||
s = f.read()
|
||||
f.seek(0)
|
||||
f.write("#include <cstdint>\n" + s)
|
||||
|
||||
copy_tree("src/lib/discord_game_sdk/lib/", "src/lib/discord_game_sdk/bin/")
|
||||
os.rename(
|
||||
"src/lib/discord_game_sdk/bin/aarch64/discord_game_sdk.dylib",
|
||||
@@ -41,4 +47,4 @@ shutil.rmtree("src/lib/discord_game_sdk/bin/x86/", ignore_errors=True)
|
||||
shutil.rmtree("src/lib/discord_game_sdk/bin/x86_64/", ignore_errors=True)
|
||||
os.remove("src/lib/discord_game_sdk/README.md")
|
||||
|
||||
os.system("git submodule update --init")
|
||||
os.system("git submodule update --init --remote")
|
||||
|
@@ -1,139 +1,113 @@
|
||||
#include "discordgodot.h"
|
||||
#include "lib/discord_game_sdk/cpp/discord.h"
|
||||
#include <godot_cpp/core/class_db.hpp>
|
||||
#include <godot_cpp/classes/editor_plugin.hpp>
|
||||
#include <godot_cpp/variant/utility_functions.hpp>
|
||||
#include <godot_cpp/classes/time.hpp>
|
||||
|
||||
using namespace godot;
|
||||
|
||||
discord_sdk *discord_sdk::singleton = nullptr;
|
||||
#define BIND_METHOD(method, ...) godot::ClassDB::bind_method(D_METHOD(#method, ##__VA_ARGS__), &DiscordSDK::method)
|
||||
#define BIND_SET_GET(property_name, variant_type) \
|
||||
godot::ClassDB::bind_method(D_METHOD("get_" #property_name), &DiscordSDK::get_##property_name); \
|
||||
godot::ClassDB::bind_method(D_METHOD("set_" #property_name, #variant_type), &DiscordSDK::set_##property_name); \
|
||||
godot::ClassDB::add_property(get_class_static(), PropertyInfo(variant_type, #property_name), "set_" #property_name, "get_" #property_name)
|
||||
#define BIND_SIGNAL(signal_name, ...) godot::ClassDB::add_signal(get_class_static(), MethodInfo(#signal_name, ##__VA_ARGS__))
|
||||
#define SET_GET(variable, setter, ...) /*getter isn't mandatory for this project*/ \
|
||||
decltype(DiscordSDK::variable) DiscordSDK::get_##variable() { return variable; } \
|
||||
void DiscordSDK::set_##variable(decltype(DiscordSDK::variable) value) \
|
||||
{ \
|
||||
variable = value; \
|
||||
setter; \
|
||||
}
|
||||
|
||||
DiscordSDK *DiscordSDK::singleton = nullptr;
|
||||
discord::Core *core{};
|
||||
discord::Result result;
|
||||
discord::Activity activity{};
|
||||
discord::User user{};
|
||||
|
||||
void discord_sdk::_bind_methods()
|
||||
void DiscordSDK::_bind_methods()
|
||||
{
|
||||
ClassDB::bind_method(D_METHOD("debug"), &discord_sdk::debug);
|
||||
ClassDB::bind_method(D_METHOD("coreupdate"), &discord_sdk::coreupdate);
|
||||
BIND_SET_GET(app_id, Variant::INT);
|
||||
BIND_SET_GET(state, Variant::STRING);
|
||||
BIND_SET_GET(details, Variant::STRING);
|
||||
BIND_SET_GET(large_image, Variant::STRING);
|
||||
BIND_SET_GET(large_image_text, Variant::STRING);
|
||||
BIND_SET_GET(small_image, Variant::STRING);
|
||||
BIND_SET_GET(small_image_text, Variant::STRING);
|
||||
BIND_SET_GET(start_timestamp, Variant::INT);
|
||||
BIND_SET_GET(end_timestamp, Variant::INT);
|
||||
BIND_SET_GET(party_id, Variant::STRING);
|
||||
BIND_SET_GET(current_party_size, Variant::INT);
|
||||
BIND_SET_GET(max_party_size, Variant::INT);
|
||||
BIND_SET_GET(match_secret, Variant::STRING);
|
||||
BIND_SET_GET(join_secret, Variant::STRING);
|
||||
BIND_SET_GET(spectate_secret, Variant::STRING);
|
||||
BIND_SET_GET(instanced, Variant::BOOL);
|
||||
BIND_SET_GET(is_public_party, Variant::BOOL);
|
||||
BIND_SIGNAL(activity_join, PropertyInfo(Variant::STRING, "join_secret"));
|
||||
BIND_SIGNAL(activity_spectate, PropertyInfo(Variant::STRING, "spectate_secret"));
|
||||
BIND_SIGNAL(activity_join_request, PropertyInfo(Variant::DICTIONARY, "user_requesting"));
|
||||
BIND_SIGNAL(updated_relationship, PropertyInfo(Variant::DICTIONARY, "relationship"));
|
||||
BIND_SIGNAL(overlay_toggle, PropertyInfo(Variant::BOOL, "is_locked"));
|
||||
BIND_SIGNAL(relationships_init);
|
||||
BIND_METHOD(debug);
|
||||
BIND_METHOD(run_callbacks);
|
||||
BIND_METHOD(refresh);
|
||||
ClassDB::bind_method(D_METHOD("clear", "reset_values"), &DiscordSDK::clear, DEFVAL(false));
|
||||
BIND_METHOD(unclear);
|
||||
BIND_METHOD(register_command, "command");
|
||||
BIND_METHOD(register_steam, "steam_id");
|
||||
BIND_METHOD(accept_join_request, "user_id");
|
||||
BIND_METHOD(send_invite, "user_id", "is_spectate", "message_content");
|
||||
BIND_METHOD(accept_invite, "user_id");
|
||||
BIND_METHOD(get_current_user);
|
||||
BIND_METHOD(get_all_relationships);
|
||||
BIND_METHOD(get_is_overlay_enabled);
|
||||
BIND_METHOD(get_is_overlay_locked);
|
||||
BIND_METHOD(open_invite_overlay, "is_spectate");
|
||||
BIND_METHOD(open_server_invite_overlay, "invite_code");
|
||||
BIND_METHOD(open_voice_settings);
|
||||
BIND_METHOD(get_is_discord_working);
|
||||
BIND_METHOD(get_result_int);
|
||||
}
|
||||
SET_GET(state, activity.SetState(value.utf8().get_data()))
|
||||
SET_GET(details, activity.SetDetails(value.utf8().get_data()))
|
||||
SET_GET(large_image, activity.GetAssets().SetLargeImage(value.utf8().get_data()))
|
||||
SET_GET(large_image_text, activity.GetAssets().SetLargeText(value.utf8().get_data()))
|
||||
SET_GET(small_image, activity.GetAssets().SetSmallImage(value.utf8().get_data()))
|
||||
SET_GET(small_image_text, activity.GetAssets().SetSmallText(value.utf8().get_data()))
|
||||
SET_GET(start_timestamp, activity.GetTimestamps().SetStart(value))
|
||||
SET_GET(end_timestamp, activity.GetTimestamps().SetEnd(value))
|
||||
SET_GET(party_id, activity.GetParty().SetId(value.utf8().get_data()))
|
||||
SET_GET(current_party_size, activity.GetParty().GetSize().SetCurrentSize(value))
|
||||
SET_GET(max_party_size, activity.GetParty().GetSize().SetMaxSize(value))
|
||||
SET_GET(match_secret, activity.GetSecrets().SetMatch(value.utf8().get_data()))
|
||||
SET_GET(join_secret, activity.GetSecrets().SetJoin(value.utf8().get_data()))
|
||||
SET_GET(spectate_secret, activity.GetSecrets().SetSpectate(value.utf8().get_data()))
|
||||
SET_GET(instanced, activity.SetInstance(value))
|
||||
SET_GET(is_public_party, activity.GetParty().SetPrivacy(static_cast<discord::ActivityPartyPrivacy>(value)))
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_app_id"), &discord_sdk::get_app_id);
|
||||
ClassDB::bind_method(D_METHOD("set_app_id", "app_id"), &discord_sdk::set_app_id);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "app_id"), "set_app_id", "get_app_id");
|
||||
ClassDB::bind_method(D_METHOD("get_state"), &discord_sdk::get_state);
|
||||
ClassDB::bind_method(D_METHOD("set_state", "state"), &discord_sdk::set_state);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::STRING, "state"), "set_state", "get_state");
|
||||
ClassDB::bind_method(D_METHOD("get_details"), &discord_sdk::get_details);
|
||||
ClassDB::bind_method(D_METHOD("set_details", "details"), &discord_sdk::set_details);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::STRING, "details"), "set_details", "get_details");
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_large_image"), &discord_sdk::get_large_image);
|
||||
ClassDB::bind_method(D_METHOD("set_large_image", "large_image"), &discord_sdk::set_large_image);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::STRING, "large_image"), "set_large_image", "get_large_image");
|
||||
ClassDB::bind_method(D_METHOD("get_large_image_text"), &discord_sdk::get_large_image_text);
|
||||
ClassDB::bind_method(D_METHOD("set_large_image_text", "large_image_text"), &discord_sdk::set_large_image_text);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::STRING, "large_image_text"), "set_large_image_text", "get_large_image_text");
|
||||
ClassDB::bind_method(D_METHOD("get_small_image"), &discord_sdk::get_small_image);
|
||||
ClassDB::bind_method(D_METHOD("set_small_image", "small_image"), &discord_sdk::set_small_image);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::STRING, "small_image"), "set_small_image", "get_small_image");
|
||||
ClassDB::bind_method(D_METHOD("get_small_image_text"), &discord_sdk::get_small_image_text);
|
||||
ClassDB::bind_method(D_METHOD("set_small_image_text", "large_small_text"), &discord_sdk::set_small_image_text);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::STRING, "small_image_text"), "set_small_image_text", "get_small_image_text");
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_start_timestamp"), &discord_sdk::get_start_timestamp);
|
||||
ClassDB::bind_method(D_METHOD("set_start_timestamp", "start_timestamp"), &discord_sdk::set_start_timestamp);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "start_timestamp"), "set_start_timestamp", "get_start_timestamp");
|
||||
ClassDB::bind_method(D_METHOD("get_end_timestamp"), &discord_sdk::get_end_timestamp);
|
||||
ClassDB::bind_method(D_METHOD("set_end_timestamp", "end_timestamp"), &discord_sdk::set_end_timestamp);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "end_timestamp"), "set_end_timestamp", "get_end_timestamp");
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_party_id"), &discord_sdk::get_party_id);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("set_party_id", "party_id"), &discord_sdk::set_party_id);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::STRING, "party_id"), "set_party_id", "get_party_id");
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_current_party_size"), &discord_sdk::get_current_party_size);
|
||||
ClassDB::bind_method(D_METHOD("set_current_party_size", "current_party_size"), &discord_sdk::set_current_party_size);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "current_party_size"), "set_current_party_size", "get_current_party_size");
|
||||
ClassDB::bind_method(D_METHOD("get_max_party_size"), &discord_sdk::get_max_party_size);
|
||||
ClassDB::bind_method(D_METHOD("set_max_party_size", "max_party_size"), &discord_sdk::set_max_party_size);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "max_party_size"), "set_max_party_size", "get_max_party_size");
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_match_secret"), &discord_sdk::get_match_secret);
|
||||
ClassDB::bind_method(D_METHOD("set_match_secret", "match_secret"), &discord_sdk::set_match_secret);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::STRING, "match_secret"), "set_match_secret", "get_match_secret");
|
||||
ClassDB::bind_method(D_METHOD("get_join_secret"), &discord_sdk::get_join_secret);
|
||||
ClassDB::bind_method(D_METHOD("set_join_secret", "join_secret"), &discord_sdk::set_join_secret);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::STRING, "join_secret"), "set_join_secret", "get_join_secret");
|
||||
ClassDB::bind_method(D_METHOD("get_spectate_secret"), &discord_sdk::get_spectate_secret);
|
||||
ClassDB::bind_method(D_METHOD("set_spectate_secret", "spectate_secret"), &discord_sdk::set_spectate_secret);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::STRING, "spectate_secret"), "set_spectate_secret", "get_spectate_secret");
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_instanced"), &discord_sdk::get_instanced);
|
||||
ClassDB::bind_method(D_METHOD("set_instanced", "instanced"), &discord_sdk::set_instanced);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "instanced"), "set_instanced", "get_instanced");
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_is_public_party"), &discord_sdk::get_is_public_party);
|
||||
ClassDB::bind_method(D_METHOD("set_is_public_party", "is_public_party"), &discord_sdk::set_is_public_party);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "is_public_party"), "set_is_public_party", "get_is_public_party");
|
||||
|
||||
ADD_SIGNAL(MethodInfo("activity_join", PropertyInfo(Variant::STRING, "join_secret")));
|
||||
ADD_SIGNAL(MethodInfo("activity_spectate", PropertyInfo(Variant::STRING, "spectate_secret")));
|
||||
ADD_SIGNAL(MethodInfo("activity_join_request", PropertyInfo(Variant::DICTIONARY, "user_requesting")));
|
||||
|
||||
ClassDB::bind_method(D_METHOD("refresh"), &discord_sdk::refresh);
|
||||
ClassDB::bind_method(D_METHOD("clear"), &discord_sdk::clear);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("register_command", "command"), &discord_sdk::register_command);
|
||||
ClassDB::bind_method(D_METHOD("register_steam", "steam_id"), &discord_sdk::register_steam);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("accept_join_request", "user_id"), &discord_sdk::accept_join_request);
|
||||
ClassDB::bind_method(D_METHOD("send_invite", "user_id", "is_spectate", "message_content"), &discord_sdk::send_invite);
|
||||
ClassDB::bind_method(D_METHOD("accept_invite", "user_id"), &discord_sdk::accept_invite);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_current_user"), &discord_sdk::get_current_user);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_is_overlay_enabled"), &discord_sdk::get_is_overlay_enabled);
|
||||
ClassDB::bind_method(D_METHOD("get_is_overlay_locked"), &discord_sdk::get_is_overlay_locked);
|
||||
ClassDB::bind_method(D_METHOD("set_is_overlay_locked", "is_overlay_locked"), &discord_sdk::set_is_overlay_locked);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "is_overlay_locked"), "set_is_overlay_locked", "get_is_overlay_locked");
|
||||
ClassDB::bind_method(D_METHOD("open_invite_overlay", "is_spectate"), &discord_sdk::open_invite_overlay);
|
||||
ClassDB::bind_method(D_METHOD("open_server_invite_overlay", "invite_code"), &discord_sdk::open_server_invite_overlay);
|
||||
ClassDB::bind_method(D_METHOD("open_voice_settings"), &discord_sdk::open_voice_settings);
|
||||
ADD_SIGNAL(MethodInfo("overlay_toggle", PropertyInfo(Variant::BOOL, "is_locked")));
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_is_discord_working"), &discord_sdk::get_is_discord_working);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_result_int"), &discord_sdk::get_result_int);
|
||||
DiscordSDK::DiscordSDK()
|
||||
{
|
||||
singleton = this;
|
||||
}
|
||||
|
||||
discord_sdk *discord_sdk::get_singleton()
|
||||
DiscordSDK::~DiscordSDK()
|
||||
{
|
||||
singleton = nullptr;
|
||||
delete core; // couldn't use destructor because it would not compile on linux
|
||||
core = nullptr;
|
||||
}
|
||||
|
||||
DiscordSDK *DiscordSDK::get_singleton()
|
||||
{
|
||||
return singleton;
|
||||
}
|
||||
|
||||
discord_sdk::discord_sdk()
|
||||
{
|
||||
ERR_FAIL_COND(singleton != nullptr);
|
||||
singleton = this;
|
||||
}
|
||||
|
||||
discord_sdk::~discord_sdk()
|
||||
{
|
||||
ERR_FAIL_COND(singleton != this);
|
||||
singleton = nullptr;
|
||||
delete core;
|
||||
core = nullptr;
|
||||
}
|
||||
|
||||
void discord_sdk::coreupdate()
|
||||
void DiscordSDK::run_callbacks()
|
||||
{
|
||||
if (result == discord::Result::Ok && app_id > 0)
|
||||
::core->RunCallbacks();
|
||||
}
|
||||
void discord_sdk::debug()
|
||||
void DiscordSDK::debug()
|
||||
{
|
||||
result = discord::Core::Create(1080224638845591692, DiscordCreateFlags_NoRequireDiscord, &core);
|
||||
activity.SetState("Test from Godot!");
|
||||
@@ -151,71 +125,51 @@ void discord_sdk::debug()
|
||||
UtilityFunctions::push_warning("Discord Activity couldn't be updated. It could be that Discord isn't running!");
|
||||
}
|
||||
|
||||
void discord_sdk::set_app_id(int64_t value)
|
||||
void DiscordSDK::set_app_id(int64_t value)
|
||||
{
|
||||
app_id = value;
|
||||
if (app_id > 0)
|
||||
{
|
||||
result = discord::Core::Create(value, DiscordCreateFlags_NoRequireDiscord, &core); // after setting app_ID it initializes everything
|
||||
|
||||
if (result == discord::Result::Ok && app_id > 0)
|
||||
if (result == discord::Result::Ok)
|
||||
{
|
||||
// initialize currentuser stuff
|
||||
// initialize currentuser
|
||||
core->UserManager().OnCurrentUserUpdate.Connect([]()
|
||||
{discord::User user{};
|
||||
core->UserManager().GetCurrentUser(&user); });
|
||||
// signals
|
||||
core->ActivityManager().OnActivityJoin.Connect([](const char *secret)
|
||||
{ discord_sdk::get_singleton()
|
||||
{ DiscordSDK::get_singleton()
|
||||
->emit_signal("activity_join", secret); });
|
||||
core->ActivityManager().OnActivitySpectate.Connect([](const char *secret)
|
||||
{ discord_sdk::get_singleton()
|
||||
{ DiscordSDK::get_singleton()
|
||||
->emit_signal("activity_spectate", secret); });
|
||||
core->ActivityManager().OnActivityJoinRequest.Connect([this](discord::User const &user)
|
||||
{ Dictionary user_requesting;
|
||||
user_requesting["avatar"] = user.GetAvatar(); //can be empty when user has no avatar
|
||||
user_requesting["is_bot"] = user.GetBot();
|
||||
user_requesting["discriminator"] = user.GetDiscriminator();
|
||||
user_requesting["id"] = user.GetId();
|
||||
user_requesting["username"] = user.GetUsername();
|
||||
if(String(user_requesting["avatar"]).is_empty())
|
||||
user_requesting["avatar_url"] = String(std::string("https://cdn.discordapp.com/embed/avatars/" + std::to_string((user_requesting["discriminator"].INT % 5) - 1)+ ".png").c_str());
|
||||
else
|
||||
user_requesting["avatar_url"] = String(std::string("https://cdn.discordapp.com/avatars/" + std::to_string(user.GetId()) + "/" + user.GetAvatar() + ".png?size=512").c_str());//I don't know what the hell i did there but removing ?size=512 will crash the whole editor
|
||||
user_requesting.make_read_only();
|
||||
discord_sdk::get_singleton()
|
||||
->emit_signal("activity_join_request",user_requesting); });
|
||||
|
||||
{ DiscordSDK::get_singleton()
|
||||
->emit_signal("activity_join_request", user2dict(user)); });
|
||||
core->OverlayManager().OnToggle.Connect([](bool is_locked)
|
||||
{ discord_sdk::get_singleton()
|
||||
{ DiscordSDK::get_singleton()
|
||||
->emit_signal("overlay_toggle", is_locked); });
|
||||
core->RelationshipManager().OnRefresh.Connect([&]()
|
||||
{ DiscordSDK::get_singleton()
|
||||
->emit_signal("relationships_init"); });
|
||||
core->RelationshipManager().OnRelationshipUpdate.Connect([&](discord::Relationship const &relationship)
|
||||
{ DiscordSDK::get_singleton()
|
||||
->emit_signal("updated_relationship", relationship2dict(relationship)); });
|
||||
}
|
||||
}
|
||||
}
|
||||
int64_t discord_sdk::get_app_id()
|
||||
int64_t DiscordSDK::get_app_id()
|
||||
{
|
||||
if (app_id != 0)
|
||||
return app_id;
|
||||
return old_app_id;
|
||||
}
|
||||
|
||||
void discord_sdk::set_state(String value)
|
||||
void DiscordSDK::refresh()
|
||||
{
|
||||
state = value;
|
||||
activity.SetState(value.utf8().get_data());
|
||||
}
|
||||
String discord_sdk::get_state()
|
||||
{
|
||||
return state;
|
||||
}
|
||||
void discord_sdk::set_details(String value)
|
||||
{
|
||||
details = value;
|
||||
activity.SetDetails(value.utf8().get_data());
|
||||
}
|
||||
String discord_sdk::get_details()
|
||||
{
|
||||
return details;
|
||||
}
|
||||
|
||||
void discord_sdk::refresh()
|
||||
{
|
||||
if (result == discord::Result::Ok && app_id > 0)
|
||||
if (get_is_discord_working())
|
||||
{
|
||||
activity.GetParty().SetPrivacy(discord::ActivityPartyPrivacy::Public);
|
||||
activity.SetType(discord::ActivityType::Playing);
|
||||
@@ -225,236 +179,162 @@ void discord_sdk::refresh()
|
||||
UtilityFunctions::push_warning("Discord Activity couldn't be updated. It could be that Discord isn't running!");
|
||||
}
|
||||
|
||||
void discord_sdk::clear()
|
||||
void DiscordSDK::clear(bool reset_values = false)
|
||||
{
|
||||
if (result == discord::Result::Ok)
|
||||
if (get_is_discord_working())
|
||||
{
|
||||
app_id = 0;
|
||||
state = "";
|
||||
details = "";
|
||||
large_image = "";
|
||||
large_image_text = "";
|
||||
small_image = "";
|
||||
small_image_text = "";
|
||||
start_timestamp = 0;
|
||||
end_timestamp = 0;
|
||||
party_id = "";
|
||||
current_party_size = 0;
|
||||
max_party_size = 0;
|
||||
match_secret = "";
|
||||
join_secret = "";
|
||||
spectate_secret = "";
|
||||
instanced = false;
|
||||
is_public_party = false;
|
||||
is_overlay_locked = false;
|
||||
|
||||
if (reset_values)
|
||||
{
|
||||
old_app_id = 0;
|
||||
set_state("");
|
||||
set_details("");
|
||||
set_large_image("");
|
||||
set_large_image_text("");
|
||||
set_small_image("");
|
||||
set_small_image_text("");
|
||||
set_start_timestamp(0);
|
||||
set_end_timestamp(0);
|
||||
set_party_id("");
|
||||
set_current_party_size(0);
|
||||
set_max_party_size(0);
|
||||
set_match_secret("");
|
||||
set_join_secret("");
|
||||
set_spectate_secret("");
|
||||
set_instanced(false);
|
||||
set_is_public_party(false);
|
||||
set_is_overlay_locked(false);
|
||||
core->ActivityManager().ClearActivity([](discord::Result result) {});
|
||||
}
|
||||
else
|
||||
old_app_id = app_id;
|
||||
delete core;
|
||||
core = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
void discord_sdk::set_large_image(String value)
|
||||
void DiscordSDK::unclear()
|
||||
{
|
||||
large_image = value;
|
||||
activity.GetAssets().SetLargeImage(value.utf8().get_data());
|
||||
}
|
||||
String discord_sdk::get_large_image()
|
||||
{
|
||||
return large_image;
|
||||
}
|
||||
void discord_sdk::set_large_image_text(String value)
|
||||
{
|
||||
large_image_text = value;
|
||||
activity.GetAssets().SetLargeText(value.utf8().get_data());
|
||||
}
|
||||
String discord_sdk::get_large_image_text()
|
||||
{
|
||||
return large_image_text;
|
||||
}
|
||||
void discord_sdk::set_small_image(String value)
|
||||
{
|
||||
small_image = value;
|
||||
activity.GetAssets().SetSmallImage(value.utf8().get_data());
|
||||
}
|
||||
String discord_sdk::get_small_image()
|
||||
{
|
||||
return small_image;
|
||||
}
|
||||
void discord_sdk::set_small_image_text(String value)
|
||||
{
|
||||
small_image_text = value;
|
||||
activity.GetAssets().SetSmallText(value.utf8().get_data());
|
||||
}
|
||||
String discord_sdk::get_small_image_text()
|
||||
{
|
||||
return small_image_text;
|
||||
if (old_app_id > 0)
|
||||
{
|
||||
set_app_id(old_app_id);
|
||||
refresh();
|
||||
old_app_id = 0;
|
||||
}
|
||||
else
|
||||
UtilityFunctions::push_warning("Discord Activity couldn't be uncleared. Maybe it didn't get cleared before?");
|
||||
}
|
||||
|
||||
void discord_sdk::set_start_timestamp(int64_t value)
|
||||
{
|
||||
start_timestamp = value;
|
||||
activity.GetTimestamps().SetStart(value);
|
||||
}
|
||||
int64_t discord_sdk::get_start_timestamp()
|
||||
{
|
||||
return activity.GetTimestamps().GetStart();
|
||||
}
|
||||
void discord_sdk::set_end_timestamp(int64_t value)
|
||||
{
|
||||
end_timestamp = value;
|
||||
activity.GetTimestamps().SetEnd(value);
|
||||
}
|
||||
int64_t discord_sdk::get_end_timestamp()
|
||||
{
|
||||
return activity.GetTimestamps().GetEnd();
|
||||
}
|
||||
|
||||
void discord_sdk::set_party_id(String value)
|
||||
{
|
||||
party_id = value;
|
||||
activity.GetParty().SetId(value.utf8().get_data());
|
||||
}
|
||||
String discord_sdk::get_party_id()
|
||||
{
|
||||
return party_id;
|
||||
}
|
||||
|
||||
void discord_sdk::set_current_party_size(int32_t value)
|
||||
{
|
||||
current_party_size = value;
|
||||
activity.GetParty().GetSize().SetCurrentSize(value);
|
||||
}
|
||||
int32_t discord_sdk::get_current_party_size()
|
||||
{
|
||||
return current_party_size;
|
||||
}
|
||||
void discord_sdk::set_max_party_size(int32_t value)
|
||||
{
|
||||
max_party_size = value;
|
||||
activity.GetParty().GetSize().SetMaxSize(value);
|
||||
}
|
||||
int32_t discord_sdk::get_max_party_size()
|
||||
{
|
||||
return max_party_size;
|
||||
}
|
||||
|
||||
void discord_sdk::set_match_secret(String value)
|
||||
{
|
||||
match_secret = value;
|
||||
activity.GetSecrets().SetMatch(value.utf8().get_data());
|
||||
}
|
||||
String discord_sdk::get_match_secret()
|
||||
{
|
||||
return match_secret;
|
||||
}
|
||||
void discord_sdk::set_join_secret(String value)
|
||||
{
|
||||
join_secret = value;
|
||||
activity.GetSecrets().SetJoin(value.utf8().get_data());
|
||||
}
|
||||
String discord_sdk::get_join_secret()
|
||||
{
|
||||
return join_secret;
|
||||
}
|
||||
void discord_sdk::set_spectate_secret(String value)
|
||||
{
|
||||
spectate_secret = value;
|
||||
activity.GetSecrets().SetSpectate(value.utf8().get_data());
|
||||
}
|
||||
String discord_sdk::get_spectate_secret()
|
||||
{
|
||||
return spectate_secret;
|
||||
}
|
||||
|
||||
void discord_sdk::set_instanced(bool value)
|
||||
{
|
||||
instanced = value;
|
||||
activity.SetInstance(value);
|
||||
}
|
||||
bool discord_sdk::get_instanced()
|
||||
{
|
||||
return instanced;
|
||||
}
|
||||
|
||||
bool discord_sdk::get_is_overlay_enabled()
|
||||
bool DiscordSDK::get_is_overlay_enabled()
|
||||
{
|
||||
bool ie;
|
||||
if (result == discord::Result::Ok && app_id > 0)
|
||||
if (get_is_discord_working())
|
||||
core->OverlayManager().IsEnabled(&ie);
|
||||
return ie;
|
||||
}
|
||||
bool discord_sdk::get_is_overlay_locked()
|
||||
bool DiscordSDK::get_is_overlay_locked()
|
||||
{
|
||||
bool il;
|
||||
if (result == discord::Result::Ok && app_id > 0)
|
||||
if (get_is_discord_working())
|
||||
core->OverlayManager().IsLocked(&il);
|
||||
return il;
|
||||
}
|
||||
void discord_sdk::set_is_overlay_locked(bool value)
|
||||
void DiscordSDK::set_is_overlay_locked(bool value)
|
||||
{
|
||||
is_overlay_locked = value;
|
||||
if (result == discord::Result::Ok && app_id > 0)
|
||||
if (get_is_discord_working())
|
||||
core->OverlayManager().SetLocked(value, {});
|
||||
}
|
||||
void discord_sdk::open_invite_overlay(bool is_spectate)
|
||||
void DiscordSDK::open_invite_overlay(bool is_spectate)
|
||||
{
|
||||
if (result == discord::Result::Ok && app_id > 0)
|
||||
if (get_is_discord_working())
|
||||
core->OverlayManager().OpenActivityInvite(static_cast<discord::ActivityActionType>(is_spectate + 1), {});
|
||||
}
|
||||
void discord_sdk::open_server_invite_overlay(String invite_code)
|
||||
void DiscordSDK::open_server_invite_overlay(String invite_code)
|
||||
{
|
||||
if (result == discord::Result::Ok && app_id > 0)
|
||||
if (get_is_discord_working())
|
||||
core->OverlayManager().OpenGuildInvite(invite_code.utf8().get_data(), {});
|
||||
}
|
||||
void discord_sdk::open_voice_settings()
|
||||
void DiscordSDK::open_voice_settings()
|
||||
{
|
||||
if (result == discord::Result::Ok && app_id > 0)
|
||||
if (get_is_discord_working())
|
||||
core->OverlayManager().OpenVoiceSettings({});
|
||||
}
|
||||
|
||||
void discord_sdk::set_is_public_party(bool value)
|
||||
void DiscordSDK::accept_join_request(int64_t user_id)
|
||||
{
|
||||
is_public_party = value;
|
||||
activity.GetParty().SetPrivacy(static_cast<discord::ActivityPartyPrivacy>(value)); // normaly true
|
||||
}
|
||||
bool discord_sdk::get_is_public_party()
|
||||
{
|
||||
return is_public_party;
|
||||
}
|
||||
|
||||
void discord_sdk::accept_join_request(int64_t user_id)
|
||||
{
|
||||
if (result == discord::Result::Ok && app_id > 0)
|
||||
if (get_is_discord_working())
|
||||
core->ActivityManager().SendRequestReply(user_id, static_cast<discord::ActivityJoinRequestReply>(1), {});
|
||||
}
|
||||
void discord_sdk::send_invite(int64_t user_id, bool is_spectate = false, String message_content = "")
|
||||
void DiscordSDK::send_invite(int64_t user_id, bool is_spectate = false, String message_content = "")
|
||||
{
|
||||
if (result == discord::Result::Ok && app_id > 0)
|
||||
if (get_is_discord_working())
|
||||
core->ActivityManager().SendInvite(user_id, static_cast<discord::ActivityActionType>(is_spectate + 1), message_content.utf8().get_data(), {});
|
||||
}
|
||||
void discord_sdk::accept_invite(int64_t user_id)
|
||||
void DiscordSDK::accept_invite(int64_t user_id)
|
||||
{
|
||||
if (result == discord::Result::Ok && app_id > 0)
|
||||
if (get_is_discord_working())
|
||||
core->ActivityManager().AcceptInvite(user_id, {});
|
||||
}
|
||||
|
||||
void discord_sdk::register_command(String value)
|
||||
void DiscordSDK::register_command(String value)
|
||||
{
|
||||
if (result == discord::Result::Ok && app_id > 0)
|
||||
if (get_is_discord_working())
|
||||
core->ActivityManager().RegisterCommand(value.utf8().get_data());
|
||||
}
|
||||
void discord_sdk::register_steam(int32_t value)
|
||||
void DiscordSDK::register_steam(int32_t value)
|
||||
{
|
||||
if (result == discord::Result::Ok && app_id > 0)
|
||||
if (get_is_discord_working())
|
||||
core->ActivityManager().RegisterSteam(value);
|
||||
}
|
||||
Dictionary discord_sdk::get_current_user()
|
||||
Dictionary DiscordSDK::get_current_user()
|
||||
{
|
||||
Dictionary userdict;
|
||||
if (result == discord::Result::Ok && app_id > 0)
|
||||
if (get_is_discord_working())
|
||||
{
|
||||
discord::User user{};
|
||||
core->UserManager().GetCurrentUser(&user);
|
||||
return user2dict(user);
|
||||
}
|
||||
return userdict;
|
||||
}
|
||||
|
||||
Dictionary DiscordSDK::get_relationship(int64_t user_id)
|
||||
{
|
||||
if (get_is_discord_working())
|
||||
{
|
||||
discord::Relationship relationship{};
|
||||
core->RelationshipManager().Get(user_id, &relationship);
|
||||
return relationship2dict(relationship);
|
||||
}
|
||||
Dictionary dict;
|
||||
return dict;
|
||||
}
|
||||
|
||||
Array DiscordSDK::get_all_relationships()
|
||||
{
|
||||
Array all_relationships;
|
||||
core->RelationshipManager().Filter(
|
||||
[](discord::Relationship const &relationship) -> bool
|
||||
{ return true; });
|
||||
int32_t friendcount{0};
|
||||
core->RelationshipManager().Count(&friendcount);
|
||||
for (int i = 0; i < friendcount; i++)
|
||||
{
|
||||
discord::Relationship relationship{};
|
||||
core->RelationshipManager().GetAt(i, &relationship);
|
||||
all_relationships.append(relationship2dict(relationship));
|
||||
}
|
||||
return all_relationships;
|
||||
}
|
||||
|
||||
int DiscordSDK::get_result_int()
|
||||
{
|
||||
return static_cast<int>(result);
|
||||
}
|
||||
|
||||
Dictionary DiscordSDK::user2dict(discord::User user)
|
||||
{
|
||||
Dictionary userdict;
|
||||
userdict["avatar"] = user.GetAvatar(); // can be empty when user has no avatar
|
||||
userdict["is_bot"] = user.GetBot();
|
||||
userdict["discriminator"] = user.GetDiscriminator();
|
||||
@@ -463,18 +343,84 @@ Dictionary discord_sdk::get_current_user()
|
||||
if (String(userdict["avatar"]).is_empty())
|
||||
userdict["avatar_url"] = String(std::string("https://cdn.discordapp.com/embed/avatars/" + std::to_string((userdict["discriminator"].INT % 5) - 1) + ".png").c_str());
|
||||
else
|
||||
userdict["avatar_url"] = String(std::string("https://cdn.discordapp.com/avatars/" + std::to_string(user.GetId()) + "/" + user.GetAvatar() + ".png?size=512").c_str());
|
||||
userdict["avatar_url"] = String(std::string("https://cdn.discordapp.com/avatars/" + std::to_string(user.GetId()) + "/" + user.GetAvatar() + ".png").c_str());
|
||||
userdict.make_read_only();
|
||||
}
|
||||
return userdict;
|
||||
}
|
||||
|
||||
bool discord_sdk::get_is_discord_working()
|
||||
Dictionary DiscordSDK::relationship2dict(discord::Relationship relationship)
|
||||
{
|
||||
Dictionary dict_relationship;
|
||||
Dictionary presence;
|
||||
Dictionary presence_activity;
|
||||
switch (static_cast<int>(relationship.GetPresence().GetStatus()))
|
||||
{
|
||||
case 0:
|
||||
presence["status"] = "Offline";
|
||||
break;
|
||||
case 1:
|
||||
presence["status"] = "Online";
|
||||
break;
|
||||
case 2:
|
||||
presence["status"] = "Idle";
|
||||
break;
|
||||
case 3:
|
||||
presence["status"] = "DoNotDisturb";
|
||||
break;
|
||||
default:
|
||||
presence["status"] = "NotAvailable";
|
||||
break;
|
||||
}
|
||||
presence_activity["application_id"] = relationship.GetPresence().GetActivity().GetApplicationId();
|
||||
presence_activity["name"] = relationship.GetPresence().GetActivity().GetName();
|
||||
presence_activity["state"] = relationship.GetPresence().GetActivity().GetState();
|
||||
presence_activity["details"] = relationship.GetPresence().GetActivity().GetDetails();
|
||||
presence_activity["large_image"] = relationship.GetPresence().GetActivity().GetAssets().GetLargeImage();
|
||||
presence_activity["large_text"] = relationship.GetPresence().GetActivity().GetAssets().GetLargeText();
|
||||
presence_activity["small_image"] = relationship.GetPresence().GetActivity().GetAssets().GetSmallImage();
|
||||
presence_activity["small_text"] = relationship.GetPresence().GetActivity().GetAssets().GetSmallText();
|
||||
presence_activity["timestamps_start"] = relationship.GetPresence().GetActivity().GetTimestamps().GetStart();
|
||||
presence_activity["timestamps_end"] = relationship.GetPresence().GetActivity().GetTimestamps().GetEnd();
|
||||
presence_activity["instance"] = relationship.GetPresence().GetActivity().GetInstance();
|
||||
presence_activity["party_id"] = relationship.GetPresence().GetActivity().GetParty().GetId();
|
||||
presence_activity["current_party_size"] = relationship.GetPresence().GetActivity().GetParty().GetSize().GetCurrentSize();
|
||||
presence_activity["max_party_size"] = relationship.GetPresence().GetActivity().GetParty().GetSize().GetMaxSize();
|
||||
presence_activity["join_secret"] = relationship.GetPresence().GetActivity().GetSecrets().GetJoin();
|
||||
presence_activity["spectate_secret"] = relationship.GetPresence().GetActivity().GetSecrets().GetSpectate();
|
||||
presence_activity["match_secret"] = relationship.GetPresence().GetActivity().GetSecrets().GetMatch();
|
||||
presence["activity"] = presence_activity;
|
||||
presence.make_read_only();
|
||||
switch (relationship.GetType())
|
||||
{
|
||||
case discord::RelationshipType::None:
|
||||
dict_relationship["type"] = "None";
|
||||
break;
|
||||
case discord::RelationshipType::Friend:
|
||||
dict_relationship["type"] = "Friend";
|
||||
break;
|
||||
case discord::RelationshipType::Blocked:
|
||||
dict_relationship["type"] = "Blocked";
|
||||
break;
|
||||
case discord::RelationshipType::PendingIncoming:
|
||||
dict_relationship["type"] = "PendingIncoming";
|
||||
break;
|
||||
case discord::RelationshipType::PendingOutgoing:
|
||||
dict_relationship["type"] = "PendingOutgoing";
|
||||
break;
|
||||
case discord::RelationshipType::Implicit:
|
||||
dict_relationship["type"] = "Implicit";
|
||||
break;
|
||||
default:
|
||||
dict_relationship["type"] = "NotAvailable";
|
||||
break;
|
||||
}
|
||||
dict_relationship["user"] = user2dict(relationship.GetUser());
|
||||
dict_relationship["presence"] = presence;
|
||||
dict_relationship.make_read_only();
|
||||
return dict_relationship;
|
||||
}
|
||||
|
||||
bool DiscordSDK::get_is_discord_working()
|
||||
{
|
||||
return result == discord::Result::Ok && app_id > 0;
|
||||
}
|
||||
|
||||
int discord_sdk::get_result_int()
|
||||
{
|
||||
return static_cast<int>(result);
|
||||
}
|
||||
|
@@ -3,116 +3,75 @@
|
||||
|
||||
#include <stdio.h>
|
||||
#include "lib/discord_game_sdk/cpp/discord.h"
|
||||
#include <godot_cpp/classes/ref_counted.hpp>
|
||||
#include <godot_cpp/classes/object.hpp>
|
||||
#include <godot_cpp/core/class_db.hpp>
|
||||
|
||||
#define H_SET_GET(variable_type, property_name) \
|
||||
variable_type property_name; \
|
||||
variable_type get_##property_name(); \
|
||||
void set_##property_name(variable_type value);
|
||||
|
||||
using namespace godot;
|
||||
|
||||
class discord_sdk : public RefCounted
|
||||
class DiscordSDK : public Object
|
||||
{
|
||||
GDCLASS(discord_sdk, Object);
|
||||
GDCLASS(DiscordSDK, Object);
|
||||
|
||||
static discord_sdk *singleton;
|
||||
static DiscordSDK *singleton;
|
||||
|
||||
protected:
|
||||
static void _bind_methods();
|
||||
|
||||
private:
|
||||
int64_t app_id = 0;
|
||||
|
||||
String state;
|
||||
String details;
|
||||
|
||||
String large_image;
|
||||
String large_image_text;
|
||||
String small_image;
|
||||
String small_image_text;
|
||||
|
||||
int64_t start_timestamp;
|
||||
int64_t end_timestamp;
|
||||
|
||||
String party_id;
|
||||
int32_t current_party_size;
|
||||
int32_t max_party_size;
|
||||
String match_secret;
|
||||
String join_secret;
|
||||
String spectate_secret;
|
||||
|
||||
bool is_public_party;
|
||||
|
||||
bool instanced;
|
||||
|
||||
bool is_overlay_locked;
|
||||
|
||||
public:
|
||||
static discord_sdk *
|
||||
static DiscordSDK *
|
||||
get_singleton();
|
||||
|
||||
discord_sdk();
|
||||
~discord_sdk();
|
||||
DiscordSDK();
|
||||
~DiscordSDK();
|
||||
|
||||
// INTERBNAL
|
||||
int64_t old_app_id;
|
||||
Dictionary relationship2dict(discord::Relationship relationship);
|
||||
Dictionary user2dict(discord::User user);
|
||||
///
|
||||
void set_app_id(int64_t value);
|
||||
int64_t get_app_id();
|
||||
int64_t app_id = 0; // needs to be directly setted to 0 or it will crash randomly
|
||||
H_SET_GET(String, state)
|
||||
H_SET_GET(String, details)
|
||||
H_SET_GET(String, large_image)
|
||||
H_SET_GET(String, large_image_text)
|
||||
H_SET_GET(String, small_image)
|
||||
H_SET_GET(String, small_image_text)
|
||||
H_SET_GET(int64_t, start_timestamp)
|
||||
H_SET_GET(int64_t, end_timestamp)
|
||||
H_SET_GET(String, party_id)
|
||||
H_SET_GET(int32_t, current_party_size)
|
||||
H_SET_GET(int32_t, max_party_size)
|
||||
H_SET_GET(String, match_secret)
|
||||
H_SET_GET(String, join_secret)
|
||||
H_SET_GET(String, spectate_secret)
|
||||
H_SET_GET(bool, is_public_party)
|
||||
H_SET_GET(bool, instanced)
|
||||
H_SET_GET(bool, is_overlay_locked)
|
||||
|
||||
void debug();
|
||||
void coreupdate();
|
||||
void run_callbacks();
|
||||
void refresh();
|
||||
void clear();
|
||||
|
||||
int64_t get_app_id();
|
||||
void set_app_id(int64_t value);
|
||||
String get_state();
|
||||
void set_state(String value);
|
||||
String get_details();
|
||||
void set_details(String value);
|
||||
|
||||
String get_large_image();
|
||||
void set_large_image(String value);
|
||||
String get_large_image_text();
|
||||
void set_large_image_text(String value);
|
||||
String get_small_image();
|
||||
void set_small_image(String value);
|
||||
String get_small_image_text();
|
||||
void set_small_image_text(String value);
|
||||
|
||||
int64_t get_start_timestamp();
|
||||
void set_start_timestamp(int64_t value);
|
||||
int64_t get_end_timestamp();
|
||||
void set_end_timestamp(int64_t value);
|
||||
|
||||
String get_party_id();
|
||||
void set_party_id(String value);
|
||||
|
||||
int32_t get_current_party_size();
|
||||
void set_current_party_size(int32_t value);
|
||||
int32_t get_max_party_size();
|
||||
void set_max_party_size(int32_t value);
|
||||
String get_match_secret();
|
||||
void set_match_secret(String value);
|
||||
String get_join_secret();
|
||||
void set_join_secret(String value);
|
||||
String get_spectate_secret();
|
||||
void set_spectate_secret(String value);
|
||||
|
||||
bool get_is_public_party();
|
||||
void set_is_public_party(bool value);
|
||||
|
||||
bool get_instanced();
|
||||
void set_instanced(bool value);
|
||||
|
||||
void clear(bool reset_values);
|
||||
void unclear();
|
||||
bool get_is_overlay_enabled();
|
||||
bool get_is_overlay_locked();
|
||||
void set_is_overlay_locked(bool value);
|
||||
void open_invite_overlay(bool is_spectate);
|
||||
void open_server_invite_overlay(String invite_code);
|
||||
void open_voice_settings();
|
||||
|
||||
void accept_join_request(int64_t user_id);
|
||||
void send_invite(int64_t user_id, bool is_spectate, String message_content);
|
||||
void accept_invite(int64_t user_id);
|
||||
|
||||
void register_command(String value);
|
||||
void register_steam(int32_t value);
|
||||
|
||||
Dictionary get_current_user();
|
||||
|
||||
Dictionary get_relationship(int64_t user_id);
|
||||
Array get_all_relationships();
|
||||
bool get_is_discord_working();
|
||||
int get_result_int();
|
||||
};
|
||||
|
@@ -9,35 +9,34 @@
|
||||
#include "discordgodot.h"
|
||||
using namespace godot;
|
||||
|
||||
static discord_sdk *discordsdk;
|
||||
static DiscordSDK *discordsdk;
|
||||
|
||||
void gdextension_initialize(ModuleInitializationLevel p_level)
|
||||
void initialize_discordsdk_module(ModuleInitializationLevel p_level)
|
||||
{
|
||||
if (p_level == MODULE_INITIALIZATION_LEVEL_SCENE)
|
||||
{
|
||||
ClassDB::register_class<discord_sdk>();
|
||||
discordsdk = memnew(discord_sdk);
|
||||
Engine::get_singleton()->register_singleton("discord_sdk", discord_sdk::get_singleton());
|
||||
ClassDB::register_class<DiscordSDK>();
|
||||
discordsdk = memnew(DiscordSDK);
|
||||
Engine::get_singleton()->register_singleton("DiscordSDK", DiscordSDK::get_singleton());
|
||||
}
|
||||
}
|
||||
|
||||
void gdextension_terminate(ModuleInitializationLevel p_level)
|
||||
void uninitialize_discordsdk_module(ModuleInitializationLevel p_level)
|
||||
{
|
||||
if (p_level == MODULE_INITIALIZATION_LEVEL_SCENE)
|
||||
{
|
||||
Engine::get_singleton()->unregister_singleton("discord_sdk");
|
||||
memdelete(discordsdk);
|
||||
Engine::get_singleton()->unregister_singleton("DiscordSDK");
|
||||
}
|
||||
}
|
||||
|
||||
extern "C"
|
||||
{
|
||||
GDExtensionBool GDE_EXPORT discordsdkgd_library_init(const GDExtensionInterface *p_interface, GDExtensionClassLibraryPtr p_library, GDExtensionInitialization *r_initialization)
|
||||
GDExtensionBool GDE_EXPORT discordsdkgd_library_init(GDExtensionInterfaceGetProcAddress p_get_proc_address, GDExtensionClassLibraryPtr p_library, GDExtensionInitialization *r_initialization)
|
||||
{
|
||||
godot::GDExtensionBinding::InitObject init_obj(p_interface, p_library, r_initialization);
|
||||
godot::GDExtensionBinding::InitObject init_obj(p_get_proc_address, p_library, r_initialization);
|
||||
|
||||
init_obj.register_initializer(gdextension_initialize);
|
||||
init_obj.register_terminator(gdextension_terminate);
|
||||
init_obj.register_initializer(initialize_discordsdk_module);
|
||||
init_obj.register_terminator(uninitialize_discordsdk_module);
|
||||
init_obj.set_minimum_library_initialization_level(MODULE_INITIALIZATION_LEVEL_SCENE);
|
||||
|
||||
return init_obj.init();
|
||||
|