public async Task <PreconditionResult> CheckPreconditionsAsync(ICommandContext 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"); if (!moduleResult.IsSuccess) { return(moduleResult); } var commandResult = await CheckGroups(Preconditions, "Command"); if (!commandResult.IsSuccess) { return(commandResult); } return(PreconditionResult.FromSuccess()); }
public async Task <PreconditionResult> CheckPreconditionsAsync(ICommandContext 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()); }
public override Task <PreconditionResult> CheckPermissionsAsync(ICommandContext context, CommandInfo command, IServiceProvider services) { var User = context.User; //if (GuildPermission.HasValue) //{ // if (guildUser == null) // return Task.FromResult(PreconditionResult.FromError("Command must be used in a guild channel")); // if (!guildUser.GuildPermissions.Has(GuildPermission.Value)) // return Task.FromResult(PreconditionResult.FromError($"User requires guild permission {GuildPermission.Value}")); //} switch (ChannelPermission) { case ChannelPermission.Subscriber: if (!User.HasSubscribe) { return(Task.FromResult(PreconditionResult.FromError($"User requires channel permission {ChannelPermission}"))); } break; case ChannelPermission.Moderator: if (!User.HasMod) { return(Task.FromResult(PreconditionResult.FromError($"User requires channel permission {ChannelPermission}"))); } break; case ChannelPermission.BothAny: if (User.HasSubscribe || User.HasMod) { } else { return(Task.FromResult(PreconditionResult.FromError($"User requires channel permission {ChannelPermission}"))); } break; } return(Task.FromResult(PreconditionResult.FromSuccess())); }