diff options
author | ouwou <26526779+ouwou@users.noreply.github.com> | 2021-12-10 03:26:33 -0500 |
---|---|---|
committer | ouwou <26526779+ouwou@users.noreply.github.com> | 2021-12-10 03:26:33 -0500 |
commit | 15954830e278007fc8da209944d4422240d65ecc (patch) | |
tree | 82c5dad6357a57a7301cee9ac7901c8c9a48ea24 /src/discord | |
parent | 46ab760a56430463f216467ec227453402ed43de (diff) | |
download | abaddon-portaudio-15954830e278007fc8da209944d4422240d65ecc.tar.gz abaddon-portaudio-15954830e278007fc8da209944d4422240d65ecc.zip |
hide guild unread indicator for muted guilds
Diffstat (limited to 'src/discord')
-rw-r--r-- | src/discord/discord.cpp | 12 | ||||
-rw-r--r-- | src/discord/discord.hpp | 3 | ||||
-rw-r--r-- | src/discord/objects.cpp | 26 | ||||
-rw-r--r-- | src/discord/objects.hpp | 34 |
4 files changed, 75 insertions, 0 deletions
diff --git a/src/discord/discord.cpp b/src/discord/discord.cpp index f21946f..af25b3a 100644 --- a/src/discord/discord.cpp +++ b/src/discord/discord.cpp @@ -1095,6 +1095,10 @@ void DiscordClient::SetUserAgent(std::string agent) { m_websocket.SetUserAgent(agent); } +bool DiscordClient::IsGuildMuted(Snowflake id) const noexcept { + return m_muted_guilds.find(id) != m_muted_guilds.end(); +} + int DiscordClient::GetUnreadStateForChannel(Snowflake id) const noexcept { const auto iter = m_unread.find(id); if (iter == m_unread.end()) return -1; // todo: no magic number @@ -1457,6 +1461,7 @@ void DiscordClient::HandleGatewayReady(const GatewayMessage &msg) { m_user_settings = data.Settings; HandleReadyReadState(data); + HandleReadyGuildSettings(data); m_signal_gateway_ready.emit(); } @@ -2181,6 +2186,13 @@ void DiscordClient::HandleReadyReadState(const ReadyEventData &data) { } } +void DiscordClient::HandleReadyGuildSettings(const ReadyEventData &data) { + for (const auto &entry : data.GuildSettings.Entries) { + if (entry.Muted) + m_muted_guilds.insert(entry.GuildID); + } +} + void DiscordClient::LoadEventMap() { m_event_map["READY"] = GatewayEvent::READY; m_event_map["MESSAGE_CREATE"] = GatewayEvent::MESSAGE_CREATE; diff --git a/src/discord/discord.hpp b/src/discord/discord.hpp index 465866a..4dc9520 100644 --- a/src/discord/discord.hpp +++ b/src/discord/discord.hpp @@ -184,6 +184,7 @@ public: void UpdateToken(std::string token); void SetUserAgent(std::string agent); + bool IsGuildMuted(Snowflake id) const noexcept; int GetUnreadStateForChannel(Snowflake id) const noexcept; PresenceStatus GetUserStatus(Snowflake id) const; @@ -265,6 +266,7 @@ private: void StoreMessageData(Message &msg); void HandleReadyReadState(const ReadyEventData &data); + void HandleReadyGuildSettings(const ReadyEventData &data); std::string m_token; @@ -277,6 +279,7 @@ private: std::set<Snowflake> m_joined_threads; std::map<Snowflake, std::vector<Snowflake>> m_thread_members; std::map<Snowflake, Snowflake> m_last_message_id; + std::unordered_set<Snowflake> m_muted_guilds; std::unordered_map<Snowflake, int> m_unread; UserData m_user_data; diff --git a/src/discord/objects.cpp b/src/discord/objects.cpp index 9fbc7ce..8bf70c3 100644 --- a/src/discord/objects.cpp +++ b/src/discord/objects.cpp @@ -136,6 +136,31 @@ void from_json(const nlohmann::json &j, ReadStateData &m) { JS_ON("entries", m.Entries); } +void from_json(const nlohmann::json &j, UserGuildSettingsChannelOverride &m) { + JS_D("muted", m.Muted); + JS_D("message_notifications", m.MessageNotifications); + JS_D("collapsed", m.Collapsed); + JS_D("channel_id", m.ChannelID); +} + +void from_json(const nlohmann::json &j, UserGuildSettingsEntry &m) { + JS_D("version", m.Version); + JS_D("suppress_roles", m.SuppressRoles); + JS_D("suppress_everyone", m.SuppressEveryone); + JS_D("muted", m.Muted); + JS_D("mobile_push", m.MobilePush); + JS_D("message_notifications", m.MessageNotifications); + JS_D("hide_muted_channels", m.HideMutedChannels); + JS_D("guild_id", m.GuildID); + JS_D("channel_overrides", m.ChannelOverrides); +} + +void from_json(const nlohmann::json &j, UserGuildSettingsData &m) { + JS_D("version", m.Version); + JS_D("partial", m.IsParital); + JS_D("entries", m.Entries); +} + void from_json(const nlohmann::json &j, ReadyEventData &m) { JS_D("v", m.GatewayVersion); JS_D("user", m.SelfUser); @@ -150,6 +175,7 @@ void from_json(const nlohmann::json &j, ReadyEventData &m) { JS_O("relationships", m.Relationships); JS_O("guild_join_requests", m.GuildJoinRequests); JS_O("read_state", m.ReadState); + JS_D("user_guild_settings", m.GuildSettings); } void from_json(const nlohmann::json &j, MergedPresence &m) { diff --git a/src/discord/objects.hpp b/src/discord/objects.hpp index 28331c3..8afbc19 100644 --- a/src/discord/objects.hpp +++ b/src/discord/objects.hpp @@ -243,6 +243,39 @@ struct ReadStateData { friend void from_json(const nlohmann::json &j, ReadStateData &m); }; +struct UserGuildSettingsChannelOverride { + bool Muted; + // MuteConfig + int MessageNotifications; + bool Collapsed; + Snowflake ChannelID; + + friend void from_json(const nlohmann::json &j, UserGuildSettingsChannelOverride &m); +}; + +struct UserGuildSettingsEntry { + int Version; + bool SuppressRoles; + bool SuppressEveryone; + bool Muted; + // MuteConfig + bool MobilePush; + int MessageNotifications; + bool HideMutedChannels; + Snowflake GuildID; + std::vector<UserGuildSettingsChannelOverride> ChannelOverrides; + + friend void from_json(const nlohmann::json &j, UserGuildSettingsEntry &m); +}; + +struct UserGuildSettingsData { + int Version; + bool IsParital; + std::vector<UserGuildSettingsEntry> Entries; + + friend void from_json(const nlohmann::json &j, UserGuildSettingsData &m); +}; + struct ReadyEventData { int GatewayVersion; UserData SelfUser; @@ -259,6 +292,7 @@ struct ReadyEventData { std::optional<std::vector<RelationshipData>> Relationships; std::optional<std::vector<GuildApplicationData>> GuildJoinRequests; ReadStateData ReadState; + UserGuildSettingsData GuildSettings; // std::vector<Unknown> ConnectedAccounts; // opt // std::map<std::string, Unknown> Consents; // opt // std::vector<Unknown> Experiments; // opt |