Added role order support to permission resolving
This commit is contained in:
@@ -184,11 +184,12 @@ namespace Discord
|
|||||||
if (channel == null) return;
|
if (channel == null) return;
|
||||||
var channelOverwrites = channel.PermissionOverwrites;
|
var channelOverwrites = channel.PermissionOverwrites;
|
||||||
|
|
||||||
foreach (var serverRole in Roles)
|
var orderedRoles = Roles.OrderBy(x => x.Id);
|
||||||
|
foreach (var serverRole in orderedRoles)
|
||||||
newPermissions |= serverRole.Permissions.RawValue;
|
newPermissions |= serverRole.Permissions.RawValue;
|
||||||
foreach (var denyRole in channelOverwrites.Where(x => x.Type == PermissionTarget.Role && x.Deny.RawValue != 0 && RoleIds.Contains(x.TargetId)))
|
foreach (var denyRole in channelOverwrites.Where(x => x.Type == PermissionTarget.Role && x.Deny.RawValue != 0 && orderedRoles.Any(y => y.Id == x.TargetId)))
|
||||||
newPermissions &= ~denyRole.Deny.RawValue;
|
newPermissions &= ~denyRole.Deny.RawValue;
|
||||||
foreach (var allowRole in channelOverwrites.Where(x => x.Type == PermissionTarget.Role && x.Allow.RawValue != 0 && RoleIds.Contains(x.TargetId)))
|
foreach (var allowRole in channelOverwrites.Where(x => x.Type == PermissionTarget.Role && x.Allow.RawValue != 0 && orderedRoles.Any(y => y.Id == x.TargetId)))
|
||||||
newPermissions |= allowRole.Allow.RawValue;
|
newPermissions |= allowRole.Allow.RawValue;
|
||||||
foreach (var denyMembers in channelOverwrites.Where(x => x.Type == PermissionTarget.Member && x.TargetId == UserId && x.Deny.RawValue != 0))
|
foreach (var denyMembers in channelOverwrites.Where(x => x.Type == PermissionTarget.Member && x.TargetId == UserId && x.Deny.RawValue != 0))
|
||||||
newPermissions &= ~denyMembers.Deny.RawValue;
|
newPermissions &= ~denyMembers.Deny.RawValue;
|
||||||
|
|||||||
@@ -45,6 +45,9 @@ namespace Discord
|
|||||||
Permissions.Lock();
|
Permissions.Lock();
|
||||||
Color = new PackedColor(0);
|
Color = new PackedColor(0);
|
||||||
Color.Lock();
|
Color.Lock();
|
||||||
|
|
||||||
|
if (isEveryone)
|
||||||
|
Position = int.MinValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void Update(API.RoleInfo model)
|
internal void Update(API.RoleInfo model)
|
||||||
@@ -53,7 +56,7 @@ namespace Discord
|
|||||||
Name = model.Name;
|
Name = model.Name;
|
||||||
if (model.Hoist != null)
|
if (model.Hoist != null)
|
||||||
Hoist = model.Hoist.Value;
|
Hoist = model.Hoist.Value;
|
||||||
if (model.Position != null)
|
if (model.Position != null && !IsEveryone)
|
||||||
Position = model.Position.Value;
|
Position = model.Position.Value;
|
||||||
if (model.Color != null)
|
if (model.Color != null)
|
||||||
Color.SetRawValue(model.Color.Value);
|
Color.SetRawValue(model.Color.Value);
|
||||||
|
|||||||
Reference in New Issue
Block a user