| @@ -68,49 +68,39 @@ namespace Discord.Commands | |||||
| { | { | ||||
| services = services ?? EmptyServiceProvider.Instance; | 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(); | return PreconditionResult.FromSuccess(); | ||||
| } | } | ||||