Merge pull request #285 from FiniteReality/issue/264

Add PriorityAttribute and sort commands by priority in CommandService
This commit is contained in:
RogueException
2016-09-20 17:48:16 -03:00
committed by GitHub
3 changed files with 23 additions and 1 deletions

View File

@@ -0,0 +1,18 @@
using System;
namespace Discord.Commands
{
/// <summary> Sets priority of commands </summary>
[AttributeUsage(AttributeTargets.Method)]
public class PriorityAttribute : Attribute
{
/// <summary> The priority which has been set for the command </summary>
public int Priority { get; }
/// <summary> Creates a new <see cref="PriorityAttribute"/> with the given priority. </summary>
public PriorityAttribute(int priority)
{
Priority = priority;
}
}
}

View File

@@ -24,6 +24,7 @@ namespace Discord.Commands
public string Summary { get; }
public string Remarks { get; }
public string Text { get; }
public int Priority { get; }
public bool HasVarArgs { get; }
public IReadOnlyList<string> Aliases { get; }
public IReadOnlyList<CommandParameter> Parameters { get; }
@@ -70,6 +71,9 @@ namespace Discord.Commands
if (remarksAttr != null)
Remarks = remarksAttr.Text;
var priorityAttr = source.GetCustomAttribute<PriorityAttribute>();
Priority = priorityAttr?.Priority ?? 0;
Parameters = BuildParameters(source);
HasVarArgs = Parameters.Count > 0 ? Parameters[Parameters.Count - 1].IsMultiple : false;
Preconditions = BuildPreconditions(source);

View File

@@ -180,7 +180,7 @@ namespace Discord.Commands
public SearchResult Search(IUserMessage message, string input)
{
string lowerInput = input.ToLowerInvariant();
var matches = _map.GetCommands(input).ToImmutableArray();
var matches = _map.GetCommands(input).OrderByDescending(x => x.Priority).ToImmutableArray();
if (matches.Length > 0)
return SearchResult.FromSuccess(input, matches);