Added GenericPermissionChecker, PublicChecker and PrivateChecker
This commit is contained in:
@@ -61,6 +61,9 @@
|
|||||||
<Compile Include="..\Discord.Net.Commands\CommandServiceConfig.cs">
|
<Compile Include="..\Discord.Net.Commands\CommandServiceConfig.cs">
|
||||||
<Link>CommandServiceConfig.cs</Link>
|
<Link>CommandServiceConfig.cs</Link>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
<Compile Include="..\Discord.Net.Commands\Permissions\GenericPermissionChecker.cs">
|
||||||
|
<Link>Permissions\GenericPermissionChecker.cs</Link>
|
||||||
|
</Compile>
|
||||||
<Compile Include="..\Discord.Net.Commands\Permissions\IPermissionChecker.cs">
|
<Compile Include="..\Discord.Net.Commands\Permissions\IPermissionChecker.cs">
|
||||||
<Link>Permissions\IPermissionChecker.cs</Link>
|
<Link>Permissions\IPermissionChecker.cs</Link>
|
||||||
</Compile>
|
</Compile>
|
||||||
@@ -94,6 +97,18 @@
|
|||||||
<Compile Include="..\Discord.Net.Commands\Permissions\Userlist\WhitelistService.cs">
|
<Compile Include="..\Discord.Net.Commands\Permissions\Userlist\WhitelistService.cs">
|
||||||
<Link>Permissions\Userlist\WhitelistService.cs</Link>
|
<Link>Permissions\Userlist\WhitelistService.cs</Link>
|
||||||
</Compile>
|
</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" />
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|||||||
@@ -74,6 +74,11 @@ namespace Discord.Commands
|
|||||||
_checks.Add(check);
|
_checks.Add(check);
|
||||||
return this;
|
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)
|
public void Do(Func<CommandEventArgs, Task> func)
|
||||||
{
|
{
|
||||||
@@ -129,9 +134,13 @@ namespace Discord.Commands
|
|||||||
_category = category;
|
_category = category;
|
||||||
return this;
|
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)
|
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