Cleaned up extension projects, added fluent extension methods

This commit is contained in:
RogueException
2016-01-05 00:11:35 -04:00
parent 55ed6cd783
commit 55c5f0dade
29 changed files with 303 additions and 343 deletions

View File

@@ -2,7 +2,12 @@
{
public static class CommandExtensions
{
public static CommandService Commands(this DiscordClient client, bool required = true)
public static DiscordClient UsingCommands(this DiscordClient client, CommandServiceConfig config = null)
{
client.Services.Add(new CommandService(config));
return client;
}
public static CommandService Commands(this DiscordClient client, bool required = true)
=> client.Services.Get<CommandService>(required);
}
}

View File

@@ -21,13 +21,13 @@ namespace Discord.Commands
//Groups store all commands by their module, used for more informative help
internal IEnumerable<CommandMap> Categories => _categories.Values;
public event EventHandler<CommandEventArgs> Command = delegate { };
public event EventHandler<CommandErrorEventArgs> CommandError = delegate { };
public event EventHandler<CommandEventArgs> CommandExecuted = delegate { };
public event EventHandler<CommandErrorEventArgs> CommandErrored = delegate { };
private void OnCommand(CommandEventArgs args)
=> Command(this, args);
=> CommandExecuted(this, args);
private void OnCommandError(CommandErrorType errorType, CommandEventArgs args, Exception ex = null)
=> CommandError(this, new CommandErrorEventArgs(errorType, args, ex));
=> CommandErrored(this, new CommandErrorEventArgs(errorType, args, ex));
public CommandService(CommandServiceConfig config)
{

View File

@@ -1,8 +1,16 @@
namespace Discord.Commands.Permissions.Levels
using System;
namespace Discord.Commands.Permissions.Levels
{
public static class PermissionLevelExtensions
{
public static CommandBuilder MinPermissions(this CommandBuilder builder, int minPermissions)
public static DiscordClient UsingPermissionLevels(this DiscordClient client, Func<User, Channel, int> permissionResolver)
{
client.Services.Add(new PermissionLevelService(permissionResolver));
return client;
}
public static CommandBuilder MinPermissions(this CommandBuilder builder, int minPermissions)
{
builder.AddCheck(new PermissionLevelChecker(builder.Service.Client, minPermissions));
return builder;

View File

@@ -1,8 +1,14 @@
namespace Discord.Commands.Permissions.Userlist
{
public static class BlacklistExtensions
{
public static CommandBuilder UseGlobalBlacklist(this CommandBuilder builder)
{
public static DiscordClient UsingGlobalBlacklist(this DiscordClient client, params ulong[] initialUserIds)
{
client.Services.Add(new BlacklistService(initialUserIds));
return client;
}
public static CommandBuilder UseGlobalBlacklist(this CommandBuilder builder)
{
builder.AddCheck(new BlacklistChecker(builder.Service.Client));
return builder;

View File

@@ -1,17 +1,13 @@
using System.Collections.Generic;
namespace Discord.Commands.Permissions.Userlist
namespace Discord.Commands.Permissions.Userlist
{
public class BlacklistService : UserlistService
{
public BlacklistService(IEnumerable<ulong> initialList = null)
public BlacklistService(params ulong[] initialList)
: base(initialList)
{
}
public bool CanRun(User user)
{
return !_userList.ContainsKey(user.Id);
}
=> !_userList.ContainsKey(user.Id);
}
}

View File

@@ -13,12 +13,11 @@ namespace Discord.Commands.Permissions.Userlist
public DiscordClient Client => _client;
public IEnumerable<ulong> UserIds => _userList.Select(x => x.Key);
public UserlistService(IEnumerable<ulong> initialList = null)
public UserlistService(params ulong[] initialUserIds)
{
if (initialList != null)
_userList = new ConcurrentDictionary<ulong, bool>(initialList.Select(x => new KeyValuePair<ulong, bool>(x, true)));
else
_userList = new ConcurrentDictionary<ulong, bool>();
_userList = new ConcurrentDictionary<ulong, bool>();
for (int i = 0; i < initialUserIds.Length; i++)
_userList.TryAdd(initialUserIds[i], true);
}
public void Add(User user)
@@ -31,6 +30,7 @@ namespace Discord.Commands.Permissions.Userlist
{
_userList[userId] = true;
}
public bool Remove(User user)
{
if (user == null) throw new ArgumentNullException(nameof(user));
@@ -44,7 +44,7 @@ namespace Discord.Commands.Permissions.Userlist
return _userList.TryRemove(userId, out ignored);
}
public void Install(DiscordClient client)
void IService.Install(DiscordClient client)
{
_client = client;
}

View File

@@ -1,8 +1,14 @@
namespace Discord.Commands.Permissions.Userlist
{
public static class WhitelistExtensions
{
public static CommandBuilder UseGlobalWhitelist(this CommandBuilder builder)
{
public static DiscordClient UsingGlobalWhitelist(this DiscordClient client, params ulong[] initialUserIds)
{
client.Services.Add(new WhitelistService(initialUserIds));
return client;
}
public static CommandBuilder UseGlobalWhitelist(this CommandBuilder builder)
{
builder.AddCheck(new WhitelistChecker(builder.Service.Client));
return builder;

View File

@@ -1,17 +1,13 @@
using System.Collections.Generic;
namespace Discord.Commands.Permissions.Userlist
namespace Discord.Commands.Permissions.Userlist
{
public class WhitelistService : UserlistService
{
public WhitelistService(IEnumerable<ulong> initialList = null)
public WhitelistService(params ulong[] initialList)
: base(initialList)
{
}
public bool CanRun(User user)
{
return _userList.ContainsKey(user.Id);
}
=> _userList.ContainsKey(user.Id);
}
}

View File

@@ -1,8 +1,8 @@
namespace Discord.Commands.Permissions.Visibility
{
public static class PrivateExtensions
{
public static CommandBuilder PrivateOnly(this CommandBuilder builder)
{
public static CommandBuilder PrivateOnly(this CommandBuilder builder)
{
builder.AddCheck(new PrivateChecker());
return builder;