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<ParameterBuilder> parameters;
private List<string> aliases; private List<string> aliases;
internal CommandBuilder(ModuleBuilder module, string prefix) internal CommandBuilder(ModuleBuilder module)
{ {
preconditions = new List<PreconditionAttribute>(); preconditions = new List<PreconditionAttribute>();
parameters = new List<ParameterBuilder>(); parameters = new List<ParameterBuilder>();
aliases = new List<string>(); aliases = new List<string>();
if (prefix != null)
{
aliases.Add(prefix);
Name = prefix;
}
Module = module; Module = module;
} }
@@ -65,15 +59,17 @@ namespace Discord.Commands.Builders
return this; 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; return this;
} }
public CommandBuilder AddAlias(string alias) public CommandBuilder AddAliases(params string[] newAliases)
{ {
aliases.Add(alias); aliases.AddRange(newAliases);
return this; return this;
} }

View File

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