aboutsummaryrefslogtreecommitdiff
path: root/discord_rich_presence.cpp
blob: 10f5833ed8a7faf1190b999b4a3731a45be39c67 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#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 = "ao2-logo";
  presence.largeImageText = "Objection!";
  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 = "ao2-logo";
  presence.largeImageText = "Objection!";
  presence.instance = 1;

  auto timestamp = static_cast<int64_t>(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 = "ao2-logo";
  presence.largeImageText = "Objection!";
  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 = "ao2-logo";
  presence.largeImageText = "Objection!";
  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);
}

}