#include "discord_rich_presence.h" namespace AttorneyOnline { Discord::Discord() { DiscordEventHandlers handlers; std::memset(&handlers, 0, sizeof(handlers)); handlers = {}; handlers.ready = [] { qInfo() << "Discord RPC ready"; }; handlers.disconnected = [](int errorCode, const char* message) { qInfo() << "Discord RPC disconnected! " << message; }; handlers.errored = [](int errorCode, const char* message) { qWarning() << "Discord RPC errored out! " << message; }; qInfo() << "Initializing Discord RPC"; Discord_Initialize(APPLICATION_ID, &handlers, 1, nullptr); } Discord::~Discord() { Discord_Shutdown(); } void Discord::state_lobby() { DiscordRichPresence presence; std::memset(&presence, 0, sizeof(presence)); presence.largeImageKey = "aa_cc_icon_new"; presence.largeImageText = "Omit!"; presence.instance = 1; presence.state = "In Lobby"; presence.details = "Idle"; Discord_UpdatePresence(&presence); } void Discord::state_server(std::string name, std::string server_id) { qDebug() << "Discord RPC: Setting server state"; DiscordRichPresence presence; std::memset(&presence, 0, sizeof(presence)); presence.largeImageKey = "aa_cc_icon_new"; presence.largeImageText = "Omit!"; presence.instance = 1; auto timestamp = static_cast(std::time(nullptr)); presence.state = "In a Server"; presence.details = name.c_str(); presence.matchSecret = server_id.c_str(); presence.startTimestamp = this->timestamp; this->server_id = server_id; this->server_name = name; this->timestamp = timestamp; Discord_UpdatePresence(&presence); } void Discord::state_character(std::string name) { auto name_internal = QString(name.c_str()).toLower().replace(' ', '_').toStdString(); auto name_friendly = QString(name.c_str()).replace('_', ' ').toStdString(); const std::string playing_as = "Playing as " + name_friendly; qDebug() << "Discord RPC: Setting character state (" << playing_as.c_str() << ")"; DiscordRichPresence presence; std::memset(&presence, 0, sizeof(presence)); presence.largeImageKey = "aa_cc_icon_new"; presence.largeImageText = "Omit!"; presence.instance = 1; presence.details = this->server_name.c_str(); presence.matchSecret = this->server_id.c_str(); presence.startTimestamp = this->timestamp; presence.state = playing_as.c_str(); presence.smallImageKey = name_internal.c_str(); // presence.smallImageText = name_internal.c_str(); Discord_UpdatePresence(&presence); } void Discord::state_spectate() { qDebug() << "Discord RPC: Setting specator state"; DiscordRichPresence presence; std::memset(&presence, 0, sizeof(presence)); presence.largeImageKey = "aa_cc_icon_new"; presence.largeImageText = "Omit!"; presence.instance = 1; presence.details = this->server_name.c_str(); presence.matchSecret = this->server_id.c_str(); presence.startTimestamp = this->timestamp; presence.state = "Spectating"; Discord_UpdatePresence(&presence); } }