Browse Source

Hide aliases from default help

tags/docs-0.9
RogueException 9 years ago
parent
commit
f046ed1ca7
2 changed files with 30 additions and 35 deletions
  1. +21
    -15
      src/Discord.Net.Commands/CommandMap.cs
  2. +9
    -20
      src/Discord.Net.Commands/CommandService.cs

+ 21
- 15
src/Discord.Net.Commands/CommandMap.cs View File

@@ -1,5 +1,4 @@
using System;
using System.Collections.Generic;
using System.Collections.Generic;


namespace Discord.Commands namespace Discord.Commands
{ {
@@ -11,15 +10,15 @@ namespace Discord.Commands


private readonly List<Command> _commands; private readonly List<Command> _commands;
private readonly Dictionary<string, CommandMap> _items; private readonly Dictionary<string, CommandMap> _items;
private bool _isHidden;
private bool _isVisible, _hasNonAliases, _hasSubGroups;


public string Name => _name; public string Name => _name;
public string FullName => _fullName; public string FullName => _fullName;
public bool IsHidden => _isHidden;
public bool IsVisible => _isVisible;
public bool HasNonAliases => _hasNonAliases;
public bool HasSubGroups => _hasSubGroups;
public IEnumerable<Command> Commands => _commands; public IEnumerable<Command> Commands => _commands;
public IEnumerable<CommandMap> SubGroups => _items.Values; public IEnumerable<CommandMap> SubGroups => _items.Values;
/*public IEnumerable<Command> SubCommands => _items.Select(x => x.Value._command).Where(x => x != null);
public IEnumerable<CommandMap> SubGroups => _items.Select(x => x.Value).Where(x => x._items.Count > 0);*/


public CommandMap(CommandMap parent, string name, string fullName) public CommandMap(CommandMap parent, string name, string fullName)
{ {
@@ -28,7 +27,9 @@ namespace Discord.Commands
_fullName = fullName; _fullName = fullName;
_items = new Dictionary<string, CommandMap>(); _items = new Dictionary<string, CommandMap>();
_commands = new List<Command>(); _commands = new List<Command>();
_isHidden = true;
_isVisible = false;
_hasNonAliases = false;
_hasSubGroups = false;
} }
public CommandMap GetItem(string text) public CommandMap GetItem(string text)
@@ -81,29 +82,34 @@ namespace Discord.Commands
return null; return null;
} }


public void AddCommand(string text, Command command)
public void AddCommand(string text, Command command, bool isAlias)
{ {
AddCommand(0, text.Split(' '), command);
AddCommand(0, text.Split(' '), command, isAlias);
} }
private void AddCommand(int index, string[] parts, Command command)
private void AddCommand(int index, string[] parts, Command command, bool isAlias)
{ {
if (!command.IsHidden && _isHidden)
_isHidden = false;
if (!command.IsHidden)
_isVisible = true;


if (index != parts.Length) if (index != parts.Length)
{ {
CommandMap nextGroup; CommandMap nextGroup;
string name = parts[index].ToLowerInvariant(); string name = parts[index].ToLowerInvariant();
string fullName = string.Join(" ", parts, 0, index + 1); string fullName = string.Join(" ", parts, 0, index + 1);
if (!_items.TryGetValue(name, out nextGroup))
if (!_items.TryGetValue(name, out nextGroup))
{ {
nextGroup = new CommandMap(this, name, fullName); nextGroup = new CommandMap(this, name, fullName);
_items.Add(name, nextGroup); _items.Add(name, nextGroup);
_hasSubGroups = true;
} }
nextGroup.AddCommand(index + 1, parts, command);
}
nextGroup.AddCommand(index + 1, parts, command, isAlias);
}
else else
{
_commands.Add(command); _commands.Add(command);
if (!isAlias)
_hasNonAliases = true;
}
} }


public bool CanRun(User user, Channel channel, out string error) public bool CanRun(User user, Channel channel, out string error)


+ 9
- 20
src/Discord.Net.Commands/CommandService.cs View File

@@ -60,8 +60,7 @@ namespace Discord.Commands
else else
await client.SendMessage(replyChannel, "Unable to display help: Unknown command."); await client.SendMessage(replyChannel, "Unable to display help: Unknown command.");
} }
else //Show general help
else //Show general help
await ShowGeneralHelp(e.User, e.Channel, replyChannel); await ShowGeneralHelp(e.User, e.Channel, replyChannel);
})); }));
} }
@@ -143,16 +142,6 @@ namespace Discord.Commands
public Task ShowGeneralHelp(User user, Channel channel, Channel replyChannel = null) public Task ShowGeneralHelp(User user, Channel channel, Channel replyChannel = null)
{ {
StringBuilder output = new StringBuilder(); StringBuilder output = new StringBuilder();
/*output.AppendLine("These are the commands you can use:");
output.Append(string.Join(", ", _map.SubCommands
.Where(x => x.CanRun(user, channel) && !x.IsHidden)
.Select(x => '`' + x.Text + '`' +
(x.Aliases.Count() > 0 ? ", `" + string.Join("`, `", x.Aliases) + '`' : ""))));
output.AppendLine("\nThese are the groups you can access:");
output.Append(string.Join(", ", _map.SubGroups
.Where(x => /*x.CanRun(user, channel)*//* && !x.IsHidden)
.Select(x => '`' + x.Text + '`')));*/

bool isFirstCategory = true; bool isFirstCategory = true;
foreach (var category in _categories) foreach (var category in _categories)
{ {
@@ -160,9 +149,9 @@ namespace Discord.Commands
foreach (var group in category.Value.SubGroups) foreach (var group in category.Value.SubGroups)
{ {
string error; string error;
if (!group.IsHidden && group.CanRun(user, channel, out error))
if (group.IsVisible && (group.HasSubGroups || group.HasNonAliases) && group.CanRun(user, channel, out error))
{ {
if (isFirstItem)
if (isFirstItem)
{ {
isFirstItem = false; isFirstItem = false;
//This is called for the first item in each category. If we never get here, we dont bother writing the header for a category type (since it's empty) //This is called for the first item in each category. If we never get here, we dont bother writing the header for a category type (since it's empty)
@@ -184,7 +173,7 @@ namespace Discord.Commands
output.Append(", "); output.Append(", ");
output.Append('`'); output.Append('`');
output.Append(group.Name); output.Append(group.Name);
if (group.SubGroups.Any())
if (group.HasSubGroups)
output.Append("*"); output.Append("*");
output.Append('`'); output.Append('`');
} }
@@ -244,7 +233,7 @@ namespace Discord.Commands
} }


bool isFirstSubCmd = true; bool isFirstSubCmd = true;
foreach (var subCmd in map.SubGroups.Where(x => x.CanRun(user, channel, out error) && !x.IsHidden))
foreach (var subCmd in map.SubGroups.Where(x => x.CanRun(user, channel, out error) && !x.IsVisible))
{ {
if (isFirstSubCmd) if (isFirstSubCmd)
{ {
@@ -324,14 +313,14 @@ namespace Discord.Commands
} }


//Add main command //Add main command
category.AddCommand(command.Text, command);
_map.AddCommand(command.Text, command);
category.AddCommand(command.Text, command, false);
_map.AddCommand(command.Text, command, false);


//Add aliases //Add aliases
foreach (var alias in command.Aliases) foreach (var alias in command.Aliases)
{ {
category.AddCommand(alias, command);
_map.AddCommand(alias, command);
category.AddCommand(alias, command, true);
_map.AddCommand(alias, command, true);
} }
} }
} }


Loading…
Cancel
Save