diff options
Diffstat (limited to 'src/discord')
-rw-r--r-- | src/discord/discord.cpp | 16 | ||||
-rw-r--r-- | src/discord/discord.hpp | 1 |
2 files changed, 16 insertions, 1 deletions
diff --git a/src/discord/discord.cpp b/src/discord/discord.cpp index 5443b87..eac6428 100644 --- a/src/discord/discord.cpp +++ b/src/discord/discord.cpp @@ -1156,10 +1156,24 @@ bool DiscordClient::IsGuildMuted(Snowflake id) const noexcept { 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 + if (iter == m_unread.end()) return -1; // todo: no magic number (who am i kidding ill never change this) return iter->second; } +bool DiscordClient::GetUnreadStateForGuild(Snowflake id, int &total_mentions) const noexcept { + total_mentions = 0; + bool has_any_unread = false; + const auto channels = GetChannelsInGuild(id); + for (const auto channel_id : channels) { + const auto channel_unread = GetUnreadStateForChannel(channel_id); + if (!has_any_unread && channel_unread > -1 && !IsChannelMuted(channel_id)) + has_any_unread = true; + if (channel_unread > -1) + total_mentions += channel_unread; + } + return has_any_unread; +} + PresenceStatus DiscordClient::GetUserStatus(Snowflake id) const { auto it = m_user_to_status.find(id); if (it != m_user_to_status.end()) diff --git a/src/discord/discord.hpp b/src/discord/discord.hpp index 5569123..4374396 100644 --- a/src/discord/discord.hpp +++ b/src/discord/discord.hpp @@ -190,6 +190,7 @@ public: bool IsChannelMuted(Snowflake id) const noexcept; bool IsGuildMuted(Snowflake id) const noexcept; int GetUnreadStateForChannel(Snowflake id) const noexcept; + bool GetUnreadStateForGuild(Snowflake id, int &total_mentions) const noexcept; PresenceStatus GetUserStatus(Snowflake id) const; |