diff options
author | ouwou <26526779+ouwou@users.noreply.github.com> | 2023-03-10 19:14:19 -0500 |
---|---|---|
committer | ouwou <26526779+ouwou@users.noreply.github.com> | 2023-03-10 19:14:19 -0500 |
commit | e3f6a1dcbd75b511397f7ba64f81ba37db4a1cfc (patch) | |
tree | 1cb3216a2883bce902e2badcc23a49ef7d8bffa6 | |
parent | 3889991e16958d9c25bcc982a70aa232b3c16e9a (diff) | |
download | abaddon-portaudio-e3f6a1dcbd75b511397f7ba64f81ba37db4a1cfc.tar.gz abaddon-portaudio-e3f6a1dcbd75b511397f7ba64f81ba37db4a1cfc.zip |
handle USER_GUILD_SETTINGS_UPDATE for notifications
-rw-r--r-- | src/discord/discord.cpp | 8 | ||||
-rw-r--r-- | src/discord/objects.cpp | 10 | ||||
-rw-r--r-- | src/discord/objects.hpp | 2 |
3 files changed, 15 insertions, 5 deletions
diff --git a/src/discord/discord.cpp b/src/discord/discord.cpp index f21e8a1..8e435aa 100644 --- a/src/discord/discord.cpp +++ b/src/discord/discord.cpp @@ -86,8 +86,8 @@ const UserGuildSettingsData &DiscordClient::GetUserGuildSettings() const { } std::optional<UserGuildSettingsEntry> DiscordClient::GetSettingsForGuild(Snowflake id) const { - for (const auto &entry : m_user_guild_settings.Entries) { - if (entry.GuildID == id) return entry; + if (const auto it = m_user_guild_settings.Entries.find(id); it != m_user_guild_settings.Entries.end()) { + return it->second; } return std::nullopt; @@ -2049,6 +2049,8 @@ void DiscordClient::HandleGatewayMessageAck(const GatewayMessage &msg) { void DiscordClient::HandleGatewayUserGuildSettingsUpdate(const GatewayMessage &msg) { UserGuildSettingsUpdateData data = msg.Data; + m_user_guild_settings.Entries[data.Settings.GuildID] = data.Settings; + const bool for_dms = !data.Settings.GuildID.IsValid(); const auto channels = for_dms ? GetPrivateChannels() : GetChannelsInGuild(data.Settings.GuildID); @@ -2543,7 +2545,7 @@ void DiscordClient::HandleReadyGuildSettings(const ReadyEventData &data) { } const auto now = Snowflake::FromNow(); - for (const auto &entry : data.GuildSettings.Entries) { + for (const auto &[guild_id, entry] : data.GuildSettings.Entries) { // even if muted is true a guild/channel can be unmuted if the current time passes mute_config.end_time if (entry.Muted) { if (entry.MuteConfig.EndTime.has_value()) { diff --git a/src/discord/objects.cpp b/src/discord/objects.cpp index 7f0d51e..0837633 100644 --- a/src/discord/objects.cpp +++ b/src/discord/objects.cpp @@ -210,7 +210,15 @@ std::optional<UserGuildSettingsChannelOverride> UserGuildSettingsEntry::GetOverr void from_json(const nlohmann::json &j, UserGuildSettingsData &m) { JS_D("version", m.Version); JS_D("partial", m.IsPartial); - JS_D("entries", m.Entries); + + { + std::vector<UserGuildSettingsEntry> entries; + JS_D("entries", entries); + + for (const auto &entry : entries) { + m.Entries[entry.GuildID] = entry; + } + } } void from_json(const nlohmann::json &j, ReadyEventData &m) { diff --git a/src/discord/objects.hpp b/src/discord/objects.hpp index d7db55b..1545cf4 100644 --- a/src/discord/objects.hpp +++ b/src/discord/objects.hpp @@ -311,7 +311,7 @@ struct UserGuildSettingsEntry { struct UserGuildSettingsData { int Version; bool IsPartial; - std::vector<UserGuildSettingsEntry> Entries; + std::map<Snowflake, UserGuildSettingsEntry> Entries; friend void from_json(const nlohmann::json &j, UserGuildSettingsData &m); }; |