summaryrefslogtreecommitdiff
path: root/src/discord/discord.cpp
diff options
context:
space:
mode:
authorouwou <26526779+ouwou@users.noreply.github.com>2023-06-15 22:20:14 -0400
committerouwou <26526779+ouwou@users.noreply.github.com>2023-06-15 22:20:14 -0400
commit5b9a9bbc9ab2796074b38378f9d98d10c422c6d4 (patch)
treefd9c2509927826bad9af69994e279a366e2f44a8 /src/discord/discord.cpp
parent2381eb47535bc9aa74e3886a15222dd13a92a370 (diff)
downloadabaddon-portaudio-5b9a9bbc9ab2796074b38378f9d98d10c422c6d4.tar.gz
abaddon-portaudio-5b9a9bbc9ab2796074b38378f9d98d10c422c6d4.zip
show voice participants in private channels
Diffstat (limited to 'src/discord/discord.cpp')
-rw-r--r--src/discord/discord.cpp61
1 files changed, 37 insertions, 24 deletions
diff --git a/src/discord/discord.cpp b/src/discord/discord.cpp
index 2a25a26..e0a26e8 100644
--- a/src/discord/discord.cpp
+++ b/src/discord/discord.cpp
@@ -1579,6 +1579,9 @@ void DiscordClient::HandleGatewayMessage(std::string str) {
case GatewayEvent::VOICE_SERVER_UPDATE: {
HandleGatewayVoiceServerUpdate(m);
} break;
+ case GatewayEvent::CALL_CREATE: {
+ HandleGatewayCallCreate(m);
+ } break;
#endif
}
} break;
@@ -2253,8 +2256,39 @@ void DiscordClient::HandleGatewayGuildMembersChunk(const GatewayMessage &msg) {
void DiscordClient::HandleGatewayVoiceStateUpdate(const GatewayMessage &msg) {
spdlog::get("discord")->trace("VOICE_STATE_UPDATE");
- VoiceState data = msg.Data;
+ CheckVoiceState(msg.Data);
+}
+
+void DiscordClient::HandleGatewayVoiceServerUpdate(const GatewayMessage &msg) {
+ spdlog::get("discord")->trace("VOICE_SERVER_UPDATE");
+
+ VoiceServerUpdateData data = msg.Data;
+ spdlog::get("discord")->debug("Voice server endpoint: {}", data.Endpoint);
+ spdlog::get("discord")->debug("Voice token: {}", data.Token);
+ m_voice.SetEndpoint(data.Endpoint);
+ m_voice.SetToken(data.Token);
+ if (data.GuildID.has_value()) {
+ m_voice.SetServerID(*data.GuildID);
+ } else if (data.ChannelID.has_value()) {
+ m_voice.SetServerID(*data.ChannelID);
+ } else {
+ spdlog::get("discord")->error("No guild or channel ID in voice server?");
+ }
+ m_voice.SetUserID(m_user_data.ID);
+ m_voice.Start();
+}
+
+void DiscordClient::HandleGatewayCallCreate(const GatewayMessage &msg) {
+ CallCreateData data = msg.Data;
+
+ spdlog::get("discord")->debug("CALL_CREATE: {}", data.ChannelID);
+ for (const auto &state : data.VoiceStates) {
+ CheckVoiceState(state);
+ }
+}
+
+void DiscordClient::CheckVoiceState(const VoiceState &data) {
if (data.UserID == m_user_data.ID) {
spdlog::get("discord")->debug("Voice session ID: {}", data.SessionID);
m_voice.SetSessionID(data.SessionID);
@@ -2292,25 +2326,6 @@ void DiscordClient::HandleGatewayVoiceStateUpdate(const GatewayMessage &msg) {
}
}
}
-
-void DiscordClient::HandleGatewayVoiceServerUpdate(const GatewayMessage &msg) {
- spdlog::get("discord")->trace("VOICE_SERVER_UPDATE");
-
- VoiceServerUpdateData data = msg.Data;
- spdlog::get("discord")->debug("Voice server endpoint: {}", data.Endpoint);
- spdlog::get("discord")->debug("Voice token: {}", data.Token);
- m_voice.SetEndpoint(data.Endpoint);
- m_voice.SetToken(data.Token);
- if (data.GuildID.has_value()) {
- m_voice.SetServerID(*data.GuildID);
- } else if (data.ChannelID.has_value()) {
- m_voice.SetServerID(*data.ChannelID);
- } else {
- spdlog::get("discord")->error("No guild or channel ID in voice server?");
- }
- m_voice.SetUserID(m_user_data.ID);
- m_voice.Start();
-}
#endif
void DiscordClient::HandleGatewayReadySupplemental(const GatewayMessage &msg) {
@@ -2556,7 +2571,7 @@ void DiscordClient::HeartbeatThread() {
void DiscordClient::SendIdentify() {
IdentifyMessage msg;
msg.Token = m_token;
- msg.Capabilities = 509; // no idea what this is
+ msg.Capabilities = 4605; // bit 12 is necessary for CALL_CREATE... apparently? need to get this in sync with official client
msg.Properties.OS = "Windows";
msg.Properties.Browser = "Chrome";
msg.Properties.Device = "";
@@ -2575,9 +2590,6 @@ void DiscordClient::SendIdentify() {
msg.Presence.Since = 0;
msg.Presence.IsAFK = false;
msg.DoesSupportCompression = false;
- msg.ClientState.HighestLastMessageID = "0";
- msg.ClientState.ReadStateVersion = 0;
- msg.ClientState.UserGuildSettingsVersion = -1;
SetSuperPropertiesFromIdentity(msg);
const bool b = m_websocket.GetPrintMessages();
m_websocket.SetPrintMessages(false);
@@ -2893,6 +2905,7 @@ void DiscordClient::LoadEventMap() {
m_event_map["GUILD_MEMBERS_CHUNK"] = GatewayEvent::GUILD_MEMBERS_CHUNK;
m_event_map["VOICE_STATE_UPDATE"] = GatewayEvent::VOICE_STATE_UPDATE;
m_event_map["VOICE_SERVER_UPDATE"] = GatewayEvent::VOICE_SERVER_UPDATE;
+ m_event_map["CALL_CREATE"] = GatewayEvent::CALL_CREATE;
}
DiscordClient::type_signal_gateway_ready DiscordClient::signal_gateway_ready() {