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

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