Start work on command builders
Right now commands require a module before they can be created; I'm looking to remove this in the future.
This commit is contained in:
69
src/Discord.Net.Commands/Builders/CommandBuilder.cs
Normal file
69
src/Discord.Net.Commands/Builders/CommandBuilder.cs
Normal file
@@ -0,0 +1,69 @@
|
||||
using System;
|
||||
using System.Threading.Tasks;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Discord.Commands
|
||||
{
|
||||
public class CommandBuilder
|
||||
{
|
||||
private List<string> aliases;
|
||||
|
||||
internal CommandBuilder(ModuleBuilder module, string prefix)
|
||||
{
|
||||
aliases = new List<string>();
|
||||
|
||||
if (prefix != null)
|
||||
{
|
||||
aliases.Add(prefix);
|
||||
Name = prefix;
|
||||
}
|
||||
|
||||
Module = module;
|
||||
}
|
||||
|
||||
|
||||
public string Name { get; set; }
|
||||
public string Summary { get; set; }
|
||||
public string Remarks { get; set; }
|
||||
public Func<object[], Task> Callback { get; set; }
|
||||
public ModuleBuilder Module { get; }
|
||||
|
||||
public List<string> Aliases => aliases;
|
||||
|
||||
|
||||
public CommandBuilder SetName(string name)
|
||||
{
|
||||
Name = name;
|
||||
return this;
|
||||
}
|
||||
|
||||
public CommandBuilder SetSummary(string summary)
|
||||
{
|
||||
Summary = summary;
|
||||
return this;
|
||||
}
|
||||
|
||||
public CommandBuilder SetRemarks(string remarks)
|
||||
{
|
||||
Remarks = remarks;
|
||||
return this;
|
||||
}
|
||||
|
||||
public CommandBuilder SetCallback(Func<object[], Task> callback)
|
||||
{
|
||||
Callback = callback;
|
||||
return this;
|
||||
}
|
||||
|
||||
public CommandBuilder AddAlias(string alias)
|
||||
{
|
||||
aliases.Add(alias);
|
||||
return this;
|
||||
}
|
||||
|
||||
public ModuleBuilder Done()
|
||||
{
|
||||
return Module;
|
||||
}
|
||||
}
|
||||
}
|
||||
102
src/Discord.Net.Commands/Builders/ModuleBuilder.cs
Normal file
102
src/Discord.Net.Commands/Builders/ModuleBuilder.cs
Normal file
@@ -0,0 +1,102 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Immutable;
|
||||
|
||||
namespace Discord.Commands
|
||||
{
|
||||
public class ModuleBuilder
|
||||
{
|
||||
private List<CommandBuilder> commands;
|
||||
private List<ModuleBuilder> submodules;
|
||||
private List<string> aliases;
|
||||
|
||||
|
||||
public ModuleBuilder()
|
||||
: this(null, null)
|
||||
{ }
|
||||
|
||||
public ModuleBuilder(string prefix)
|
||||
: this(null, prefix)
|
||||
{ }
|
||||
|
||||
internal ModuleBuilder(ModuleBuilder parent)
|
||||
: this(parent, null)
|
||||
{ }
|
||||
|
||||
internal ModuleBuilder(ModuleBuilder parent, string prefix)
|
||||
{
|
||||
commands = new List<CommandBuilder>();
|
||||
submodules = new List<ModuleBuilder>();
|
||||
aliases = new List<string>();
|
||||
|
||||
if (prefix != null)
|
||||
{
|
||||
aliases.Add(prefix);
|
||||
Name = prefix;
|
||||
}
|
||||
|
||||
ParentModule = parent;
|
||||
}
|
||||
|
||||
|
||||
public string Name { get; set; }
|
||||
public string Summary { get; set; }
|
||||
public string Remarks { get; set; }
|
||||
public ModuleBuilder ParentModule { get; }
|
||||
|
||||
public List<CommandBuilder> Commands => commands;
|
||||
public List<ModuleBuilder> Modules => submodules;
|
||||
public List<string> Aliases => aliases;
|
||||
|
||||
|
||||
public ModuleBuilder SetName(string name)
|
||||
{
|
||||
Name = name;
|
||||
return this;
|
||||
}
|
||||
|
||||
public ModuleBuilder SetSummary(string summary)
|
||||
{
|
||||
Summary = summary;
|
||||
return this;
|
||||
}
|
||||
|
||||
public ModuleBuilder SetRemarks(string remarks)
|
||||
{
|
||||
Remarks = remarks;
|
||||
return this;
|
||||
}
|
||||
|
||||
public ModuleBuilder AddAlias(string alias)
|
||||
{
|
||||
aliases.Add(alias);
|
||||
return this;
|
||||
}
|
||||
|
||||
public CommandBuilder AddCommand() => AddCommand(null);
|
||||
public CommandBuilder AddCommand(string name)
|
||||
{
|
||||
var builder = new CommandBuilder(this, name);
|
||||
commands.Add(builder);
|
||||
|
||||
return builder;
|
||||
}
|
||||
|
||||
public ModuleBuilder AddSubmodule() => AddSubmodule(null);
|
||||
public ModuleBuilder AddSubmodule(string prefix)
|
||||
{
|
||||
var builder = new ModuleBuilder(this, prefix);
|
||||
submodules.Add(builder);
|
||||
|
||||
return builder;
|
||||
}
|
||||
|
||||
public ModuleBuilder Done()
|
||||
{
|
||||
if (ParentModule == null)
|
||||
throw new InvalidOperationException("Cannot finish a top-level module!");
|
||||
|
||||
return ParentModule;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user