Complete Preconditions implementation
This commit is contained in:
@@ -7,6 +7,6 @@ namespace Discord.Commands
|
||||
{
|
||||
public abstract class PreconditionAttribute : Attribute
|
||||
{
|
||||
public abstract void CheckPermissions(PreconditionContext context);
|
||||
public abstract Task<PreconditionResult> CheckPermissions(IMessage context);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,10 +7,12 @@ namespace Discord.Commands
|
||||
{
|
||||
public class RequireDMAttribute : PreconditionAttribute
|
||||
{
|
||||
public override void CheckPermissions(PreconditionContext context)
|
||||
public override Task<PreconditionResult> CheckPermissions(IMessage context)
|
||||
{
|
||||
if (context.Message.Channel is IGuildChannel)
|
||||
context.Handled = true;
|
||||
if (context.Channel is IGuildChannel)
|
||||
return Task.FromResult(PreconditionResult.FromError("Command must be used in a DM"));
|
||||
|
||||
return Task.FromResult(PreconditionResult.FromSuccess());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,10 +7,12 @@ namespace Discord.Commands
|
||||
{
|
||||
public class RequireGuildAttribute : PreconditionAttribute
|
||||
{
|
||||
public override void CheckPermissions(PreconditionContext context)
|
||||
public override Task<PreconditionResult> CheckPermissions(IMessage context)
|
||||
{
|
||||
if (!(context.Message.Channel is IGuildChannel))
|
||||
context.Handled = true;
|
||||
if (!(context.Channel is IGuildChannel))
|
||||
return Task.FromResult(PreconditionResult.FromError("Command must be used in a guild"));
|
||||
|
||||
return Task.FromResult(PreconditionResult.FromSuccess());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Discord.Commands
|
||||
{
|
||||
public class RequireRoleAttribute : RequireGuildAttribute
|
||||
{
|
||||
public string Role { get; set; }
|
||||
public StringComparer Comparer { get; set; }
|
||||
|
||||
public RequireRoleAttribute(string roleName)
|
||||
{
|
||||
Role = roleName;
|
||||
Comparer = StringComparer.Ordinal;
|
||||
}
|
||||
|
||||
public RequireRoleAttribute(string roleName, StringComparer comparer)
|
||||
{
|
||||
Role = roleName;
|
||||
Comparer = comparer;
|
||||
}
|
||||
|
||||
public override async Task<PreconditionResult> CheckPermissions(IMessage context)
|
||||
{
|
||||
var result = await base.CheckPermissions(context).ConfigureAwait(false);
|
||||
|
||||
if (!result.IsSuccess)
|
||||
return result;
|
||||
|
||||
var author = (context.Author as IGuildUser);
|
||||
|
||||
if (author != null)
|
||||
{
|
||||
var hasRole = author.Roles.Any(x => Comparer.Compare(x.Name, Role) == 0);
|
||||
|
||||
if (!hasRole)
|
||||
return PreconditionResult.FromError($"User does not have the '{Role}' role.");
|
||||
}
|
||||
|
||||
return PreconditionResult.FromSuccess();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user