summaryrefslogtreecommitdiff
path: root/src/discord
diff options
context:
space:
mode:
Diffstat (limited to 'src/discord')
-rw-r--r--src/discord/discord.cpp77
-rw-r--r--src/discord/discord.hpp44
2 files changed, 65 insertions, 56 deletions
diff --git a/src/discord/discord.cpp b/src/discord/discord.cpp
index f955f45..062a871 100644
--- a/src/discord/discord.cpp
+++ b/src/discord/discord.cpp
@@ -1284,21 +1284,10 @@ 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);
}
-std::optional<std::pair<Snowflake, VoiceStateFlags>> DiscordClient::GetVoiceState(Snowflake user_id) const {
- if (const auto it = m_voice_states.find(user_id); it != m_voice_states.end()) {
- return it->second;
- }
- return std::nullopt;
-}
-
DiscordVoiceClient &DiscordClient::GetVoiceClient() {
return m_voice;
}
@@ -1314,6 +1303,17 @@ void DiscordClient::SetVoiceDeafened(bool is_deaf) {
}
#endif
+std::optional<std::pair<Snowflake, VoiceStateFlags>> DiscordClient::GetVoiceState(Snowflake user_id) const {
+ if (const auto it = m_voice_states.find(user_id); it != m_voice_states.end()) {
+ return it->second;
+ }
+ return std::nullopt;
+}
+
+std::unordered_set<Snowflake> DiscordClient::GetUsersInVoiceChannel(Snowflake channel_id) {
+ return m_voice_state_channel_users[channel_id];
+}
+
void DiscordClient::SetReferringChannel(Snowflake id) {
if (!id.IsValid()) {
m_http.SetPersistentHeader("Referer", "https://discord.com/channels/@me");
@@ -1652,10 +1652,10 @@ void DiscordClient::HandleGatewayMessage(std::string str) {
case GatewayEvent::GUILD_MEMBERS_CHUNK: {
HandleGatewayGuildMembersChunk(m);
} break;
-#ifdef WITH_VOICE
case GatewayEvent::VOICE_STATE_UPDATE: {
HandleGatewayVoiceStateUpdate(m);
} break;
+#ifdef WITH_VOICE
case GatewayEvent::VOICE_SERVER_UPDATE: {
HandleGatewayVoiceServerUpdate(m);
} break;
@@ -2336,12 +2336,6 @@ void DiscordClient::HandleGatewayGuildMembersChunk(const GatewayMessage &msg) {
*
*/
-void DiscordClient::HandleGatewayVoiceStateUpdate(const GatewayMessage &msg) {
- spdlog::get("discord")->trace("VOICE_STATE_UPDATE");
-
- CheckVoiceState(msg.Data);
-}
-
void DiscordClient::HandleGatewayVoiceServerUpdate(const GatewayMessage &msg) {
spdlog::get("discord")->trace("VOICE_SERVER_UPDATE");
@@ -2371,8 +2365,17 @@ void DiscordClient::HandleGatewayCallCreate(const GatewayMessage &msg) {
}
}
+#endif
+
+void DiscordClient::HandleGatewayVoiceStateUpdate(const GatewayMessage &msg) {
+ spdlog::get("discord")->trace("VOICE_STATE_UPDATE");
+
+ CheckVoiceState(msg.Data);
+}
+
void DiscordClient::CheckVoiceState(const VoiceState &data) {
if (data.UserID == m_user_data.ID) {
+#ifdef WITH_VOICE
spdlog::get("discord")->debug("Voice session ID: {}", data.SessionID);
m_voice.SetSessionID(data.SessionID);
@@ -2383,6 +2386,7 @@ void DiscordClient::CheckVoiceState(const VoiceState &data) {
m_voice_channel_id = *data.ChannelID;
m_signal_voice_channel_changed.emit(m_voice_channel_id);
}
+#endif
} else {
if (data.GuildID.has_value() && data.Member.has_value()) {
if (data.Member->User.has_value()) {
@@ -2409,7 +2413,6 @@ void DiscordClient::CheckVoiceState(const VoiceState &data) {
}
}
}
-#endif
void DiscordClient::HandleGatewayReadySupplemental(const GatewayMessage &msg) {
ReadySupplementalData data = msg.Data;
@@ -2929,6 +2932,15 @@ void DiscordClient::SendVoiceStateUpdate() {
m_websocket.Send(msg);
}
+void DiscordClient::OnVoiceConnected() {
+ m_signal_voice_connected.emit();
+}
+
+void DiscordClient::OnVoiceDisconnected() {
+ m_signal_voice_disconnected.emit();
+}
+#endif
+
void DiscordClient::SetVoiceState(Snowflake user_id, const VoiceState &state) {
if (!state.ChannelID.has_value()) {
spdlog::get("discord")->error("SetVoiceState called with missing channel ID");
@@ -2958,15 +2970,6 @@ void DiscordClient::ClearVoiceState(Snowflake user_id) {
}
}
-void DiscordClient::OnVoiceConnected() {
- m_signal_voice_connected.emit();
-}
-
-void DiscordClient::OnVoiceDisconnected() {
- m_signal_voice_disconnected.emit();
-}
-#endif
-
void DiscordClient::LoadEventMap() {
m_event_map["READY"] = GatewayEvent::READY;
m_event_map["MESSAGE_CREATE"] = GatewayEvent::MESSAGE_CREATE;
@@ -3242,14 +3245,6 @@ DiscordClient::type_signal_voice_speaking DiscordClient::signal_voice_speaking()
return m_signal_voice_speaking;
}
-DiscordClient::type_signal_voice_user_disconnect DiscordClient::signal_voice_user_disconnect() {
- return m_signal_voice_user_disconnect;
-}
-
-DiscordClient::type_signal_voice_user_connect DiscordClient::signal_voice_user_connect() {
- return m_signal_voice_user_connect;
-}
-
DiscordClient::type_signal_voice_requested_connect DiscordClient::signal_voice_requested_connect() {
return m_signal_voice_requested_connect;
}
@@ -3265,8 +3260,16 @@ DiscordClient::type_signal_voice_client_state_update DiscordClient::signal_voice
DiscordClient::type_signal_voice_channel_changed DiscordClient::signal_voice_channel_changed() {
return m_signal_voice_channel_changed;
}
+#endif
+
+DiscordClient::type_signal_voice_user_disconnect DiscordClient::signal_voice_user_disconnect() {
+ return m_signal_voice_user_disconnect;
+}
+
+DiscordClient::type_signal_voice_user_connect DiscordClient::signal_voice_user_connect() {
+ return m_signal_voice_user_connect;
+}
DiscordClient::type_signal_voice_state_set DiscordClient::signal_voice_state_set() {
return m_signal_voice_state_set;
}
-#endif
diff --git a/src/discord/discord.hpp b/src/discord/discord.hpp
index 6b2853b..4e898dc 100644
--- a/src/discord/discord.hpp
+++ b/src/discord/discord.hpp
@@ -200,9 +200,7 @@ public:
[[nodiscard]] bool IsVoiceConnected() const noexcept;
[[nodiscard]] bool IsVoiceConnecting() 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;
- [[nodiscard]] std::optional<std::pair<Snowflake, VoiceStateFlags>> GetVoiceState(Snowflake user_id) const;
DiscordVoiceClient &GetVoiceClient();
@@ -210,6 +208,9 @@ public:
void SetVoiceDeafened(bool is_deaf);
#endif
+ [[nodiscard]] std::optional<std::pair<Snowflake, VoiceStateFlags>> GetVoiceState(Snowflake user_id) const;
+ [[nodiscard]] std::unordered_set<Snowflake> GetUsersInVoiceChannel(Snowflake channel_id);
+
void SetReferringChannel(Snowflake id);
void SetBuildNumber(uint32_t build_number);
@@ -299,12 +300,13 @@ private:
void HandleGatewayInvalidSession(const GatewayMessage &msg);
#ifdef WITH_VOICE
- void HandleGatewayVoiceStateUpdate(const GatewayMessage &msg);
void HandleGatewayVoiceServerUpdate(const GatewayMessage &msg);
void HandleGatewayCallCreate(const GatewayMessage &msg);
+#endif
+
+ void HandleGatewayVoiceStateUpdate(const GatewayMessage &msg);
void CheckVoiceState(const VoiceState &data);
-#endif
void HeartbeatThread();
void SendIdentify();
@@ -375,19 +377,20 @@ private:
bool m_deaf_requested = false;
Snowflake m_voice_channel_id;
- // todo sql i guess
- std::unordered_map<Snowflake, std::pair<Snowflake, VoiceStateFlags>> m_voice_states;
- std::unordered_map<Snowflake, std::unordered_set<Snowflake>> m_voice_state_channel_users;
void SendVoiceStateUpdate();
- void SetVoiceState(Snowflake user_id, const VoiceState &state);
- void ClearVoiceState(Snowflake user_id);
-
void OnVoiceConnected();
void OnVoiceDisconnected();
#endif
+ void SetVoiceState(Snowflake user_id, const VoiceState &state);
+ void ClearVoiceState(Snowflake user_id);
+
+ // todo sql i guess
+ std::unordered_map<Snowflake, std::pair<Snowflake, VoiceStateFlags>> m_voice_states;
+ std::unordered_map<Snowflake, std::unordered_set<Snowflake>> m_voice_state_channel_users;
+
mutable std::mutex m_msg_mutex;
Glib::Dispatcher m_msg_dispatch;
std::queue<std::string> m_msg_queue;
@@ -465,15 +468,16 @@ public:
using type_signal_voice_connected = sigc::signal<void()>;
using type_signal_voice_disconnected = sigc::signal<void()>;
using type_signal_voice_speaking = sigc::signal<void(VoiceSpeakingData)>;
- using type_signal_voice_user_disconnect = sigc::signal<void(Snowflake, Snowflake)>;
- using type_signal_voice_user_connect = sigc::signal<void(Snowflake, Snowflake)>;
using type_signal_voice_requested_connect = sigc::signal<void(Snowflake)>;
using type_signal_voice_requested_disconnect = sigc::signal<void()>;
using type_signal_voice_client_state_update = sigc::signal<void(DiscordVoiceClient::State)>;
using type_signal_voice_channel_changed = sigc::signal<void(Snowflake)>;
- using type_signal_voice_state_set = sigc::signal<void(Snowflake, Snowflake, VoiceStateFlags)>;
#endif
+ using type_signal_voice_user_disconnect = sigc::signal<void(Snowflake, Snowflake)>;
+ using type_signal_voice_user_connect = sigc::signal<void(Snowflake, Snowflake)>;
+ using type_signal_voice_state_set = sigc::signal<void(Snowflake, Snowflake, VoiceStateFlags)>;
+
type_signal_gateway_ready signal_gateway_ready();
type_signal_gateway_ready_supplemental signal_gateway_ready_supplemental();
type_signal_message_create signal_message_create();
@@ -533,15 +537,16 @@ public:
type_signal_voice_connected signal_voice_connected();
type_signal_voice_disconnected signal_voice_disconnected();
type_signal_voice_speaking signal_voice_speaking();
- type_signal_voice_user_disconnect signal_voice_user_disconnect();
- type_signal_voice_user_connect signal_voice_user_connect();
type_signal_voice_requested_connect signal_voice_requested_connect();
type_signal_voice_requested_disconnect signal_voice_requested_disconnect();
type_signal_voice_client_state_update signal_voice_client_state_update();
type_signal_voice_channel_changed signal_voice_channel_changed();
- type_signal_voice_state_set signal_voice_state_set();
#endif
+ type_signal_voice_user_disconnect signal_voice_user_disconnect();
+ type_signal_voice_user_connect signal_voice_user_connect();
+ type_signal_voice_state_set signal_voice_state_set();
+
protected:
type_signal_gateway_ready m_signal_gateway_ready;
type_signal_gateway_ready_supplemental m_signal_gateway_ready_supplemental;
@@ -602,12 +607,13 @@ protected:
type_signal_voice_connected m_signal_voice_connected;
type_signal_voice_disconnected m_signal_voice_disconnected;
type_signal_voice_speaking m_signal_voice_speaking;
- type_signal_voice_user_disconnect m_signal_voice_user_disconnect;
- type_signal_voice_user_connect m_signal_voice_user_connect;
type_signal_voice_requested_connect m_signal_voice_requested_connect;
type_signal_voice_requested_disconnect m_signal_voice_requested_disconnect;
type_signal_voice_client_state_update m_signal_voice_client_state_update;
type_signal_voice_channel_changed m_signal_voice_channel_changed;
- type_signal_voice_state_set m_signal_voice_state_set;
#endif
+
+ type_signal_voice_user_disconnect m_signal_voice_user_disconnect;
+ type_signal_voice_user_connect m_signal_voice_user_connect;
+ type_signal_voice_state_set m_signal_voice_state_set;
};