summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorouwou <26526779+ouwou@users.noreply.github.com>2023-03-10 19:14:19 -0500
committerouwou <26526779+ouwou@users.noreply.github.com>2023-03-10 19:14:19 -0500
commite3f6a1dcbd75b511397f7ba64f81ba37db4a1cfc (patch)
tree1cb3216a2883bce902e2badcc23a49ef7d8bffa6
parent3889991e16958d9c25bcc982a70aa232b3c16e9a (diff)
downloadabaddon-portaudio-e3f6a1dcbd75b511397f7ba64f81ba37db4a1cfc.tar.gz
abaddon-portaudio-e3f6a1dcbd75b511397f7ba64f81ba37db4a1cfc.zip
handle USER_GUILD_SETTINGS_UPDATE for notifications
-rw-r--r--src/discord/discord.cpp8
-rw-r--r--src/discord/objects.cpp10
-rw-r--r--src/discord/objects.hpp2
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);
};