diff --git a/.gitmodules b/.gitmodules index e24f81e..e497b19 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,3 @@ [submodule "src/lib/godot-cpp"] path = src/lib/godot-cpp url = https://github.com/godotengine/godot-cpp -[submodule "src/lib/discord-rpc"] - path = src/lib/discord-rpc - url = https://github.com/vaporvee/discord-rpc diff --git a/project/addons/discord-sdk-gd/bin/windows/discord_game_sdk_binding.dll b/project/addons/discord-sdk-gd/bin/windows/discord_game_sdk_binding.dll index 64cfc29..e907059 100644 Binary files a/project/addons/discord-sdk-gd/bin/windows/discord_game_sdk_binding.dll and b/project/addons/discord-sdk-gd/bin/windows/discord_game_sdk_binding.dll differ diff --git a/project/addons/discord-sdk-gd/bin/windows/discord_game_sdk_binding_debug.dll b/project/addons/discord-sdk-gd/bin/windows/discord_game_sdk_binding_debug.dll index 26de419..64d0b23 100644 Binary files a/project/addons/discord-sdk-gd/bin/windows/discord_game_sdk_binding_debug.dll and b/project/addons/discord-sdk-gd/bin/windows/discord_game_sdk_binding_debug.dll differ diff --git a/project/main.gd b/project/main.gd index d679de0..0552fe1 100644 --- a/project/main.gd +++ b/project/main.gd @@ -1,20 +1,20 @@ extends Node func _ready(): -# Discord_SDK.app_id = 1099618430065324082 + Discord_SDK.app_id = 1099618430065324082 Discord_SDK.debug() # Discord_SDK.app_id = 1099618430065324082 # Discord_SDK.details = "A demo activity by vaporvee#1231" # Discord_SDK.state = "Checkpoint 23/23" - +# # Discord_SDK.large_image = "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.start_timestamp = int(Time.get_unix_time_from_system()) +# +# #Discord_SDK.start_timestamp = int(Time.get_unix_time_from_system()) # Discord_SDK.end_timestamp = int(Time.get_unix_time_from_system()) + 3600 # +1 hour in unix time - +# # Discord_SDK.refresh() - +# # $Info.text = $Info.text.replace("{discordinfo}",str(Discord_SDK.get_is_discord_working())).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)) diff --git a/src/discordgodot.cpp b/src/discordgodot.cpp index 533927d..bb26904 100644 --- a/src/discordgodot.cpp +++ b/src/discordgodot.cpp @@ -1,5 +1,5 @@ #include "discordgodot.h" -#include "lib/discord-rpc/include/discord_rpc.h" +#include "lib/discord_game_sdk/cpp/discord.h" #include #include #include @@ -9,7 +9,10 @@ using namespace godot; Discord_SDK *Discord_SDK::singleton = nullptr; -DiscordRichPresence discordPresence; +discord::Core *core{}; +discord::Result result; +discord::Activity activity{}; +discord::User user{}; void Discord_SDK::_bind_methods() { @@ -72,36 +75,35 @@ Discord_SDK::~Discord_SDK() void Discord_SDK::coreupdate() { -#ifdef DISCORD_DISABLE_IO_THREAD - Discord_UpdateConnection(); -#endif - Discord_RunCallbacks(); + if (result == discord::Result::Ok && app_id > 0) + { + ::core->RunCallbacks(); + } } void Discord_SDK::debug() { - DiscordEventHandlers handlers; - Discord_Initialize("1099618430065324082", &handlers, 1, NULL); - memset(&discordPresence, 0, sizeof(discordPresence)); - discordPresence.state = "\"new\" discord rpc lib for godot"; - discordPresence.details = "Teeest"; - discordPresence.startTimestamp = 0; - discordPresence.endTimestamp = time(0) + 5 * 60; - discordPresence.largeImageKey = "example_game"; - discordPresence.smallImageKey = "fighting"; - discordPresence.partyId = "party1234"; - discordPresence.partySize = 1; - discordPresence.partyMax = 6; - discordPresence.partyPrivacy = DISCORD_PARTY_PUBLIC; - discordPresence.matchSecret = "xyzzy"; - discordPresence.joinSecret = "join"; - discordPresence.spectateSecret = "look"; - discordPresence.instance = 0; - Discord_UpdatePresence(&discordPresence); + result = discord::Core::Create(1080224638845591692, DiscordCreateFlags_NoRequireDiscord, &core); + activity.SetState("Test from Godot!"); + activity.SetDetails("I worked months on this"); + activity.GetAssets().SetLargeImage("test1"); + activity.GetAssets().SetLargeText("wow test text for large image"); + activity.GetAssets().SetSmallImage("godot"); + activity.GetAssets().SetSmallText("wow test text for small image"); + activity.GetTimestamps().SetStart(1682242800); + if (result == discord::Result::Ok) + { + core->ActivityManager().UpdateActivity(activity, [](discord::Result result) {}); + core->UserManager().OnCurrentUserUpdate.Connect([]() + { core->UserManager().GetCurrentUser(&user); }); + } + else + UtilityFunctions::push_warning("Discord Activity couldn't be updated. It could be that Discord isn't running!"); } void Discord_SDK::set_app_id(const int64_t &value) { app_id = value; + result = discord::Core::Create(value, DiscordCreateFlags_NoRequireDiscord, &core); } int64_t Discord_SDK::get_app_id() const { @@ -111,6 +113,7 @@ int64_t Discord_SDK::get_app_id() const void Discord_SDK::set_state(const String &value) { state = value; + activity.SetState(value.utf8().get_data()); } String Discord_SDK::get_state() const { @@ -119,6 +122,7 @@ String Discord_SDK::get_state() const void Discord_SDK::set_details(const String &value) { details = value; + activity.SetDetails(value.utf8().get_data()); } String Discord_SDK::get_details() const { @@ -127,11 +131,20 @@ String Discord_SDK::get_details() const void Discord_SDK::refresh() { + if (result == discord::Result::Ok && app_id > 0) + { + core->ActivityManager().UpdateActivity(activity, [](discord::Result result) {}); + core->UserManager().OnCurrentUserUpdate.Connect([]() + { core->UserManager().GetCurrentUser(&user); }); + } + else + UtilityFunctions::push_warning("Discord Activity couldn't be updated. It could be that Discord isn't running!"); } void Discord_SDK::set_large_image(const String &value) { large_image = value; + activity.GetAssets().SetLargeImage(value.utf8().get_data()); } String Discord_SDK::get_large_image() const { @@ -140,6 +153,7 @@ String Discord_SDK::get_large_image() const void Discord_SDK::set_large_image_text(const String &value) { large_image_text = value; + activity.GetAssets().SetLargeText(value.utf8().get_data()); } String Discord_SDK::get_large_image_text() const { @@ -148,6 +162,7 @@ String Discord_SDK::get_large_image_text() const void Discord_SDK::set_small_image(const String &value) { small_image = value; + activity.GetAssets().SetSmallImage(value.utf8().get_data()); } String Discord_SDK::get_small_image() const { @@ -156,6 +171,7 @@ String Discord_SDK::get_small_image() const void Discord_SDK::set_small_image_text(const String &value) { small_image_text = value; + activity.GetAssets().SetSmallText(value.utf8().get_data()); } String Discord_SDK::get_small_image_text() const { @@ -165,26 +181,28 @@ String Discord_SDK::get_small_image_text() const void Discord_SDK::set_start_timestamp(const int64_t &value) { start_timestamp = value; + activity.GetTimestamps().SetStart(value); } int64_t Discord_SDK::get_start_timestamp() const { - return 0; + return activity.GetTimestamps().GetStart(); } void Discord_SDK::set_end_timestamp(const int64_t &value) { end_timestamp = value; + activity.GetTimestamps().SetEnd(value); } int64_t Discord_SDK::get_end_timestamp() const { - return 0; + return activity.GetTimestamps().GetEnd(); } bool Discord_SDK::get_is_discord_working() const { - return 0; + return result == discord::Result::Ok && app_id > 0; } int Discord_SDK::get_result_int() const { - return 0; + return static_cast(result); } diff --git a/src/discordgodot.h b/src/discordgodot.h index 1ae2a88..6ad12c1 100644 --- a/src/discordgodot.h +++ b/src/discordgodot.h @@ -2,14 +2,15 @@ #define DISCORDGODOT_H #include -#include +#include "lib/discord_game_sdk/cpp/discord.h" +#include #include using namespace godot; -class Discord_SDK : public RefCounted +class Discord_SDK : public Object { - GDCLASS(Discord_SDK, RefCounted); + GDCLASS(Discord_SDK, Object); static Discord_SDK *singleton; diff --git a/src/lib/discord-rpc b/src/lib/discord-rpc deleted file mode 160000 index 3eea582..0000000 --- a/src/lib/discord-rpc +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 3eea5821c566ba2b0c1d89db91e1b10c2826f6a5 diff --git a/src/lib/discord_game_sdk.zip b/src/lib/discord_game_sdk.zip new file mode 100644 index 0000000..10b8a51 Binary files /dev/null and b/src/lib/discord_game_sdk.zip differ