summaryrefslogtreecommitdiff
path: root/src/discord
diff options
context:
space:
mode:
Diffstat (limited to 'src/discord')
-rw-r--r--src/discord/discord.cpp8
-rw-r--r--src/discord/discord.hpp2
-rw-r--r--src/discord/objects.cpp3
-rw-r--r--src/discord/voiceclient.cpp9
-rw-r--r--src/discord/voiceclient.hpp9
5 files changed, 29 insertions, 2 deletions
diff --git a/src/discord/discord.cpp b/src/discord/discord.cpp
index f5a1e1b..b6bcc07 100644
--- a/src/discord/discord.cpp
+++ b/src/discord/discord.cpp
@@ -1203,6 +1203,14 @@ Snowflake DiscordClient::GetVoiceChannelID() const noexcept {
return m_voice_channel_id;
}
+std::unordered_set<Snowflake> DiscordClient::GetUsersInVoiceChannel(Snowflake channel_id) {
+ return m_voice_state_channel_users[channel_id];
+}
+
+std::optional<uint32_t> DiscordClient::GetSSRCOfUser(Snowflake id) const {
+ return m_voice.GetSSRCOfUser(id);
+}
+
void DiscordClient::SetVoiceMuted(bool is_mute) {
m_mute_requested = is_mute;
SendVoiceStateUpdate();
diff --git a/src/discord/discord.hpp b/src/discord/discord.hpp
index b0fecab..9c6c748 100644
--- a/src/discord/discord.hpp
+++ b/src/discord/discord.hpp
@@ -186,6 +186,8 @@ public:
void DisconnectFromVoice();
[[nodiscard]] bool IsConnectedToVoice() const noexcept;
[[nodiscard]] Snowflake GetVoiceChannelID() const noexcept;
+ [[nodiscard]] std::unordered_set<Snowflake> GetUsersInVoiceChannel(Snowflake channel_id);
+ [[nodiscard]] std::optional<uint32_t> GetSSRCOfUser(Snowflake id) const;
void SetVoiceMuted(bool is_mute);
void SetVoiceDeafened(bool is_deaf);
diff --git a/src/discord/objects.cpp b/src/discord/objects.cpp
index 21853a7..3e87e43 100644
--- a/src/discord/objects.cpp
+++ b/src/discord/objects.cpp
@@ -240,6 +240,7 @@ void from_json(const nlohmann::json &j, SupplementalGuildEntry &m) {
void from_json(const nlohmann::json &j, ReadySupplementalData &m) {
JS_D("merged_presences", m.MergedPresences);
+ JS_D("guilds", m.Guilds);
}
void to_json(nlohmann::json &j, const IdentifyProperties &m) {
@@ -681,6 +682,6 @@ void from_json(const nlohmann::json &j, VoiceState &m) {
JS_O("self_stream", m.IsSelfStream);
JS_D("suppress", m.IsSuppressed);
JS_D("user_id", m.UserID);
- JS_N("member", m.Member);
+ JS_ON("member", m.Member);
JS_D("session_id", m.SessionID);
}
diff --git a/src/discord/voiceclient.cpp b/src/discord/voiceclient.cpp
index b7fe21b..5f6ab31 100644
--- a/src/discord/voiceclient.cpp
+++ b/src/discord/voiceclient.cpp
@@ -1,5 +1,6 @@
#ifdef WITH_VOICE
// clang-format off
+
#include "voiceclient.hpp"
#include "json.hpp"
#include <sodium.h>
@@ -220,6 +221,13 @@ void DiscordVoiceClient::SetUserID(Snowflake id) {
m_user_id = id;
}
+std::optional<uint32_t> DiscordVoiceClient::GetSSRCOfUser(Snowflake id) const {
+ if (const auto it = m_ssrc_map.find(id); it != m_ssrc_map.end()) {
+ return it->second;
+ }
+ return {};
+}
+
bool DiscordVoiceClient::IsConnected() const noexcept {
return m_connected;
}
@@ -296,6 +304,7 @@ void DiscordVoiceClient::HandleGatewaySessionDescription(const VoiceGatewayMessa
void DiscordVoiceClient::HandleGatewaySpeaking(const VoiceGatewayMessage &m) {
VoiceSpeakingData data = m.Data;
+ m_ssrc_map[data.UserID] = data.SSRC;
m_signal_speaking.emit(data);
}
diff --git a/src/discord/voiceclient.hpp b/src/discord/voiceclient.hpp
index c052f28..1dc6e1a 100644
--- a/src/discord/voiceclient.hpp
+++ b/src/discord/voiceclient.hpp
@@ -1,14 +1,17 @@
#pragma once
#ifdef WITH_VOICE
- // clang-format off
+// clang-format off
+
#include "snowflake.hpp"
#include "waiter.hpp"
#include "websocket.hpp"
+#include <optional>
#include <mutex>
#include <queue>
#include <string>
#include <glibmm/dispatcher.h>
#include <sigc++/sigc++.h>
+#include <unordered_map>
// clang-format on
enum class VoiceGatewayCloseCode : uint16_t {
@@ -190,6 +193,8 @@ public:
void SetServerID(Snowflake id);
void SetUserID(Snowflake id);
+ [[nodiscard]] std::optional<uint32_t> GetSSRCOfUser(Snowflake id) const;
+
[[nodiscard]] bool IsConnected() const noexcept;
private:
@@ -218,6 +223,8 @@ private:
uint16_t m_port;
uint32_t m_ssrc;
+ std::unordered_map<Snowflake, uint32_t> m_ssrc_map;
+
std::array<uint8_t, 32> m_secret_key;
Websocket m_ws;