@@ -2,7 +2,8 @@ | |||||
namespace Discord.Commands | namespace Discord.Commands | ||||
{ | { | ||||
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Parameter)] | |||||
// Full summary of method | |||||
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class)] | |||||
public class DescriptionAttribute : Attribute | public class DescriptionAttribute : Attribute | ||||
{ | { | ||||
public string Text { get; } | public string Text { get; } | ||||
@@ -12,11 +13,12 @@ namespace Discord.Commands | |||||
} | } | ||||
} | } | ||||
[AttributeUsage(AttributeTargets.Method)] | |||||
public class SynopsisAttribute : Attribute | |||||
// Brief summary of method/module/parameter | |||||
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class | AttributeTargets.Parameter)] | |||||
public class SummaryAttribute : Attribute | |||||
{ | { | ||||
public string Text { get; } | public string Text { get; } | ||||
public SynopsisAttribute(string text) | |||||
public SummaryAttribute(string text) | |||||
{ | { | ||||
Text = text; | Text = text; | ||||
} | } | ||||
@@ -15,7 +15,7 @@ namespace Discord.Commands | |||||
public string Name { get; } | public string Name { get; } | ||||
public string Description { get; } | public string Description { get; } | ||||
public string Synopsis { get; } | |||||
public string Summary { get; } | |||||
public string Text { get; } | public string Text { get; } | ||||
public Module Module { get; } | public Module Module { get; } | ||||
public IReadOnlyList<CommandParameter> Parameters { get; } | public IReadOnlyList<CommandParameter> Parameters { get; } | ||||
@@ -33,9 +33,9 @@ namespace Discord.Commands | |||||
if (description != null) | if (description != null) | ||||
Description = description.Text; | Description = description.Text; | ||||
var synopsis = methodInfo.GetCustomAttribute<SynopsisAttribute>(); | |||||
if (synopsis != null) | |||||
Synopsis = synopsis.Text; | |||||
var summary = methodInfo.GetCustomAttribute<SummaryAttribute>(); | |||||
if (summary != null) | |||||
Summary = summary.Text; | |||||
Parameters = BuildParameters(methodInfo); | Parameters = BuildParameters(methodInfo); | ||||
Preconditions = BuildPreconditions(methodInfo); | Preconditions = BuildPreconditions(methodInfo); | ||||
@@ -129,11 +129,11 @@ namespace Discord.Commands | |||||
throw new InvalidOperationException("Remainder parameters must be the last parameter in a command."); | throw new InvalidOperationException("Remainder parameters must be the last parameter in a command."); | ||||
string name = parameter.Name; | string name = parameter.Name; | ||||
string description = typeInfo.GetCustomAttribute<DescriptionAttribute>()?.Text; | |||||
string summary = parameter.GetCustomAttribute<DescriptionAttribute>()?.Text; | |||||
bool isOptional = parameter.IsOptional; | bool isOptional = parameter.IsOptional; | ||||
object defaultValue = parameter.HasDefaultValue ? parameter.DefaultValue : null; | object defaultValue = parameter.HasDefaultValue ? parameter.DefaultValue : null; | ||||
paramBuilder.Add(new CommandParameter(name, description, type, reader, isOptional, isRemainder, isMultiple, defaultValue)); | |||||
paramBuilder.Add(new CommandParameter(name, summary, type, reader, isOptional, isRemainder, isMultiple, defaultValue)); | |||||
} | } | ||||
return paramBuilder.ToImmutable(); | return paramBuilder.ToImmutable(); | ||||
} | } | ||||
@@ -10,17 +10,17 @@ namespace Discord.Commands | |||||
private readonly TypeReader _reader; | private readonly TypeReader _reader; | ||||
public string Name { get; } | public string Name { get; } | ||||
public string Description { get; } | |||||
public string Summary { get; } | |||||
public bool IsOptional { get; } | public bool IsOptional { get; } | ||||
public bool IsRemainder { get; } | public bool IsRemainder { get; } | ||||
public bool IsMultiple { get; } | public bool IsMultiple { get; } | ||||
public Type Type { get; } | public Type Type { get; } | ||||
internal object DefaultValue { get; } | internal object DefaultValue { get; } | ||||
public CommandParameter(string name, string description, Type type, TypeReader reader, bool isOptional, bool isRemainder, bool isMultiple, object defaultValue) | |||||
public CommandParameter(string name, string summary, Type type, TypeReader reader, bool isOptional, bool isRemainder, bool isMultiple, object defaultValue) | |||||
{ | { | ||||
Name = name; | Name = name; | ||||
Description = description; | |||||
Summary = summary; | |||||
Type = type; | Type = type; | ||||
_reader = reader; | _reader = reader; | ||||
IsOptional = isOptional; | IsOptional = isOptional; | ||||
@@ -10,6 +10,8 @@ namespace Discord.Commands | |||||
{ | { | ||||
public CommandService Service { get; } | public CommandService Service { get; } | ||||
public string Name { get; } | public string Name { get; } | ||||
public string Summary { get; } | |||||
public string Description { get; } | |||||
public IEnumerable<Command> Commands { get; } | public IEnumerable<Command> Commands { get; } | ||||
internal object Instance { get; } | internal object Instance { get; } | ||||
@@ -21,6 +23,14 @@ namespace Discord.Commands | |||||
Name = typeInfo.Name; | Name = typeInfo.Name; | ||||
Instance = instance; | Instance = instance; | ||||
var summaryAttr = typeInfo.GetCustomAttribute<SummaryAttribute>(); | |||||
if (summaryAttr != null) | |||||
Summary = summaryAttr.Text; | |||||
var descriptionAttr = typeInfo.GetCustomAttribute<DescriptionAttribute>(); | |||||
if (descriptionAttr != null) | |||||
Description = descriptionAttr.Text; | |||||
List<Command> commands = new List<Command>(); | List<Command> commands = new List<Command>(); | ||||
SearchClass(instance, commands, typeInfo, moduleAttr.Prefix ?? ""); | SearchClass(instance, commands, typeInfo, moduleAttr.Prefix ?? ""); | ||||
Commands = commands; | Commands = commands; | ||||