diff options
author | ouwou <26526779+ouwou@users.noreply.github.com> | 2021-12-17 02:34:14 -0500 |
---|---|---|
committer | ouwou <26526779+ouwou@users.noreply.github.com> | 2021-12-17 02:34:14 -0500 |
commit | 1d7529e60925c36af5aa5a8702e7a0827e646f00 (patch) | |
tree | 8f699bae5ac0a503bd760b21af319f6e85acd751 /src/discord | |
parent | 1fb7ca000753d2c6a39a560126f3ba7d229af46d (diff) | |
download | abaddon-portaudio-1d7529e60925c36af5aa5a8702e7a0827e646f00.tar.gz abaddon-portaudio-1d7529e60925c36af5aa5a8702e7a0827e646f00.zip |
handle mute/unmute of channels (USER_GUILD_SETTINGS_UPDATE)
Diffstat (limited to 'src/discord')
-rw-r--r-- | src/discord/discord.cpp | 37 | ||||
-rw-r--r-- | src/discord/discord.hpp | 7 | ||||
-rw-r--r-- | src/discord/objects.cpp | 4 | ||||
-rw-r--r-- | src/discord/objects.hpp | 7 |
4 files changed, 55 insertions, 0 deletions
diff --git a/src/discord/discord.cpp b/src/discord/discord.cpp index b54064a..9d711c8 100644 --- a/src/discord/discord.cpp +++ b/src/discord/discord.cpp @@ -1342,6 +1342,9 @@ void DiscordClient::HandleGatewayMessage(std::string str) { case GatewayEvent::MESSAGE_ACK: { HandleGatewayMessageAck(m); } break; + case GatewayEvent::USER_GUILD_SETTINGS_UPDATE: { + HandleGatewayUserGuildSettingsUpdate(m); + } break; } } break; default: @@ -1845,6 +1848,31 @@ void DiscordClient::HandleGatewayMessageAck(const GatewayMessage &msg) { m_signal_message_ack.emit(data); } +void DiscordClient::HandleGatewayUserGuildSettingsUpdate(const GatewayMessage &msg) { + UserGuildSettingsUpdateData data = msg.Data; + const auto channels = GetChannelsInGuild(data.Settings.GuildID); + std::set<Snowflake> now_muted_channels; + for (const auto &override : data.Settings.ChannelOverrides) { + if (override.Muted) + now_muted_channels.insert(override.ChannelID); + } + for (const auto &channel_id : channels) { + const bool was_muted = IsChannelMuted(channel_id); + const bool now_muted = now_muted_channels.find(channel_id) != now_muted_channels.end(); + if (now_muted) { + m_muted_channels.insert(channel_id); + if (!was_muted) { + m_signal_channel_muted.emit(channel_id); + } + } else { + m_muted_channels.erase(channel_id); + if (was_muted) { + m_signal_channel_unmuted.emit(channel_id); + } + } + } +} + void DiscordClient::HandleGatewayReadySupplemental(const GatewayMessage &msg) { ReadySupplementalData data = msg.Data; for (const auto &p : data.MergedPresences.Friends) { @@ -2244,6 +2272,7 @@ void DiscordClient::LoadEventMap() { m_event_map["THREAD_UPDATE"] = GatewayEvent::THREAD_UPDATE; m_event_map["THREAD_MEMBER_LIST_UPDATE"] = GatewayEvent::THREAD_MEMBER_LIST_UPDATE; m_event_map["MESSAGE_ACK"] = GatewayEvent::MESSAGE_ACK; + m_event_map["USER_GUILD_SETTINGS_UPDATE"] = GatewayEvent::USER_GUILD_SETTINGS_UPDATE; } DiscordClient::type_signal_gateway_ready DiscordClient::signal_gateway_ready() { @@ -2422,6 +2451,14 @@ DiscordClient::type_signal_message_sent DiscordClient::signal_message_sent() { return m_signal_message_sent; } +DiscordClient::type_signal_channel_muted DiscordClient::signal_channel_muted() { + return m_signal_channel_muted; +} + +DiscordClient::type_signal_channel_unmuted DiscordClient::signal_channel_unmuted() { + return m_signal_channel_unmuted; +} + DiscordClient::type_signal_message_send_fail DiscordClient::signal_message_send_fail() { return m_signal_message_send_fail; } diff --git a/src/discord/discord.hpp b/src/discord/discord.hpp index fbee775..90919b6 100644 --- a/src/discord/discord.hpp +++ b/src/discord/discord.hpp @@ -251,6 +251,7 @@ private: void HandleGatewayThreadUpdate(const GatewayMessage &msg); void HandleGatewayThreadMemberListUpdate(const GatewayMessage &msg); void HandleGatewayMessageAck(const GatewayMessage &msg); + void HandleGatewayUserGuildSettingsUpdate(const GatewayMessage &msg); void HandleGatewayReadySupplemental(const GatewayMessage &msg); void HandleGatewayReconnect(const GatewayMessage &msg); void HandleGatewayInvalidSession(const GatewayMessage &msg); @@ -365,6 +366,8 @@ public: typedef sigc::signal<void, Message> type_signal_message_unpinned; typedef sigc::signal<void, Message> type_signal_message_pinned; typedef sigc::signal<void, Message> type_signal_message_sent; + typedef sigc::signal<void, Snowflake> type_signal_channel_muted; + typedef sigc::signal<void, Snowflake> type_signal_channel_unmuted; typedef sigc::signal<void, std::string /* nonce */, float /* retry_after */> type_signal_message_send_fail; // retry after param will be 0 if it failed for a reason that isnt slowmode typedef sigc::signal<void, bool, GatewayCloseCode> type_signal_disconnected; // bool true if reconnecting @@ -413,6 +416,8 @@ public: type_signal_added_to_thread signal_added_to_thread(); type_signal_removed_from_thread signal_removed_from_thread(); type_signal_message_sent signal_message_sent(); + type_signal_channel_muted signal_channel_muted(); + type_signal_channel_unmuted signal_channel_unmuted(); type_signal_message_send_fail signal_message_send_fail(); type_signal_disconnected signal_disconnected(); type_signal_connected signal_connected(); @@ -461,6 +466,8 @@ protected: type_signal_removed_from_thread m_signal_removed_from_thread; type_signal_added_to_thread m_signal_added_to_thread; type_signal_message_sent m_signal_message_sent; + type_signal_channel_muted m_signal_channel_muted; + type_signal_channel_unmuted m_signal_channel_unmuted; type_signal_message_send_fail m_signal_message_send_fail; type_signal_disconnected m_signal_disconnected; type_signal_connected m_signal_connected; diff --git a/src/discord/objects.cpp b/src/discord/objects.cpp index 8bf70c3..a41b664 100644 --- a/src/discord/objects.cpp +++ b/src/discord/objects.cpp @@ -586,3 +586,7 @@ void from_json(const nlohmann::json &j, MessageAckData &m) { void to_json(nlohmann::json &j, const AckBulkData &m) { j["read_states"] = m.ReadStates; } + +void from_json(const nlohmann::json &j, UserGuildSettingsUpdateData &m) { + m.Settings = j; +} diff --git a/src/discord/objects.hpp b/src/discord/objects.hpp index 8afbc19..69ad422 100644 --- a/src/discord/objects.hpp +++ b/src/discord/objects.hpp @@ -79,6 +79,7 @@ enum class GatewayEvent : int { THREAD_MEMBERS_UPDATE, THREAD_MEMBER_LIST_UPDATE, MESSAGE_ACK, + USER_GUILD_SETTINGS_UPDATE, }; enum class GatewayCloseCode : uint16_t { @@ -813,3 +814,9 @@ struct AckBulkData { friend void to_json(nlohmann::json &j, const AckBulkData &m); }; + +struct UserGuildSettingsUpdateData { + UserGuildSettingsEntry Settings; + + friend void from_json(const nlohmann::json &j, UserGuildSettingsUpdateData &m); +}; |