private async Task <bool> CheckCommandPermissions(PreconditionAttribute precon, ICommandContext context, CommandInfo command, IServiceProvider serviceProvider) { return((await precon.CheckPermissionsAsync(Context, command, _serviceProvider)).IsSuccess); }
public static string GetDescription(this PreconditionAttribute precondition) { switch (precondition) { case RequireContextAttribute attribute: return("Require " + attribute.Contexts.ToString() + " Context"); case RequireUserPermissionAttribute attribute: return("Require User " + (attribute.ChannelPermission.HasValue ? attribute.ChannelPermission.Value.ToString() : attribute.GuildPermission.Value.ToString()) + " Permission"); case RequireBotPermissionAttribute attribute: return("Require Bot " + (attribute.ChannelPermission.HasValue ? attribute.ChannelPermission.Value.ToString() : attribute.GuildPermission.Value.ToString()) + " Permission"); default: return(precondition.ToString()); } }
public static string DecodePrecondition(this PreconditionAttribute precondition) { switch (precondition) { case RequireNsfwAttribute: return("NSFW channel"); case RequireUserPermissionAttribute attr: { string decode = attr.ChannelPermission.HasValue ? $"Channel Permission {attr.ChannelPermission.ToString()?.AsCode()}" : string.Empty; decode += (string.IsNullOrWhiteSpace(decode) ? string.Empty : ", ") + (attr.GuildPermission.HasValue ? $"Guild Permission {attr.GuildPermission.ToString()?.AsCode()}" : string.Empty); return(decode); } case RequireContextAttribute attr: return(string.Join(" or ", attr.Contexts.ToString("G").Split(", ")) + " Context"); default: return(precondition.GetType().Name); } }
Div explainPrecondition(PreconditionAttribute attribute, bool module) { string summary; string type = module ? "This module " : "This command "; if (attribute is RequireContextAttribute rca) { summary = $"must be executed in a {rca.Contexts}"; } else if (attribute is RequireUserPermissionAttribute rupa) { summary = $"must be executed by a user who has the following permission:<br/>" + htmlListPerms(rupa.ChannelPermission, rupa.GuildPermission); } else if (attribute is RequireOwnerAttribute) { summary = $"must be executed by the Owner of the bot"; } else if (attribute is RequireBotPermissionAttribute rbpa) { summary = $"requires the bot's account to have the following permissions:<br/>" + htmlListPerms(rbpa.ChannelPermission, rbpa.GuildPermission); } else if (attribute is RequirePermission rp) { summary = $"must be executed by a user who has the <code>{rp.Node}</code> permission"; } else { summary = attribute.GetType().Name.Replace("Attribute", ""); } return(warn(type + summary)); }
private async Task <(PreconditionAttribute, IPreconditionResult Result)> ExecutePreconditionAsync( PreconditionAttribute attribute, ICommand command, CommandContext context) { var result = await attribute.ExecuteAsync(command, context); return(attribute, result); }
private static string TranslatePrecondition(PreconditionAttribute precondition, IDocumentFormatter f) { if (precondition is MinPermissionsAttribute minPermissionsAttribute) { return($"Minimum permission: {f.Em($"{minPermissionsAttribute.AccessLevel.Humanize(LetterCasing.Title)}")}"); } else if (precondition is RequireContextAttribute contextAttribute) { return($"Can only be used in a {f.Em(TranslateContext(contextAttribute.Contexts))}"); } else if (precondition is RequireBotPermissionAttribute || precondition is RequireUserPermissionAttribute) { string permission = ""; string prefix = ""; GuildPermission? guildPermission; ChannelPermission?channelPermission; if (precondition is RequireBotPermissionAttribute) { guildPermission = (precondition as RequireBotPermissionAttribute).GuildPermission; channelPermission = (precondition as RequireBotPermissionAttribute).ChannelPermission; prefix = "Bot"; } else { guildPermission = (precondition as RequireUserPermissionAttribute).GuildPermission; channelPermission = (precondition as RequireUserPermissionAttribute).ChannelPermission; prefix = "User"; } if (guildPermission != null && guildPermission.HasValue) { var guildPermissions = guildPermission.Value.ToString().Split(',').Select(flag => (GuildPermission)Enum.Parse(typeof(GuildPermission), flag)).ToList(); permission += $"{prefix} requires guild permission{(guildPermissions.Count() > 1 ? "s" : "")}: {f.Em(string.Join(", ", guildPermissions.Select(gp => gp.Humanize(LetterCasing.Title))))} "; } if (channelPermission != null && channelPermission.HasValue) { var channelPermissions = channelPermission.Value.ToString().Split(',').Select(flag => (ChannelPermission)Enum.Parse(typeof(ChannelPermission), flag)).ToList(); permission += $"{prefix} requires channel permission{(channelPermissions.Count() > 1 ? "s" : "")}: {f.Em(string.Join(", ", channelPermissions.Select(cp => cp.Humanize(LetterCasing.Title))))} "; } return(permission.Trim()); } else { return(precondition.ToString()); } }
public static async Task <IEnumerable <CommandInfo> > CheckConditions(this IEnumerable <CommandInfo> Commands, CommandContext Context, IDependencyMap Deps = null) { List <CommandInfo> Ret = new List <CommandInfo>(); foreach (CommandInfo Command in Commands) { if ((await Command.CheckPreconditionsAsync(Context, Deps)).IsSuccess) { Ret.Add(Command); } else { PreconditionAttribute RequireContext = Command.Preconditions.FirstOrDefault(a => a is RequireContextAttribute); if (Command.Preconditions.Contains(RequireContext)) { Ret.Add(Command); } } } return(Ret); }
public ModuleBuilder AddPrecondition(PreconditionAttribute precondition) { _preconditions.Add(precondition); return(this); }
public CommandBuilder AddPrecondition(PreconditionAttribute precondition) { _preconditions.Add(precondition); return(this); }
/// <summary> /// Returns a <see cref="PreconditionResult" /> with the specified <paramref name="result"/> type. /// </summary> /// <param name="result">The result of failure.</param> public static PreconditionResult FromError(IResult result, GuildPermission guildPermissions, ChannelPermission channelPermissions, PreconditionAttribute precondition) => new PreconditionPermissionResult(result.Error, result.ErrorReason, guildPermissions, channelPermissions, precondition);
public static PreconditionResult FromError(Exception ex, GuildPermission guildPermissions, ChannelPermission channelPermissions, PreconditionAttribute precondition) => new PreconditionPermissionResult(CommandError.Exception, ex.Message, guildPermissions, channelPermissions, precondition);
/// <summary> /// Returns a <see cref="PreconditionResult" /> with <see cref="CommandError.UnmetPrecondition" /> and the /// specified reason. /// </summary> /// <param name="reason">The reason of failure.</param> public static PreconditionResult FromError(string reason, GuildPermission guildPermissions, ChannelPermission channelPermissions, PreconditionAttribute precondition) => new PreconditionPermissionResult(CommandError.UnmetPrecondition, reason, guildPermissions, channelPermissions, precondition);