added invite signals

This commit is contained in:
Yannik
2023-05-13 01:22:13 +02:00
parent 274a3ebbed
commit 9eaf340637
10 changed files with 159 additions and 26 deletions

59
.vscode/settings.json vendored
View File

@@ -4,7 +4,64 @@
"${workspaceFolder}/src/lib/godot-cpp/include"
],
"files.associations": {
"xlocbuf": "cpp"
"xlocbuf": "cpp",
"algorithm": "cpp",
"array": "cpp",
"atomic": "cpp",
"bit": "cpp",
"cctype": "cpp",
"clocale": "cpp",
"cmath": "cpp",
"compare": "cpp",
"concepts": "cpp",
"csignal": "cpp",
"cstddef": "cpp",
"cstdint": "cpp",
"cstdio": "cpp",
"cstdlib": "cpp",
"cstring": "cpp",
"ctime": "cpp",
"cwchar": "cpp",
"exception": "cpp",
"functional": "cpp",
"initializer_list": "cpp",
"ios": "cpp",
"iosfwd": "cpp",
"iostream": "cpp",
"istream": "cpp",
"iterator": "cpp",
"limits": "cpp",
"list": "cpp",
"memory": "cpp",
"new": "cpp",
"optional": "cpp",
"ostream": "cpp",
"ratio": "cpp",
"set": "cpp",
"stdexcept": "cpp",
"stop_token": "cpp",
"streambuf": "cpp",
"string": "cpp",
"system_error": "cpp",
"thread": "cpp",
"tuple": "cpp",
"type_traits": "cpp",
"typeinfo": "cpp",
"unordered_map": "cpp",
"utility": "cpp",
"vector": "cpp",
"xfacet": "cpp",
"xhash": "cpp",
"xiosbase": "cpp",
"xlocale": "cpp",
"xlocinfo": "cpp",
"xlocnum": "cpp",
"xmemory": "cpp",
"xstddef": "cpp",
"xstring": "cpp",
"xtr1common": "cpp",
"xtree": "cpp",
"xutility": "cpp"
},
"[python]": {
"editor.defaultFormatter": "ms-python.black-formatter"

Binary file not shown.

View File

@@ -4,11 +4,11 @@ extends EditorExportPlugin
func _export_file(path, type, features):
if features[2] == "windows":
if features[4] == "x86_64":
add_shared_object("bin/windows/discord_game_sdk.dll",[],"/")
add_shared_object("res://addons/discord-sdk-gd/bin/windows/discord_game_sdk.dll",[],"/")
elif features[4] == "x86":
add_shared_object("bin/windows/discord_game_sdk_x86.dll",[],"/")
add_shared_object("res://addons/discord-sdk-gd/bin/windows/discord_game_sdk_x86.dll",[],"/")
elif features[2] == "linux":
add_shared_object("bin/linux/libdiscord_game_sdk.so",[],"/")
add_shared_object("res://addons/discord-sdk-gd/bin/linux/libdiscord_game_sdk.so",[],"/")
elif features[2] == "macos":
add_shared_object("bin/macos/libdiscord_game_sdk.dylib",[],"/")
add_shared_object("bin/macos/libdiscord_game_sdk_aarch64.dylib",[],"/")
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",[],"/")

View File

@@ -1,4 +1,4 @@
extends Node
func _process(delta):
func _process(delta) -> void:
discord_sdk.coreupdate()

View File

@@ -9,18 +9,39 @@ func _ready():
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.party_id = "my-random-id-can-be-everything"
discord_sdk.current_party_size = 1
discord_sdk.max_party_size = 4
discord_sdk.match_secret = "my-random-match-secret"
discord_sdk.join_secret = "my-random-join-secret"
discord_sdk.spectate_secret = "my-random-spectate-secret"
#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.register_steam(1389990)
var my_secret = str(randi_range(0,999999))
discord_sdk.party_id = "mylobbycanbeeverything_" + my_secret
discord_sdk.current_party_size = 1
discord_sdk.max_party_size = 4
discord_sdk.match_secret = "m_" + my_secret + ",discord_sdk.current_party_size" #better use seeds with 1 to 1 range instead of just chars
discord_sdk.join_secret = "j_" + my_secret + ",discord_sdk.current_party_size"
discord_sdk.spectate_secret = "s_" + my_secret
#discord_sdk.start_timestamp = int(Time.get_unix_time_from_system())
#discord_sdk.register_command("steam://rungameid/1389990")
#discord_sdk.register_steam(1389990)
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))
func debug_text_update():
$Info.text = $Info.text.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("{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))
func _on_activity_join_request(user_requesting):
print(user_requesting)
func _on_activity_join(secret):
if(discord_sdk.join_secret != secret):
discord_sdk.current_party_size = clamp(int(secret.split(",")[1]) + 1, 0, discord_sdk.max_party_size)
discord_sdk.party_id = secret.split(",")[0].replace("j_","mylobbycanbeeverything_")
discord_sdk.match_secret = secret.split(",")[0].replace("j_","m_")
discord_sdk.join_secret = secret.split(",")[0]
discord_sdk.spectate_secret = secret.split(",")[0].replace("j_","s_")
discord_sdk.refresh()
$Info.text = $Info.text.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("{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))
print(secret)
print(discord_sdk.get_current_party_size())
print(discord_sdk.get_join_secret())
func _on_activity_spectate(secret):
print(secret)

View File

@@ -58,5 +58,12 @@ Small image key: {skey}
Small image text: {stext}
Start timestamp: {stimestamp}
End timestamp: {etimestamp}"
End timestamp: {etimestamp}
Party ID: {partyid}
Current party size: {cpartysize}
Max party size: {mpartysize}
Match secret: {msecret}
Join secret: {jsecret}
Spectate secret: {ssecret}"
scroll_active = false

View File

@@ -71,7 +71,16 @@ void discord_sdk::_bind_methods()
ClassDB::bind_method(D_METHOD("set_spectate_secret", "spectate_secret"), &discord_sdk::set_spectate_secret);
ADD_PROPERTY(PropertyInfo(Variant::STRING, "spectate_secret"), "set_spectate_secret", "get_spectate_secret");
ClassDB::bind_method(D_METHOD("get_instanced"), &discord_sdk::get_instanced);
ClassDB::bind_method(D_METHOD("set_instanced", "instanced"), &discord_sdk::set_instanced);
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "instanced"), "set_instanced", "get_instanced");
ADD_SIGNAL(MethodInfo("activity_join", PropertyInfo(Variant::STRING, "join_secret")));
ADD_SIGNAL(MethodInfo("activity_spectate", PropertyInfo(Variant::STRING, "spectate_secret")));
ADD_SIGNAL(MethodInfo("activity_join_request", PropertyInfo(Variant::DICTIONARY, "user_requesting")));
ClassDB::bind_method(D_METHOD("refresh"), &discord_sdk::refresh);
ClassDB::bind_method(D_METHOD("clear"), &discord_sdk::clear);
ClassDB::bind_method(D_METHOD("register_command"), &discord_sdk::register_command);
ClassDB::bind_method(D_METHOD("register_steam"), &discord_sdk::register_steam);
@@ -118,8 +127,6 @@ void discord_sdk::debug()
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!");
@@ -128,7 +135,25 @@ void discord_sdk::debug()
void discord_sdk::set_app_id(int64_t value)
{
app_id = value;
result = discord::Core::Create(value, DiscordCreateFlags_NoRequireDiscord, &core);
result = discord::Core::Create(value, DiscordCreateFlags_NoRequireDiscord, &core); // after setting app_ID it initializes everything
// signals
core->ActivityManager().OnActivityJoin.Connect([](const char *secret)
{ discord_sdk::get_singleton()
->emit_signal("activity_join", secret); });
core->ActivityManager().OnActivitySpectate.Connect([](const char *secret)
{ discord_sdk::get_singleton()
->emit_signal("activity_spectate", secret); });
core->ActivityManager().OnActivityJoinRequest.Connect([this](discord::User const &user)
{ 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();
user_requesting.make_read_only();
discord_sdk::get_singleton()
->emit_signal("activity_join_request",user_requesting); });
activity.GetParty().SetPrivacy(discord::ActivityPartyPrivacy(DiscordActivityPartyPrivacy_Public));
}
int64_t discord_sdk::get_app_id()
{
@@ -158,14 +183,21 @@ void discord_sdk::refresh()
{
if (result == discord::Result::Ok && app_id > 0)
{
activity.GetParty().SetPrivacy(discord::ActivityPartyPrivacy::Public);
activity.SetType(discord::ActivityType::Playing);
core->ActivityManager().UpdateActivity(activity, [](discord::Result result) {});
core->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::clear()
{
if (result == discord::Result::Ok /*should it be only at ok?*/ && app_id > 0)
//
;
}
void discord_sdk::set_large_image(String value)
{
large_image = value;
@@ -279,6 +311,16 @@ String discord_sdk::get_spectate_secret()
return spectate_secret;
}
void discord_sdk::set_instanced(bool value)
{
instanced = value;
activity.SetInstance(value);
}
bool discord_sdk::get_instanced()
{
return instanced;
}
void discord_sdk::register_command(String value)
{
if (result == discord::Result::Ok && app_id > 0)

View File

@@ -3,12 +3,12 @@
#include <stdio.h>
#include "lib/discord_game_sdk/cpp/discord.h"
#include <godot_cpp/classes/object.hpp>
#include <godot_cpp/classes/ref_counted.hpp>
#include <godot_cpp/core/class_db.hpp>
using namespace godot;
class discord_sdk : public Object
class discord_sdk : public RefCounted
{
GDCLASS(discord_sdk, Object);
@@ -38,6 +38,8 @@ private:
String join_secret;
String spectate_secret;
bool instanced;
public:
static discord_sdk *
get_singleton();
@@ -48,6 +50,7 @@ public:
void debug();
void coreupdate();
void refresh();
void clear();
int64_t get_app_id();
void set_app_id(int64_t value);
@@ -84,6 +87,9 @@ public:
String get_spectate_secret();
void set_spectate_secret(String value);
bool get_instanced();
void set_instanced(bool value);
void register_command(String value);
void register_steam(int32_t value);