@@ -46,11 +46,11 @@ | |||
<Compile Include="..\Discord.Net.Commands\CommandParser.cs"> | |||
<Link>CommandParser.cs</Link> | |||
</Compile> | |||
<Compile Include="..\Discord.Net.Commands\DiscordBotClient.cs"> | |||
<Link>DiscordBotClient.cs</Link> | |||
<Compile Include="..\Discord.Net.Commands\CommandsPlugin.cs"> | |||
<Link>CommandsPlugin.cs</Link> | |||
</Compile> | |||
<Compile Include="..\Discord.Net.Commands\DiscordBotClient.Events.cs"> | |||
<Link>DiscordBotClient.Events.cs</Link> | |||
<Compile Include="..\Discord.Net.Commands\CommandsPlugin.Events.cs"> | |||
<Link>CommandsPlugin.Events.cs</Link> | |||
</Compile> | |||
<Compile Include="Properties\AssemblyInfo.cs" /> | |||
</ItemGroup> | |||
@@ -71,13 +71,13 @@ namespace Discord.Commands | |||
} | |||
public sealed class CommandGroupBuilder | |||
{ | |||
private readonly DiscordBotClient _client; | |||
private readonly CommandsPlugin _plugin; | |||
private readonly string _prefix; | |||
private int _defaultMinPermissions; | |||
internal CommandGroupBuilder(DiscordBotClient client, string prefix, int defaultMinPermissions) | |||
internal CommandGroupBuilder(CommandsPlugin plugin, string prefix, int defaultMinPermissions) | |||
{ | |||
_client = client; | |||
_plugin = plugin; | |||
_prefix = prefix; | |||
_defaultMinPermissions = defaultMinPermissions; | |||
} | |||
@@ -89,7 +89,7 @@ namespace Discord.Commands | |||
public CommandGroupBuilder CreateCommandGroup(string cmd, Action<CommandGroupBuilder> config = null) | |||
{ | |||
config(new CommandGroupBuilder(_client, _prefix + ' ' + cmd, _defaultMinPermissions)); | |||
config(new CommandGroupBuilder(_plugin, _prefix + ' ' + cmd, _defaultMinPermissions)); | |||
return this; | |||
} | |||
public CommandBuilder CreateCommand() | |||
@@ -98,7 +98,7 @@ namespace Discord.Commands | |||
{ | |||
var command = new Command(cmd != "" ? _prefix + ' ' + cmd : _prefix); | |||
command.MinPerms = _defaultMinPermissions; | |||
_client._commands.Add(command); | |||
_plugin._commands.Add(command); | |||
return new CommandBuilder(command); | |||
} | |||
} | |||
@@ -1,7 +1,6 @@ | |||
using Discord.Commands; | |||
using System; | |||
using System; | |||
namespace Discord | |||
namespace Discord.Commands | |||
{ | |||
public class PermissionException : Exception { public PermissionException() : base("User does not have permission to run this command.") { } } | |||
public class CommandEventArgs | |||
@@ -38,7 +37,7 @@ namespace Discord | |||
Exception = ex; | |||
} | |||
} | |||
public partial class DiscordBotClient : DiscordClient | |||
public partial class CommandsPlugin | |||
{ | |||
public event EventHandler<CommandEventArgs> RanCommand; | |||
private void RaiseRanCommand(CommandEventArgs args) |
@@ -1,13 +1,13 @@ | |||
using Discord.Commands; | |||
using System; | |||
using System; | |||
using System.Collections.Generic; | |||
namespace Discord | |||
namespace Discord.Commands | |||
{ | |||
/// <summary> A Discord.Net client with extensions for handling common bot operations like text commands. </summary> | |||
public partial class DiscordBotClient : DiscordClient | |||
public partial class CommandsPlugin | |||
{ | |||
internal List<Command> _commands; | |||
private Func<User, Server, int> _getPermissions; | |||
public IEnumerable<Command> Commands => _commands; | |||
@@ -16,24 +16,27 @@ namespace Discord | |||
public bool RequireCommandCharInPublic { get; set; } | |||
public bool RequireCommandCharInPrivate { get; set; } | |||
public DiscordBotClient(DiscordClientConfig config = null, Func<User, Server, int> getPermissions = null) | |||
: base(config) | |||
public CommandsPlugin(Func<User, Server, int> getPermissions = null) | |||
{ | |||
_getPermissions = getPermissions; | |||
_commands = new List<Command>(); | |||
CommandChar = '~'; | |||
UseCommandChar = true; | |||
CommandChar = '/'; | |||
UseCommandChar = false; | |||
RequireCommandCharInPublic = true; | |||
RequireCommandCharInPrivate = true; | |||
} | |||
MessageCreated += async (s, e) => | |||
public void Install(DiscordClient client) | |||
{ | |||
client.MessageCreated += async (s, e) => | |||
{ | |||
//If commands aren't being used, don't bother processing them | |||
if (_commands.Count == 0) | |||
return; | |||
//Ignore messages from ourselves | |||
if (e.Message.UserId == CurrentUserId) | |||
if (e.Message.UserId == client.CurrentUserId) | |||
return; | |||
//Check for the command character | |||
@@ -87,7 +90,7 @@ namespace Discord | |||
newArgs[j] = args[j + cmd.Parts.Length]; | |||
//Check Permissions | |||
int permissions = getPermissions != null ? getPermissions(e.Message.User, e.Message.Channel?.Server) : 0; | |||
int permissions = _getPermissions != null ? _getPermissions(e.Message.User, e.Message.Channel?.Server) : 0; | |||
var eventArgs = new CommandEventArgs(e.Message, cmd, msg, permissions, newArgs); | |||
if (permissions < cmd.MinPerms) | |||
{ |