Move checks in Context to extension methods
This commit is contained in:
parent
0598c53f62
commit
53036da6a5
@ -7,7 +7,6 @@ using App.Metrics;
|
|||||||
|
|
||||||
using Autofac;
|
using Autofac;
|
||||||
|
|
||||||
|
|
||||||
using DSharpPlus;
|
using DSharpPlus;
|
||||||
using DSharpPlus.Entities;
|
using DSharpPlus.Entities;
|
||||||
using DSharpPlus.Exceptions;
|
using DSharpPlus.Exceptions;
|
||||||
@ -241,43 +240,6 @@ namespace PluralKit.Bot
|
|||||||
return $"Member not found. Note that a member ID is 5 characters long.";
|
return $"Member not found. Note that a member ID is 5 characters long.";
|
||||||
}
|
}
|
||||||
|
|
||||||
public Context CheckSystem()
|
|
||||||
{
|
|
||||||
if (_senderSystem == null)
|
|
||||||
throw Errors.NoSystemError;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Context CheckNoSystem()
|
|
||||||
{
|
|
||||||
if (_senderSystem != null)
|
|
||||||
throw Errors.ExistingSystemError;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Context CheckOwnMember(PKMember member)
|
|
||||||
{
|
|
||||||
if (member.System != _senderSystem.Id)
|
|
||||||
throw Errors.NotOwnMemberError;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Context CheckAuthorPermission(Permissions neededPerms, string permissionName)
|
|
||||||
{
|
|
||||||
// TODO: can we always assume Author is a DiscordMember? I would think so, given they always come from a
|
|
||||||
// message received event...
|
|
||||||
var hasPerms = Channel.PermissionsInSync(Author);
|
|
||||||
if ((hasPerms & neededPerms) != neededPerms)
|
|
||||||
throw new PKError($"You must have the \"{permissionName}\" permission in this server to use this command.");
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Context CheckGuildContext()
|
|
||||||
{
|
|
||||||
if (Channel.Guild != null) return this;
|
|
||||||
throw new PKError("This command can not be run in a DM.");
|
|
||||||
}
|
|
||||||
|
|
||||||
public LookupContext LookupContextFor(PKSystem target) =>
|
public LookupContext LookupContextFor(PKSystem target) =>
|
||||||
System?.Id == target.Id ? LookupContext.ByOwner : LookupContext.ByNonOwner;
|
System?.Id == target.Id ? LookupContext.ByOwner : LookupContext.ByNonOwner;
|
||||||
|
|
||||||
@ -287,12 +249,6 @@ namespace PluralKit.Bot
|
|||||||
public LookupContext LookupContextFor(PKMember target) =>
|
public LookupContext LookupContextFor(PKMember target) =>
|
||||||
System?.Id == target.System ? LookupContext.ByOwner : LookupContext.ByNonOwner;
|
System?.Id == target.System ? LookupContext.ByOwner : LookupContext.ByNonOwner;
|
||||||
|
|
||||||
public Context CheckSystemPrivacy(PKSystem target, PrivacyLevel level)
|
|
||||||
{
|
|
||||||
if (level.CanAccess(LookupContextFor(target))) return this;
|
|
||||||
throw new PKError("You do not have permission to access this information.");
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task<DiscordChannel> MatchChannel()
|
public async Task<DiscordChannel> MatchChannel()
|
||||||
{
|
{
|
||||||
if (!MentionUtils.TryParseChannel(PeekArgument(), out var channel))
|
if (!MentionUtils.TryParseChannel(PeekArgument(), out var channel))
|
||||||
|
54
PluralKit.Bot/CommandSystem/ContextChecks.cs
Normal file
54
PluralKit.Bot/CommandSystem/ContextChecks.cs
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
using System.Threading.Channels;
|
||||||
|
|
||||||
|
using DSharpPlus;
|
||||||
|
|
||||||
|
using PluralKit.Core;
|
||||||
|
|
||||||
|
namespace PluralKit.Bot
|
||||||
|
{
|
||||||
|
public static class ContextChecks
|
||||||
|
{
|
||||||
|
public static Context CheckGuildContext(this Context ctx)
|
||||||
|
{
|
||||||
|
if (ctx.Channel.Guild != null) return ctx;
|
||||||
|
throw new PKError("This command can not be run in a DM.");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Context CheckSystemPrivacy(this Context ctx, PKSystem target, PrivacyLevel level)
|
||||||
|
{
|
||||||
|
if (level.CanAccess(ctx.LookupContextFor(target))) return ctx;
|
||||||
|
throw new PKError("You do not have permission to access this information.");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Context CheckOwnMember(this Context ctx, PKMember member)
|
||||||
|
{
|
||||||
|
if (member.System != ctx.System?.Id)
|
||||||
|
throw Errors.NotOwnMemberError;
|
||||||
|
return ctx;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Context CheckSystem(this Context ctx)
|
||||||
|
{
|
||||||
|
if (ctx.System == null)
|
||||||
|
throw Errors.NoSystemError;
|
||||||
|
return ctx;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Context CheckNoSystem(this Context ctx)
|
||||||
|
{
|
||||||
|
if (ctx.System != null)
|
||||||
|
throw Errors.ExistingSystemError;
|
||||||
|
return ctx;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Context CheckAuthorPermission(this Context ctx, Permissions neededPerms, string permissionName)
|
||||||
|
{
|
||||||
|
// TODO: can we always assume Author is a DiscordMember? I would think so, given they always come from a
|
||||||
|
// message received event...
|
||||||
|
var hasPerms = ctx.Channel.PermissionsInSync(ctx.Author);
|
||||||
|
if ((hasPerms & neededPerms) != neededPerms)
|
||||||
|
throw new PKError($"You must have the \"{permissionName}\" permission in this server to use this command.");
|
||||||
|
return ctx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user