| @@ -68,49 +68,39 @@ namespace Discord.Commands | |||
| { | |||
| services = services ?? EmptyServiceProvider.Instance; | |||
| foreach (IGrouping<int, PreconditionAttribute> preconditionGroup in Module.Preconditions.GroupBy(p => p.Group)) | |||
| async Task<PreconditionResult> CheckGroups(IEnumerable<PreconditionAttribute> preconditions, string type) | |||
| { | |||
| if (preconditionGroup.Key == 0) | |||
| foreach (IGrouping<int, PreconditionAttribute> preconditionGroup in preconditions.GroupBy(p => p.Group)) | |||
| { | |||
| foreach (PreconditionAttribute precondition in preconditionGroup) | |||
| if (preconditionGroup.Key == 0) | |||
| { | |||
| var result = await precondition.CheckPermissions(context, this, services).ConfigureAwait(false); | |||
| if (!result.IsSuccess) | |||
| return result; | |||
| foreach (PreconditionAttribute precondition in preconditionGroup) | |||
| { | |||
| var result = await precondition.CheckPermissions(context, this, services).ConfigureAwait(false); | |||
| if (!result.IsSuccess) | |||
| return result; | |||
| } | |||
| } | |||
| } | |||
| else | |||
| { | |||
| var results = new List<PreconditionResult>(); | |||
| foreach (PreconditionAttribute precondition in preconditionGroup) | |||
| results.Add(await precondition.CheckPermissions(context, this, services).ConfigureAwait(false)); | |||
| else | |||
| { | |||
| var results = new List<PreconditionResult>(); | |||
| foreach (PreconditionAttribute precondition in preconditionGroup) | |||
| results.Add(await precondition.CheckPermissions(context, this, services).ConfigureAwait(false)); | |||
| if (!results.Any(p => p.IsSuccess)) | |||
| return PreconditionResult.FromError($"Module precondition group {preconditionGroup.Key} failed: {String.Join("\n", results.Select(r => r.ErrorReason))}."); | |||
| if (!results.Any(p => p.IsSuccess)) | |||
| return PreconditionResult.FromError($"{type} precondition group {preconditionGroup.Key} failed: {String.Join("\n", results.Select(r => r.ErrorReason))}."); | |||
| } | |||
| } | |||
| return PreconditionResult.FromSuccess(); | |||
| } | |||
| foreach (IGrouping<int, PreconditionAttribute> preconditionGroup in Preconditions.GroupBy(p => p.Group)) | |||
| { | |||
| if (preconditionGroup.Key == 0) | |||
| { | |||
| foreach (PreconditionAttribute precondition in preconditionGroup) | |||
| { | |||
| var result = await precondition.CheckPermissions(context, this, services).ConfigureAwait(false); | |||
| if (!result.IsSuccess) | |||
| return result; | |||
| } | |||
| } | |||
| else | |||
| { | |||
| var results = new List<PreconditionResult>(); | |||
| foreach (PreconditionAttribute precondition in preconditionGroup) | |||
| results.Add(await precondition.CheckPermissions(context, this, services).ConfigureAwait(false)); | |||
| var moduleResult = await CheckGroups(Module.Preconditions, "Module"); | |||
| if (!moduleResult.IsSuccess) | |||
| return moduleResult; | |||
| if (!results.Any(p => p.IsSuccess)) | |||
| return PreconditionResult.FromError($"Command precondition group {preconditionGroup.Key} failed: {String.Join("\n", results.Select(r => r.ErrorReason))}."); | |||
| } | |||
| } | |||
| var commandResult = await CheckGroups(Preconditions, "Command"); | |||
| if (!commandResult.IsSuccess) | |||
| return commandResult; | |||
| return PreconditionResult.FromSuccess(); | |||
| } | |||