|
|
@@ -511,7 +511,6 @@ namespace Discord.Commands |
|
|
|
await _commandExecutedEvent.InvokeAsync(Optional.Create<CommandInfo>(), context, searchResult).ConfigureAwait(false); |
|
|
|
return searchResult; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
var commands = searchResult.Commands; |
|
|
|
var preconditionResults = new Dictionary<CommandMatch, PreconditionResult>(); |
|
|
@@ -559,24 +558,6 @@ namespace Discord.Commands |
|
|
|
parseResultsDict[pair.Key] = parseResult; |
|
|
|
} |
|
|
|
|
|
|
|
// Calculates the 'score' of a command given a parse result |
|
|
|
float CalculateScore(CommandMatch match, ParseResult parseResult) |
|
|
|
{ |
|
|
|
float argValuesScore = 0, paramValuesScore = 0; |
|
|
|
|
|
|
|
if (match.Command.Parameters.Count > 0) |
|
|
|
{ |
|
|
|
var argValuesSum = parseResult.ArgValues?.Sum(x => x.Values.OrderByDescending(y => y.Score).FirstOrDefault().Score) ?? 0; |
|
|
|
var paramValuesSum = parseResult.ParamValues?.Sum(x => x.Values.OrderByDescending(y => y.Score).FirstOrDefault().Score) ?? 0; |
|
|
|
|
|
|
|
argValuesScore = argValuesSum / match.Command.Parameters.Count; |
|
|
|
paramValuesScore = paramValuesSum / match.Command.Parameters.Count; |
|
|
|
} |
|
|
|
|
|
|
|
var totalArgsScore = (argValuesScore + paramValuesScore) / 2; |
|
|
|
return match.Command.Priority + totalArgsScore * 0.99f; |
|
|
|
} |
|
|
|
|
|
|
|
//Order the parse results by their score so that we choose the most likely result to execute |
|
|
|
var parseResults = parseResultsDict |
|
|
|
.OrderByDescending(x => CalculateScore(x.Key, x.Value)); |
|
|
@@ -603,6 +584,24 @@ namespace Discord.Commands |
|
|
|
return result; |
|
|
|
} |
|
|
|
|
|
|
|
// Calculates the 'score' of a command given a parse result |
|
|
|
float CalculateScore(CommandMatch match, ParseResult parseResult) |
|
|
|
{ |
|
|
|
float argValuesScore = 0, paramValuesScore = 0; |
|
|
|
|
|
|
|
if (match.Command.Parameters.Count > 0) |
|
|
|
{ |
|
|
|
var argValuesSum = parseResult.ArgValues?.Sum(x => x.Values.OrderByDescending(y => y.Score).FirstOrDefault().Score) ?? 0; |
|
|
|
var paramValuesSum = parseResult.ParamValues?.Sum(x => x.Values.OrderByDescending(y => y.Score).FirstOrDefault().Score) ?? 0; |
|
|
|
|
|
|
|
argValuesScore = argValuesSum / match.Command.Parameters.Count; |
|
|
|
paramValuesScore = paramValuesSum / match.Command.Parameters.Count; |
|
|
|
} |
|
|
|
|
|
|
|
var totalArgsScore = (argValuesScore + paramValuesScore) / 2; |
|
|
|
return match.Command.Priority + totalArgsScore * 0.99f; |
|
|
|
} |
|
|
|
|
|
|
|
protected virtual void Dispose(bool disposing) |
|
|
|
{ |
|
|
|
if (!_isDisposed) |
|
|
|