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