From 93236a859dc4a37c599fe48a21d0fb055d573e8d Mon Sep 17 00:00:00 2001 From: kyrptonaught Date: Tue, 2 Apr 2024 15:16:05 -0400 Subject: [PATCH] Add ability for admins to send raw text json through bridge --- .../discordBridge/DiscordBridgeConfig.java | 2 ++ .../discordBridge/bot/BridgeBot.java | 9 ++++--- .../discordBridge/format/FormatToMC.java | 24 ++++++++++++++++--- 3 files changed, 29 insertions(+), 6 deletions(-) diff --git a/src/main/java/net/kyrptonaught/serverutils/discordBridge/DiscordBridgeConfig.java b/src/main/java/net/kyrptonaught/serverutils/discordBridge/DiscordBridgeConfig.java index d6f3722..54404d5 100644 --- a/src/main/java/net/kyrptonaught/serverutils/discordBridge/DiscordBridgeConfig.java +++ b/src/main/java/net/kyrptonaught/serverutils/discordBridge/DiscordBridgeConfig.java @@ -20,5 +20,7 @@ public class DiscordBridgeConfig extends AbstractConfigFile { public long linkRoleID; public long moderatorRoleID; + public long adminMessageRole; + public boolean canDiscordMSGCMDPing = true; } diff --git a/src/main/java/net/kyrptonaught/serverutils/discordBridge/bot/BridgeBot.java b/src/main/java/net/kyrptonaught/serverutils/discordBridge/bot/BridgeBot.java index dc756e6..42deb7c 100644 --- a/src/main/java/net/kyrptonaught/serverutils/discordBridge/bot/BridgeBot.java +++ b/src/main/java/net/kyrptonaught/serverutils/discordBridge/bot/BridgeBot.java @@ -4,6 +4,7 @@ import net.dv8tion.jda.api.JDA; import net.dv8tion.jda.api.Permission; import net.dv8tion.jda.api.entities.MessageType; +import net.dv8tion.jda.api.entities.Role; import net.dv8tion.jda.api.events.interaction.ModalInteractionEvent; import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent; import net.dv8tion.jda.api.events.interaction.component.ButtonInteractionEvent; @@ -52,11 +53,14 @@ public void sendEmbed(String title, String msg, int hexColor) { public void onMessageReceived(MessageReceivedEvent event) { if (event != null && shouldRespondToMessage(event)) { if (event.getMessage().getReferencedMessage() != null) { - Text message = FormatToMC.parseMessage(event.getMessage().getReferencedMessage(), Text.literal(" ┌──── ").formatted(Formatting.GRAY)); + Text message = FormatToMC.parseMessage(event.getMessage().getReferencedMessage(), Text.literal(" ┌──── ").formatted(Formatting.GRAY), false); server.getPlayerManager().broadcast(message, false); } - Text message = FormatToMC.parseMessage(event.getMessage(), Text.literal("[Discord] ").formatted(Formatting.BLUE)); + Role adminMessageRole = event.getGuild().getRoleById(DiscordBridgeMod.config().adminMessageRole); + boolean admin = event.getMember().getRoles().contains(adminMessageRole); + + Text message = FormatToMC.parseMessage(event.getMessage(), Text.literal("[Discord] ").formatted(Formatting.BLUE), admin); if (message != null) server.getPlayerManager().broadcast(message, false); } @@ -94,7 +98,6 @@ private boolean shouldRespondToMessage(MessageReceivedEvent event) { (isAllowedChannel(event.getChannel().getIdLong())); } - public boolean isAllowedChannel(long channel) { return getChannel() == channel; } diff --git a/src/main/java/net/kyrptonaught/serverutils/discordBridge/format/FormatToMC.java b/src/main/java/net/kyrptonaught/serverutils/discordBridge/format/FormatToMC.java index 232a71d..d14de35 100644 --- a/src/main/java/net/kyrptonaught/serverutils/discordBridge/format/FormatToMC.java +++ b/src/main/java/net/kyrptonaught/serverutils/discordBridge/format/FormatToMC.java @@ -16,7 +16,10 @@ public class FormatToMC { - public static Text parseMessage(Message discordMessage, MutableText prefix) { + public static Text parseMessage(Message discordMessage, MutableText prefix, boolean isAdmin) { + if(isAdmin && discordMessage.getContentRaw().startsWith("$PARSE=")) + return parseAdminTextJson(discordMessage, prefix); + HashMap replacementURLs = new HashMap<>(); for (MessageEmbed embed : discordMessage.getEmbeds()) @@ -28,7 +31,7 @@ public static Text parseMessage(Message discordMessage, MutableText prefix) { replacementURLs.put("Sticker:" + stickerItem.getName(), stickerItem.getIcon().getUrl()); - if (discordMessage.getContentDisplay().isEmpty() && replacementURLs.size() == 0) { + if (discordMessage.getContentDisplay().isEmpty() && replacementURLs.isEmpty()) { return null; } @@ -38,7 +41,7 @@ public static Text parseMessage(Message discordMessage, MutableText prefix) { message.append(parseText(str, replacementURLs)); } - if (replacementURLs.size() > 0) { + if (!replacementURLs.isEmpty()) { message.append("{"); Iterator urlIterator = replacementURLs.keySet().iterator(); @@ -52,6 +55,21 @@ public static Text parseMessage(Message discordMessage, MutableText prefix) { return message; } + private static Text parseAdminTextJson(Message discordMessage, MutableText prefix) { + MutableText message = Text.literal("").append(prefix).append(getAuthor(discordMessage)); + + MutableText parsed = null; + try { + parsed = Text.Serialization.fromLenientJson(discordMessage.getContentRaw().replaceFirst("\\$PARSE=", "")); + } catch (Exception e) { + e.printStackTrace(); + } + if (parsed == null) message.append("PARSE ERROR"); + else message.append(parsed); + + return message; + } + private static Text getAuthor(Message discordMessage) { int color = discordMessage.getMember() != null ? discordMessage.getMember().getColorRaw() : 0xffffff; String author = discordMessage.getMember() != null ? discordMessage.getMember().getEffectiveName() : discordMessage.getAuthor().getEffectiveName();