Compare commits
87 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
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 | ||
|
980080492e | ||
|
b3ebd2c737 | ||
|
f9134f30f7 | ||
|
da42d6a228 | ||
|
a998076b79 | ||
|
7fd0d25da9 | ||
|
52fcce409a | ||
|
88a855d1da | ||
|
53dafb1da2 | ||
|
9772445870 | ||
|
52ec3392fa | ||
|
3913736a42 | ||
|
ba5eb3316e | ||
|
9929ccbb3a | ||
|
73b915485f | ||
|
fd5a59d1eb | ||
|
7e8c1cc7bb | ||
|
ed67525242 | ||
|
a803ffb9a1 | ||
|
ee4b0567c5 | ||
|
92ec704ddb | ||
|
3bf8ee8d36 | ||
|
3765612588 | ||
|
58a043a885 | ||
|
df556e8a72 | ||
|
5cd13316a0 | ||
|
c62e9af0ef | ||
|
31e3302384 | ||
|
0013c8c788 | ||
|
27498f9e70 | ||
|
54d6cebd5c | ||
|
029111a04f | ||
|
281bdb2cfa | ||
|
0f903dfb6c | ||
|
65fb3b1d0f | ||
|
fa63df6094 | ||
|
edf3e7fab6 | ||
|
5e080bc846 | ||
|
7f586869d7 | ||
|
9eaf340637 | ||
|
274a3ebbed | ||
|
3b921901ee | ||
|
aadd2cb982 |
26
.github/ISSUE_TEMPLATE/BUG.yml
vendored
@@ -21,8 +21,16 @@ body:
|
|||||||
id: version
|
id: version
|
||||||
attributes:
|
attributes:
|
||||||
label: Version
|
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:
|
options:
|
||||||
|
- 3.2
|
||||||
|
- 3.1
|
||||||
|
- 3.0
|
||||||
|
- 2.4
|
||||||
|
- 2.3
|
||||||
|
- 2.2
|
||||||
|
- 2.1
|
||||||
|
- 2.0
|
||||||
- 1.5
|
- 1.5
|
||||||
- 1.4
|
- 1.4
|
||||||
- 1.3
|
- 1.3
|
||||||
@@ -36,8 +44,8 @@ body:
|
|||||||
id: gd-version
|
id: gd-version
|
||||||
attributes:
|
attributes:
|
||||||
label: Godot Version
|
label: Godot Version
|
||||||
description: This addon is ONLY for 4.0 and above!
|
description: This addon is ONLY for 4.1 and above!
|
||||||
placeholder: e.g. 4.0.2-stable
|
placeholder: e.g. 4.1.0-stable
|
||||||
validations:
|
validations:
|
||||||
required: true
|
required: true
|
||||||
- type: textarea
|
- type: textarea
|
||||||
@@ -49,6 +57,14 @@ body:
|
|||||||
render: gdscript
|
render: gdscript
|
||||||
validations:
|
validations:
|
||||||
required: true
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
id: log
|
||||||
|
attributes:
|
||||||
|
label: Godot output
|
||||||
|
description: The output log from Godot
|
||||||
|
render: shell
|
||||||
|
validations:
|
||||||
|
required: false
|
||||||
- type: textarea
|
- type: textarea
|
||||||
id: additional
|
id: additional
|
||||||
attributes:
|
attributes:
|
||||||
@@ -63,5 +79,7 @@ body:
|
|||||||
label: Checks
|
label: Checks
|
||||||
description: Common mistakes (Adding more in the future sorry btw)
|
description: Common mistakes (Adding more in the future sorry btw)
|
||||||
options:
|
options:
|
||||||
- label: I tried reinstalling the addon in a new project.
|
- label: I tried reinstalling the addon or tried to fix it myself with other methods.
|
||||||
|
required: true
|
||||||
|
- label: I tried restarting Discord and Godot completely.
|
||||||
required: true
|
required: true
|
||||||
|
27
.github/ISSUE_TEMPLATE/FEATURE.yml
vendored
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
name: Feature request
|
||||||
|
description: File a feature request
|
||||||
|
title: "[Feature request]: "
|
||||||
|
labels: ["enhancement"]
|
||||||
|
assignees:
|
||||||
|
- vaporvee
|
||||||
|
body:
|
||||||
|
- type: markdown
|
||||||
|
attributes:
|
||||||
|
value: Thanks for taking the time to fill out this feature request!
|
||||||
|
- type: textarea
|
||||||
|
id: idea
|
||||||
|
attributes:
|
||||||
|
label: What is your idea?
|
||||||
|
description: Tell me what you want to see in the addon.
|
||||||
|
placeholder: Tell me what you want to see!
|
||||||
|
value: "I have a cool new feature!"
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
id: additional
|
||||||
|
attributes:
|
||||||
|
label: Additional information
|
||||||
|
description: If you have anything else tell me here
|
||||||
|
placeholder: Anything else.
|
||||||
|
validations:
|
||||||
|
required: false
|
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
|
||||||
|
});
|
||||||
|
}
|
5
.gitignore
vendored
@@ -19,4 +19,7 @@ build/
|
|||||||
*.lib
|
*.lib
|
||||||
|
|
||||||
#Clean files from the Game SDK
|
#Clean files from the Game SDK
|
||||||
src/lib/discord_game_sdk/
|
src/lib/discord_game_sdk/
|
||||||
|
|
||||||
|
# release.py
|
||||||
|
release/
|
5
.vscode/c_cpp_properties.json
vendored
@@ -3,7 +3,10 @@
|
|||||||
{
|
{
|
||||||
"name": "Win32",
|
"name": "Win32",
|
||||||
"includePath": [
|
"includePath": [
|
||||||
"${default}"
|
"${default}",
|
||||||
|
"${workspaceFolder}/src/lib/godot-cpp/gen/include",
|
||||||
|
"${workspaceFolder}/src/lib/godot-cpp/include",
|
||||||
|
"${workspaceFolder}/src/lib/godot-cpp/gdextension"
|
||||||
],
|
],
|
||||||
"defines": [
|
"defines": [
|
||||||
"_DEBUG",
|
"_DEBUG",
|
||||||
|
64
.vscode/settings.json
vendored
@@ -1,11 +1,67 @@
|
|||||||
{
|
{
|
||||||
"C_Cpp.default.includePath": [
|
"C_Cpp.default.includePath": [
|
||||||
"src/lib/godot-cpp/include",
|
"${workspaceFolder}/src/lib/godot-cpp/gen/include",
|
||||||
"src/lib/godot-cpp/gen/include",
|
"${workspaceFolder}/src/lib/godot-cpp/include"
|
||||||
"src/lib/godot-cpp/gdextension"
|
|
||||||
],
|
],
|
||||||
"files.associations": {
|
"files.associations": {
|
||||||
"xlocbuf": "cpp"
|
"xlocbuf": "cpp",
|
||||||
|
"algorithm": "cpp",
|
||||||
|
"array": "cpp",
|
||||||
|
"atomic": "cpp",
|
||||||
|
"bit": "cpp",
|
||||||
|
"cctype": "cpp",
|
||||||
|
"clocale": "cpp",
|
||||||
|
"cmath": "cpp",
|
||||||
|
"compare": "cpp",
|
||||||
|
"concepts": "cpp",
|
||||||
|
"csignal": "cpp",
|
||||||
|
"cstddef": "cpp",
|
||||||
|
"cstdint": "cpp",
|
||||||
|
"cstdio": "cpp",
|
||||||
|
"cstdlib": "cpp",
|
||||||
|
"cstring": "cpp",
|
||||||
|
"ctime": "cpp",
|
||||||
|
"cwchar": "cpp",
|
||||||
|
"exception": "cpp",
|
||||||
|
"functional": "cpp",
|
||||||
|
"initializer_list": "cpp",
|
||||||
|
"ios": "cpp",
|
||||||
|
"iosfwd": "cpp",
|
||||||
|
"iostream": "cpp",
|
||||||
|
"istream": "cpp",
|
||||||
|
"iterator": "cpp",
|
||||||
|
"limits": "cpp",
|
||||||
|
"list": "cpp",
|
||||||
|
"memory": "cpp",
|
||||||
|
"new": "cpp",
|
||||||
|
"optional": "cpp",
|
||||||
|
"ostream": "cpp",
|
||||||
|
"ratio": "cpp",
|
||||||
|
"set": "cpp",
|
||||||
|
"stdexcept": "cpp",
|
||||||
|
"stop_token": "cpp",
|
||||||
|
"streambuf": "cpp",
|
||||||
|
"string": "cpp",
|
||||||
|
"system_error": "cpp",
|
||||||
|
"thread": "cpp",
|
||||||
|
"tuple": "cpp",
|
||||||
|
"type_traits": "cpp",
|
||||||
|
"typeinfo": "cpp",
|
||||||
|
"unordered_map": "cpp",
|
||||||
|
"utility": "cpp",
|
||||||
|
"vector": "cpp",
|
||||||
|
"xfacet": "cpp",
|
||||||
|
"xhash": "cpp",
|
||||||
|
"xiosbase": "cpp",
|
||||||
|
"xlocale": "cpp",
|
||||||
|
"xlocinfo": "cpp",
|
||||||
|
"xlocnum": "cpp",
|
||||||
|
"xmemory": "cpp",
|
||||||
|
"xstddef": "cpp",
|
||||||
|
"xstring": "cpp",
|
||||||
|
"xtr1common": "cpp",
|
||||||
|
"xtree": "cpp",
|
||||||
|
"xutility": "cpp"
|
||||||
},
|
},
|
||||||
"[python]": {
|
"[python]": {
|
||||||
"editor.defaultFormatter": "ms-python.black-formatter"
|
"editor.defaultFormatter": "ms-python.black-formatter"
|
||||||
|
59
README.md
@@ -1,52 +1,27 @@
|
|||||||
<img src="/project/assets/Banner.svg" alt="Project Banner" />
|
<img src="/project/assets/Banner.svg" alt="Project Banner" />
|
||||||
|
|
||||||

|
**Discord Game SDK support for GDScript in Godot Engine 4.1. with the easiest code pattern!**<br><br>
|
||||||
|
|
||||||
### :warning: This is an early version! MacOS support still doesn't work! In future versions there also will be invites, user info etc. very soon!
|
|
||||||
Don't forget to run the following command **if you clone this project** or files will be missing
|
|
||||||
|
|
||||||
```sh
|
|
||||||
python setup.py
|
|
||||||
```
|
|
||||||
# Addon Usage :rocket:
|
|
||||||
1. [Download the addon](https://github.com/vaporvee/discord-sdk-godot/releases/latest/download/ADDON-Discord-SDK-Godot.zip/)
|
|
||||||
2. Put the `addons/` folder in your Godot project
|
|
||||||
3. Enable the addon in your Project Settings under "Plugins" and "DiscordSDK". (if it doesn't show up restart your project and try again)
|
|
||||||
4. Restart your project
|
|
||||||
5. Create an Application under https://discord.com/developers/applications and get the Application ID
|
|
||||||
6. (optional) Set images under "Rich Presence" and "Art Assets" and remember the keys
|
|
||||||
```gdscript
|
|
||||||
extends Node
|
|
||||||
|
|
||||||
func _ready():
|
|
||||||
Discord_Activity.app_id = 1099618430065324082 # Application ID
|
|
||||||
print("Discord working: " + str(Discord_Activity.get_is_discord_working())) # A boolean if everything worked
|
|
||||||
Discord_Activity.details = "A demo activity by vaporvee#1231"
|
|
||||||
Discord_Activity.state = "Checkpoint 23/23"
|
|
||||||
|
|
||||||
Discord_Activity.large_image = "game" # Image key from "Art Assets"
|
|
||||||
Discord_Activity.large_image_text = "Try it now!"
|
|
||||||
Discord_Activity.small_image = "boss" # Image key from "Art Assets"
|
|
||||||
Discord_Activity.small_image_text = "Fighting the end boss! D:"
|
|
||||||
|
|
||||||
Discord_Activity.start_timestamp = int(Time.get_unix_time_from_system()) # "02:46 elapsed"
|
|
||||||
# Discord_Activity.end_timestamp = int(Time.get_unix_time_from_system()) + 3600 # +1 hour in unix time / "01:00 remaining"
|
|
||||||
|
|
||||||
Discord_Activity.refresh() # Always refresh after changing the values!
|
|
||||||
|
|
||||||
```
|
|
||||||
#### Then it will look similar to this:
|
|
||||||
<img src="/project/assets/ActivityPreview.svg" alt="Activity Preview" />
|
|
||||||
|
|
||||||
### [Try a built demo](https://github.com/vaporvee/discord-sdk-godot/releases/latest/download/Demo-Export.zip)
|
|
||||||
:incoming_envelope: Still questions? write an [issue](https://github.com/vaporvee/discord-sdk-godot/issues)! I'll answer very fast :)
|
|
||||||
|
|
||||||
<br />
|
<br />
|
||||||
|
# [Quick start :rocket: (click here)](https://github.com/vaporvee/discord-sdk-godot/wiki)
|
||||||
|
<br />
|
||||||
|
|
||||||
|
**A small donation with the sponsor button would be nice if you sell your project with this addon but is of course not mandatory!**
|
||||||
|
|
||||||
|
# Features
|
||||||
|
- Activities (Make people see what you are playing)
|
||||||
|
- 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">
|
||||||
|
<br />
|
||||||
|
|
||||||
<br />
|
<br />
|
||||||
|
|
||||||
### Credit
|
### Credit
|
||||||
[@Pukimaa](https://github.com/pukimaa) - Designer<br>
|
[@Pukimaa](https://github.com/pukimaa) - Designer<br>
|
||||||
[@koyuawsmbrtn](https://github.com/koyuawsmbrtn) - Getting it to work on MacOS (shes giving her best)
|
|
||||||
<br />
|
<br />
|
||||||
|
|
||||||
*This project is not endorsed or affiliated with Discord Inc. or the Godot Foundation.*
|
*This project is not endorsed or affiliated with Discord Inc. or the Godot Foundation.*
|
||||||
|
1
extended-user-info-api/.env.example
Normal file
@@ -0,0 +1 @@
|
|||||||
|
BOT_TOKEN="<your token>"
|
3
extended-user-info-api/.gitignore
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
.env
|
||||||
|
user_cache.json
|
||||||
|
vendor/
|
35
extended-user-info-api/go.mod
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
module discord-sdk-godot.vercel.app
|
||||||
|
|
||||||
|
go 1.21.0
|
||||||
|
|
||||||
|
require (
|
||||||
|
github.com/gin-gonic/gin v1.9.1
|
||||||
|
github.com/joho/godotenv v1.5.1
|
||||||
|
)
|
||||||
|
|
||||||
|
require (
|
||||||
|
github.com/bytedance/sonic v1.9.1 // indirect
|
||||||
|
github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 // indirect
|
||||||
|
github.com/gabriel-vasile/mimetype v1.4.2 // indirect
|
||||||
|
github.com/gin-contrib/sse v0.1.0 // indirect
|
||||||
|
github.com/go-playground/locales v0.14.1 // indirect
|
||||||
|
github.com/go-playground/universal-translator v0.18.1 // indirect
|
||||||
|
github.com/go-playground/validator/v10 v10.14.0 // indirect
|
||||||
|
github.com/goccy/go-json v0.10.2 // indirect
|
||||||
|
github.com/json-iterator/go v1.1.12 // indirect
|
||||||
|
github.com/klauspost/cpuid/v2 v2.2.4 // indirect
|
||||||
|
github.com/leodido/go-urn v1.2.4 // indirect
|
||||||
|
github.com/mattn/go-isatty v0.0.19 // indirect
|
||||||
|
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
|
||||||
|
github.com/modern-go/reflect2 v1.0.2 // indirect
|
||||||
|
github.com/pelletier/go-toml/v2 v2.0.8 // indirect
|
||||||
|
github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
|
||||||
|
github.com/ugorji/go/codec v1.2.11 // indirect
|
||||||
|
golang.org/x/arch v0.3.0 // indirect
|
||||||
|
golang.org/x/crypto v0.9.0 // indirect
|
||||||
|
golang.org/x/net v0.10.0 // indirect
|
||||||
|
golang.org/x/sys v0.8.0 // indirect
|
||||||
|
golang.org/x/text v0.9.0 // indirect
|
||||||
|
google.golang.org/protobuf v1.30.0 // indirect
|
||||||
|
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||||
|
)
|
88
extended-user-info-api/go.sum
Normal file
@@ -0,0 +1,88 @@
|
|||||||
|
github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM=
|
||||||
|
github.com/bytedance/sonic v1.9.1 h1:6iJ6NqdoxCDr6mbY8h18oSO+cShGSMRGCEo7F2h0x8s=
|
||||||
|
github.com/bytedance/sonic v1.9.1/go.mod h1:i736AoUSYt75HyZLoJW9ERYxcy6eaN6h4BZXU064P/U=
|
||||||
|
github.com/chenzhuoyu/base64x v0.0.0-20211019084208-fb5309c8db06/go.mod h1:DH46F32mSOjUmXrMHnKwZdA8wcEefY7UVqBKYGjpdQY=
|
||||||
|
github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 h1:qSGYFH7+jGhDF8vLC+iwCD4WpbV1EBDSzWkJODFLams=
|
||||||
|
github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk=
|
||||||
|
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
|
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||||
|
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
|
github.com/gabriel-vasile/mimetype v1.4.2 h1:w5qFW6JKBz9Y393Y4q372O9A7cUSequkh1Q7OhCmWKU=
|
||||||
|
github.com/gabriel-vasile/mimetype v1.4.2/go.mod h1:zApsH/mKG4w07erKIaJPFiX0Tsq9BFQgN3qGY5GnNgA=
|
||||||
|
github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
|
||||||
|
github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
|
||||||
|
github.com/gin-gonic/gin v1.9.1 h1:4idEAncQnU5cB7BeOkPtxjfCSye0AAm1R0RVIqJ+Jmg=
|
||||||
|
github.com/gin-gonic/gin v1.9.1/go.mod h1:hPrL7YrpYKXt5YId3A/Tnip5kqbEAP+KLuI3SUcPTeU=
|
||||||
|
github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s=
|
||||||
|
github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
|
||||||
|
github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA=
|
||||||
|
github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY=
|
||||||
|
github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY=
|
||||||
|
github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY=
|
||||||
|
github.com/go-playground/validator/v10 v10.14.0 h1:vgvQWe3XCz3gIeFDm/HnTIbj6UGmg/+t63MyGU2n5js=
|
||||||
|
github.com/go-playground/validator/v10 v10.14.0/go.mod h1:9iXMNT7sEkjXb0I+enO7QXmzG6QCsPWY4zveKFVRSyU=
|
||||||
|
github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU=
|
||||||
|
github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
|
||||||
|
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
|
||||||
|
github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU=
|
||||||
|
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||||
|
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
||||||
|
github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0=
|
||||||
|
github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=
|
||||||
|
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
|
||||||
|
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
|
||||||
|
github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
|
||||||
|
github.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZXnvk=
|
||||||
|
github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY=
|
||||||
|
github.com/leodido/go-urn v1.2.4 h1:XlAE/cm/ms7TE/VMVoduSpNBoyc2dOxHs5MZSwAN63Q=
|
||||||
|
github.com/leodido/go-urn v1.2.4/go.mod h1:7ZrI8mTSeBSHl/UaRyKQW1qZeMgak41ANeCNaVckg+4=
|
||||||
|
github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA=
|
||||||
|
github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
|
||||||
|
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
||||||
|
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
|
||||||
|
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
||||||
|
github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
|
||||||
|
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
|
||||||
|
github.com/pelletier/go-toml/v2 v2.0.8 h1:0ctb6s9mE31h0/lhu+J6OPmVeDxJn+kYnJc2jZR9tGQ=
|
||||||
|
github.com/pelletier/go-toml/v2 v2.0.8/go.mod h1:vuYfssBdrU2XDZ9bYydBu6t+6a6PYNcZljzZR9VXg+4=
|
||||||
|
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||||
|
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
|
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||||
|
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
|
||||||
|
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
|
||||||
|
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||||
|
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||||
|
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||||
|
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
|
||||||
|
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
|
||||||
|
github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
|
||||||
|
github.com/stretchr/testify v1.8.3 h1:RP3t2pwF7cMEbC1dqtB6poj3niw/9gnV4Cjg5oW5gtY=
|
||||||
|
github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
|
||||||
|
github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI=
|
||||||
|
github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08=
|
||||||
|
github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4dU=
|
||||||
|
github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg=
|
||||||
|
golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8=
|
||||||
|
golang.org/x/arch v0.3.0 h1:02VY4/ZcO/gBOH6PUaoiptASxtXU10jazRCP865E97k=
|
||||||
|
golang.org/x/arch v0.3.0/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8=
|
||||||
|
golang.org/x/crypto v0.9.0 h1:LF6fAI+IutBocDJ2OT0Q1g8plpYljMZ4+lty+dsqw3g=
|
||||||
|
golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0=
|
||||||
|
golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M=
|
||||||
|
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
|
||||||
|
golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU=
|
||||||
|
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE=
|
||||||
|
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
|
||||||
|
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
|
||||||
|
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
|
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
|
||||||
|
google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng=
|
||||||
|
google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
|
||||||
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
|
||||||
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
|
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
|
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||||
|
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
|
rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=
|
200
extended-user-info-api/main.go
Normal file
@@ -0,0 +1,200 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"io"
|
||||||
|
"io/ioutil"
|
||||||
|
"net/http"
|
||||||
|
"os"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
"sync"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"github.com/joho/godotenv"
|
||||||
|
)
|
||||||
|
|
||||||
|
type User struct {
|
||||||
|
GlobalName string `json:"global_name"`
|
||||||
|
PublicFlags int `json:"public_flags"`
|
||||||
|
Flags int `json:"flags"`
|
||||||
|
AccentColor string `json:"accent_color"`
|
||||||
|
AvatarDecorationURL string `json:"avatar_decoration"`
|
||||||
|
BannerURL string `json:"banner_url"`
|
||||||
|
BannerColor string `json:"banner_color"`
|
||||||
|
}
|
||||||
|
|
||||||
|
var cacheMutex sync.Mutex
|
||||||
|
|
||||||
|
const cacheFilePath = "user_cache.json"
|
||||||
|
|
||||||
|
func readCacheFile() (map[string]User, error) {
|
||||||
|
cacheMutex.Lock()
|
||||||
|
defer cacheMutex.Unlock()
|
||||||
|
|
||||||
|
data, err := ioutil.ReadFile(cacheFilePath)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var cacheData map[string]User
|
||||||
|
err = json.Unmarshal(data, &cacheData)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return cacheData, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func writeCacheFile(cacheData map[string]User) error {
|
||||||
|
cacheMutex.Lock()
|
||||||
|
defer cacheMutex.Unlock()
|
||||||
|
|
||||||
|
data, err := json.Marshal(cacheData)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
err = ioutil.WriteFile(cacheFilePath, data, 0644)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
r := gin.Default()
|
||||||
|
r.GET("/:userIDs", func(c *gin.Context) {
|
||||||
|
userIDs := strings.Split(c.Param("userIDs"), ",")
|
||||||
|
|
||||||
|
if len(userIDs) == 0 {
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"error": "No user IDs provided"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Load cached data if available
|
||||||
|
userResponses := make(map[string]User)
|
||||||
|
cacheData, err := readCacheFile()
|
||||||
|
if err == nil {
|
||||||
|
userResponses = cacheData
|
||||||
|
}
|
||||||
|
|
||||||
|
godotenv.Load()
|
||||||
|
botToken := os.Getenv("BOT_TOKEN")
|
||||||
|
client := &http.Client{}
|
||||||
|
|
||||||
|
for _, userID := range userIDs {
|
||||||
|
if cachedUser, found := userResponses[userID]; found {
|
||||||
|
userResponses[userID] = cachedUser
|
||||||
|
} else {
|
||||||
|
for {
|
||||||
|
req, err := http.NewRequest("GET", "https://discord.com/api/v10/users/"+userID, nil)
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
req.Header.Add("Authorization", "Bot "+botToken)
|
||||||
|
req.Header.Add("Content-Type", "application/json")
|
||||||
|
|
||||||
|
res, err := client.Do(req)
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
defer res.Body.Close()
|
||||||
|
|
||||||
|
if res.StatusCode == http.StatusTooManyRequests {
|
||||||
|
retryAfter := parseRetryAfterHeader(res.Header)
|
||||||
|
if retryAfter > 0 {
|
||||||
|
time.Sleep(retryAfter)
|
||||||
|
continue // Retry the request after waiting
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
body, err := io.ReadAll(res.Body)
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var jsonMap map[string]interface{}
|
||||||
|
if err := json.Unmarshal(body, &jsonMap); err != nil {
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
user := User{
|
||||||
|
GlobalName: getStringFromMap(jsonMap, "global_name"),
|
||||||
|
PublicFlags: getIntFromMap(jsonMap, "public_flags"),
|
||||||
|
Flags: getIntFromMap(jsonMap, "flags"),
|
||||||
|
AccentColor: getStringFromMap(jsonMap, "accent_color"),
|
||||||
|
BannerColor: getStringFromMap(jsonMap, "banner_color"),
|
||||||
|
}
|
||||||
|
|
||||||
|
if avatarDecoration, ok := jsonMap["avatar_decoration"].(string); ok {
|
||||||
|
user.AvatarDecorationURL = "https://cdn.discordapp.com/avatar-decorations/" + userID + "/" + avatarDecoration + ".png"
|
||||||
|
}
|
||||||
|
|
||||||
|
if banner, ok := jsonMap["banner"].(string); ok {
|
||||||
|
user.BannerURL = "https://cdn.discordapp.com/banners/" + userID + "/" + banner + ".png"
|
||||||
|
}
|
||||||
|
|
||||||
|
userResponses[userID] = user
|
||||||
|
break // Exit the loop and process the next user ID
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Save the cache data to file
|
||||||
|
err = writeCacheFile(userResponses)
|
||||||
|
if err != nil {
|
||||||
|
// Handle error
|
||||||
|
}
|
||||||
|
|
||||||
|
responseData := make(map[string]User)
|
||||||
|
for _, userID := range userIDs {
|
||||||
|
if user, found := userResponses[userID]; found {
|
||||||
|
responseData[userID] = user
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
c.JSON(http.StatusOK, responseData)
|
||||||
|
})
|
||||||
|
|
||||||
|
r.GET("/", func(c *gin.Context) {
|
||||||
|
c.Writer.WriteHeader(http.StatusOK)
|
||||||
|
c.Writer.Write([]byte("<html><body>Please provide a comma-separated list of Discord user IDs or a single user ID in the URL. Example: /688778053408784415,369216554950328320 <br> <a href=\"https://github.com/vaporvee/discord-sdk-godot/\">GitHub project</a></body></html>"))
|
||||||
|
})
|
||||||
|
|
||||||
|
r.Run(":8080")
|
||||||
|
}
|
||||||
|
|
||||||
|
func parseRetryAfterHeader(headers http.Header) time.Duration {
|
||||||
|
retryAfterStr := headers.Get("Retry-After")
|
||||||
|
if retryAfterStr == "" {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
retryAfter, err := strconv.Atoi(retryAfterStr)
|
||||||
|
if err != nil {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
return time.Duration(retryAfter) * time.Millisecond
|
||||||
|
}
|
||||||
|
|
||||||
|
func getStringFromMap(m map[string]interface{}, key string) string {
|
||||||
|
if val, ok := m[key].(string); ok {
|
||||||
|
return val
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
func getIntFromMap(m map[string]interface{}, key string) int {
|
||||||
|
if val, ok := m[key].(float64); ok {
|
||||||
|
return int(val)
|
||||||
|
}
|
||||||
|
return 0
|
||||||
|
}
|
BIN
project/Node
Normal file
After Width: | Height: | Size: 1.3 KiB |
10
project/addons/discord-sdk-gd/Debug.svg
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<g clip-path="url(#clip0_110_26)">
|
||||||
|
<path d="M13.3334 5.33333H11.4601C11.1594 4.81182 10.7446 4.36512 10.2467 4.02667L11.3334 2.94L10.3934 2L8.94675 3.44667C8.64008 3.37333 8.32675 3.33333 8.00008 3.33333C7.67341 3.33333 7.36008 3.37333 7.06008 3.44667L5.60675 2L4.66675 2.94L5.74675 4.02667C5.25341 4.36667 4.84008 4.81333 4.54008 5.33333H2.66675V6.66667H4.06008C4.02675 6.88667 4.00008 7.10667 4.00008 7.33333V8H2.66675V9.33333H4.00008V10C4.00008 10.2267 4.02675 10.4467 4.06008 10.6667H2.66675V12H4.54008C5.23341 13.1933 6.52008 14 8.00008 14C9.48008 14 10.7667 13.1933 11.4601 12H13.3334V10.6667H11.9401C11.9734 10.4467 12.0001 10.2267 12.0001 10V9.33333H13.3334V8H12.0001V7.33333C12.0001 7.10667 11.9734 6.88667 11.9401 6.66667H13.3334V5.33333ZM9.33341 10.6667H6.66675V9.33333H9.33341V10.6667ZM9.33341 8H6.66675V6.66667H9.33341V8Z" fill="#5865F2"/>
|
||||||
|
</g>
|
||||||
|
<defs>
|
||||||
|
<clipPath id="clip0_110_26">
|
||||||
|
<rect width="16" height="16" fill="white"/>
|
||||||
|
</clipPath>
|
||||||
|
</defs>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.0 KiB |
@@ -2,16 +2,16 @@
|
|||||||
|
|
||||||
importer="texture"
|
importer="texture"
|
||||||
type="CompressedTexture2D"
|
type="CompressedTexture2D"
|
||||||
uid="uid://d1dntlgjiapde"
|
uid="uid://ufh1hha1ehui"
|
||||||
path="res://.godot/imported/Debug.svg-dbd0299514a2ed7480404c509868c103.ctex"
|
path="res://.godot/imported/Debug.svg-97b25f5d09dbf04212867cd1a46cf368.ctex"
|
||||||
metadata={
|
metadata={
|
||||||
"vram_texture": false
|
"vram_texture": false
|
||||||
}
|
}
|
||||||
|
|
||||||
[deps]
|
[deps]
|
||||||
|
|
||||||
source_file="res://assets/Debug.svg"
|
source_file="res://addons/discord-sdk-gd/Debug.svg"
|
||||||
dest_files=["res://.godot/imported/Debug.svg-dbd0299514a2ed7480404c509868c103.ctex"]
|
dest_files=["res://.godot/imported/Debug.svg-97b25f5d09dbf04212867cd1a46cf368.ctex"]
|
||||||
|
|
||||||
[params]
|
[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"
|
importer="texture"
|
||||||
type="CompressedTexture2D"
|
type="CompressedTexture2D"
|
||||||
uid="uid://cm3gqnd84wbvu"
|
uid="uid://csl0e2px0cwc1"
|
||||||
path="res://.godot/imported/Core Updater.png-3bb461d6b6e9b42b926c572ac9a4a10f.ctex"
|
path="res://.godot/imported/Logo_V2_No_Bg.png-9c8178062d6891c8370df63a912bd8e2.ctex"
|
||||||
metadata={
|
metadata={
|
||||||
"vram_texture": false
|
"vram_texture": false
|
||||||
}
|
}
|
||||||
|
|
||||||
[deps]
|
[deps]
|
||||||
|
|
||||||
source_file="res://assets/Core Updater.png"
|
source_file="res://addons/discord-sdk-gd/Logo_V2_No_Bg.png"
|
||||||
dest_files=["res://.godot/imported/Core Updater.png-3bb461d6b6e9b42b926c572ac9a4a10f.ctex"]
|
dest_files=["res://.godot/imported/Logo_V2_No_Bg.png-9c8178062d6891c8370df63a912bd8e2.ctex"]
|
||||||
|
|
||||||
[params]
|
[params]
|
||||||
|
|
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.1
|
||||||
|
|
||||||
|
[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": "" }
|
@@ -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"
|
|
@@ -1,25 +1,38 @@
|
|||||||
|
class_name DiscordSDKTutorial
|
||||||
extends Node
|
extends Node
|
||||||
|
|
||||||
# 1. Put the addons/ folder in your Godot project
|
## 1. Put the addons/ folder in your Godot project[br]
|
||||||
# 2. Enable the addon in your Project Settings under "Plugins" and "DiscordSDK". (if it doesn't show up restart your project and try again)
|
## 2. Enable the addon in your Project Settings under "Plugins" and "DiscordSDK". [br](if it doesn't show up restart your project and try again)[br]
|
||||||
# 3. Restart your project
|
## 3. Restart your project[br]
|
||||||
# 4. Create an Application under https://discord.com/developers/applications and get the Application ID
|
## 4. Create an Application under https://discord.com/developers/applications and get the Application ID br]
|
||||||
# 5. (optional) Set images under "Rich Presence" and "Art Assets" and remember the keys
|
## 5. (optional) Set images under "Rich Presence" and "Art Assets" and remember the keys[br]
|
||||||
|
##
|
||||||
#SELECT THE TEXT WITH YOUR MOUSE AND CTR + K TO UNCOMMENT THE FOLLOWING
|
## This is your [code]_ready()[/code] function wich could be anywhere
|
||||||
|
## [codeblock]
|
||||||
#func _ready():
|
## func _ready():
|
||||||
# Discord_Activity.app_id = 1099618430065324082 # Application ID
|
## # Application ID
|
||||||
# print("Discord working: " + str(Discord_Activity.get_is_discord_working())) # A boolean if everything worked
|
## discord_sdk.app_id = 1099618430065324082
|
||||||
# Discord_Activity.details = "A demo activity by vaporvee#1231"
|
## # this is boolean if everything worked
|
||||||
# Discord_Activity.state = "Checkpoint 23/23"
|
## print("Discord working: " + str(discord_sdk.get_is_discord_working()))
|
||||||
#
|
## # Set the first custom text row of the activity here
|
||||||
# Discord_Activity.large_image = "game" # Image key from "Art Assets"
|
## discord_sdk.details = "A demo activity by vaporvee#1231"
|
||||||
# Discord_Activity.large_image_text = "Try it now!"
|
## # Set the second custom text row of the activity here
|
||||||
# Discord_Activity.small_image = "boss" # Image key from "Art Assets"
|
## discord_sdk.state = "Checkpoint 23/23"
|
||||||
# Discord_Activity.small_image_text = "Fighting the end boss! D:"
|
## # Image key for small image from "Art Assets" from the Discord Developer website
|
||||||
#
|
## discord_sdk.large_image = "game"
|
||||||
# Discord_Activity.start_timestamp = int(Time.get_unix_time_from_system()) # "02:41 elapsed"
|
## # Tooltip text for the large image
|
||||||
# Discord_Activity.end_timestamp = int(Time.get_unix_time_from_system()) + 3600 # +1 hour in unix time
|
## discord_sdk.large_image_text = "Try it now!"
|
||||||
#
|
## # Image key for large image from "Art Assets" from the Discord Developer website
|
||||||
# Discord_Activity.refresh() # Always refresh after changing the values!
|
## discord_sdk.small_image = "boss"
|
||||||
|
## # Tooltip text for the small image
|
||||||
|
## discord_sdk.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())
|
||||||
|
## # "59:59 remaining" timestamp for the activity
|
||||||
|
## discord_sdk.end_timestamp = int(Time.get_unix_time_from_system()) + 3600
|
||||||
|
## # Always refresh after changing the values!
|
||||||
|
## discord_sdk.refresh()
|
||||||
|
## [/codeblock]
|
||||||
|
##
|
||||||
|
## @tutorial(More information here): https://github.com/vaporvee/discord-sdk-godot/wiki/Quick-start
|
||||||
|
## @tutorial(Make your Application ID and else here): https://discord.com/developers/applications
|
||||||
|
@@ -1,14 +0,0 @@
|
|||||||
@tool
|
|
||||||
extends EditorExportPlugin
|
|
||||||
|
|
||||||
func _export_file(path, type, features):
|
|
||||||
if features[2] == "windows":
|
|
||||||
if features[4] == "x86_64":
|
|
||||||
add_shared_object("res://addons/discord-sdk-gd/bin/windows/discord_game_sdk.dll",[],"/")
|
|
||||||
elif features[4] == "x86":
|
|
||||||
add_shared_object("res://addons/discord-sdk-gd/bin/windows/discord_game_sdk_x86.dll",[],"/")
|
|
||||||
elif features[2] == "linux":
|
|
||||||
add_shared_object("res://addons/discord-sdk-gd/bin/linux/libdiscord_game_sdk.so",[],"/")
|
|
||||||
elif features[2] == "macos":
|
|
||||||
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",[],"/")
|
|
266
project/addons/discord-sdk-gd/nodes/Debug.tscn
Normal file
@@ -0,0 +1,266 @@
|
|||||||
|
[gd_scene load_steps=9 format=3 uid="uid://c1slhdnlsv2qt"]
|
||||||
|
|
||||||
|
[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)
|
||||||
|
|
||||||
|
func _process(_delta):
|
||||||
|
if(discord_sdk.get_is_discord_working()):
|
||||||
|
$Panel/TextureRect.self_modulate = Color(\"#3eff8d\")
|
||||||
|
$Panel/TextureRect/AnimationPlayer.play(\"pulsate\")
|
||||||
|
debug_text_update()
|
||||||
|
else:
|
||||||
|
$Panel/TextureRect.self_modulate = Color(\"#797979\")
|
||||||
|
$Panel/TextureRect/AnimationPlayer.stop()
|
||||||
|
debug_text_update()
|
||||||
|
|
||||||
|
func debug_text_update():
|
||||||
|
$Panel/Info.text = \"Application ID : {id}
|
||||||
|
Details: {details}
|
||||||
|
State: {state}
|
||||||
|
|
||||||
|
Large image key: {lkey}
|
||||||
|
Large image text: {ltext}
|
||||||
|
Small image key: {skey}
|
||||||
|
Small image text: {stext}
|
||||||
|
|
||||||
|
Start timestamp: {stimestamp}
|
||||||
|
End timestamp: {etimestamp}
|
||||||
|
|
||||||
|
Party ID: {partyid}
|
||||||
|
Current party size: {cpartysize}
|
||||||
|
Max party size: {mpartysize}
|
||||||
|
Match secret: {msecret}
|
||||||
|
Join secret: {jsecret}
|
||||||
|
Spectate secret: {ssecret}
|
||||||
|
Is party public: {ppublic} (needs to be activated in Discord client settings)
|
||||||
|
|
||||||
|
Is instanced: {instanced}
|
||||||
|
\"
|
||||||
|
$Panel/Info.text = $Panel/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))
|
||||||
|
|
||||||
|
var user_request = {};
|
||||||
|
|
||||||
|
func _on_activity_join_request(user_requesting):
|
||||||
|
print(user_requesting)
|
||||||
|
user_request = user_requesting
|
||||||
|
|
||||||
|
func _on_accept_join_request_pressed():
|
||||||
|
if(!user_request.is_empty()):
|
||||||
|
discord_sdk.accept_join_request(user_request.id)
|
||||||
|
|
||||||
|
func _on_invite_with_user_id_text_submitted(new_text):
|
||||||
|
discord_sdk.send_invite(int(new_text),true,\"this is a test invite sent from godot\")
|
||||||
|
|
||||||
|
func _on_accept_with_user_id_text_submitted(new_text):
|
||||||
|
discord_sdk.accept_invite(int(new_text))
|
||||||
|
|
||||||
|
func _on_print_current_user_on_console_pressed():
|
||||||
|
print(discord_sdk.get_current_user())
|
||||||
|
|
||||||
|
func _on_toggle_sdk_toggled(button_pressed):
|
||||||
|
if(button_pressed):
|
||||||
|
discord_sdk.unclear()
|
||||||
|
else:
|
||||||
|
discord_sdk.clear()
|
||||||
|
|
||||||
|
func _on_print_friends_pressed():
|
||||||
|
print(discord_sdk.get_all_relationships())
|
||||||
|
"
|
||||||
|
|
||||||
|
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_8abo6"]
|
||||||
|
|
||||||
|
[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="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="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="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="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}
|
||||||
|
State: {state}
|
||||||
|
|
||||||
|
Large image key: {lkey}
|
||||||
|
Large image text: {ltext}
|
||||||
|
Small image key: {skey}
|
||||||
|
Small image text: {stext}
|
||||||
|
|
||||||
|
Start timestamp: {stimestamp}
|
||||||
|
End timestamp: {etimestamp}
|
||||||
|
|
||||||
|
Party ID: {partyid}
|
||||||
|
Current party size: {cpartysize}
|
||||||
|
Max party size: {mpartysize}
|
||||||
|
Match secret: {msecret}
|
||||||
|
Join secret: {jsecret}
|
||||||
|
Spectate secret: {ssecret}
|
||||||
|
Is party public: {ppublic} (needs to be activated in Discord client settings)
|
||||||
|
|
||||||
|
Is instanced: {instanced}
|
||||||
|
"
|
||||||
|
fit_content = true
|
||||||
|
|
||||||
|
[node name="PrintCurrentUserOnConsole" type="Button" parent="Panel"]
|
||||||
|
layout_mode = 1
|
||||||
|
anchors_preset = 4
|
||||||
|
anchor_top = 0.5
|
||||||
|
anchor_bottom = 0.5
|
||||||
|
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="PrintFriends" type="Button" parent="Panel"]
|
||||||
|
layout_mode = 1
|
||||||
|
anchors_preset = 4
|
||||||
|
anchor_top = 0.5
|
||||||
|
anchor_bottom = 0.5
|
||||||
|
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="Panel"]
|
||||||
|
layout_mode = 1
|
||||||
|
anchors_preset = 4
|
||||||
|
anchor_top = 0.5
|
||||||
|
anchor_bottom = 0.5
|
||||||
|
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="Panel"]
|
||||||
|
layout_mode = 1
|
||||||
|
anchors_preset = 4
|
||||||
|
anchor_top = 0.5
|
||||||
|
anchor_bottom = 0.5
|
||||||
|
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"
|
||||||
|
|
||||||
|
[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"]
|
18
project/addons/discord-sdk-gd/nodes/assets/Checked.svg
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
<svg width="834" height="500" viewBox="0 0 834 500" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<g clip-path="url(#clip0_162_85)">
|
||||||
|
<rect width="833.333" height="500" rx="250" fill="#23A55A"/>
|
||||||
|
<g clip-path="url(#clip1_162_85)">
|
||||||
|
<path d="M791.667 250C791.667 134.941 698.393 41.6666 583.333 41.6666C468.274 41.6666 375 134.941 375 250C375 365.059 468.274 458.333 583.333 458.333C698.393 458.333 791.667 365.059 791.667 250Z" fill="white"/>
|
||||||
|
<path d="M539.491 351.121L506.345 317.977L673.122 151.199L706.268 184.345L539.491 351.121Z" fill="#23A55A"/>
|
||||||
|
<path d="M460.134 272.714L493.279 239.568L571.844 318.133L538.698 351.279L460.134 272.714Z" fill="#23A55A"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<defs>
|
||||||
|
<clipPath id="clip0_162_85">
|
||||||
|
<rect width="833.333" height="500" rx="250" fill="white"/>
|
||||||
|
</clipPath>
|
||||||
|
<clipPath id="clip1_162_85">
|
||||||
|
<rect width="583.333" height="416.667" fill="white" transform="translate(291.667 41.6666)"/>
|
||||||
|
</clipPath>
|
||||||
|
</defs>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 926 B |
@@ -0,0 +1,37 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://dnfq6kug4x6o2"
|
||||||
|
path="res://.godot/imported/Checked.svg-152467b95b56fa0b9944b5cc25700916.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://addons/discord-sdk-gd/nodes/assets/Checked.svg"
|
||||||
|
dest_files=["res://.godot/imported/Checked.svg-152467b95b56fa0b9944b5cc25700916.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
|
18
project/addons/discord-sdk-gd/nodes/assets/Unchecked.svg
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
<svg width="834" height="500" viewBox="0 0 834 500" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<g clip-path="url(#clip0_162_79)">
|
||||||
|
<rect x="0.666687" width="833.333" height="500" rx="250" fill="#80848E"/>
|
||||||
|
<g clip-path="url(#clip1_162_79)">
|
||||||
|
<path d="M459 250C459 134.941 365.726 41.6666 250.667 41.6666C135.607 41.6666 42.3333 134.941 42.3333 250C42.3333 365.059 135.607 458.333 250.667 458.333C365.726 458.333 459 365.059 459 250Z" fill="white"/>
|
||||||
|
<path d="M149.257 181.868L182.402 148.722L351.813 318.134L318.667 351.28L149.257 181.868Z" fill="#80848E"/>
|
||||||
|
<path d="M318.801 148.722L351.946 181.868L182.535 351.28L149.389 318.134L318.801 148.722Z" fill="#80848E"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<defs>
|
||||||
|
<clipPath id="clip0_162_79">
|
||||||
|
<rect x="0.666687" width="833.333" height="500" rx="250" fill="white"/>
|
||||||
|
</clipPath>
|
||||||
|
<clipPath id="clip1_162_79">
|
||||||
|
<rect width="583.333" height="416.667" fill="white" transform="translate(-41 41.6666)"/>
|
||||||
|
</clipPath>
|
||||||
|
</defs>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 942 B |
@@ -0,0 +1,37 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://compmm3kviqqe"
|
||||||
|
path="res://.godot/imported/Unchecked.svg-91cff67e13e7a1508fbc6a949f5f5f52.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://addons/discord-sdk-gd/nodes/assets/Unchecked.svg"
|
||||||
|
dest_files=["res://.godot/imported/Unchecked.svg-91cff67e13e7a1508fbc6a949f5f5f52.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
|
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"
|
importer="texture"
|
||||||
type="CompressedTexture2D"
|
type="CompressedTexture2D"
|
||||||
uid="uid://2no2ced378ds"
|
uid="uid://dtc6ckladq0td"
|
||||||
path="res://.godot/imported/Core Updater.svg-75aabb825d7cf085efdd2bf5760ba312.ctex"
|
path="res://.godot/imported/circle.svg-ca71b895eb1c5e7e6f2f2afe081d28dd.ctex"
|
||||||
metadata={
|
metadata={
|
||||||
"vram_texture": false
|
"vram_texture": false
|
||||||
}
|
}
|
||||||
|
|
||||||
[deps]
|
[deps]
|
||||||
|
|
||||||
source_file="res://assets/Core Updater.svg"
|
source_file="res://addons/discord-sdk-gd/nodes/assets/circle.svg"
|
||||||
dest_files=["res://.godot/imported/Core Updater.svg-75aabb825d7cf085efdd2bf5760ba312.ctex"]
|
dest_files=["res://.godot/imported/circle.svg-ca71b895eb1c5e7e6f2f2afe081d28dd.ctex"]
|
||||||
|
|
||||||
[params]
|
[params]
|
||||||
|
|
23
project/addons/discord-sdk-gd/nodes/core_updater.gd
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
## [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
|
||||||
|
@tool
|
||||||
|
class_name core_updater
|
||||||
|
extends Node
|
||||||
|
|
||||||
|
func _process(_delta):
|
||||||
|
if(ProjectSettings.get_setting("DiscordSDK/EditorPresence/enabled") && Engine.is_editor_hint()):
|
||||||
|
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 || !Engine.is_editor_hint()):
|
||||||
|
discord_sdk.coreupdate()
|
11
project/addons/discord-sdk-gd/nodes/debug.gd
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
## This is a Debug Node wich will show some usefull info and buttons/input
|
||||||
|
##
|
||||||
|
## 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:
|
||||||
|
const DebugNodeGroup: PackedScene = preload("res://addons/discord-sdk-gd/nodes/Debug.tscn")
|
||||||
|
add_child(DebugNodeGroup.instantiate())
|
@@ -3,5 +3,5 @@
|
|||||||
name="DiscordSDK"
|
name="DiscordSDK"
|
||||||
description="Discord Game SDK support for GDScript in Godot"
|
description="Discord Game SDK support for GDScript in Godot"
|
||||||
author="vaporvee"
|
author="vaporvee"
|
||||||
version="1.5"
|
version="3.2"
|
||||||
script="plugin.gd"
|
script="plugin.gd"
|
||||||
|
@@ -1,13 +1,39 @@
|
|||||||
@tool
|
@tool
|
||||||
extends EditorPlugin
|
extends EditorPlugin
|
||||||
|
|
||||||
const ExportPlugin = preload("export.gd")
|
const DiscordSDKDebug = preload("res://addons/discord-sdk-gd/nodes/debug.gd")
|
||||||
var loaded_exportplugin = ExportPlugin.new()
|
const DiscordSDKDebug_icon = preload("res://addons/discord-sdk-gd/Debug.svg")
|
||||||
|
var loaded_DiscordSDKDebug = DiscordSDKDebug.new()
|
||||||
|
var restart_window: Control = preload("res://addons/discord-sdk-gd/restart_window.tscn").instantiate()
|
||||||
|
|
||||||
func _enter_tree():
|
|
||||||
add_autoload_singleton("updater_discordsdk", "res://addons/discord-sdk-gd/sdk_utility.gd")
|
|
||||||
add_export_plugin(loaded_exportplugin)
|
|
||||||
|
|
||||||
func disable_plugin():
|
func _enter_tree() -> void:
|
||||||
remove_autoload_singleton("updater_discordsdk")
|
add_custom_type("DiscordSDKDebug","Node",DiscordSDKDebug,DiscordSDKDebug_icon)
|
||||||
remove_export_plugin(loaded_exportplugin)
|
add_autoload_singleton("DiscordSDKLoader", "res://addons/discord-sdk-gd/nodes/core_updater.gd")
|
||||||
|
ProjectSettings.set_setting("DiscordSDK/EditorPresence/enabled",false)
|
||||||
|
ProjectSettings.set_as_basic("DiscordSDK/EditorPresence/enabled",true)
|
||||||
|
ProjectSettings.set_initial_value("DiscordSDK/EditorPresence/enabled",false)
|
||||||
|
ProjectSettings.set_restart_if_changed("DiscordSDK/EditorPresence/enabled",true)
|
||||||
|
|
||||||
|
func _enable_plugin() -> void:
|
||||||
|
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")
|
||||||
|
if FileAccess.file_exists(ProjectSettings.globalize_path("res://") + "addons/discord-sdk-gd/nodes/.gdignore"):
|
||||||
|
DirAccess.remove_absolute(ProjectSettings.globalize_path("res://") + "addons/discord-sdk-gd/nodes/.gdignore")
|
||||||
|
add_control_to_container(EditorPlugin.CONTAINER_TOOLBAR,restart_window)
|
||||||
|
restart_window.get_child(0).connect("canceled",save_restart)
|
||||||
|
restart_window.get_child(0).connect("confirmed",restart)
|
||||||
|
|
||||||
|
func _disable_plugin() -> void:
|
||||||
|
FileAccess.open("res://addons/discord-sdk-gd/bin/.gdignore",FileAccess.WRITE)
|
||||||
|
FileAccess.open("res://addons/discord-sdk-gd/nodes/.gdignore",FileAccess.WRITE)
|
||||||
|
push_warning("DiscordSDK Addon got disabled. PLEASE RESTART THE EDITOR!")
|
||||||
|
remove_autoload_singleton("DiscordSDKLoader")
|
||||||
|
remove_custom_type("DiscordSDKDebug")
|
||||||
|
ProjectSettings.clear("DiscordSDK/EditorPresence/enabled")
|
||||||
|
|
||||||
|
func save_restart() -> void:
|
||||||
|
get_editor_interface().restart_editor(true)
|
||||||
|
|
||||||
|
func restart() -> void:
|
||||||
|
get_editor_interface().restart_editor(false)
|
||||||
|
115
project/addons/discord-sdk-gd/restart_window.tscn
Normal file
@@ -0,0 +1,115 @@
|
|||||||
|
[gd_scene load_steps=8 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_f828l"]
|
||||||
|
|
||||||
|
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_1t7mm"]
|
||||||
|
|
||||||
|
[sub_resource type="Theme" id="Theme_swwco"]
|
||||||
|
Button/styles/focus = SubResource("StyleBoxEmpty_1t7mm")
|
||||||
|
|
||||||
|
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_5vqdt"]
|
||||||
|
|
||||||
|
[sub_resource type="Image" id="Image_inmd8"]
|
||||||
|
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_inmd8")
|
||||||
|
|
||||||
|
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_7v0rg"]
|
||||||
|
|
||||||
|
[node name="RestartWindow" type="Control"]
|
||||||
|
layout_mode = 3
|
||||||
|
anchors_preset = 8
|
||||||
|
anchor_left = 0.5
|
||||||
|
anchor_top = 0.5
|
||||||
|
anchor_right = 0.5
|
||||||
|
anchor_bottom = 0.5
|
||||||
|
offset_left = -200.0
|
||||||
|
offset_top = -171.5
|
||||||
|
offset_right = 200.0
|
||||||
|
offset_bottom = 171.5
|
||||||
|
grow_horizontal = 2
|
||||||
|
grow_vertical = 2
|
||||||
|
size_flags_horizontal = 4
|
||||||
|
size_flags_vertical = 4
|
||||||
|
|
||||||
|
[node name="ConfirmationDialog" type="ConfirmationDialog" parent="."]
|
||||||
|
title = "Restart required"
|
||||||
|
initial_position = 2
|
||||||
|
size = Vector2i(416, 400)
|
||||||
|
visible = true
|
||||||
|
transient = false
|
||||||
|
unresizable = true
|
||||||
|
theme = SubResource("Theme_swwco")
|
||||||
|
ok_button_text = "Restart"
|
||||||
|
cancel_button_text = "Save and restart"
|
||||||
|
|
||||||
|
[node name="Panel" type="Panel" parent="ConfirmationDialog"]
|
||||||
|
offset_left = 8.0
|
||||||
|
offset_top = 8.0
|
||||||
|
offset_right = 408.0
|
||||||
|
offset_bottom = 351.0
|
||||||
|
mouse_filter = 1
|
||||||
|
|
||||||
|
[node name="VBoxContainer" type="VBoxContainer" parent="ConfirmationDialog/Panel"]
|
||||||
|
custom_minimum_size = Vector2(400, 0)
|
||||||
|
layout_mode = 0
|
||||||
|
offset_right = 400.0
|
||||||
|
offset_bottom = 309.0
|
||||||
|
|
||||||
|
[node name="HSeparator" type="HSeparator" parent="ConfirmationDialog/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="ConfirmationDialog/Panel/VBoxContainer"]
|
||||||
|
layout_mode = 2
|
||||||
|
size_flags_horizontal = 4
|
||||||
|
size_flags_vertical = 4
|
||||||
|
|
||||||
|
[node name="DocsIcon" type="TextureRect" parent="ConfirmationDialog/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="ConfirmationDialog/Panel/VBoxContainer/HBoxContainer"]
|
||||||
|
layout_mode = 2
|
||||||
|
size_flags_horizontal = 4
|
||||||
|
size_flags_vertical = 8
|
||||||
|
mouse_default_cursor_shape = 16
|
||||||
|
text = "Plugin Docs"
|
||||||
|
uri = "https://github.com/vaporvee/discord-sdk-godot/wiki"
|
||||||
|
|
||||||
|
[node name="TextureRect" type="TextureRect" parent="ConfirmationDialog/Panel/VBoxContainer"]
|
||||||
|
custom_minimum_size = Vector2(128, 128)
|
||||||
|
layout_mode = 2
|
||||||
|
size_flags_horizontal = 4
|
||||||
|
size_flags_vertical = 0
|
||||||
|
texture = ExtResource("1_f828l")
|
||||||
|
expand_mode = 1
|
||||||
|
|
||||||
|
[node name="RichTextLabel" type="RichTextLabel" parent="ConfirmationDialog/Panel/VBoxContainer"]
|
||||||
|
custom_minimum_size = Vector2(400, 200)
|
||||||
|
layout_mode = 2
|
||||||
|
size_flags_horizontal = 4
|
||||||
|
size_flags_vertical = 0
|
||||||
|
mouse_filter = 1
|
||||||
|
theme_override_styles/normal = SubResource("StyleBoxEmpty_7v0rg")
|
||||||
|
bbcode_enabled = true
|
||||||
|
text = "[center]Thanks for enabling the
|
||||||
|
[rainbow]Discord Game SDK Plugin[/rainbow]
|
||||||
|
made by vaporvee. ❤️
|
||||||
|
|
||||||
|
|
||||||
|
You need to [wave]restart[/wave] the editor to fully enable this plugin!
|
||||||
|
Do you want to [wave]save[/wave] your project before restarting?
|
||||||
|
(Error messages after the first restart are normal. Please ignore them)"
|
@@ -1,4 +0,0 @@
|
|||||||
extends Node
|
|
||||||
|
|
||||||
func _process(delta):
|
|
||||||
Discord_Activity.coreupdate()
|
|
BIN
project/assets/1.png
Normal file
After Width: | Height: | Size: 1.3 KiB |
@@ -2,16 +2,16 @@
|
|||||||
|
|
||||||
importer="texture"
|
importer="texture"
|
||||||
type="CompressedTexture2D"
|
type="CompressedTexture2D"
|
||||||
uid="uid://b5dn3rnp5eqqp"
|
uid="uid://ht210p8vs8s7"
|
||||||
path="res://.godot/imported/Debug.png-81b23c4a8a55e89d458626f08de3d2fb.ctex"
|
path="res://.godot/imported/1.png-c9a8e694d0d275633d567702fb508122.ctex"
|
||||||
metadata={
|
metadata={
|
||||||
"vram_texture": false
|
"vram_texture": false
|
||||||
}
|
}
|
||||||
|
|
||||||
[deps]
|
[deps]
|
||||||
|
|
||||||
source_file="res://assets/Debug.png"
|
source_file="res://assets/1.png"
|
||||||
dest_files=["res://.godot/imported/Debug.png-81b23c4a8a55e89d458626f08de3d2fb.ctex"]
|
dest_files=["res://.godot/imported/1.png-c9a8e694d0d275633d567702fb508122.ctex"]
|
||||||
|
|
||||||
[params]
|
[params]
|
||||||
|
|
Before Width: | Height: | Size: 6.4 KiB |
@@ -1,6 +0,0 @@
|
|||||||
<svg width="512" height="512" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<g id="Discord Other">
|
|
||||||
<path id="Vector" d="M389.77 149.331V469.331H335.043V149.331L273.052 212.264L234.665 173.064L362.534 42.664L490.666 173.064L452.278 213.064L389.77 149.331Z" fill="#5865F2"/>
|
|
||||||
<path id="Vector_2" d="M122.228 362.666V42.664H176.955L176.955 362.666L238.945 299.731L277.332 338.931L149.462 469.331L21.332 338.931L59.719 298.931L122.228 362.666Z" fill="#5865F2"/>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 493 B |
Before Width: | Height: | Size: 5.2 KiB |
@@ -1,5 +0,0 @@
|
|||||||
<svg width="512" height="512" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<g id="Discord Other">
|
|
||||||
<path id="Vector" d="M426.667 170.667H366.72C357.098 153.978 343.824 139.684 327.893 128.853L362.667 94.08L332.587 64L286.293 110.293C276.48 107.947 266.453 106.667 256 106.667C245.547 106.667 235.52 107.947 225.92 110.293L179.413 64L149.333 94.08L183.893 128.853C168.107 139.733 154.88 154.027 145.28 170.667H85.3333V213.333H129.92C128.853 220.373 128 227.413 128 234.667V256H85.3333V298.667H128V320C128 327.253 128.853 334.293 129.92 341.333H85.3333V384H145.28C167.467 422.187 208.64 448 256 448C303.36 448 344.533 422.187 366.72 384H426.667V341.333H382.08C383.147 334.293 384 327.253 384 320V298.667H426.667V256H384V234.667C384 227.413 383.147 220.373 382.08 213.333H426.667V170.667ZM298.667 341.333H213.333V298.667H298.667V341.333ZM298.667 256H213.333V213.333H298.667V256Z" fill="#5865F2"/>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 930 B |
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"
|
export_filter="all_resources"
|
||||||
include_filter=""
|
include_filter=""
|
||||||
exclude_filter=""
|
exclude_filter=""
|
||||||
export_path="../../demo/Discord_Activity.exe"
|
export_path="../../eexport/windows/discord-sdk-godot-demo.exe"
|
||||||
encryption_include_filters=""
|
encryption_include_filters=""
|
||||||
encryption_exclude_filters=""
|
encryption_exclude_filters=""
|
||||||
encrypt_pck=false
|
encrypt_pck=false
|
||||||
encrypt_directory=false
|
encrypt_directory=false
|
||||||
script_encryption_key=""
|
|
||||||
|
|
||||||
[preset.0.options]
|
[preset.0.options]
|
||||||
|
|
||||||
custom_template/debug=""
|
custom_template/debug=""
|
||||||
custom_template/release=""
|
custom_template/release=""
|
||||||
debug/export_console_script=1
|
debug/export_console_wrapper=1
|
||||||
binary_format/embed_pck=true
|
binary_format/embed_pck=true
|
||||||
texture_format/bptc=true
|
texture_format/bptc=true
|
||||||
texture_format/s3tc=true
|
texture_format/s3tc=true
|
||||||
@@ -27,23 +26,20 @@ texture_format/etc=false
|
|||||||
texture_format/etc2=false
|
texture_format/etc2=false
|
||||||
binary_format/architecture="x86_64"
|
binary_format/architecture="x86_64"
|
||||||
codesign/enable=false
|
codesign/enable=false
|
||||||
codesign/identity_type=0
|
|
||||||
codesign/identity=""
|
|
||||||
codesign/password=""
|
|
||||||
codesign/timestamp=true
|
codesign/timestamp=true
|
||||||
codesign/timestamp_server_url=""
|
codesign/timestamp_server_url=""
|
||||||
codesign/digest_algorithm=1
|
codesign/digest_algorithm=1
|
||||||
codesign/description=""
|
codesign/description=""
|
||||||
codesign/custom_options=PackedStringArray()
|
codesign/custom_options=PackedStringArray()
|
||||||
application/modify_resources=false
|
application/modify_resources=true
|
||||||
application/icon=""
|
application/icon="res://assets/Logo_V2.png"
|
||||||
application/console_wrapper_icon=""
|
application/console_wrapper_icon=""
|
||||||
application/icon_interpolation=4
|
application/icon_interpolation=4
|
||||||
application/file_version=""
|
application/file_version=""
|
||||||
application/product_version=""
|
application/product_version=""
|
||||||
application/company_name=""
|
application/company_name=""
|
||||||
application/product_name=""
|
application/product_name=""
|
||||||
application/file_description=""
|
application/file_description="Discord SDK Godot Test"
|
||||||
application/copyright=""
|
application/copyright=""
|
||||||
application/trademarks=""
|
application/trademarks=""
|
||||||
ssh_remote_deploy/enabled=false
|
ssh_remote_deploy/enabled=false
|
||||||
@@ -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
|
ssh_remote_deploy/cleanup_script="Stop-ScheduledTask -TaskName godot_remote_debug -ErrorAction:SilentlyContinue
|
||||||
Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue
|
Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue
|
||||||
Remove-Item -Recurse -Force '{temp_dir}'"
|
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}\""
|
||||||
|
@@ -1,18 +1,63 @@
|
|||||||
extends Node
|
extends Node
|
||||||
|
|
||||||
func _ready():
|
func _ready() -> void:
|
||||||
Discord_Activity.app_id = 1099618430065324082
|
set_activity()
|
||||||
Discord_Activity.details = "A demo activity by vaporvee#1231"
|
discord_sdk.connect("activity_join_request",_on_activity_join_request)
|
||||||
Discord_Activity.state = "Checkpoint 23/23"
|
discord_sdk.connect("activity_join",_on_activity_join)
|
||||||
|
discord_sdk.connect("activity_spectate",_on_activity_spectate)
|
||||||
|
discord_sdk.connect("relationships_init",_on_relationship_init)
|
||||||
|
discord_sdk.connect("updated_relationship", _on_updated_relationship)
|
||||||
|
|
||||||
Discord_Activity.large_image = "game"
|
func set_activity() -> void:
|
||||||
Discord_Activity.large_image_text = "Try it now!"
|
discord_sdk.clear()
|
||||||
Discord_Activity.small_image = "boss"
|
discord_sdk.app_id = 1099618430065324082
|
||||||
Discord_Activity.small_image_text = "Fighting the end boss! D:"
|
discord_sdk.details = "A demo activity by vaporvee#1231"
|
||||||
|
discord_sdk.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
|
||||||
|
|
||||||
|
# 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()
|
||||||
|
|
||||||
#Discord_Activity.start_timestamp = int(Time.get_unix_time_from_system())
|
var user_request: Dictionary;
|
||||||
Discord_Activity.end_timestamp = int(Time.get_unix_time_from_system()) + 3600 # +1 hour in unix time
|
|
||||||
|
|
||||||
Discord_Activity.refresh()
|
func _on_activity_join_request(user_requesting) -> void:
|
||||||
|
print(user_requesting)
|
||||||
|
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()
|
||||||
|
|
||||||
|
func _on_activity_spectate(secret) -> void:
|
||||||
|
print(secret)
|
||||||
|
|
||||||
|
func _on_relationship_init():
|
||||||
|
print("initialized")
|
||||||
|
|
||||||
|
func _on_updated_relationship(relationship):
|
||||||
|
print(relationship)
|
||||||
|
|
||||||
$Info.text = $Info.text.replace("{discordinfo}",str(Discord_Activity.get_is_discord_working())).replace("{id}",str(Discord_Activity.app_id)).replace("{details}",Discord_Activity.details).replace("{state}",Discord_Activity.state).replace("{lkey}",Discord_Activity.large_image).replace("{ltext}",Discord_Activity.large_image_text).replace("{skey}",Discord_Activity.small_image).replace("{stext}",Discord_Activity.small_image_text).replace("{stimestamp}",str(Discord_Activity.start_timestamp)).replace("{etimestamp}",str(Discord_Activity.end_timestamp))
|
|
||||||
|
@@ -1,7 +1,8 @@
|
|||||||
[gd_scene load_steps=3 format=3 uid="uid://dmx2xuigcpvt4"]
|
[gd_scene load_steps=4 format=3 uid="uid://dyc3kseph4el7"]
|
||||||
|
|
||||||
[ext_resource type="Script" path="res://main.gd" id="1_kl8ri"]
|
[ext_resource type="Script" path="res://main.gd" id="1_kl8ri"]
|
||||||
[ext_resource type="Texture2D" uid="uid://dhuttdaet6q1u" path="res://assets/Logo_V2_Clyde.png" id="2_1hv5q"]
|
[ext_resource type="Texture2D" uid="uid://b3qm246m7pnsx" path="res://assets/Logo_V2.png" id="2_gd222"]
|
||||||
|
[ext_resource type="Script" path="res://addons/discord-sdk-gd/nodes/debug.gd" id="6_ujijw"]
|
||||||
|
|
||||||
[node name="Node" type="Node"]
|
[node name="Node" type="Node"]
|
||||||
script = ExtResource("1_kl8ri")
|
script = ExtResource("1_kl8ri")
|
||||||
@@ -18,45 +19,26 @@ color = Color(0.345098, 0.396078, 0.94902, 1)
|
|||||||
|
|
||||||
[node name="Sprite2D" type="Sprite2D" parent="."]
|
[node name="Sprite2D" type="Sprite2D" parent="."]
|
||||||
texture_filter = 4
|
texture_filter = 4
|
||||||
position = Vector2(565, 308)
|
position = Vector2(789, 330.5)
|
||||||
scale = Vector2(0.408203, 0.408203)
|
scale = Vector2(0.408203, 0.408203)
|
||||||
texture = ExtResource("2_1hv5q")
|
texture = ExtResource("2_gd222")
|
||||||
|
|
||||||
[node name="DiscordSDK Test" type="RichTextLabel" parent="."]
|
[node name="DiscordSDK Test" type="RichTextLabel" parent="."]
|
||||||
anchors_preset = 8
|
anchors_preset = -1
|
||||||
anchor_left = 0.5
|
anchor_left = 0.293
|
||||||
anchor_top = 0.5
|
anchor_top = 0.59
|
||||||
anchor_right = 0.5
|
anchor_right = 0.736
|
||||||
anchor_bottom = 0.5
|
anchor_bottom = 0.727
|
||||||
offset_left = -257.0
|
offset_left = 208.464
|
||||||
offset_top = 54.0
|
offset_top = 22.18
|
||||||
offset_right = 257.0
|
offset_right = 209.128
|
||||||
offset_bottom = 150.0
|
offset_bottom = 22.4039
|
||||||
grow_horizontal = 2
|
grow_horizontal = 2
|
||||||
grow_vertical = 2
|
grow_vertical = 2
|
||||||
size_flags_horizontal = 4
|
size_flags_horizontal = 4
|
||||||
size_flags_vertical = 4
|
size_flags_vertical = 4
|
||||||
theme_override_colors/font_outline_color = Color(1, 1, 1, 1)
|
|
||||||
theme_override_constants/outline_size = 10
|
|
||||||
bbcode_enabled = true
|
bbcode_enabled = true
|
||||||
text = "[center][font s=60][rainbow]DiscordSDK Test[/rainbow][/font]"
|
text = "[center][font s=60]DiscordSDK Test"
|
||||||
|
|
||||||
[node name="Info" type="RichTextLabel" parent="."]
|
[node name="DiscordSDKDebug" type="Node" parent="."]
|
||||||
offset_left = 7.0
|
script = ExtResource("6_ujijw")
|
||||||
offset_top = 6.0
|
|
||||||
offset_right = 514.0
|
|
||||||
offset_bottom = 722.0
|
|
||||||
text = "Discord working: {discordinfo}
|
|
||||||
|
|
||||||
Application ID : {id}
|
|
||||||
Details: {details}
|
|
||||||
State: {state}
|
|
||||||
|
|
||||||
Large image key: {lkey}
|
|
||||||
Large image text: {ltext}
|
|
||||||
Small image key: {skey}
|
|
||||||
Small image text: {stext}
|
|
||||||
|
|
||||||
Start timestamp: {stimestamp}
|
|
||||||
End timestamp: {etimestamp}"
|
|
||||||
scroll_active = false
|
|
||||||
|
@@ -11,8 +11,9 @@ config_version=5
|
|||||||
[application]
|
[application]
|
||||||
|
|
||||||
config/name="GDExtension DiscordSDK Test Project"
|
config/name="GDExtension DiscordSDK Test Project"
|
||||||
|
config/tags=PackedStringArray("vaporvee")
|
||||||
run/main_scene="res://main.tscn"
|
run/main_scene="res://main.tscn"
|
||||||
config/features=PackedStringArray("4.0")
|
config/features=PackedStringArray("4.1")
|
||||||
boot_splash/bg_color=Color(0.25098, 0.305882, 0.929412, 1)
|
boot_splash/bg_color=Color(0.25098, 0.305882, 0.929412, 1)
|
||||||
boot_splash/image="res://assets/Banner_v1.png"
|
boot_splash/image="res://assets/Banner_v1.png"
|
||||||
boot_splash/fullsize=false
|
boot_splash/fullsize=false
|
||||||
@@ -20,7 +21,11 @@ config/icon="res://assets/Logo_V2.png"
|
|||||||
|
|
||||||
[autoload]
|
[autoload]
|
||||||
|
|
||||||
updater_discordsdk="*res://addons/discord-sdk-gd/sdk_utility.gd"
|
DiscordSDKLoader="*res://addons/discord-sdk-gd/nodes/core_updater.gd"
|
||||||
|
|
||||||
|
[display]
|
||||||
|
|
||||||
|
window/size/resizable=false
|
||||||
|
|
||||||
[dotnet]
|
[dotnet]
|
||||||
|
|
||||||
|
18
release.py
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
import os
|
||||||
|
from distutils.dir_util import copy_tree
|
||||||
|
import shutil
|
||||||
|
|
||||||
|
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()
|
||||||
|
open(
|
||||||
|
"release/temp/ADDON-Discord-SDK-Godot/addons/discord-sdk-gd/nodes/.gdignore", "a"
|
||||||
|
).close()
|
||||||
|
|
||||||
|
shutil.make_archive("release/ADDON-Discord-SDK-Godot", "zip", "release/temp/")
|
||||||
|
|
||||||
|
shutil.rmtree("release/temp/")
|
6
setup.py
@@ -6,6 +6,12 @@ import os
|
|||||||
with zipfile.ZipFile("src/lib/discord_game_sdk.zip", "r") as zip_ref:
|
with zipfile.ZipFile("src/lib/discord_game_sdk.zip", "r") as zip_ref:
|
||||||
zip_ref.extractall("src/lib/discord_game_sdk/")
|
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/")
|
copy_tree("src/lib/discord_game_sdk/lib/", "src/lib/discord_game_sdk/bin/")
|
||||||
os.rename(
|
os.rename(
|
||||||
"src/lib/discord_game_sdk/bin/aarch64/discord_game_sdk.dylib",
|
"src/lib/discord_game_sdk/bin/aarch64/discord_game_sdk.dylib",
|
||||||
|
@@ -7,80 +7,138 @@
|
|||||||
|
|
||||||
using namespace godot;
|
using namespace godot;
|
||||||
|
|
||||||
Discord_Activity *Discord_Activity::singleton = nullptr;
|
discord_sdk *discord_sdk::singleton = nullptr;
|
||||||
|
|
||||||
discord::Core *core{};
|
discord::Core *core{};
|
||||||
discord::Result result;
|
discord::Result result;
|
||||||
discord::Activity activity{};
|
discord::Activity activity{};
|
||||||
discord::User user{};
|
discord::User user{};
|
||||||
|
|
||||||
void Discord_Activity::_bind_methods()
|
void discord_sdk::_bind_methods()
|
||||||
{
|
{
|
||||||
ClassDB::bind_method(D_METHOD("debug"), &Discord_Activity::debug);
|
ClassDB::bind_method(D_METHOD("debug"), &discord_sdk::debug);
|
||||||
ClassDB::bind_method(D_METHOD("coreupdate"), &Discord_Activity::coreupdate);
|
ClassDB::bind_method(D_METHOD("coreupdate"), &discord_sdk::coreupdate);
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("get_app_id"), &Discord_Activity::get_app_id);
|
ClassDB::bind_method(D_METHOD("get_app_id"), &discord_sdk::get_app_id);
|
||||||
ClassDB::bind_method(D_METHOD("set_app_id", "app_id"), &Discord_Activity::set_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");
|
ADD_PROPERTY(PropertyInfo(Variant::INT, "app_id"), "set_app_id", "get_app_id");
|
||||||
ClassDB::bind_method(D_METHOD("get_state"), &Discord_Activity::get_state);
|
ClassDB::bind_method(D_METHOD("get_state"), &discord_sdk::get_state);
|
||||||
ClassDB::bind_method(D_METHOD("set_state", "state"), &Discord_Activity::set_state);
|
ClassDB::bind_method(D_METHOD("set_state", "state"), &discord_sdk::set_state);
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::STRING, "state"), "set_state", "get_state");
|
ADD_PROPERTY(PropertyInfo(Variant::STRING, "state"), "set_state", "get_state");
|
||||||
ClassDB::bind_method(D_METHOD("get_details"), &Discord_Activity::get_details);
|
ClassDB::bind_method(D_METHOD("get_details"), &discord_sdk::get_details);
|
||||||
ClassDB::bind_method(D_METHOD("set_details", "details"), &Discord_Activity::set_details);
|
ClassDB::bind_method(D_METHOD("set_details", "details"), &discord_sdk::set_details);
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::STRING, "details"), "set_details", "get_details");
|
ADD_PROPERTY(PropertyInfo(Variant::STRING, "details"), "set_details", "get_details");
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("get_large_image"), &Discord_Activity::get_large_image);
|
ClassDB::bind_method(D_METHOD("get_large_image"), &discord_sdk::get_large_image);
|
||||||
ClassDB::bind_method(D_METHOD("set_large_image", "large_image"), &Discord_Activity::set_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");
|
ADD_PROPERTY(PropertyInfo(Variant::STRING, "large_image"), "set_large_image", "get_large_image");
|
||||||
ClassDB::bind_method(D_METHOD("get_large_image_text"), &Discord_Activity::get_large_image_text);
|
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_Activity::set_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");
|
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_Activity::get_small_image);
|
ClassDB::bind_method(D_METHOD("get_small_image"), &discord_sdk::get_small_image);
|
||||||
ClassDB::bind_method(D_METHOD("set_small_image", "small_image"), &Discord_Activity::set_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");
|
ADD_PROPERTY(PropertyInfo(Variant::STRING, "small_image"), "set_small_image", "get_small_image");
|
||||||
ClassDB::bind_method(D_METHOD("get_small_image_text"), &Discord_Activity::get_small_image_text);
|
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_Activity::set_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");
|
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_Activity::get_start_timestamp);
|
ClassDB::bind_method(D_METHOD("get_start_timestamp"), &discord_sdk::get_start_timestamp);
|
||||||
ClassDB::bind_method(D_METHOD("set_start_timestamp", "start_timestamp"), &Discord_Activity::set_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");
|
ADD_PROPERTY(PropertyInfo(Variant::INT, "start_timestamp"), "set_start_timestamp", "get_start_timestamp");
|
||||||
ClassDB::bind_method(D_METHOD("get_end_timestamp"), &Discord_Activity::get_end_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_Activity::set_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");
|
ADD_PROPERTY(PropertyInfo(Variant::INT, "end_timestamp"), "set_end_timestamp", "get_end_timestamp");
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("refresh"), &Discord_Activity::refresh);
|
ClassDB::bind_method(D_METHOD("get_party_id"), &discord_sdk::get_party_id);
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("get_is_discord_working"), &Discord_Activity::get_is_discord_working);
|
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_result_int"), &Discord_Activity::get_result_int);
|
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")));
|
||||||
|
|
||||||
|
ADD_SIGNAL(MethodInfo("relationships_init"));
|
||||||
|
ADD_SIGNAL(MethodInfo("updated_relationship", PropertyInfo(Variant::DICTIONARY, "relationship")));
|
||||||
|
|
||||||
|
ClassDB::bind_method(D_METHOD("refresh"), &discord_sdk::refresh);
|
||||||
|
ClassDB::bind_method(D_METHOD("clear", "reset_values"), &discord_sdk::clear, DEFVAL(false));
|
||||||
|
ClassDB::bind_method(D_METHOD("unclear"), &discord_sdk::unclear);
|
||||||
|
|
||||||
|
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_all_relationships"), &discord_sdk::get_all_relationships);
|
||||||
|
|
||||||
|
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
Discord_Activity *Discord_Activity::get_singleton()
|
discord_sdk *discord_sdk::get_singleton()
|
||||||
{
|
{
|
||||||
return singleton;
|
return singleton;
|
||||||
}
|
}
|
||||||
|
|
||||||
Discord_Activity::Discord_Activity()
|
discord_sdk::discord_sdk()
|
||||||
{
|
{
|
||||||
ERR_FAIL_COND(singleton != nullptr);
|
ERR_FAIL_COND(singleton != nullptr);
|
||||||
singleton = this;
|
singleton = this;
|
||||||
}
|
}
|
||||||
|
|
||||||
Discord_Activity::~Discord_Activity()
|
discord_sdk::~discord_sdk()
|
||||||
{
|
{
|
||||||
ERR_FAIL_COND(singleton != this);
|
ERR_FAIL_COND(singleton != this);
|
||||||
singleton = nullptr;
|
singleton = nullptr;
|
||||||
|
delete core;
|
||||||
|
core = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Discord_Activity::coreupdate()
|
void discord_sdk::coreupdate()
|
||||||
{
|
{
|
||||||
if (result == discord::Result::Ok && app_id > 0)
|
if (result == discord::Result::Ok && app_id > 0)
|
||||||
{
|
|
||||||
::core->RunCallbacks();
|
::core->RunCallbacks();
|
||||||
}
|
|
||||||
}
|
}
|
||||||
void Discord_Activity::debug()
|
void discord_sdk::debug()
|
||||||
{
|
{
|
||||||
result = discord::Core::Create(1080224638845591692, DiscordCreateFlags_NoRequireDiscord, &core);
|
result = discord::Core::Create(1080224638845591692, DiscordCreateFlags_NoRequireDiscord, &core);
|
||||||
activity.SetState("Test from Godot!");
|
activity.SetState("Test from Godot!");
|
||||||
@@ -93,116 +151,461 @@ void Discord_Activity::debug()
|
|||||||
if (result == discord::Result::Ok)
|
if (result == discord::Result::Ok)
|
||||||
{
|
{
|
||||||
core->ActivityManager().UpdateActivity(activity, [](discord::Result result) {});
|
core->ActivityManager().UpdateActivity(activity, [](discord::Result result) {});
|
||||||
core->UserManager().OnCurrentUserUpdate.Connect([]()
|
|
||||||
{ core->UserManager().GetCurrentUser(&user); });
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
UtilityFunctions::push_warning("Discord Activity couldn't be updated. It could be that Discord isn't running!");
|
UtilityFunctions::push_warning("Discord Activity couldn't be updated. It could be that Discord isn't running!");
|
||||||
}
|
}
|
||||||
|
|
||||||
void Discord_Activity::set_app_id(int64_t value)
|
void discord_sdk::set_app_id(int64_t value)
|
||||||
{
|
{
|
||||||
app_id = value;
|
app_id = value;
|
||||||
result = discord::Core::Create(value, DiscordCreateFlags_NoRequireDiscord, &core);
|
if (app_id > 0)
|
||||||
|
{
|
||||||
|
result = discord::Core::Create(value, DiscordCreateFlags_NoRequireDiscord, &core); // after setting app_ID it initializes everything
|
||||||
|
|
||||||
|
if (result == discord::Result::Ok)
|
||||||
|
{
|
||||||
|
// initialize currentuser stuff
|
||||||
|
core->UserManager().OnCurrentUserUpdate.Connect([]()
|
||||||
|
{discord::User user{};
|
||||||
|
core->UserManager().GetCurrentUser(&user); });
|
||||||
|
// signals
|
||||||
|
core->ActivityManager().OnActivityJoin.Connect([](const char *secret)
|
||||||
|
{ discord_sdk::get_singleton()
|
||||||
|
->emit_signal("activity_join", secret); });
|
||||||
|
core->ActivityManager().OnActivitySpectate.Connect([](const char *secret)
|
||||||
|
{ discord_sdk::get_singleton()
|
||||||
|
->emit_signal("activity_spectate", secret); });
|
||||||
|
core->ActivityManager().OnActivityJoinRequest.Connect([this](discord::User const &user)
|
||||||
|
{ discord_sdk::get_singleton()
|
||||||
|
->emit_signal("activity_join_request", user2dict(user)); });
|
||||||
|
|
||||||
|
core->OverlayManager().OnToggle.Connect([](bool is_locked)
|
||||||
|
{ discord_sdk::get_singleton()
|
||||||
|
->emit_signal("overlay_toggle", is_locked); });
|
||||||
|
core->RelationshipManager().OnRefresh.Connect([&]()
|
||||||
|
{ discord_sdk::get_singleton()
|
||||||
|
->emit_signal("relationships_init"); });
|
||||||
|
core->RelationshipManager().OnRelationshipUpdate.Connect([&](discord::Relationship const &relationship)
|
||||||
|
{ discord_sdk::get_singleton()
|
||||||
|
->emit_signal("updated_relationship", relationship2dict(relationship)); });
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
int64_t Discord_Activity::get_app_id()
|
int64_t discord_sdk::get_app_id()
|
||||||
{
|
{
|
||||||
return app_id;
|
if (app_id != 0)
|
||||||
|
return app_id;
|
||||||
|
return old_app_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Discord_Activity::set_state(String value)
|
void discord_sdk::set_state(String value)
|
||||||
{
|
{
|
||||||
state = value;
|
state = value;
|
||||||
activity.SetState(value.utf8().get_data());
|
activity.SetState(value.utf8().get_data());
|
||||||
}
|
}
|
||||||
String Discord_Activity::get_state()
|
String discord_sdk::get_state()
|
||||||
{
|
{
|
||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
void Discord_Activity::set_details(String value)
|
void discord_sdk::set_details(String value)
|
||||||
{
|
{
|
||||||
details = value;
|
details = value;
|
||||||
activity.SetDetails(value.utf8().get_data());
|
activity.SetDetails(value.utf8().get_data());
|
||||||
}
|
}
|
||||||
String Discord_Activity::get_details()
|
String discord_sdk::get_details()
|
||||||
{
|
{
|
||||||
return details;
|
return details;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Discord_Activity::refresh()
|
void discord_sdk::refresh()
|
||||||
{
|
{
|
||||||
if (result == discord::Result::Ok && app_id > 0)
|
if (result == discord::Result::Ok && app_id > 0)
|
||||||
{
|
{
|
||||||
|
activity.GetParty().SetPrivacy(discord::ActivityPartyPrivacy::Public);
|
||||||
|
activity.SetType(discord::ActivityType::Playing);
|
||||||
core->ActivityManager().UpdateActivity(activity, [](discord::Result result) {});
|
core->ActivityManager().UpdateActivity(activity, [](discord::Result result) {});
|
||||||
core->UserManager().OnCurrentUserUpdate.Connect([]()
|
|
||||||
{ core->UserManager().GetCurrentUser(&user); });
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
UtilityFunctions::push_warning("Discord Activity couldn't be updated. It could be that Discord isn't running!");
|
UtilityFunctions::push_warning("Discord Activity couldn't be updated. It could be that Discord isn't running!");
|
||||||
}
|
}
|
||||||
|
|
||||||
void Discord_Activity::set_large_image(String value)
|
void discord_sdk::clear(bool reset_values = false)
|
||||||
|
{
|
||||||
|
if (result == discord::Result::Ok)
|
||||||
|
{
|
||||||
|
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;
|
||||||
|
set_app_id(0);
|
||||||
|
delete core;
|
||||||
|
core = nullptr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void discord_sdk::unclear()
|
||||||
|
{
|
||||||
|
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_large_image(String value)
|
||||||
{
|
{
|
||||||
large_image = value;
|
large_image = value;
|
||||||
activity.GetAssets().SetLargeImage(value.utf8().get_data());
|
activity.GetAssets().SetLargeImage(value.utf8().get_data());
|
||||||
}
|
}
|
||||||
String Discord_Activity::get_large_image()
|
String discord_sdk::get_large_image()
|
||||||
{
|
{
|
||||||
return large_image;
|
return large_image;
|
||||||
}
|
}
|
||||||
void Discord_Activity::set_large_image_text(String value)
|
void discord_sdk::set_large_image_text(String value)
|
||||||
{
|
{
|
||||||
large_image_text = value;
|
large_image_text = value;
|
||||||
activity.GetAssets().SetLargeText(value.utf8().get_data());
|
activity.GetAssets().SetLargeText(value.utf8().get_data());
|
||||||
}
|
}
|
||||||
String Discord_Activity::get_large_image_text()
|
String discord_sdk::get_large_image_text()
|
||||||
{
|
{
|
||||||
return large_image_text;
|
return large_image_text;
|
||||||
}
|
}
|
||||||
void Discord_Activity::set_small_image(String value)
|
void discord_sdk::set_small_image(String value)
|
||||||
{
|
{
|
||||||
small_image = value;
|
small_image = value;
|
||||||
activity.GetAssets().SetSmallImage(value.utf8().get_data());
|
activity.GetAssets().SetSmallImage(value.utf8().get_data());
|
||||||
}
|
}
|
||||||
String Discord_Activity::get_small_image()
|
String discord_sdk::get_small_image()
|
||||||
{
|
{
|
||||||
return small_image;
|
return small_image;
|
||||||
}
|
}
|
||||||
void Discord_Activity::set_small_image_text(String value)
|
void discord_sdk::set_small_image_text(String value)
|
||||||
{
|
{
|
||||||
small_image_text = value;
|
small_image_text = value;
|
||||||
activity.GetAssets().SetSmallText(value.utf8().get_data());
|
activity.GetAssets().SetSmallText(value.utf8().get_data());
|
||||||
}
|
}
|
||||||
String Discord_Activity::get_small_image_text()
|
String discord_sdk::get_small_image_text()
|
||||||
{
|
{
|
||||||
return small_image_text;
|
return small_image_text;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Discord_Activity::set_start_timestamp(int64_t value)
|
void discord_sdk::set_start_timestamp(int64_t value)
|
||||||
{
|
{
|
||||||
start_timestamp = value;
|
start_timestamp = value;
|
||||||
activity.GetTimestamps().SetStart(value);
|
activity.GetTimestamps().SetStart(value);
|
||||||
}
|
}
|
||||||
int64_t Discord_Activity::get_start_timestamp()
|
int64_t discord_sdk::get_start_timestamp()
|
||||||
{
|
{
|
||||||
return activity.GetTimestamps().GetStart();
|
return activity.GetTimestamps().GetStart();
|
||||||
}
|
}
|
||||||
void Discord_Activity::set_end_timestamp(int64_t value)
|
void discord_sdk::set_end_timestamp(int64_t value)
|
||||||
{
|
{
|
||||||
end_timestamp = value;
|
end_timestamp = value;
|
||||||
activity.GetTimestamps().SetEnd(value);
|
activity.GetTimestamps().SetEnd(value);
|
||||||
}
|
}
|
||||||
int64_t Discord_Activity::get_end_timestamp()
|
int64_t discord_sdk::get_end_timestamp()
|
||||||
{
|
{
|
||||||
return activity.GetTimestamps().GetEnd();
|
return activity.GetTimestamps().GetEnd();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Discord_Activity::get_is_discord_working()
|
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 ie;
|
||||||
|
if (result == discord::Result::Ok && app_id > 0)
|
||||||
|
core->OverlayManager().IsEnabled(&ie);
|
||||||
|
return ie;
|
||||||
|
}
|
||||||
|
bool discord_sdk::get_is_overlay_locked()
|
||||||
|
{
|
||||||
|
bool il;
|
||||||
|
if (result == discord::Result::Ok && app_id > 0)
|
||||||
|
core->OverlayManager().IsLocked(&il);
|
||||||
|
return il;
|
||||||
|
}
|
||||||
|
void discord_sdk::set_is_overlay_locked(bool value)
|
||||||
|
{
|
||||||
|
is_overlay_locked = value;
|
||||||
|
if (result == discord::Result::Ok && app_id > 0)
|
||||||
|
core->OverlayManager().SetLocked(value, {});
|
||||||
|
}
|
||||||
|
void discord_sdk::open_invite_overlay(bool is_spectate)
|
||||||
|
{
|
||||||
|
if (result == discord::Result::Ok && app_id > 0)
|
||||||
|
core->OverlayManager().OpenActivityInvite(static_cast<discord::ActivityActionType>(is_spectate + 1), {});
|
||||||
|
}
|
||||||
|
void discord_sdk::open_server_invite_overlay(String invite_code)
|
||||||
|
{
|
||||||
|
if (result == discord::Result::Ok && app_id > 0)
|
||||||
|
core->OverlayManager().OpenGuildInvite(invite_code.utf8().get_data(), {});
|
||||||
|
}
|
||||||
|
void discord_sdk::open_voice_settings()
|
||||||
|
{
|
||||||
|
if (result == discord::Result::Ok && app_id > 0)
|
||||||
|
core->OverlayManager().OpenVoiceSettings({});
|
||||||
|
}
|
||||||
|
|
||||||
|
void discord_sdk::set_is_public_party(bool value)
|
||||||
|
{
|
||||||
|
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)
|
||||||
|
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 = "")
|
||||||
|
{
|
||||||
|
if (result == discord::Result::Ok && app_id > 0)
|
||||||
|
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)
|
||||||
|
{
|
||||||
|
if (result == discord::Result::Ok && app_id > 0)
|
||||||
|
core->ActivityManager().AcceptInvite(user_id, {});
|
||||||
|
}
|
||||||
|
|
||||||
|
void discord_sdk::register_command(String value)
|
||||||
|
{
|
||||||
|
if (result == discord::Result::Ok && app_id > 0)
|
||||||
|
core->ActivityManager().RegisterCommand(value.utf8().get_data());
|
||||||
|
}
|
||||||
|
void discord_sdk::register_steam(int32_t value)
|
||||||
|
{
|
||||||
|
if (result == discord::Result::Ok && app_id > 0)
|
||||||
|
core->ActivityManager().RegisterSteam(value);
|
||||||
|
}
|
||||||
|
Dictionary discord_sdk::get_current_user()
|
||||||
|
{
|
||||||
|
Dictionary userdict;
|
||||||
|
if (result == discord::Result::Ok && app_id > 0)
|
||||||
|
{
|
||||||
|
discord::User user{};
|
||||||
|
core->UserManager().GetCurrentUser(&user);
|
||||||
|
return user2dict(user);
|
||||||
|
}
|
||||||
|
return userdict;
|
||||||
|
}
|
||||||
|
|
||||||
|
Dictionary discord_sdk::get_relationship(int64_t user_id)
|
||||||
|
{
|
||||||
|
if (result == discord::Result::Ok && app_id > 0)
|
||||||
|
{
|
||||||
|
discord::Relationship relationship{};
|
||||||
|
core->RelationshipManager().Get(user_id, &relationship);
|
||||||
|
return relationship2dict(relationship);
|
||||||
|
}
|
||||||
|
Dictionary dict;
|
||||||
|
return dict;
|
||||||
|
}
|
||||||
|
|
||||||
|
Array discord_sdk::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;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool discord_sdk::get_is_discord_working()
|
||||||
{
|
{
|
||||||
return result == discord::Result::Ok && app_id > 0;
|
return result == discord::Result::Ok && app_id > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int Discord_Activity::get_result_int()
|
int discord_sdk::get_result_int()
|
||||||
{
|
{
|
||||||
return static_cast<int>(result);
|
return static_cast<int>(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Dictionary discord_sdk::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();
|
||||||
|
userdict["id"] = user.GetId();
|
||||||
|
userdict["username"] = user.GetUsername();
|
||||||
|
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").c_str());
|
||||||
|
userdict.make_read_only();
|
||||||
|
return userdict;
|
||||||
|
}
|
||||||
|
|
||||||
|
Dictionary discord_sdk::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;
|
||||||
|
}
|
@@ -3,22 +3,34 @@
|
|||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include "lib/discord_game_sdk/cpp/discord.h"
|
#include "lib/discord_game_sdk/cpp/discord.h"
|
||||||
#include <godot_cpp/classes/object.hpp>
|
#include <godot_cpp/classes/ref_counted.hpp>
|
||||||
#include <godot_cpp/core/class_db.hpp>
|
#include <godot_cpp/core/class_db.hpp>
|
||||||
|
|
||||||
using namespace godot;
|
using namespace godot;
|
||||||
|
|
||||||
class Discord_Activity : public Object
|
class discord_sdk : public RefCounted
|
||||||
{
|
{
|
||||||
GDCLASS(Discord_Activity, Object);
|
GDCLASS(discord_sdk, Object);
|
||||||
|
|
||||||
static Discord_Activity *singleton;
|
static discord_sdk *singleton;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
static void _bind_methods();
|
static void _bind_methods();
|
||||||
|
|
||||||
private:
|
public:
|
||||||
int64_t app_id;
|
static discord_sdk *
|
||||||
|
get_singleton();
|
||||||
|
|
||||||
|
discord_sdk();
|
||||||
|
~discord_sdk();
|
||||||
|
|
||||||
|
// INTERBNAL
|
||||||
|
int64_t old_app_id;
|
||||||
|
Dictionary relationship2dict(discord::Relationship relationship);
|
||||||
|
Dictionary user2dict(discord::User user);
|
||||||
|
///
|
||||||
|
|
||||||
|
int64_t app_id = 0;
|
||||||
|
|
||||||
String state;
|
String state;
|
||||||
String details;
|
String details;
|
||||||
@@ -31,18 +43,26 @@ private:
|
|||||||
int64_t start_timestamp;
|
int64_t start_timestamp;
|
||||||
int64_t end_timestamp;
|
int64_t end_timestamp;
|
||||||
|
|
||||||
public:
|
String party_id;
|
||||||
static Discord_Activity *get_singleton();
|
int32_t current_party_size;
|
||||||
|
int32_t max_party_size;
|
||||||
|
String match_secret;
|
||||||
|
String join_secret;
|
||||||
|
String spectate_secret;
|
||||||
|
|
||||||
Discord_Activity();
|
bool is_public_party;
|
||||||
~Discord_Activity();
|
|
||||||
|
bool instanced;
|
||||||
|
|
||||||
|
bool is_overlay_locked;
|
||||||
|
|
||||||
void debug();
|
void debug();
|
||||||
void coreupdate();
|
void coreupdate();
|
||||||
void refresh();
|
void refresh();
|
||||||
|
void clear(bool reset_values);
|
||||||
|
|
||||||
|
void unclear();
|
||||||
int64_t get_app_id();
|
int64_t get_app_id();
|
||||||
|
|
||||||
void set_app_id(int64_t value);
|
void set_app_id(int64_t value);
|
||||||
String get_state();
|
String get_state();
|
||||||
void set_state(String value);
|
void set_state(String value);
|
||||||
@@ -63,6 +83,44 @@ public:
|
|||||||
int64_t get_end_timestamp();
|
int64_t get_end_timestamp();
|
||||||
void set_end_timestamp(int64_t value);
|
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);
|
||||||
|
|
||||||
|
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();
|
bool get_is_discord_working();
|
||||||
int get_result_int();
|
int get_result_int();
|
||||||
};
|
};
|
||||||
|
@@ -9,35 +9,35 @@
|
|||||||
#include "discordgodot.h"
|
#include "discordgodot.h"
|
||||||
using namespace godot;
|
using namespace godot;
|
||||||
|
|
||||||
static Discord_Activity *discordsdk;
|
static discord_sdk *discordsdk;
|
||||||
|
|
||||||
void gdextension_initialize(ModuleInitializationLevel p_level)
|
void initialize_discordsdk_module(ModuleInitializationLevel p_level)
|
||||||
{
|
{
|
||||||
if (p_level == MODULE_INITIALIZATION_LEVEL_SCENE)
|
if (p_level == MODULE_INITIALIZATION_LEVEL_SCENE)
|
||||||
{
|
{
|
||||||
ClassDB::register_class<Discord_Activity>();
|
ClassDB::register_class<discord_sdk>();
|
||||||
discordsdk = memnew(Discord_Activity);
|
discordsdk = memnew(discord_sdk);
|
||||||
Engine::get_singleton()->register_singleton("Discord_Activity", Discord_Activity::get_singleton());
|
Engine::get_singleton()->register_singleton("discord_sdk", discord_sdk::get_singleton());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void gdextension_terminate(ModuleInitializationLevel p_level)
|
void uninitialize_discordsdk_module(ModuleInitializationLevel p_level)
|
||||||
{
|
{
|
||||||
if (p_level == MODULE_INITIALIZATION_LEVEL_SCENE)
|
if (p_level == MODULE_INITIALIZATION_LEVEL_SCENE)
|
||||||
{
|
{
|
||||||
Engine::get_singleton()->unregister_singleton("Discord_Activity");
|
Engine::get_singleton()->unregister_singleton("discord_sdk");
|
||||||
memdelete(discordsdk);
|
memdelete(discordsdk);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C"
|
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_initializer(initialize_discordsdk_module);
|
||||||
init_obj.register_terminator(gdextension_terminate);
|
init_obj.register_terminator(uninitialize_discordsdk_module);
|
||||||
init_obj.set_minimum_library_initialization_level(MODULE_INITIALIZATION_LEVEL_SCENE);
|
init_obj.set_minimum_library_initialization_level(MODULE_INITIALIZATION_LEVEL_SCENE);
|
||||||
|
|
||||||
return init_obj.init();
|
return init_obj.init();
|
||||||
|