From 604d69fb7fc36672779bf55c18ceaba0ecb0590b Mon Sep 17 00:00:00 2001 From: Christopher F Date: Sat, 17 Dec 2016 16:34:04 -0500 Subject: [PATCH] Revert "Implement configurable command node separators" --- src/Discord.Net.Commands/CommandService.cs | 8 +-- .../CommandServiceConfig.cs | 2 - src/Discord.Net.Commands/Info/CommandInfo.cs | 2 +- src/Discord.Net.Commands/Info/ModuleInfo.cs | 8 +-- src/Discord.Net.Commands/Map/CommandMap.cs | 12 ++-- .../Map/CommandMapNode.cs | 64 ++++++------------- 6 files changed, 33 insertions(+), 63 deletions(-) diff --git a/src/Discord.Net.Commands/CommandService.cs b/src/Discord.Net.Commands/CommandService.cs index c15fda334..010a0ee8a 100644 --- a/src/Discord.Net.Commands/CommandService.cs +++ b/src/Discord.Net.Commands/CommandService.cs @@ -22,7 +22,6 @@ namespace Discord.Commands internal readonly bool _caseSensitive; internal readonly RunMode _defaultRunMode; - internal readonly char _splitCharacter; public IEnumerable Modules => _moduleDefs.Select(x => x); public IEnumerable Commands => _moduleDefs.SelectMany(x => x.Commands); @@ -61,7 +60,6 @@ namespace Discord.Commands _caseSensitive = config.CaseSensitiveCommands; _defaultRunMode = config.DefaultRunMode; - _splitCharacter = config.CommandSplitCharacter; } //Modules @@ -131,7 +129,7 @@ namespace Discord.Commands _moduleDefs.Add(module); foreach (var command in module.Commands) - _map.AddCommand(command, this); + _map.AddCommand(command); foreach (var submodule in module.Submodules) LoadModuleInternal(submodule); @@ -175,7 +173,7 @@ namespace Discord.Commands return false; foreach (var cmd in module.Commands) - _map.RemoveCommand(cmd, this); + _map.RemoveCommand(cmd); foreach (var submodule in module.Submodules) { @@ -216,7 +214,7 @@ namespace Discord.Commands public SearchResult Search(CommandContext context, string input) { string searchInput = _caseSensitive ? input : input.ToLowerInvariant(); - var matches = _map.GetCommands(searchInput, this).OrderByDescending(x => x.Priority).ToImmutableArray(); + var matches = _map.GetCommands(searchInput).OrderByDescending(x => x.Priority).ToImmutableArray(); if (matches.Length > 0) return SearchResult.FromSuccess(input, matches); diff --git a/src/Discord.Net.Commands/CommandServiceConfig.cs b/src/Discord.Net.Commands/CommandServiceConfig.cs index 7cba56515..8377d4e60 100644 --- a/src/Discord.Net.Commands/CommandServiceConfig.cs +++ b/src/Discord.Net.Commands/CommandServiceConfig.cs @@ -6,7 +6,5 @@ public RunMode DefaultRunMode { get; set; } = RunMode.Sync; /// Should commands be case-sensitive? public bool CaseSensitiveCommands { get; set; } = false; - /// The character which splits commands - public char CommandSplitCharacter { get; set; } = ' '; } } diff --git a/src/Discord.Net.Commands/Info/CommandInfo.cs b/src/Discord.Net.Commands/Info/CommandInfo.cs index 1e41a0aa9..a6ac50005 100644 --- a/src/Discord.Net.Commands/Info/CommandInfo.cs +++ b/src/Discord.Net.Commands/Info/CommandInfo.cs @@ -44,7 +44,7 @@ namespace Discord.Commands // both command and module provide aliases if (module.Aliases.Count > 0 && builder.Aliases.Count > 0) - Aliases = module.Aliases.Permutate(builder.Aliases, (first, second) => second != null ? first + service._splitCharacter + second : first).Select(x => service._caseSensitive ? x : x.ToLowerInvariant()).ToImmutableArray(); + Aliases = module.Aliases.Permutate(builder.Aliases, (first, second) => second != null ? first + " " + second : first).Select(x => service._caseSensitive ? x : x.ToLowerInvariant()).ToImmutableArray(); // only module provides aliases else if (module.Aliases.Count > 0) Aliases = module.Aliases.Select(x => service._caseSensitive ? x : x.ToLowerInvariant()).ToImmutableArray(); diff --git a/src/Discord.Net.Commands/Info/ModuleInfo.cs b/src/Discord.Net.Commands/Info/ModuleInfo.cs index 65417e3fd..ab4f65713 100644 --- a/src/Discord.Net.Commands/Info/ModuleInfo.cs +++ b/src/Discord.Net.Commands/Info/ModuleInfo.cs @@ -30,14 +30,14 @@ namespace Discord.Commands Remarks = builder.Remarks; Parent = parent; - Aliases = BuildAliases(builder, service).ToImmutableArray(); + Aliases = BuildAliases(builder).ToImmutableArray(); Commands = builder.Commands.Select(x => x.Build(this, service)); Preconditions = BuildPreconditions(builder).ToImmutableArray(); Submodules = BuildSubmodules(builder, service).ToImmutableArray(); } - private static IEnumerable BuildAliases(ModuleBuilder builder, CommandService service) + private static IEnumerable BuildAliases(ModuleBuilder builder) { IEnumerable result = null; @@ -60,9 +60,9 @@ namespace Discord.Commands result = level.Aliases.ToList(); //create a shallow copy so we don't overwrite the builder unexpectedly } else if (result.Count() > level.Aliases.Count) - result = result.Permutate(level.Aliases, (first, second) => first + service._splitCharacter + second); + result = result.Permutate(level.Aliases, (first, second) => first + " " + second); else - result = level.Aliases.Permutate(result, (second, first) => first + service._splitCharacter + second); + result = level.Aliases.Permutate(result, (second, first) => first + " " + second); } if (result == null) //there were no aliases; default to an empty list diff --git a/src/Discord.Net.Commands/Map/CommandMap.cs b/src/Discord.Net.Commands/Map/CommandMap.cs index 2478f488d..3a5239878 100644 --- a/src/Discord.Net.Commands/Map/CommandMap.cs +++ b/src/Discord.Net.Commands/Map/CommandMap.cs @@ -12,20 +12,20 @@ namespace Discord.Commands _root = new CommandMapNode(""); } - public void AddCommand(CommandInfo command, CommandService service) + public void AddCommand(CommandInfo command) { foreach (string text in GetAliases(command)) - _root.AddCommand(service, text, 0, command); + _root.AddCommand(text, 0, command); } - public void RemoveCommand(CommandInfo command, CommandService service) + public void RemoveCommand(CommandInfo command) { foreach (string text in GetAliases(command)) - _root.RemoveCommand(service, text, 0, command); + _root.RemoveCommand(text, 0, command); } - public IEnumerable GetCommands(string text, CommandService service) + public IEnumerable GetCommands(string text) { - return _root.GetCommands(service, text, 0); + return _root.GetCommands(text, 0); } private IReadOnlyList GetAliases(CommandInfo command) diff --git a/src/Discord.Net.Commands/Map/CommandMapNode.cs b/src/Discord.Net.Commands/Map/CommandMapNode.cs index c1365f963..a86c0643d 100644 --- a/src/Discord.Net.Commands/Map/CommandMapNode.cs +++ b/src/Discord.Net.Commands/Map/CommandMapNode.cs @@ -23,9 +23,9 @@ namespace Discord.Commands _commands = ImmutableArray.Create(); } - public void AddCommand(CommandService service, string text, int index, CommandInfo command) + public void AddCommand(string text, int index, CommandInfo command) { - int nextSpace = NextWhitespace(service, text, index); + int nextSpace = NextWhitespace(text, index); string name; lock (_lockObj) @@ -44,13 +44,13 @@ namespace Discord.Commands name = text.Substring(index, nextSpace - index); var nextNode = _nodes.GetOrAdd(name, x => new CommandMapNode(x)); - nextNode.AddCommand(service, nextSpace == -1 ? "" : text, nextSpace + 1, command); + nextNode.AddCommand(nextSpace == -1 ? "" : text, nextSpace + 1, command); } } } - public void RemoveCommand(CommandService service, string text, int index, CommandInfo command) + public void RemoveCommand(string text, int index, CommandInfo command) { - int nextSpace = NextWhitespace(service, text, index); + int nextSpace = NextWhitespace(text, index); string name; lock (_lockObj) @@ -67,7 +67,7 @@ namespace Discord.Commands CommandMapNode nextNode; if (_nodes.TryGetValue(name, out nextNode)) { - nextNode.RemoveCommand(service, nextSpace == -1 ? "" : text, nextSpace + 1, command); + nextNode.RemoveCommand(nextSpace == -1 ? "" : text, nextSpace + 1, command); if (nextNode.IsEmpty) _nodes.TryRemove(name, out nextNode); } @@ -75,57 +75,32 @@ namespace Discord.Commands } } - public IEnumerable GetCommands(CommandService service, string text, int index) + public IEnumerable GetCommands(string text, int index) { - int nextCommand = NextCommandSegment(service, text, index); - string name = null; + int nextSpace = NextWhitespace(text, index); + string name; - //got all command segments or base-level command - if (nextCommand == -1) - { - var commands = _commands; - for (int i = 0; i < commands.Length; i++) - yield return _commands[i]; + var commands = _commands; + for (int i = 0; i < commands.Length; i++) + yield return _commands[i]; - //are we a base-level command? - int nextSpace = NextWhitespace(service, text, index); - if (nextSpace != -1) - { - name = text.Substring(index, nextSpace - index); - } - else - { - name = text.Substring(index); - } - } - else + if (text != "") { - name = text.Substring(index, nextCommand - index); - } + if (nextSpace == -1) + name = text.Substring(index); + else + name = text.Substring(index, nextSpace - index); - if (name != null) - { CommandMapNode nextNode; if (_nodes.TryGetValue(name, out nextNode)) { - foreach (var cmd in nextNode.GetCommands(service, text, nextCommand + 1)) + foreach (var cmd in nextNode.GetCommands(nextSpace == -1 ? "" : text, nextSpace + 1)) yield return cmd; } } } - private static int NextCommandSegment(CommandService service, string text, int startIndex) - { - int lowest = int.MaxValue; - - int index = text.IndexOf(service._splitCharacter, startIndex); - if (index != -1 && index < lowest) - lowest = index; - - return (lowest != int.MaxValue) ? lowest : -1; - } - - private static int NextWhitespace(CommandService service, string text, int startIndex) + private static int NextWhitespace(string text, int startIndex) { int lowest = int.MaxValue; for (int i = 0; i < _whitespaceChars.Length; i++) @@ -134,7 +109,6 @@ namespace Discord.Commands if (index != -1 && index < lowest) lowest = index; } - return (lowest != int.MaxValue) ? lowest : -1; } }