From 842fcfe5ac2de1f1abfab1c4b6838584d3dd3490 Mon Sep 17 00:00:00 2001 From: tueem Date: Wed, 19 Feb 2025 10:50:19 +0100 Subject: [PATCH] add PermissionCheck --- .../discord4j/checks/PermissionCheck.java | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 wrapper/discord4j/src/main/java/net/tomatentum/marinara/wrapper/discord4j/checks/PermissionCheck.java diff --git a/wrapper/discord4j/src/main/java/net/tomatentum/marinara/wrapper/discord4j/checks/PermissionCheck.java b/wrapper/discord4j/src/main/java/net/tomatentum/marinara/wrapper/discord4j/checks/PermissionCheck.java new file mode 100644 index 0000000..7497c20 --- /dev/null +++ b/wrapper/discord4j/src/main/java/net/tomatentum/marinara/wrapper/discord4j/checks/PermissionCheck.java @@ -0,0 +1,42 @@ +package net.tomatentum.marinara.wrapper.discord4j.checks; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import java.util.Optional; + +import discord4j.core.event.domain.interaction.InteractionCreateEvent; +import discord4j.core.object.entity.Member; +import discord4j.rest.util.Permission; +import discord4j.rest.util.PermissionSet; +import net.tomatentum.marinara.checks.InteractionCheck; + +public class PermissionCheck implements InteractionCheck { + + @Retention(RetentionPolicy.RUNTIME) + @Target(ElementType.METHOD) + public static @interface HasPermission { + public Permission[] value(); + } + + @Override + public boolean preExec(Object context, HasPermission annotation) { + throw new UnsupportedOperationException("Unimplemented method 'preExec'"); + } + + public boolean preExec(InteractionCreateEvent context, HasPermission annotation) { + Optional member = context.getInteraction().getMember(); + if (member.isEmpty()) + return false; + PermissionSet ownPerms = PermissionSet.of(annotation.value()); + PermissionSet permSet = member.get().getBasePermissions().block(); + return permSet.containsAll(ownPerms); + } + + @Override + public void postExec(Object context, HasPermission annotation) { + + } + +} \ No newline at end of file