diff options
| author | Mei Boudreau <[email protected]> | 2017-10-12 18:18:07 -0400 |
|---|---|---|
| committer | Zeyla Hellyer <[email protected]> | 2017-10-12 15:18:07 -0700 |
| commit | 8565fa2cb356cf8cbccfeb09828c9d136ad3d614 (patch) | |
| tree | 2e3d64a7495d791f896f6242e87ce12f09c66b43 /src | |
| parent | Help-features display `Aliases` and list information for `Aliases`. (#190) (diff) | |
| download | serenity-8565fa2cb356cf8cbccfeb09828c9d136ad3d614.tar.xz serenity-8565fa2cb356cf8cbccfeb09828c9d136ad3d614.zip | |
Optimize Member::roles
Diffstat (limited to 'src')
| -rw-r--r-- | src/model/guild/member.rs | 32 |
1 files changed, 11 insertions, 21 deletions
diff --git a/src/model/guild/member.rs b/src/model/guild/member.rs index 29172a0..20b45b8 100644 --- a/src/model/guild/member.rs +++ b/src/model/guild/member.rs @@ -361,27 +361,17 @@ impl Member { /// If role data can not be found for the member, then `None` is returned. #[cfg(feature = "cache")] pub fn roles(&self) -> Option<Vec<Role>> { - CACHE - .read() - .unwrap() - .guilds - .values() - .find(|guild| { - guild.read().unwrap().members.values().any(|m| { - m.user.read().unwrap().id == self.user.read().unwrap().id && - m.joined_at == self.joined_at - }) - }) - .map(|guild| { - guild - .read() - .unwrap() - .roles - .values() - .filter(|role| self.roles.contains(&role.id)) - .cloned() - .collect() - }) + self + .guild_id + .find() + .map(|g| g + .read() + .unwrap() + .roles + .values() + .filter(|role| self.roles.contains(&role.id)) + .cloned() + .collect()) } /// Unbans the [`User`] from the guild. |