summaryrefslogtreecommitdiff
path: root/src/discord/discord.cpp
diff options
context:
space:
mode:
authorouwou <26526779+ouwou@users.noreply.github.com>2023-09-21 03:55:56 -0400
committerouwou <26526779+ouwou@users.noreply.github.com>2023-09-21 03:55:56 -0400
commit7f891fba337ffea129df26058335c8ab1316be8d (patch)
tree9f8fb2e06d612cf90492195221a186960aa1b711 /src/discord/discord.cpp
parentebfcfad2285ec6100035229ede60315079fb94a2 (diff)
downloadabaddon-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.cpp15
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;