aboutsummaryrefslogtreecommitdiff
path: root/src/model/guild/member.rs
diff options
context:
space:
mode:
authorZeyla Hellyer <[email protected]>2018-01-06 15:02:05 -0800
committerZeyla Hellyer <[email protected]>2018-01-06 15:02:05 -0800
commit222382ca48cb9786aaf5d0b5fc16958e482e7c5f (patch)
tree9607694a5ec604e4ff3b73938772093e4d90cba3 /src/model/guild/member.rs
parentAdd Guild::greater_member_hierarchy (diff)
downloadserenity-222382ca48cb9786aaf5d0b5fc16958e482e7c5f.tar.xz
serenity-222382ca48cb9786aaf5d0b5fc16958e482e7c5f.zip
Add some role position hierarchy checks
Diffstat (limited to 'src/model/guild/member.rs')
-rw-r--r--src/model/guild/member.rs18
1 files changed, 10 insertions, 8 deletions
diff --git a/src/model/guild/member.rs b/src/model/guild/member.rs
index 3622489..b93349e 100644
--- a/src/model/guild/member.rs
+++ b/src/model/guild/member.rs
@@ -309,16 +309,18 @@ impl Member {
pub fn kick(&self) -> Result<()> {
#[cfg(feature = "cache")]
{
- let req = Permissions::KICK_MEMBERS;
+ let cache = CACHE.read();
- let has_perms = CACHE
- .read()
- .guilds
- .get(&self.guild_id)
- .map(|guild| guild.read().has_perms(req));
+ if let Some(guild) = self.guilds.get(&self.guild_id) {
+ let reader = guild.read();
+
+ if !guild.has_perms(req) {
+ let req = Permissions::KICK_MEMBERS;
+
+ return Err(Error::Model(ModelError::InvalidPermissions(req)));
+ }
- if let Some(false) = has_perms {
- return Err(Error::Model(ModelError::InvalidPermissions(req)));
+ guild.check_hierarchy(&self.user.read().id)?;
}
}