From 314001b206d7ca27b14c7997e988fb227180f8f2 Mon Sep 17 00:00:00 2001 From: HypherionMC Date: Tue, 21 Nov 2023 14:15:33 +0200 Subject: [PATCH] [BUG] Fix linked commands allowing commands to be executed that is not in list, but that matches permissionLevel --- gradle.properties | 2 +- .../core/discord/hooks/MinecraftCommandHook.java | 11 ++++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/gradle.properties b/gradle.properties index 5cc9bcd..62864e1 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ version_major=0 version_minor=0 -version_patch=50 +version_patch=51 shade_group=com.hypherionmc.sdlink.shaded. diff --git a/src/main/java/com/hypherionmc/sdlink/core/discord/hooks/MinecraftCommandHook.java b/src/main/java/com/hypherionmc/sdlink/core/discord/hooks/MinecraftCommandHook.java index eee6a84..45e064b 100644 --- a/src/main/java/com/hypherionmc/sdlink/core/discord/hooks/MinecraftCommandHook.java +++ b/src/main/java/com/hypherionmc/sdlink/core/discord/hooks/MinecraftCommandHook.java @@ -39,7 +39,7 @@ public class MinecraftCommandHook { List accounts = sdlinkDatabase.findAll(SDLinkAccount.class); Optional account = accounts.stream().filter(u -> u.getDiscordID().equals(event.getMember().getId())).findFirst(); - Integer permLevel = SDLinkConfig.INSTANCE.linkedCommands.permissions.stream().filter(r -> roles.contains(Long.parseLong(r.role))).map(r -> r.permissionLevel).max(Integer::compareTo).orElse(-1); + int permLevel = SDLinkConfig.INSTANCE.linkedCommands.permissions.stream().filter(r -> roles.contains(Long.parseLong(r.role))).map(r -> r.permissionLevel).max(Integer::compareTo).orElse(-1); List commands = SDLinkConfig.INSTANCE.linkedCommands.permissions.stream().filter(c -> roles.contains(Long.parseLong(c.role))).flatMap(c -> c.commands.stream()).filter(s -> !s.isEmpty()).toList(); String raw = event.getMessage().getContentRaw().substring(SDLinkConfig.INSTANCE.linkedCommands.prefix.length()); @@ -51,12 +51,17 @@ public class MinecraftCommandHook { return; } + if (commands.isEmpty()) { + Result res = SDLinkPlatform.minecraftHelper.executeMinecraftCommand(raw, permLevel, event, account.orElse(null)); + event.getMessage().reply(res.getMessage()).mentionRepliedUser(false).queue(s -> s.delete().queueAfter(5, TimeUnit.SECONDS)); + return; + } + if (commands.stream().anyMatch(raw::startsWith)) { Result res = SDLinkPlatform.minecraftHelper.executeMinecraftCommand(raw, Integer.MAX_VALUE, event, account.orElse(null)); event.getMessage().reply(res.getMessage()).mentionRepliedUser(false).queue(s -> s.delete().queueAfter(5, TimeUnit.SECONDS)); } else { - Result res = SDLinkPlatform.minecraftHelper.executeMinecraftCommand(raw, permLevel, event, account.orElse(null)); - event.getMessage().reply(res.getMessage()).mentionRepliedUser(false).queue(s -> s.delete().queueAfter(5, TimeUnit.SECONDS)); + event.getMessage().reply("Sorry, that command is not allowed").mentionRepliedUser(false).queue(s -> s.delete().queueAfter(5, TimeUnit.SECONDS)); } } }