@@ -9,7 +9,9 @@ namespace Discord.Commands
/// <summary> A Discord.Net client with extensions for handling common bot operations like text commands. </summary>
public partial class CommandService : IService
{
private readonly CommandServiceConfig _config;
private const string DefaultPermissionError = "You do not have permission to access this command.";
private readonly CommandServiceConfig _config;
private readonly CommandGroupBuilder _root;
private DiscordClient _client;
@@ -119,9 +121,10 @@ After:
var eventArgs = new CommandEventArgs(e.Message, command, args);
// Check permissions
if (!command.CanRun(eventArgs.User, eventArgs.Channel))
string errorText;
if (!command.CanRun(eventArgs.User, eventArgs.Channel, out errorText))
{
RaiseCommandError(CommandErrorType.BadPermissions, eventArgs);
RaiseCommandError(CommandErrorType.BadPermissions, eventArgs, new Exception(errorText ?? DefaultPermissionError) );
return;
}
@@ -162,7 +165,8 @@ After:
bool isFirstItem = true;
foreach (var group in category.Value.SubGroups)
{
if (!group.IsHidden && group.CanRun(user, channel))
string error;
if (!group.IsHidden && group.CanRun(user, channel, out error))
{
if (isFirstItem)
{
@@ -221,15 +225,21 @@ After:
IEnumerable<Command> cmds = map.Commands;
bool isFirstCmd = true;
string error;
if (cmds != null)
{
foreach (var cmd in cmds)
{
if (isFirstCmd)
isFirstCmd = false;
/*else
output.AppendLine();*/
ShowCommandHelpInternal(cmd, user, channel, output);
if (!cmd.CanRun(user, channel, out error)) { }
//output.AppendLine(error ?? DefaultPermissionError);
else
{
if (isFirstCmd)
isFirstCmd = false;
else
output.AppendLine();
ShowCommandHelpInternal(cmd, user, channel, output);
}
}
}
else
@@ -240,7 +250,7 @@ After:
}
bool isFirstSubCmd = true;
foreach (var subCmd in map.SubGroups.Where(x => x.CanRun(user, channel) && !x.IsHidden))
foreach (var subCmd in map.SubGroups.Where(x => x.CanRun(user, channel, out error ) && !x.IsHidden))
{
if (isFirstSubCmd)
{
@@ -259,7 +269,7 @@ After:
if (isFirstCmd && isFirstSubCmd) //Had no commands and no subcommands
{
output.Clear();
output.AppendLine("You do not have permission to access this command .");
output.AppendLine("There are no commands you have permission to run .");
}
return _client.SendMessage(replyChannel ?? channel, output.ToString());
@@ -267,8 +277,9 @@ After:
public Task ShowCommandHelp(Command command, User user, Channel channel, Channel replyChannel = null)
{
StringBuilder output = new StringBuilder();
if (!command.CanRun(user, channel))
output.AppendLine("You do not have permission to access this command.");
string error;
if (!command.CanRun(user, channel, out error))
output.AppendLine(error ?? DefaultPermissionError);
else
ShowCommandHelpInternal(command, user, channel, output);
return _client.SendMessage(replyChannel ?? channel, output.ToString());