Exemple #1
0
        /// <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));
        }
Exemple #3
0
        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);
        }