44 Commits
2.2 ... 3.2

Author SHA1 Message Date
Yannik
7389119992 Merge branch 'main' of https://github.com/vaporvee/discord-sdk-godot 2023-08-29 12:45:09 +02:00
Yannik
a57c78146e fixed plugin not enabling #36 2023-08-29 12:45:08 +02:00
Yannik
0686fad440 added caching (not updating yet) 2023-08-29 12:44:29 +02:00
Yannik
4bda87c54d Merge pull request #34 from koyuawsmbrtn/main
macOS sucks the second
2023-08-20 15:48:44 +02:00
8c583b85b1 Merge pull request #1 from vaporvee/main 2023-08-19 22:02:44 +02:00
52f43b724c Fix token 2023-08-19 22:02:20 +02:00
Yannik
253013d0e9 Merge pull request #33 from koyuawsmbrtn/main
macOS sucks
2023-08-19 21:36:04 +02:00
1b43adba77 Change message 2023-08-19 18:26:59 +02:00
Yannik
aa486d39c9 now supports multiple IDs and restructures the json send 2023-08-18 19:22:16 +02:00
Yannik
68cb2ddb44 removed vercel.json 2023-08-18 17:19:23 +02:00
Yannik
30af177aa3 started porting to golang 2023-08-18 17:12:02 +02:00
Yannik
cbc0c85c76 added user id array support 2023-08-18 15:32:09 +02:00
Yannik
ed4149e7a7 api now takes multiple user IDs 2023-08-17 22:03:57 +02:00
Yannik
3b244f4a91 added github link to the api error 2023-08-14 00:50:15 +02:00
Yannik
305d314224 changed standard port 2023-08-14 00:21:05 +02:00
Yannik
0ee6a3268c removed weird urls with null values 2023-08-14 00:15:38 +02:00
Yannik
b143809744 added port 2023-08-14 00:13:14 +02:00
Yannik
fab2efb88a prepared for vercel 2023-08-13 23:41:23 +02:00
Yannik
063f559624 whoops leaked bot token reseting it now lol 2023-08-13 23:31:37 +02:00
Yannik
ce93ed4294 added custom api for missing user values 2023-08-13 23:30:04 +02:00
Yannik
2b19fd9be2 fixed relationship list not indexing 2023-08-12 17:53:13 +02:00
Yannik
f93fbe4a1b Merge branch 'main' of https://github.com/vaporvee/discord-sdk-godot 2023-08-12 17:09:15 +02:00
Yannik
f78e2e9744 fixed restart window and editor presence project settings 2023-08-12 17:09:12 +02:00
Yannik
ea4324aba8 Update README.md 2023-08-11 01:57:37 +02:00
Yannik
ffcf4090d6 bumped version to 3.0 2023-08-11 01:36:35 +02:00
Yannik
d3d33216db added restart window and actual disabling plugin 2023-08-11 01:31:44 +02:00
Yannik
c8db95e559 implemented the whole relationship manager 2023-08-10 21:30:49 +02:00
Yannik
1eeec67690 app_id now doesnt get cleared anymore when its not supposed to 2023-08-09 19:09:47 +02:00
Yannik
4985d31a03 Merge branch 'main' of https://github.com/vaporvee/discord-sdk-godot 2023-08-09 17:04:37 +02:00
Yannik
86ab81aff1 Multiple updates (read description)
added unclear and reset_values. Improved Debug Node. Made EditorPresence in unadvanced Project Settings
2023-08-09 17:04:35 +02:00
aedbc03f8c macOS sucks 2023-07-18 13:37:55 +02:00
Yannik
15ce1c0904 Update README.md 2023-07-07 14:23:29 +02:00
Yannik
3a2ccc84f5 Update README.md 2023-07-07 14:23:02 +02:00
Yannik
368b60e69c Merge branch 'main' of https://github.com/vaporvee/discord-sdk-godot 2023-07-07 14:22:30 +02:00
Yannik
e43fdc7117 Update README.md 2023-07-06 18:38:44 +02:00
Yannik
d026bbc872 Update README.md 2023-07-06 18:25:24 +02:00
Yannik
c41396cdbb Merge branch 'main' of https://github.com/vaporvee/discord-sdk-godot 2023-07-06 18:24:44 +02:00
Yannik
abb0cdb0c5 updated for godot 4.1 2023-07-06 18:22:39 +02:00
Yannik
35c1895650 Update README.md 2023-07-05 23:47:48 +02:00
Yannik
548349d9f8 bumped version 2023-06-30 22:54:43 +02:00
Yannik
68c8a42826 removed obsolete export plugin 2023-06-30 22:54:13 +02:00
Yannik
3e944683a4 Merge pull request #31 from vaartis/patch-1
Change gdextension dependencies so they're actually used, patch the SDK
2023-06-30 22:22:33 +02:00
Ekaterina Vaartis
6f288564cf Patch the SDK in setup.py so it actually builds 2023-06-30 20:51:04 +03:00
vaartis
aa39fb80e0 Change gdextension dependencies so they're actually used
This part isn't very well documented, but they changed the format of that file at some point and now it needs to be like this to pull the dependencies into the built project. Assuming this is what the export plugin does, that can probably be removed.
2023-06-30 19:35:35 +03:00
41 changed files with 1077 additions and 726 deletions

View File

@@ -21,8 +21,13 @@ body:
id: version
attributes:
label: Version
description: What version of our software are you running?
description: What version of the Discord Game SDK Godot plugin are you running?
options:
- 3.2
- 3.1
- 3.0
- 2.4
- 2.3
- 2.2
- 2.1
- 2.0
@@ -39,8 +44,8 @@ body:
id: gd-version
attributes:
label: Godot Version
description: This addon is ONLY for 4.0 and above!
placeholder: e.g. 4.0.2-stable
description: This addon is ONLY for 4.1 and above!
placeholder: e.g. 4.1.0-stable
validations:
required: true
- type: textarea

65
.github/workflows/auto_wontfix.yml vendored Normal file
View 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
});
}

View File

@@ -1,8 +1,6 @@
<img src="/project/assets/Banner.svg" alt="Project Banner" />
**Discord Game SDK support for GDScript in Godot Engine 4.0. with the easiest code pattern!**<br><br>
**Please leave a star that would really help! And thanks to all the people that already starred this project! ❤️**
<br />
**Discord Game SDK support for GDScript in Godot Engine 4.1. with the easiest code pattern!**<br><br>
<br />
# [Quick start :rocket: (click here)](https://github.com/vaporvee/discord-sdk-godot/wiki)
<br />
@@ -14,6 +12,7 @@
- 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">

View File

@@ -0,0 +1 @@
BOT_TOKEN="<your token>"

3
extended-user-info-api/.gitignore vendored Normal file
View File

@@ -0,0 +1,3 @@
.env
user_cache.json
vendor/

View 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
)

View 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=

View 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
}

View File

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://ufh1hha1ehui"
path="res://.godot/imported/Debug.svg-c87ff9d4b4b0e718ec457560f6c420dc.ctex"
path="res://.godot/imported/Debug.svg-97b25f5d09dbf04212867cd1a46cf368.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/discord-sdk-gd/nodes/assets/Debug.svg"
dest_files=["res://.godot/imported/Debug.svg-c87ff9d4b4b0e718ec457560f6c420dc.ctex"]
source_file="res://addons/discord-sdk-gd/Debug.svg"
dest_files=["res://.godot/imported/Debug.svg-97b25f5d09dbf04212867cd1a46cf368.ctex"]
[params]

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

View File

@@ -2,16 +2,16 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://cq8lwj2matk6x"
path="res://.godot/imported/flow_spritesheet.png-4637bb4103771b4d4bbc78a0bb858512.ctex"
uid="uid://csl0e2px0cwc1"
path="res://.godot/imported/Logo_V2_No_Bg.png-9c8178062d6891c8370df63a912bd8e2.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/discord-sdk-gd/nodes/assets/flow_spritesheet.png"
dest_files=["res://.godot/imported/flow_spritesheet.png-4637bb4103771b4d4bbc78a0bb858512.ctex"]
source_file="res://addons/discord-sdk-gd/Logo_V2_No_Bg.png"
dest_files=["res://.godot/imported/Logo_V2_No_Bg.png-9c8178062d6891c8370df63a912bd8e2.ctex"]
[params]

View 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": "" }

View File

@@ -1,4 +0,0 @@
Version: 1.2
Windows: build-1
Linux: build-1
MacOS: build-1

View File

@@ -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"

View File

@@ -1,17 +0,0 @@
@tool
extends EditorExportPlugin
func _export_file(_path, _type, features) -> void:
if features.find("windows",0) != -1:
if features.find("x86_64",0) != -1:
add_shared_object("res://addons/discord-sdk-gd/bin/windows/discord_game_sdk.dll",[],"/")
elif features.find("x86",0) != -1:
add_shared_object("res://addons/discord-sdk-gd/bin/windows/discord_game_sdk_x86.dll",[],"/")
elif features.find("linux",0) != -1:
add_shared_object("res://addons/discord-sdk-gd/bin/linux/libdiscord_game_sdk.so",[],"/")
elif features.find("macos",0) != -1:
add_shared_object("res://addons/discord-sdk-gd/bin/macos/libdiscord_game_sdk.dylib",[],"/")
add_shared_object("res://addons/discord-sdk-gd/bin/macos/libdiscord_game_sdk_aarch64.dylib",[],"/")
func _get_name():
pass

View File

@@ -1,6 +1,8 @@
[gd_scene load_steps=68 format=3 uid="uid://c1slhdnlsv2qt"]
[gd_scene load_steps=9 format=3 uid="uid://c1slhdnlsv2qt"]
[ext_resource type="Texture2D" uid="uid://cq8lwj2matk6x" path="res://addons/discord-sdk-gd/nodes/assets/flow_spritesheet.png" id="4_gvc3o"]
[ext_resource type="Texture2D" uid="uid://dnfq6kug4x6o2" path="res://addons/discord-sdk-gd/nodes/assets/Checked.svg" id="2_q6tao"]
[ext_resource type="Texture2D" uid="uid://compmm3kviqqe" path="res://addons/discord-sdk-gd/nodes/assets/Unchecked.svg" id="3_5cyem"]
[ext_resource type="Texture2D" uid="uid://dtc6ckladq0td" path="res://addons/discord-sdk-gd/nodes/assets/circle.svg" id="3_goflf"]
[sub_resource type="GDScript" id="GDScript_ak1tp"]
resource_name = "Debug"
@@ -11,15 +13,16 @@ func _ready():
func _process(_delta):
if(discord_sdk.get_is_discord_working()):
$AnimatedSprite2D.play(\"default\")
$Panel/TextureRect.self_modulate = Color(\"#3eff8d\")
$Panel/TextureRect/AnimationPlayer.play(\"pulsate\")
debug_text_update()
else:
$AnimatedSprite2D.stop()
$AnimatedSprite2D.animation = \"gray\"
$Panel/TextureRect.self_modulate = Color(\"#797979\")
$Panel/TextureRect/AnimationPlayer.stop()
debug_text_update()
func debug_text_update():
$Info.text = \"Application ID : {id}
$Panel/Info.text = \"Application ID : {id}
Details: {details}
State: {state}
@@ -41,7 +44,7 @@ Is party public: {ppublic} (needs to be activated in Discord client settings)
Is instanced: {instanced}
\"
$Info.text = $Info.text.replace(\"{ppublic}\",str(discord_sdk.is_public_party)).replace(\"{instanced}\",str(discord_sdk.instanced)).replace(\"{ssecret}\",discord_sdk.spectate_secret).replace(\"{jsecret}\",discord_sdk.join_secret).replace(\"{msecret}\",discord_sdk.match_secret).replace(\"{mpartysize}\",str(discord_sdk.max_party_size)).replace(\"{cpartysize}\",str(discord_sdk.current_party_size)).replace(\"{partyid}\",discord_sdk.party_id).replace(\"{id}\",str(discord_sdk.app_id)).replace(\"{details}\",discord_sdk.details).replace(\"{state}\",discord_sdk.state).replace(\"{lkey}\",discord_sdk.large_image).replace(\"{ltext}\",discord_sdk.large_image_text).replace(\"{skey}\",discord_sdk.small_image).replace(\"{stext}\",discord_sdk.small_image_text).replace(\"{stimestamp}\",str(discord_sdk.start_timestamp)).replace(\"{etimestamp}\",str(discord_sdk.end_timestamp))
$Panel/Info.text = $Panel/Info.text.replace(\"{ppublic}\",str(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 = {};
@@ -49,504 +52,87 @@ func _on_activity_join_request(user_requesting):
print(user_requesting)
user_request = user_requesting
func _on_button_pressed():
func _on_accept_join_request_pressed():
if(!user_request.is_empty()):
discord_sdk.accept_join_request(user_request.id)
func _on_line_edit_text_submitted(new_text):
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_line_edit_2_text_submitted(new_text):
func _on_accept_with_user_id_text_submitted(new_text):
discord_sdk.accept_invite(int(new_text))
func _on_button_2_pressed():
func _on_print_current_user_on_console_pressed():
print(discord_sdk.get_current_user())
func _on_check_button_toggled(button_pressed):
func _on_toggle_sdk_toggled(button_pressed):
if(button_pressed):
debug_text_update()
discord_sdk.unclear()
else:
discord_sdk.clear()
debug_text_update()
func _on_print_friends_pressed():
print(discord_sdk.get_all_relationships())
"
[sub_resource type="AtlasTexture" id="AtlasTexture_85oj4"]
atlas = ExtResource("4_gvc3o")
region = Rect2(512, 0, 512, 512)
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_8abo6"]
[sub_resource type="AtlasTexture" id="AtlasTexture_vv4mb"]
atlas = ExtResource("4_gvc3o")
region = Rect2(1024, 0, 512, 512)
[sub_resource type="Animation" id="Animation_mmtmn"]
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath(".:scale")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0.4),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(0.5, 0.5)]
}
[sub_resource type="AtlasTexture" id="AtlasTexture_kwv3j"]
atlas = ExtResource("4_gvc3o")
region = Rect2(1536, 0, 512, 512)
[sub_resource type="Animation" id="Animation_5u02v"]
resource_name = "pulsate"
loop_mode = 1
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath(".:scale")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 0.5, 1),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 0,
"values": [Vector2(0.5, 0.5), Vector2(0.8, 0.8), Vector2(0.5, 0.5)]
}
[sub_resource type="AtlasTexture" id="AtlasTexture_ij57t"]
atlas = ExtResource("4_gvc3o")
region = Rect2(2048, 0, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_w2du1"]
atlas = ExtResource("4_gvc3o")
region = Rect2(0, 512, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_4pma1"]
atlas = ExtResource("4_gvc3o")
region = Rect2(512, 512, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_fcoqp"]
atlas = ExtResource("4_gvc3o")
region = Rect2(1024, 512, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_tjcb7"]
atlas = ExtResource("4_gvc3o")
region = Rect2(1536, 512, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_oudh8"]
atlas = ExtResource("4_gvc3o")
region = Rect2(2048, 512, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_csja0"]
atlas = ExtResource("4_gvc3o")
region = Rect2(0, 1024, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_0xbpk"]
atlas = ExtResource("4_gvc3o")
region = Rect2(512, 1024, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_p84pv"]
atlas = ExtResource("4_gvc3o")
region = Rect2(1024, 1024, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_1gjwh"]
atlas = ExtResource("4_gvc3o")
region = Rect2(1536, 1024, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_mrm73"]
atlas = ExtResource("4_gvc3o")
region = Rect2(2048, 1024, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_8rkne"]
atlas = ExtResource("4_gvc3o")
region = Rect2(0, 1536, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_c15qo"]
atlas = ExtResource("4_gvc3o")
region = Rect2(512, 1536, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_74tpk"]
atlas = ExtResource("4_gvc3o")
region = Rect2(1024, 1536, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_v5nxq"]
atlas = ExtResource("4_gvc3o")
region = Rect2(1536, 1536, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_0mf44"]
atlas = ExtResource("4_gvc3o")
region = Rect2(2048, 1536, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_kb0hn"]
atlas = ExtResource("4_gvc3o")
region = Rect2(0, 2048, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_o22ug"]
atlas = ExtResource("4_gvc3o")
region = Rect2(512, 2048, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_21q7w"]
atlas = ExtResource("4_gvc3o")
region = Rect2(1024, 2048, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_gitfl"]
atlas = ExtResource("4_gvc3o")
region = Rect2(1536, 2048, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_8hg1o"]
atlas = ExtResource("4_gvc3o")
region = Rect2(2048, 2048, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_niuoc"]
atlas = ExtResource("4_gvc3o")
region = Rect2(0, 2560, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_mt5ft"]
atlas = ExtResource("4_gvc3o")
region = Rect2(512, 2560, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_ub7uo"]
atlas = ExtResource("4_gvc3o")
region = Rect2(1024, 2560, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_2uxnl"]
atlas = ExtResource("4_gvc3o")
region = Rect2(1536, 2560, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_bh4ts"]
atlas = ExtResource("4_gvc3o")
region = Rect2(2048, 2560, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_lcu0i"]
atlas = ExtResource("4_gvc3o")
region = Rect2(0, 3072, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_mmqt1"]
atlas = ExtResource("4_gvc3o")
region = Rect2(512, 3072, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_orode"]
atlas = ExtResource("4_gvc3o")
region = Rect2(1024, 3072, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_ricn8"]
atlas = ExtResource("4_gvc3o")
region = Rect2(1536, 3072, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_6ftll"]
atlas = ExtResource("4_gvc3o")
region = Rect2(2048, 3072, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_fm4jy"]
atlas = ExtResource("4_gvc3o")
region = Rect2(0, 3584, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_7qcot"]
atlas = ExtResource("4_gvc3o")
region = Rect2(512, 3584, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_2y47g"]
atlas = ExtResource("4_gvc3o")
region = Rect2(1024, 3584, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_gpr0t"]
atlas = ExtResource("4_gvc3o")
region = Rect2(1536, 3584, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_nn332"]
atlas = ExtResource("4_gvc3o")
region = Rect2(2048, 3584, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_jg384"]
atlas = ExtResource("4_gvc3o")
region = Rect2(0, 4096, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_g0wvw"]
atlas = ExtResource("4_gvc3o")
region = Rect2(512, 4096, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_e6fmf"]
atlas = ExtResource("4_gvc3o")
region = Rect2(1024, 4096, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_n1rtv"]
atlas = ExtResource("4_gvc3o")
region = Rect2(1536, 4096, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_365g3"]
atlas = ExtResource("4_gvc3o")
region = Rect2(2048, 4096, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_frkrx"]
atlas = ExtResource("4_gvc3o")
region = Rect2(0, 4608, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_j8adw"]
atlas = ExtResource("4_gvc3o")
region = Rect2(512, 4608, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_76fh7"]
atlas = ExtResource("4_gvc3o")
region = Rect2(1024, 4608, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_gmmrx"]
atlas = ExtResource("4_gvc3o")
region = Rect2(1536, 4608, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_rlh42"]
atlas = ExtResource("4_gvc3o")
region = Rect2(2048, 4608, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_wijf7"]
atlas = ExtResource("4_gvc3o")
region = Rect2(0, 5120, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_2n5hs"]
atlas = ExtResource("4_gvc3o")
region = Rect2(512, 5120, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_yrp6k"]
atlas = ExtResource("4_gvc3o")
region = Rect2(1024, 5120, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_w411h"]
atlas = ExtResource("4_gvc3o")
region = Rect2(1536, 5120, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_pe7po"]
atlas = ExtResource("4_gvc3o")
region = Rect2(2048, 5120, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_sr5kq"]
atlas = ExtResource("4_gvc3o")
region = Rect2(0, 5632, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_kgesr"]
atlas = ExtResource("4_gvc3o")
region = Rect2(512, 5632, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_vfk6x"]
atlas = ExtResource("4_gvc3o")
region = Rect2(1024, 5632, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_4d1t3"]
atlas = ExtResource("4_gvc3o")
region = Rect2(1536, 5632, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_6bexm"]
atlas = ExtResource("4_gvc3o")
region = Rect2(2048, 5632, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_tadlo"]
atlas = ExtResource("4_gvc3o")
region = Rect2(0, 6144, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_g2h20"]
atlas = ExtResource("4_gvc3o")
region = Rect2(512, 6144, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_x351d"]
atlas = ExtResource("4_gvc3o")
region = Rect2(1024, 6144, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_0jq3r"]
atlas = ExtResource("4_gvc3o")
region = Rect2(1536, 6144, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_1eeyl"]
atlas = ExtResource("4_gvc3o")
region = Rect2(0, 0, 512, 512)
[sub_resource type="SpriteFrames" id="SpriteFrames_kudgl"]
animations = [{
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_85oj4")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_vv4mb")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_kwv3j")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_ij57t")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_w2du1")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_4pma1")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_fcoqp")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_tjcb7")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_oudh8")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_csja0")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_0xbpk")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_p84pv")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_1gjwh")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_mrm73")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_8rkne")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_c15qo")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_74tpk")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_v5nxq")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_0mf44")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_kb0hn")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_o22ug")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_21q7w")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_gitfl")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_8hg1o")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_niuoc")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_mt5ft")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_ub7uo")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_2uxnl")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_bh4ts")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_lcu0i")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_mmqt1")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_orode")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_ricn8")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_6ftll")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_fm4jy")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_7qcot")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_2y47g")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_gpr0t")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_nn332")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_jg384")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_g0wvw")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_e6fmf")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_n1rtv")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_365g3")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_frkrx")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_j8adw")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_76fh7")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_gmmrx")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_rlh42")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_wijf7")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_2n5hs")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_yrp6k")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_w411h")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_pe7po")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_sr5kq")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_kgesr")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_vfk6x")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_4d1t3")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_6bexm")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_tadlo")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_g2h20")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_x351d")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_0jq3r")
}],
"loop": true,
"name": &"default",
"speed": 30.0
}, {
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_1eeyl")
}],
"loop": true,
"name": &"gray",
"speed": 5.0
}]
[sub_resource type="AnimationLibrary" id="AnimationLibrary_a7ofc"]
_data = {
"RESET": SubResource("Animation_mmtmn"),
"pulsate": SubResource("Animation_5u02v")
}
[node name="DebugNodeGroup" type="Node"]
editor_description = "This is a Debug Node wich will show (only if the project runs) some usefull info and buttons/input"
script = SubResource("GDScript_ak1tp")
[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."]
position = Vector2(389, 477.375)
scale = Vector2(0.14209, 0.14209)
sprite_frames = SubResource("SpriteFrames_kudgl")
frame_progress = 0.417812
[node name="Panel" type="Panel" parent="."]
anchors_preset = -1
anchor_right = 0.373
anchor_bottom = 1.0
offset_left = -5.0
offset_right = 0.303955
grow_horizontal = 2
grow_vertical = 2
[node name="Info" type="RichTextLabel" parent="."]
offset_left = 7.0
offset_top = 6.0
offset_right = 424.0
offset_bottom = 312.0
[node name="Info" type="RichTextLabel" parent="Panel"]
layout_mode = 0
offset_left = 12.0
offset_top = 21.0
offset_right = 429.0
offset_bottom = 461.0
theme_override_font_sizes/normal_font_size = 14
text = "Application ID : {id}
Details: {details}
@@ -572,52 +158,109 @@ Is instanced: {instanced}
"
fit_content = true
[node name="PrintCurrentUserOnConsole" type="Button" parent="."]
[node name="PrintCurrentUserOnConsole" type="Button" parent="Panel"]
layout_mode = 1
anchors_preset = 4
anchor_top = 0.5
anchor_bottom = 0.5
offset_left = 7.0
offset_top = 141.375
offset_right = 240.0
offset_bottom = 174.375
offset_left = 12.0
offset_top = 138.375
offset_right = 245.0
offset_bottom = 171.375
grow_vertical = 2
text = "Print current user on console"
[node name="AcceptInviteRequest" type="Button" parent="."]
[node name="PrintFriends" type="Button" parent="Panel"]
layout_mode = 1
anchors_preset = 4
anchor_top = 0.5
anchor_bottom = 0.5
offset_left = 7.0
offset_top = 178.875
offset_right = 149.0
offset_bottom = 209.875
offset_left = 12.0
offset_top = 176.5
offset_right = 204.0
offset_bottom = 207.5
grow_vertical = 2
text = "Print friends on console"
[node name="AcceptJoinRequest" type="Button" parent="Panel"]
layout_mode = 1
anchors_preset = 4
anchor_top = 0.5
anchor_bottom = 0.5
offset_left = 12.0
offset_top = 212.875
offset_right = 154.0
offset_bottom = 243.875
grow_vertical = 2
text = "ACCEPT REQUEST"
[node name="InviteWithUserID" type="LineEdit" parent="."]
[node name="InviteWithUserID" type="LineEdit" parent="Panel"]
layout_mode = 1
anchors_preset = 4
anchor_top = 0.5
anchor_bottom = 0.5
offset_left = 6.0
offset_top = 215.375
offset_right = 205.0
offset_bottom = 246.375
offset_left = 11.0
offset_top = 250.375
offset_right = 210.0
offset_bottom = 281.375
grow_vertical = 2
size_flags_horizontal = 0
placeholder_text = "Invite with user_id here"
[node name="AcceptWithUserID" type="LineEdit" parent="."]
[node name="AcceptWithUserID" type="LineEdit" parent="Panel"]
layout_mode = 1
anchors_preset = 4
anchor_top = 0.5
anchor_bottom = 0.5
offset_left = 6.0
offset_top = 250.875
offset_right = 255.0
offset_bottom = 281.875
offset_left = 11.0
offset_top = 286.875
offset_right = 260.0
offset_bottom = 317.875
grow_vertical = 2
placeholder_text = "Accept Invite with user_id here"
[connection signal="pressed" from="PrintCurrentUserOnConsole" to="." method="_on_button_2_pressed"]
[connection signal="pressed" from="AcceptInviteRequest" to="." method="_on_button_pressed"]
[connection signal="text_submitted" from="InviteWithUserID" to="." method="_on_line_edit_text_submitted"]
[connection signal="text_submitted" from="AcceptWithUserID" to="." method="_on_line_edit_2_text_submitted"]
[node name="ToggleSDK" type="CheckButton" parent="Panel"]
layout_mode = 1
anchors_preset = 4
anchor_top = 0.5
anchor_bottom = 0.5
offset_left = 298.0
offset_top = 157.375
offset_right = 1144.0
offset_bottom = 665.375
grow_vertical = 2
scale = Vector2(0.05, 0.05)
theme_override_icons/checked = ExtResource("2_q6tao")
theme_override_icons/unchecked = ExtResource("3_5cyem")
theme_override_styles/focus = SubResource("StyleBoxEmpty_8abo6")
button_pressed = true
[node name="TextureRect" type="TextureRect" parent="Panel"]
self_modulate = Color(0.47451, 0.47451, 0.47451, 1)
layout_mode = 1
anchors_preset = -1
anchor_left = 0.88
anchor_top = 0.762
anchor_right = 0.88
anchor_bottom = 0.762
offset_left = -28.8
offset_top = -28.776
offset_right = 28.0841
offset_bottom = 28.1082
grow_horizontal = 2
grow_vertical = 2
scale = Vector2(0.5, 0.5)
pivot_offset = Vector2(29.0693, 29.0693)
texture = ExtResource("3_goflf")
[node name="AnimationPlayer" type="AnimationPlayer" parent="Panel/TextureRect"]
libraries = {
"": SubResource("AnimationLibrary_a7ofc")
}
[connection signal="pressed" from="Panel/PrintCurrentUserOnConsole" to="." method="_on_print_current_user_on_console_pressed"]
[connection signal="pressed" from="Panel/PrintFriends" to="." method="_on_print_friends_pressed"]
[connection signal="pressed" from="Panel/AcceptJoinRequest" to="." method="_on_accept_join_request_pressed"]
[connection signal="text_submitted" from="Panel/InviteWithUserID" to="." method="_on_invite_with_user_id_text_submitted"]
[connection signal="text_submitted" from="Panel/AcceptWithUserID" to="." method="_on_accept_with_user_id_text_submitted"]
[connection signal="toggled" from="Panel/ToggleSDK" to="." method="_on_toggle_sdk_toggled"]

View File

@@ -1,4 +0,0 @@
<svg width="16" height="14" viewBox="0 0 16 14" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M1.35776 4.35954C0.15745 6.80425 -0.158183 9.20437 0.0679444 11.5772C1.29133 12.4811 2.66066 13.1685 4.11639 13.6096C4.44417 13.1687 4.73422 12.701 4.98346 12.2115C4.51007 12.0346 4.05317 11.8165 3.61804 11.5596C3.73256 11.4765 3.84456 11.3909 3.95279 11.3079C5.21891 11.9033 6.60083 12.212 7.99997 12.212C9.39912 12.212 10.781 11.9033 12.0472 11.3079C12.1566 11.3972 12.2686 11.4828 12.3819 11.5596C11.9459 11.8169 11.4882 12.0355 11.014 12.2127C11.2629 12.7021 11.553 13.1694 11.881 13.6096C13.338 13.1703 14.7084 12.4832 15.932 11.5785C16.1887 8.91658 15.71 6.52885 14.6441 4.35954H1.35776ZM3.90119 8.15294C3.90119 9.03386 4.55307 9.74992 5.34212 9.74992C6.14627 9.74992 6.76795 9.03386 6.78179 8.15294C6.79563 7.27203 6.14879 6.54967 5.3396 6.54967C4.53042 6.54967 3.90119 7.27203 3.90119 8.15294ZM9.21815 8.15294C9.21815 9.03386 9.86752 9.74992 10.6578 9.74992C11.462 9.74992 12.0824 9.03386 12.0962 8.15294C12.1101 7.27203 11.4683 6.54967 10.6578 6.54967C9.84738 6.54967 9.21815 7.27203 9.21815 8.15294Z" fill="#5865F2"/>
<path d="M4.31337 0.711094C4.97409 0.378693 5.67883 0.1583 6.39124 0C6.67624 0.478046 6.93634 0.995727 7.16285 1.50181C7.43169 1.45692 7.70147 1.4403 7.97234 1.43708V1.43666C7.97402 1.43666 7.97578 1.43708 7.97746 1.43708C7.97907 1.43708 7.98082 1.43666 7.98271 1.43666V1.43708C8.25308 1.4403 8.5231 1.45692 8.79187 1.50181C9.01852 0.995727 9.27877 0.478046 9.56334 0C10.2761 0.1583 10.9807 0.378693 11.6415 0.711094C11.6264 1.29423 11.5887 1.85296 11.5124 2.42051C11.7685 2.58482 12.0385 2.72584 12.2781 2.91819C12.522 3.10544 12.7702 3.28458 12.9907 3.50357C13.4312 3.21235 13.8976 2.93868 14.3777 2.6971C14.8955 3.25402 15.3798 3.85511 15.7752 4.52774C15.5165 4.9441 15.1789 5.43899 14.8223 5.88763H1.13254C0.823832 5.50544 0.490472 5.01534 0.179688 4.52774C0.575141 3.85511 1.05924 3.25402 1.57697 2.6971C2.05728 2.93868 2.52351 3.21235 2.96401 3.50357C3.18451 3.28458 3.43322 3.10544 3.67673 2.91819C3.9164 2.72584 4.18607 2.58482 4.44266 2.42051C4.3662 1.85296 4.32848 1.29423 4.31337 0.711094Z" fill="#5865F2"/>
</svg>

Before

Width:  |  Height:  |  Size: 2.1 KiB

View 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

View File

@@ -2,16 +2,16 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://c70jidlptani4"
path="res://.godot/imported/Group_1.svg-8cf36058739c5884a9a47a4dfa7d001a.ctex"
uid="uid://dtc6ckladq0td"
path="res://.godot/imported/circle.svg-ca71b895eb1c5e7e6f2f2afe081d28dd.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/discord-sdk-gd/nodes/assets/Group_1.svg"
dest_files=["res://.godot/imported/Group_1.svg-8cf36058739c5884a9a47a4dfa7d001a.ctex"]
source_file="res://addons/discord-sdk-gd/nodes/assets/circle.svg"
dest_files=["res://.godot/imported/circle.svg-ca71b895eb1c5e7e6f2f2afe081d28dd.ctex"]
[params]

Binary file not shown.

Before

Width:  |  Height:  |  Size: 272 KiB

View File

@@ -5,8 +5,19 @@
## 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) -> void:
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()

View File

@@ -3,6 +3,7 @@
## The DiscordSDK Debug Node will show info about the current values of its variables and some buttons to change them.
##
## @tutorial: https://github.com/vaporvee/discord-sdk-godot/wiki
@tool
extends Node
func _ready() -> void:

View File

@@ -3,5 +3,5 @@
name="DiscordSDK"
description="Discord Game SDK support for GDScript in Godot"
author="vaporvee"
version="2.2"
version="3.2"
script="plugin.gd"

View File

@@ -2,40 +2,38 @@
extends EditorPlugin
const DiscordSDKDebug = preload("res://addons/discord-sdk-gd/nodes/debug.gd")
const DiscordSDKDebug_icon = preload("res://addons/discord-sdk-gd/nodes/assets/Debug.svg")
const DiscordSDKDebug_icon = preload("res://addons/discord-sdk-gd/Debug.svg")
var loaded_DiscordSDKDebug = DiscordSDKDebug.new()
const ExportPlugin = preload("res://addons/discord-sdk-gd/export.gd")
var loaded_exportplugin = ExportPlugin.new()
var restart_window: Control = preload("res://addons/discord-sdk-gd/restart_window.tscn").instantiate()
func _enter_tree() -> void:
add_custom_type("DiscordSDKDebug","Node",DiscordSDKDebug,DiscordSDKDebug_icon)
add_autoload_singleton("DiscordSDKLoader", "res://addons/discord-sdk-gd/nodes/core_updater.gd")
add_export_plugin(loaded_exportplugin)
func _enable_plugin() -> void:
print("DiscordSDK Addon got enabled (PLEASE RESTART THE EDITOR)")
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:
print("DiscordSDK Addon got disabled")
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 _process(_delta):
if(ProjectSettings.get_setting("DiscordSDK/EditorPresence/enabled")&&!get_editor_interface().is_playing_scene()):
if(discord_sdk.app_id != 1108142249990176808):
discord_sdk.app_id = 1108142249990176808
discord_sdk.details = ProjectSettings.get_setting("application/config/name")
discord_sdk.state = "Editing: \""+ str(get_tree().edited_scene_root.scene_file_path).replace("res://","") +"\""
discord_sdk.large_image = "godot"
discord_sdk.large_image_text = str(Engine.get_version_info().string)
discord_sdk.start_timestamp = int(Time.get_unix_time_from_system())
discord_sdk.refresh()
if(discord_sdk.app_id == 1108142249990176808):
discord_sdk.coreupdate()
func save_restart() -> void:
get_editor_interface().restart_editor(true)
func restart() -> void:
get_editor_interface().restart_editor(false)

View 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)"

View 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

View File

@@ -8,18 +8,17 @@ custom_features=""
export_filter="all_resources"
include_filter=""
exclude_filter=""
export_path="../../uizkgiuzfv/discord_sdk_demo.exe"
export_path="../../eexport/windows/discord-sdk-godot-demo.exe"
encryption_include_filters=""
encryption_exclude_filters=""
encrypt_pck=false
encrypt_directory=false
script_encryption_key=""
[preset.0.options]
custom_template/debug=""
custom_template/release=""
debug/export_console_script=1
debug/export_console_wrapper=1
binary_format/embed_pck=true
texture_format/bptc=true
texture_format/s3tc=true
@@ -27,9 +26,6 @@ texture_format/etc=false
texture_format/etc2=false
binary_format/architecture="x86_64"
codesign/enable=false
codesign/identity_type=0
codesign/identity=""
codesign/password=""
codesign/timestamp=true
codesign/timestamp_server_url=""
codesign/digest_algorithm=1
@@ -63,3 +59,43 @@ Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorActi
ssh_remote_deploy/cleanup_script="Stop-ScheduledTask -TaskName godot_remote_debug -ErrorAction:SilentlyContinue
Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue
Remove-Item -Recurse -Force '{temp_dir}'"
[preset.1]
name="Linux/X11"
platform="Linux/X11"
runnable=true
dedicated_server=false
custom_features=""
export_filter="all_resources"
include_filter=""
exclude_filter=""
export_path="../../eexport/linux/discord-sdk-godot-demo.x86_64"
encryption_include_filters=""
encryption_exclude_filters=""
encrypt_pck=false
encrypt_directory=false
[preset.1.options]
custom_template/debug=""
custom_template/release=""
debug/export_console_wrapper=1
binary_format/embed_pck=true
texture_format/bptc=true
texture_format/s3tc=true
texture_format/etc=false
texture_format/etc2=false
binary_format/architecture="x86_64"
ssh_remote_deploy/enabled=false
ssh_remote_deploy/host="user@host_ip"
ssh_remote_deploy/port="22"
ssh_remote_deploy/extra_args_ssh=""
ssh_remote_deploy/extra_args_scp=""
ssh_remote_deploy/run_script="#!/usr/bin/env bash
export DISPLAY=:0
unzip -o -q \"{temp_dir}/{archive_name}\" -d \"{temp_dir}\"
\"{temp_dir}/{exe_name}\" {cmd_args}"
ssh_remote_deploy/cleanup_script="#!/usr/bin/env bash
kill $(pgrep -x -f \"{temp_dir}/{exe_name} {cmd_args}\")
rm -rf \"{temp_dir}\""

View File

@@ -5,6 +5,8 @@ func _ready() -> void:
discord_sdk.connect("activity_join_request",_on_activity_join_request)
discord_sdk.connect("activity_join",_on_activity_join)
discord_sdk.connect("activity_spectate",_on_activity_spectate)
discord_sdk.connect("relationships_init",_on_relationship_init)
discord_sdk.connect("updated_relationship", _on_updated_relationship)
func set_activity() -> void:
discord_sdk.clear()
@@ -18,8 +20,8 @@ func set_activity() -> void:
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.
# 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
@@ -53,8 +55,9 @@ func _on_activity_join(secret) -> void:
func _on_activity_spectate(secret) -> void:
print(secret)
func _on_toggle_sdk_toggled(button_pressed):
if(button_pressed):
set_activity()
else:
discord_sdk.clear()
func _on_relationship_init():
print("initialized")
func _on_updated_relationship(relationship):
print(relationship)

View File

@@ -1,13 +1,9 @@
[gd_scene load_steps=7 format=3 uid="uid://dyc3kseph4el7"]
[gd_scene load_steps=4 format=3 uid="uid://dyc3kseph4el7"]
[ext_resource type="Script" path="res://main.gd" id="1_kl8ri"]
[ext_resource type="Texture2D" uid="uid://b3qm246m7pnsx" path="res://assets/Logo_V2.png" id="2_gd222"]
[ext_resource type="Texture2D" uid="uid://dnfq6kug4x6o2" path="res://addons/discord-sdk-gd/nodes/assets/Checked.svg" id="3_wajuo"]
[ext_resource type="Texture2D" uid="uid://compmm3kviqqe" path="res://addons/discord-sdk-gd/nodes/assets/Unchecked.svg" id="4_8hvtu"]
[ext_resource type="Script" path="res://addons/discord-sdk-gd/nodes/debug.gd" id="6_ujijw"]
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_phc3u"]
[node name="Node" type="Node"]
script = ExtResource("1_kl8ri")
@@ -23,7 +19,7 @@ color = Color(0.345098, 0.396078, 0.94902, 1)
[node name="Sprite2D" type="Sprite2D" parent="."]
texture_filter = 4
position = Vector2(580, 308)
position = Vector2(789, 330.5)
scale = Vector2(0.408203, 0.408203)
texture = ExtResource("2_gd222")
@@ -33,10 +29,10 @@ anchor_left = 0.293
anchor_top = 0.59
anchor_right = 0.736
anchor_bottom = 0.727
offset_left = -0.536011
offset_top = -0.319977
offset_right = 0.12793
offset_bottom = -0.0960388
offset_left = 208.464
offset_top = 22.18
offset_right = 209.128
offset_bottom = 22.4039
grow_horizontal = 2
grow_vertical = 2
size_flags_horizontal = 4
@@ -46,20 +42,3 @@ text = "[center][font s=60]DiscordSDK Test"
[node name="DiscordSDKDebug" type="Node" parent="."]
script = ExtResource("6_ujijw")
[node name="ToggleSDK" type="CheckButton" parent="."]
anchors_preset = 4
anchor_top = 0.5
anchor_bottom = 0.5
offset_left = 293.0
offset_top = 142.375
offset_right = 1139.0
offset_bottom = 650.375
grow_vertical = 2
scale = Vector2(0.05, 0.05)
theme_override_icons/checked = ExtResource("3_wajuo")
theme_override_icons/unchecked = ExtResource("4_8hvtu")
theme_override_styles/focus = SubResource("StyleBoxEmpty_phc3u")
button_pressed = true
[connection signal="toggled" from="ToggleSDK" to="." method="_on_toggle_sdk_toggled"]

View File

@@ -8,15 +8,12 @@
config_version=5
[DiscordSDK]
EditorPresence/enabled=false
[application]
config/name="GDExtension DiscordSDK Test Project"
config/tags=PackedStringArray("vaporvee")
run/main_scene="res://main.tscn"
config/features=PackedStringArray("4.0")
config/features=PackedStringArray("4.1")
boot_splash/bg_color=Color(0.25098, 0.305882, 0.929412, 1)
boot_splash/image="res://assets/Banner_v1.png"
boot_splash/fullsize=false

View File

@@ -6,6 +6,12 @@ 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/")

View File

@@ -6,6 +6,12 @@ import os
with zipfile.ZipFile("src/lib/discord_game_sdk.zip", "r") as zip_ref:
zip_ref.extractall("src/lib/discord_game_sdk/")
# Patch the SDK to actually build, since it's missing an include
with open("src/lib/discord_game_sdk/cpp/types.h", "r+") as f:
s = f.read();
f.seek(0);
f.write("#include <cstdint>\n" + s)
copy_tree("src/lib/discord_game_sdk/lib/", "src/lib/discord_game_sdk/bin/")
os.rename(
"src/lib/discord_game_sdk/bin/aarch64/discord_game_sdk.dylib",

View File

@@ -83,8 +83,12 @@ void discord_sdk::_bind_methods()
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"), &discord_sdk::clear);
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);
@@ -94,6 +98,7 @@ void discord_sdk::_bind_methods()
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);
@@ -154,9 +159,11 @@ void discord_sdk::debug()
void discord_sdk::set_app_id(int64_t value)
{
app_id = value;
if (app_id > 0)
{
result = discord::Core::Create(value, DiscordCreateFlags_NoRequireDiscord, &core); // after setting app_ID it initializes everything
if (result == discord::Result::Ok && app_id > 0)
if (result == discord::Result::Ok)
{
// initialize currentuser stuff
core->UserManager().OnCurrentUserUpdate.Connect([]()
@@ -170,28 +177,26 @@ void discord_sdk::set_app_id(int64_t value)
{ discord_sdk::get_singleton()
->emit_signal("activity_spectate", secret); });
core->ActivityManager().OnActivityJoinRequest.Connect([this](discord::User const &user)
{ Dictionary user_requesting;
user_requesting["avatar"] = user.GetAvatar(); //can be empty when user has no avatar
user_requesting["is_bot"] = user.GetBot();
user_requesting["discriminator"] = user.GetDiscriminator();
user_requesting["id"] = user.GetId();
user_requesting["username"] = user.GetUsername();
if(String(user_requesting["avatar"]).is_empty())
user_requesting["avatar_url"] = String(std::string("https://cdn.discordapp.com/embed/avatars/" + std::to_string((user_requesting["discriminator"].INT % 5) - 1)+ ".png").c_str());
else
user_requesting["avatar_url"] = String(std::string("https://cdn.discordapp.com/avatars/" + std::to_string(user.GetId()) + "/" + user.GetAvatar() + ".png?size=512").c_str());//I don't know what the hell i did there but removing ?size=512 will crash the whole editor
user_requesting.make_read_only();
discord_sdk::get_singleton()
->emit_signal("activity_join_request",user_requesting); });
{ 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_sdk::get_app_id()
{
if (app_id != 0)
return app_id;
return old_app_id;
}
void discord_sdk::set_state(String value)
@@ -225,34 +230,52 @@ void discord_sdk::refresh()
UtilityFunctions::push_warning("Discord Activity couldn't be updated. It could be that Discord isn't running!");
}
void discord_sdk::clear()
void discord_sdk::clear(bool reset_values = false)
{
if (result == discord::Result::Ok)
{
app_id = 0;
state = "";
details = "";
large_image = "";
large_image_text = "";
small_image = "";
small_image_text = "";
start_timestamp = 0;
end_timestamp = 0;
party_id = "";
current_party_size = 0;
max_party_size = 0;
match_secret = "";
join_secret = "";
spectate_secret = "";
instanced = false;
is_public_party = false;
is_overlay_locked = false;
if (reset_values)
{
old_app_id = 0;
set_state("");
set_details("");
set_large_image("");
set_large_image_text("");
set_small_image("");
set_small_image_text("");
set_start_timestamp(0);
set_end_timestamp(0);
set_party_id("");
set_current_party_size(0);
set_max_party_size(0);
set_match_secret("");
set_join_secret("");
set_spectate_secret("");
set_instanced(false);
set_is_public_party(false);
set_is_overlay_locked(false);
core->ActivityManager().ClearActivity([](discord::Result result) {});
}
else
old_app_id = app_id;
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;
@@ -455,20 +478,40 @@ Dictionary discord_sdk::get_current_user()
{
discord::User user{};
core->UserManager().GetCurrentUser(&user);
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?size=512").c_str());
userdict.make_read_only();
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;
@@ -478,3 +521,91 @@ int discord_sdk::get_result_int()
{
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;
}

View File

@@ -17,7 +17,19 @@ class discord_sdk : public RefCounted
protected:
static void _bind_methods();
private:
public:
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;
@@ -44,18 +56,12 @@ private:
bool is_overlay_locked;
public:
static discord_sdk *
get_singleton();
discord_sdk();
~discord_sdk();
void debug();
void coreupdate();
void refresh();
void clear();
void clear(bool reset_values);
void unclear();
int64_t get_app_id();
void set_app_id(int64_t value);
String get_state();
@@ -112,6 +118,8 @@ public:
void register_steam(int32_t value);
Dictionary get_current_user();
Dictionary get_relationship(int64_t user_id);
Array get_all_relationships();
bool get_is_discord_working();
int get_result_int();

View File

@@ -11,7 +11,7 @@ using namespace godot;
static discord_sdk *discordsdk;
void gdextension_initialize(ModuleInitializationLevel p_level)
void initialize_discordsdk_module(ModuleInitializationLevel p_level)
{
if (p_level == MODULE_INITIALIZATION_LEVEL_SCENE)
{
@@ -21,7 +21,7 @@ void gdextension_initialize(ModuleInitializationLevel p_level)
}
}
void gdextension_terminate(ModuleInitializationLevel p_level)
void uninitialize_discordsdk_module(ModuleInitializationLevel p_level)
{
if (p_level == MODULE_INITIALIZATION_LEVEL_SCENE)
{
@@ -32,12 +32,12 @@ void gdextension_terminate(ModuleInitializationLevel p_level)
extern "C"
{
GDExtensionBool GDE_EXPORT discordsdkgd_library_init(const GDExtensionInterface *p_interface, GDExtensionClassLibraryPtr p_library, GDExtensionInitialization *r_initialization)
GDExtensionBool GDE_EXPORT discordsdkgd_library_init(GDExtensionInterfaceGetProcAddress p_get_proc_address, GDExtensionClassLibraryPtr p_library, GDExtensionInitialization *r_initialization)
{
godot::GDExtensionBinding::InitObject init_obj(p_interface, p_library, r_initialization);
godot::GDExtensionBinding::InitObject init_obj(p_get_proc_address, p_library, r_initialization);
init_obj.register_initializer(gdextension_initialize);
init_obj.register_terminator(gdextension_terminate);
init_obj.register_initializer(initialize_discordsdk_module);
init_obj.register_terminator(uninitialize_discordsdk_module);
init_obj.set_minimum_library_initialization_level(MODULE_INITIALIZATION_LEVEL_SCENE);
return init_obj.init();