public async Task <PreconditionResult> CheckPreconditionsAsync(ITurnContext context, IServiceProvider services = null) { services = services ?? EmptyServiceProvider.Instance; async Task <PreconditionResult> CheckGroups(IEnumerable <PreconditionAttribute> preconditions, string type) { foreach (IGrouping <string, PreconditionAttribute> preconditionGroup in preconditions.GroupBy(p => p.Group, StringComparer.Ordinal)) { if (preconditionGroup.Key == null) { foreach (PreconditionAttribute precondition in preconditionGroup) { var result = await precondition.CheckPermissionsAsync(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.CheckPermissionsAsync(context, this, services).ConfigureAwait(false)); } if (!results.Any(p => p.IsSuccess)) { return(PreconditionGroupResult.FromError($"{type} precondition group {preconditionGroup.Key} failed.", results)); } } } return(PreconditionGroupResult.FromSuccess()); } var moduleResult = await CheckGroups(Module.Preconditions, "Module").ConfigureAwait(false); if (!moduleResult.IsSuccess) { return(moduleResult); } var commandResult = await CheckGroups(Preconditions, "Command").ConfigureAwait(false); if (!commandResult.IsSuccess) { return(commandResult); } return(PreconditionResult.FromSuccess()); }
public async Task <PreconditionResult> CheckPreconditionsAsync(ITurnContext context, object arg, IServiceProvider services = null) { services = services ?? EmptyServiceProvider.Instance; foreach (var precondition in Preconditions) { var result = await precondition.CheckPermissionsAsync(context, this, arg, services).ConfigureAwait(false); if (!result.IsSuccess) { return(result); } } return(PreconditionResult.FromSuccess()); }