Ejemplo n.º 1
0
        public static CommandBuilder WithStandardListAction <TGame, TItem>(this CommandBuilder commandBuilder,
                                                                           Func <TGame, Command, List <TItem> > source, Action <List <TItem>, TGame, Command> followup,
                                                                           params Func <TItem, bool>[] filters)
            where TGame : Game
            where TItem : VText
        {
            var prefixArgument = new StringArgument("Prefix", Text("the prefix of your search"));
            var suffixArgument = new StringArgument("suffix", Text("the suffix of your search"));
            var suffixTag      = new Tag("-suffix", Text("Allows you to search with a suffix"), new List <Argument> {
                suffixArgument
            });
            var infixArgument = new StringArgument("infix", Text("the infix of your search"));
            var infixTag      = new Tag("-infix", Text("Allows you to search with an infix"), new List <Argument> {
                infixArgument
            });
            var lengthArgument = new IntegerArgument("Length", Text("the length of your search"));
            var lengthTag      = new Tag("-length", Text("Allows your to search with a set length"), new List <Argument> {
                lengthArgument
            });
            var minLengthArgument = new IntegerArgument("Minimum Length", Text("the minimum length of your search"));
            var minLengthTag      = new Tag("-min", Text("Allows your to search with a minimum length"), new List <Argument> {
                minLengthArgument
            });
            var maxLengthArgument = new IntegerArgument("Maximum Length", Text("the maximum length of your search"));
            var maxLengthTag      = new Tag("-max", Text("Allows your to search with a maximum length"), new List <Argument> {
                maxLengthArgument
            });

            commandBuilder.WithOptionalArguments(prefixArgument);
            commandBuilder.WithTags(suffixTag, infixTag, lengthTag, minLengthTag, maxLengthTag);

            bool Filter(TItem item)
            {
                var matchCriteria = new StringMatching.MatchCriteria(
                    prefixArgument.IsFilled() ? prefixArgument.Content : null,
                    suffixArgument.IsFilled() ? suffixArgument.Content : null,
                    infixArgument.IsFilled() ? infixArgument.Content : null,
                    lengthArgument.IsFilled() ? lengthArgument.Content : -1,
                    minLengthArgument.IsFilled() ? minLengthArgument.Content : -1,
                    maxLengthArgument.IsFilled() ? maxLengthArgument.Content : -1,
                    true);

                return(matchCriteria.IsMatch(item.GetContentRaw()));
            }

            var completeFilters = filters.ToList();

            completeFilters.Add(Filter);
            return(WithListAction(commandBuilder, source, followup, completeFilters.ToArray()));
        }
Ejemplo n.º 2
0
        public static CommandBuilder WithDefaultSelectionAction <TGame, TItem>(this CommandBuilder commandBuilder,
                                                                               Func <TGame, Command, List <TItem> > source, Selection <TItem> selection, string type, string typePlural = null,
                                                                               params Func <TItem, bool>[] filters)
            where TGame : Game
            where TItem : VText
        {
            var argument = new StringArgument(type + " name", Text("The name of the " + type));

            commandBuilder = commandBuilder.WithArguments(argument);

            var totalFilters = filters.ToList();

            totalFilters.Add(item =>
            {
                var criteria = new StringMatching.MatchCriteria(argument.Content.ToLower());
                return(criteria.IsMatch(item.GetContentRaw().ToLower()));
            });

            return(commandBuilder.WithAction(CreateSelectionAction(source, selection, type, typePlural, filters)));
        }