/// <inheritdoc /> public async Task <GuildPermission> GetPermissionsAsync(IDiscordGuildUser user) { if (user.Id == OwnerId) { return(GuildPermission.All); } GuildPermission permissions = Permissions; if (permissions.HasFlag(GuildPermission.Administrator)) { return(GuildPermission.All); } IDiscordRole everyoneRole = await GetRoleAsync(Id); permissions = everyoneRole.Permissions; if (user.RoleIds != null) { var roles = await GetRolesAsync(); foreach (IDiscordRole role in roles.Where(x => user.RoleIds.Contains(x.Id))) { permissions |= role.Permissions; } } if (permissions.HasFlag(GuildPermission.Administrator)) { return(GuildPermission.All); } return(permissions); }
public async Task <bool> HasPermissionsAsync(GuildPermission permissions) { var guild = await GetGuildAsync(); GuildPermission p = await guild.GetPermissionsAsync(this); return(p.HasFlag(permissions)); }
public async ValueTask <GuildPermission> GetPermissionsAsync(IDiscordGuildUser user) { IDiscordGuild guild = await GetGuildAsync(); GuildPermission permissions = await guild.GetPermissionsAsync(user); if (permissions.HasFlag(GuildPermission.Administrator)) { return(GuildPermission.All); } if (_packet.PermissionOverwrites != null) { PermissionOverwrite overwriteEveryone = _packet.PermissionOverwrites .FirstOrDefault(x => x.Id == GuildId) ?? null; if (overwriteEveryone != null) { permissions &= ~overwriteEveryone.DeniedPermissions; permissions |= overwriteEveryone.AllowedPermissions; } PermissionOverwrite overwrites = new PermissionOverwrite(); if (user.RoleIds != null) { foreach (ulong roleId in user.RoleIds) { PermissionOverwrite roleOverwrites = _packet.PermissionOverwrites.FirstOrDefault(x => x.Id == roleId); if (roleOverwrites != null) { overwrites.AllowedPermissions |= roleOverwrites.AllowedPermissions; overwrites.DeniedPermissions &= roleOverwrites.DeniedPermissions; } } } permissions &= ~overwrites.DeniedPermissions; permissions |= overwrites.AllowedPermissions; PermissionOverwrite userOverwrite = _packet.PermissionOverwrites.FirstOrDefault(x => x.Id == user.Id); if (userOverwrite != null) { permissions &= ~userOverwrite.DeniedPermissions; permissions |= userOverwrite.AllowedPermissions; } } return(permissions); }