diff options
author | ouwou <26526779+ouwou@users.noreply.github.com> | 2024-06-17 03:50:50 -0400 |
---|---|---|
committer | ouwou <26526779+ouwou@users.noreply.github.com> | 2024-06-17 03:50:50 -0400 |
commit | eb9ad703be7769958bee959ce2f83f5325ef206b (patch) | |
tree | 837dd8ffbbb8b53a33379c61c4ce3dc36fff59ec /src/discord | |
parent | f8de54e47eadc40fad4027a34902476527f48a5c (diff) | |
download | abaddon-portaudio-eb9ad703be7769958bee959ce2f83f5325ef206b.tar.gz abaddon-portaudio-eb9ad703be7769958bee959ce2f83f5325ef206b.zip |
show voice channels and participants even if compiled without audio
Diffstat (limited to 'src/discord')
-rw-r--r-- | src/discord/discord.cpp | 77 | ||||
-rw-r--r-- | src/discord/discord.hpp | 44 |
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; }; |