Added [user_perm()] support to medusa system

This commit is contained in:
Kwoth
2023-01-14 22:43:13 +01:00
parent 9a80383327
commit aa3409a9cf
3 changed files with 38 additions and 0 deletions

View File

@@ -0,0 +1,24 @@
using Discord;
namespace Nadeko.Snake;
[AttributeUsage(AttributeTargets.Method)]
public sealed class user_permAttribute : Attribute
{
public GuildPermission? GuildPerm { get; }
public ChannelPermission? ChannelPerm { get; }
public user_permAttribute(GuildPermission perm)
{
GuildPerm = perm;
ChannelPerm = null;
}
public user_permAttribute(ChannelPermission perm)
{
ChannelPerm = perm;
GuildPerm = null;
}
}

View File

@@ -418,6 +418,14 @@ public sealed class MedusaLoaderService : IMedusaLoaderService, IReadyExecutor,
foreach (var f in cmd.Filters)
cb.AddPrecondition(new FilterAdapter(f, strings));
foreach (var up in cmd.UserPerms)
{
if (up.GuildPerm is { } gp)
cb.AddPrecondition(new UserPermAttribute(gp));
else if (up.ChannelPerm is { } cp)
cb.AddPrecondition(new UserPermAttribute(cp));
}
cb.WithPriority(cmd.Priority);
// using summary to save method name
@@ -760,6 +768,7 @@ public sealed class MedusaLoaderService : IMedusaLoaderService, IReadyExecutor,
foreach (var method in methodInfos)
{
var filters = method.GetCustomAttributes<FilterAttribute>(true).ToArray();
var userPerms = method.GetCustomAttributes<user_permAttribute>(false).ToArray();
var prio = method.GetCustomAttribute<prioAttribute>(true)?.Priority ?? 0;
var paramInfos = method.GetParameters();
@@ -847,6 +856,7 @@ public sealed class MedusaLoaderService : IMedusaLoaderService, IReadyExecutor,
method,
instance,
filters,
userPerms,
cmdContext,
diParams,
cmdParams,

View File

@@ -11,6 +11,7 @@ public sealed class SnekCommandData
MethodInfo methodInfo,
Snek module,
FilterAttribute[] filters,
user_permAttribute[] userPerms,
CommandContextType contextType,
IReadOnlyList<Type> injectedParams,
IReadOnlyList<ParamData> parameters,
@@ -21,6 +22,7 @@ public sealed class SnekCommandData
MethodInfo = methodInfo;
Module = module;
Filters = filters;
UserPerms = userPerms;
ContextType = contextType;
InjectedParams = injectedParams;
Parameters = parameters;
@@ -28,6 +30,8 @@ public sealed class SnekCommandData
OptionalStrings = strings;
}
public user_permAttribute[] UserPerms { get; set; }
public CommandStrings OptionalStrings { get; set; }
public IReadOnlyCollection<string> Aliases { get; }