Added GenericPermissionChecker, PublicChecker and PrivateChecker
This commit is contained in:
@@ -61,6 +61,9 @@
|
||||
<Compile Include="..\Discord.Net.Commands\CommandServiceConfig.cs">
|
||||
<Link>CommandServiceConfig.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="..\Discord.Net.Commands\Permissions\GenericPermissionChecker.cs">
|
||||
<Link>Permissions\GenericPermissionChecker.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="..\Discord.Net.Commands\Permissions\IPermissionChecker.cs">
|
||||
<Link>Permissions\IPermissionChecker.cs</Link>
|
||||
</Compile>
|
||||
@@ -94,6 +97,18 @@
|
||||
<Compile Include="..\Discord.Net.Commands\Permissions\Userlist\WhitelistService.cs">
|
||||
<Link>Permissions\Userlist\WhitelistService.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="..\Discord.Net.Commands\Permissions\Visibility\PrivateChecker.cs">
|
||||
<Link>Permissions\Visibility\PrivateChecker.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="..\Discord.Net.Commands\Permissions\Visibility\PrivateExtensions.cs">
|
||||
<Link>Permissions\Visibility\PrivateExtensions.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="..\Discord.Net.Commands\Permissions\Visibility\PublicChecker.cs">
|
||||
<Link>Permissions\Visibility\PublicChecker.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="..\Discord.Net.Commands\Permissions\Visibility\PublicExtensions.cs">
|
||||
<Link>Permissions\Visibility\PublicExtensions.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
|
||||
@@ -74,6 +74,11 @@ namespace Discord.Commands
|
||||
_checks.Add(check);
|
||||
return this;
|
||||
}
|
||||
public CommandBuilder AddCheck(Func<Command, User, Channel, bool> checkFunc)
|
||||
{
|
||||
_checks.Add(new GenericPermissionChecker(checkFunc));
|
||||
return this;
|
||||
}
|
||||
|
||||
public void Do(Func<CommandEventArgs, Task> func)
|
||||
{
|
||||
@@ -129,9 +134,13 @@ namespace Discord.Commands
|
||||
_category = category;
|
||||
return this;
|
||||
}
|
||||
public void AddCheck(IPermissionChecker check)
|
||||
public void AddCheck(IPermissionChecker checker)
|
||||
{
|
||||
_checks.Add(check);
|
||||
_checks.Add(checker);
|
||||
}
|
||||
public void AddCheck(Func<Command, User, Channel, bool> checkFunc)
|
||||
{
|
||||
_checks.Add(new GenericPermissionChecker(checkFunc));
|
||||
}
|
||||
|
||||
public CommandGroupBuilder CreateGroup(string cmd, Action<CommandGroupBuilder> config = null)
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
using System;
|
||||
|
||||
namespace Discord.Commands.Permissions
|
||||
{
|
||||
internal class GenericPermissionChecker : IPermissionChecker
|
||||
{
|
||||
private readonly Func<Command, User, Channel, bool> _checkFunc;
|
||||
|
||||
public GenericPermissionChecker(Func<Command, User, Channel, bool> checkFunc)
|
||||
{
|
||||
_checkFunc = checkFunc;
|
||||
}
|
||||
|
||||
public bool CanRun(Command command, User user, Channel channel, out string error)
|
||||
{
|
||||
error = null; //Use default error text.
|
||||
return _checkFunc(command, user, channel);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
namespace Discord.Commands.Permissions.Visibility
|
||||
{
|
||||
public class PrivateChecker : IPermissionChecker
|
||||
{
|
||||
internal PrivateChecker() { }
|
||||
|
||||
public bool CanRun(Command command, User user, Channel channel, out string error)
|
||||
{
|
||||
if (!user.IsPrivate)
|
||||
{
|
||||
error = "This command may only be run in a private chat.";
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
error = null;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
namespace Discord.Commands.Permissions.Visibility
|
||||
{
|
||||
public static class PrivateExtensions
|
||||
{
|
||||
public static CommandBuilder PrivateOnly(this CommandBuilder builder)
|
||||
{
|
||||
builder.AddCheck(new PrivateChecker());
|
||||
return builder;
|
||||
}
|
||||
public static CommandGroupBuilder PrivateOnly(this CommandGroupBuilder builder)
|
||||
{
|
||||
builder.AddCheck(new PrivateChecker());
|
||||
return builder;
|
||||
}
|
||||
public static CommandService PrivateOnly(this CommandService service)
|
||||
{
|
||||
service.Root.AddCheck(new PrivateChecker());
|
||||
return service;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
namespace Discord.Commands.Permissions.Visibility
|
||||
{
|
||||
public class PublicChecker : IPermissionChecker
|
||||
{
|
||||
internal PublicChecker() { }
|
||||
|
||||
public bool CanRun(Command command, User user, Channel channel, out string error)
|
||||
{
|
||||
if (user.IsPrivate)
|
||||
{
|
||||
error = "This command can't be run in n a private chat.";
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
error = null;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
namespace Discord.Commands.Permissions.Visibility
|
||||
{
|
||||
public static class PublicExtensions
|
||||
{
|
||||
public static CommandBuilder PublicOnly(this CommandBuilder builder)
|
||||
{
|
||||
builder.AddCheck(new PublicChecker());
|
||||
return builder;
|
||||
}
|
||||
public static CommandGroupBuilder PublicOnly(this CommandGroupBuilder builder)
|
||||
{
|
||||
builder.AddCheck(new PublicChecker());
|
||||
return builder;
|
||||
}
|
||||
public static CommandService PublicOnly(this CommandService service)
|
||||
{
|
||||
service.Root.AddCheck(new PublicChecker());
|
||||
return service;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user