diff --git a/cloud-discord/cloud-jda/src/main/java/cloud/commandframework/jda/JDACommandManager.java b/cloud-discord/cloud-jda/src/main/java/cloud/commandframework/jda/JDACommandManager.java index 9a1d8f49..bc9bec43 100644 --- a/cloud-discord/cloud-jda/src/main/java/cloud/commandframework/jda/JDACommandManager.java +++ b/cloud-discord/cloud-jda/src/main/java/cloud/commandframework/jda/JDACommandManager.java @@ -34,7 +34,9 @@ import net.dv8tion.jda.api.Permission; import net.dv8tion.jda.api.entities.Member; import net.dv8tion.jda.api.events.message.MessageReceivedEvent; import org.checkerframework.checker.nullness.qual.NonNull; +import org.checkerframework.checker.nullness.qual.Nullable; +import java.util.function.BiFunction; import java.util.function.Function; /** @@ -46,6 +48,7 @@ public class JDACommandManager extends CommandManager { private final long botId; private final Function<@NonNull C, @NonNull String> prefixMapper; + private final BiFunction<@NonNull C, @NonNull String, @NonNull Boolean> permissionMapper; private final Function<@NonNull MessageReceivedEvent, @NonNull C> commandSenderMapper; private final Function<@NonNull C, @NonNull MessageReceivedEvent> backwardsCommandSenderMapper; @@ -55,6 +58,7 @@ public class JDACommandManager extends CommandManager { * * @param jda JDA instance to register against * @param prefixMapper Function that maps the sender to a command prefix string + * @param permissionMapper Function used to check if a command sender has the permission to execute a command * @param commandExecutionCoordinator Coordination provider * @param commandSenderMapper Function that maps {@link MessageReceivedEvent} to the command sender type * @param backwardsCommandSenderMapper Function that maps the command sender type to {@link MessageReceivedEvent} @@ -62,12 +66,14 @@ public class JDACommandManager extends CommandManager { */ public JDACommandManager(final @NonNull JDA jda, final @NonNull Function<@NonNull C, @NonNull String> prefixMapper, + final @Nullable BiFunction<@NonNull C, @NonNull String, @NonNull Boolean> permissionMapper, final @NonNull Function, CommandExecutionCoordinator> commandExecutionCoordinator, final @NonNull Function<@NonNull MessageReceivedEvent, @NonNull C> commandSenderMapper, final @NonNull Function<@NonNull C, @NonNull MessageReceivedEvent> backwardsCommandSenderMapper) throws InterruptedException { super(commandExecutionCoordinator, CommandRegistrationHandler.nullCommandRegistrationHandler()); this.prefixMapper = prefixMapper; + this.permissionMapper = permissionMapper; this.commandSenderMapper = commandSenderMapper; this.backwardsCommandSenderMapper = backwardsCommandSenderMapper; jda.addEventListener(new JDACommandListener<>(this)); @@ -108,6 +114,10 @@ public class JDACommandManager extends CommandManager { return true; } + if (permissionMapper != null) { + return permissionMapper.apply(sender, permission); + } + MessageReceivedEvent message = backwardsCommandSenderMapper.apply(sender); Member member = message.getMember(); if (member == null) {