Use lambda-style subbuilders

This commit is contained in:
FiniteReality
2016-11-15 21:46:16 +00:00
parent af433c82cc
commit d25fbf78c0
2 changed files with 18 additions and 38 deletions

View File

@@ -10,18 +10,12 @@ namespace Discord.Commands.Builders
private List<ParameterBuilder> parameters;
private List<string> aliases;
internal CommandBuilder(ModuleBuilder module, string prefix)
internal CommandBuilder(ModuleBuilder module)
{
preconditions = new List<PreconditionAttribute>();
parameters = new List<ParameterBuilder>();
aliases = new List<string>();
if (prefix != null)
{
aliases.Add(prefix);
Name = prefix;
}
Module = module;
}
@@ -65,15 +59,17 @@ namespace Discord.Commands.Builders
return this;
}
public CommandBuilder AddParameter(ParameterBuilder parameter)
public CommandBuilder AddParameter(Action<ParameterBuilder> createFunc)
{
parameters.Add(parameter);
var param = new ParameterBuilder();
createFunc(param);
parameters.Add(param);
return this;
}
public CommandBuilder AddAlias(string alias)
public CommandBuilder AddAliases(params string[] newAliases)
{
aliases.Add(alias);
aliases.AddRange(newAliases);
return this;
}

View File

@@ -12,29 +12,15 @@ namespace Discord.Commands.Builders
private List<string> aliases;
public ModuleBuilder()
: this(null, null)
{ }
public ModuleBuilder(string prefix)
: this(null, prefix)
: this(null)
{ }
internal ModuleBuilder(ModuleBuilder parent)
: this(parent, null)
{ }
internal ModuleBuilder(ModuleBuilder parent, string prefix)
{
commands = new List<CommandBuilder>();
submodules = new List<ModuleBuilder>();
preconditions = new List<PreconditionAttribute>();
aliases = new List<string>();
if (prefix != null)
{
aliases.Add(prefix);
Name = prefix;
}
ParentModule = parent;
}
@@ -67,9 +53,9 @@ namespace Discord.Commands.Builders
return this;
}
public ModuleBuilder AddAlias(string alias)
public ModuleBuilder AddAliases(params string[] newAliases)
{
aliases.Add(alias);
aliases.AddRange(newAliases);
return this;
}
@@ -79,22 +65,20 @@ namespace Discord.Commands.Builders
return this;
}
public CommandBuilder AddCommand() => AddCommand(null);
public CommandBuilder AddCommand(string name)
public ModuleBuilder AddCommand(Action<CommandBuilder> createFunc)
{
var builder = new CommandBuilder(this, name);
var builder = new CommandBuilder(this);
createFunc(builder);
commands.Add(builder);
return builder;
return this;
}
public ModuleBuilder AddSubmodule() => AddSubmodule(null);
public ModuleBuilder AddSubmodule(string prefix)
public ModuleBuilder AddSubmodule(Action<ModuleBuilder> createFunc)
{
var builder = new ModuleBuilder(this, prefix);
var builder = new ModuleBuilder(this);
createFunc(builder);
submodules.Add(builder);
return builder;
return this;
}
public ModuleInfo Build(CommandService service)