aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/model/guild/mod.rs12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/model/guild/mod.rs b/src/model/guild/mod.rs
index bc97ba8..3226067 100644
--- a/src/model/guild/mod.rs
+++ b/src/model/guild/mod.rs
@@ -1167,6 +1167,8 @@ impl Guild {
// First apply the denied permission overwrites for each, then apply
// the allowed.
+ let mut data = Vec::with_capacity(member.roles.len());
+
// Roles
for overwrite in &channel.permission_overwrites {
if let PermissionOverwriteType::Role(role) = overwrite.kind {
@@ -1174,10 +1176,18 @@ impl Guild {
continue;
}
- permissions = (permissions & !overwrite.deny) | overwrite.allow;
+ if let Some(role) = self.roles.get(&role) {
+ data.push((role.position, overwrite.deny, overwrite.allow));
+ }
}
}
+ data.sort_by(|a, b| a.0.cmp(&b.0));
+
+ for overwrite in data {
+ permissions = (permissions & !overwrite.1) | overwrite.2;
+ }
+
// Member
for overwrite in &channel.permission_overwrites {
if PermissionOverwriteType::Member(user_id) != overwrite.kind {