diff options
author | ouwou <26526779+ouwou@users.noreply.github.com> | 2023-09-21 03:55:56 -0400 |
---|---|---|
committer | ouwou <26526779+ouwou@users.noreply.github.com> | 2023-09-21 03:55:56 -0400 |
commit | 7f891fba337ffea129df26058335c8ab1316be8d (patch) | |
tree | 9f8fb2e06d612cf90492195221a186960aa1b711 /src/discord/discord.cpp | |
parent | ebfcfad2285ec6100035229ede60315079fb94a2 (diff) | |
download | abaddon-portaudio-7f891fba337ffea129df26058335c8ab1316be8d.tar.gz abaddon-portaudio-7f891fba337ffea129df26058335c8ab1316be8d.zip |
some lovely member list optimizations
Diffstat (limited to 'src/discord/discord.cpp')
-rw-r--r-- | src/discord/discord.cpp | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/discord/discord.cpp b/src/discord/discord.cpp index ccc61b4..0618e72 100644 --- a/src/discord/discord.cpp +++ b/src/discord/discord.cpp @@ -261,6 +261,21 @@ Snowflake DiscordClient::GetMemberHoistedRole(Snowflake guild_id, Snowflake user return top_role.has_value() ? top_role->ID : Snowflake::Invalid; } +std::optional<RoleData> DiscordClient::GetMemberHoistedRoleCached(const GuildMember &member, const std::unordered_map<Snowflake, RoleData> &roles, bool with_color) const { + std::optional<RoleData> top_role; + for (const auto id : member.Roles) { + if (const auto iter = roles.find(id); iter != roles.end()) { + const auto &role = iter->second; + if ((with_color && role.Color != 0x000000) || (!with_color && role.IsHoisted)) { + if (!top_role.has_value() || top_role->Position < role.Position) { + top_role = role; + } + } + } + } + return top_role; +} + std::optional<RoleData> DiscordClient::GetMemberHighestRole(Snowflake guild_id, Snowflake user_id) const { const auto data = GetMember(user_id, guild_id); if (!data.has_value()) return std::nullopt; |