Browse Source

Added GenericPermissionChecker, PublicChecker and PrivateChecker

tags/docs-0.9
RogueException 9 years ago
parent
commit
2991956496
7 changed files with 130 additions and 2 deletions
  1. +15
    -0
      src/Discord.Net.Commands.Net45/Discord.Net.Commands.csproj
  2. +11
    -2
      src/Discord.Net.Commands/CommandBuilder.cs
  3. +20
    -0
      src/Discord.Net.Commands/Permissions/GenericPermissionChecker.cs
  4. +21
    -0
      src/Discord.Net.Commands/Permissions/Visibility/PrivateChecker.cs
  5. +21
    -0
      src/Discord.Net.Commands/Permissions/Visibility/PrivateExtensions.cs
  6. +21
    -0
      src/Discord.Net.Commands/Permissions/Visibility/PublicChecker.cs
  7. +21
    -0
      src/Discord.Net.Commands/Permissions/Visibility/PublicExtensions.cs

+ 15
- 0
src/Discord.Net.Commands.Net45/Discord.Net.Commands.csproj View File

@@ -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>


+ 11
- 2
src/Discord.Net.Commands/CommandBuilder.cs View File

@@ -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)


+ 20
- 0
src/Discord.Net.Commands/Permissions/GenericPermissionChecker.cs View File

@@ -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);
}
}
}

+ 21
- 0
src/Discord.Net.Commands/Permissions/Visibility/PrivateChecker.cs View File

@@ -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;
}
}
}
}

+ 21
- 0
src/Discord.Net.Commands/Permissions/Visibility/PrivateExtensions.cs View File

@@ -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;
}
}
}

+ 21
- 0
src/Discord.Net.Commands/Permissions/Visibility/PublicChecker.cs View File

@@ -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;
}
}
}
}

+ 21
- 0
src/Discord.Net.Commands/Permissions/Visibility/PublicExtensions.cs View File

@@ -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;
}
}
}

Loading…
Cancel
Save