added invite signals
This commit is contained in:
59
.vscode/settings.json
vendored
59
.vscode/settings.json
vendored
@@ -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"
|
||||
|
BIN
discord_addon_export_beta.zip
Normal file
BIN
discord_addon_export_beta.zip
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -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",[],"/")
|
||||
|
@@ -1,4 +1,4 @@
|
||||
extends Node
|
||||
|
||||
func _process(delta):
|
||||
func _process(delta) -> void:
|
||||
discord_sdk.coreupdate()
|
||||
|
@@ -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)
|
||||
|
@@ -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
|
||||
|
@@ -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)
|
||||
|
@@ -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);
|
||||
|
||||
|
Reference in New Issue
Block a user