Files
Tower-Defense/src/misc/DiscordRPC.cpp
2023-06-02 13:18:09 +02:00

73 lines
2.0 KiB
C++

#include "misc/DiscordRPC.h"
#include "misc/Time.h"
#include <cstring>
#include <discordrpc/discord_rpc.h>
namespace td {
namespace utils {
static const std::string APPLICATION_ID = "1114135294283874334";
static const std::string TD_ICON = "td_icon2";
static void handleDiscordReady(const DiscordUser* connectedUser);
static void handleDiscordDisconnected(int errcode, const char* message);
static void handleDiscordError(int errcode, const char* message);
void InitDiscordRPC() {
DiscordEventHandlers handlers {};
handlers.ready = handleDiscordReady;
handlers.disconnected = handleDiscordDisconnected;
handlers.errored = handleDiscordError;
Discord_Initialize(APPLICATION_ID.c_str(), &handlers, true, nullptr);
// Set default presence
UpdateDiscordPresence("In Main Menu", "", true);
}
void UpdateDiscordRPC() {
Discord_RunCallbacks();
}
void ShutdownDiscordRPC() {
Discord_Shutdown();
}
void UpdateDiscordPresence(const std::string& state, const std::string& details, bool resetTimer) {
static std::int64_t currentTimeStamp = static_cast<std::int64_t>(GetTime());
if (resetTimer) currentTimeStamp = static_cast<std::int64_t>(GetTime());
DiscordRichPresence discordPresence {};
discordPresence.state = state.c_str();
discordPresence.details = details.c_str();
discordPresence.startTimestamp = currentTimeStamp;
discordPresence.largeImageKey = TD_ICON.c_str();
discordPresence.largeImageText = "Tower Defense";
Discord_UpdatePresence(&discordPresence);
}
static void handleDiscordReady(const DiscordUser* connectedUser)
{
printf("\nDiscord: connected to user %s#%s - %s\n",
connectedUser->username,
connectedUser->discriminator,
connectedUser->userId);
}
static void handleDiscordDisconnected(int errcode, const char* message)
{
printf("\nDiscord: disconnected (%d: %s)\n", errcode, message);
}
static void handleDiscordError(int errcode, const char* message)
{
printf("\nDiscord: error (%d: %s)\n", errcode, message);
}
} // namespace utils
} // namespace td