コード例 #1
0
 private async Task <bool> CheckCommandPermissions(PreconditionAttribute precon,
                                                   ICommandContext context,
                                                   CommandInfo command,
                                                   IServiceProvider serviceProvider)
 {
     return((await precon.CheckPermissionsAsync(Context, command, _serviceProvider)).IsSuccess);
 }
コード例 #2
0
        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());
            }
        }
コード例 #3
0
        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);
            }
        }
コード例 #4
0
        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));
        }
コード例 #5
0
        private async Task <(PreconditionAttribute, IPreconditionResult Result)> ExecutePreconditionAsync(
            PreconditionAttribute attribute,
            ICommand command,
            CommandContext context)
        {
            var result = await attribute.ExecuteAsync(command, context);

            return(attribute, result);
        }
コード例 #6
0
 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());
     }
 }
コード例 #7
0
ファイル: Extensions.cs プロジェクト: lofdat/Rem
        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);
        }
コード例 #8
0
 public ModuleBuilder AddPrecondition(PreconditionAttribute precondition)
 {
     _preconditions.Add(precondition);
     return(this);
 }
コード例 #9
0
 public CommandBuilder AddPrecondition(PreconditionAttribute precondition)
 {
     _preconditions.Add(precondition);
     return(this);
 }
コード例 #10
0
 /// <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);
コード例 #11
0
 public static PreconditionResult FromError(Exception ex, GuildPermission guildPermissions, ChannelPermission channelPermissions, PreconditionAttribute precondition)
 => new PreconditionPermissionResult(CommandError.Exception, ex.Message, guildPermissions, channelPermissions, precondition);
コード例 #12
0
 /// <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);