From ba5f88df36cf92900fd1cba2eeddce3a3c12088c Mon Sep 17 00:00:00 2001 From: ChomeNS <95471003+ChomeNS@users.noreply.github.com> Date: Tue, 31 Dec 2024 09:17:08 +0700 Subject: [PATCH] feat: support replying in discord refactor: some minor refactoring in the discord plugin too like moving the get component part into a function --- build-number.txt | 2 +- .../chomens_bot/plugins/DiscordPlugin.java | 292 ++++++++++-------- 2 files changed, 161 insertions(+), 133 deletions(-) diff --git a/build-number.txt b/build-number.txt index c197cc7a..1d022671 100644 --- a/build-number.txt +++ b/build-number.txt @@ -1 +1 @@ -1369 \ No newline at end of file +1371 \ No newline at end of file diff --git a/src/main/java/me/chayapak1/chomens_bot/plugins/DiscordPlugin.java b/src/main/java/me/chayapak1/chomens_bot/plugins/DiscordPlugin.java index f7d3f349..aed5f0ce 100644 --- a/src/main/java/me/chayapak1/chomens_bot/plugins/DiscordPlugin.java +++ b/src/main/java/me/chayapak1/chomens_bot/plugins/DiscordPlugin.java @@ -23,6 +23,7 @@ import net.kyori.adventure.text.event.ClickEvent; import net.kyori.adventure.text.event.HoverEvent; import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.TextColor; +import net.kyori.adventure.text.format.TextDecoration; import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; import org.geysermc.mcprotocollib.network.event.session.ConnectedEvent; import org.geysermc.mcprotocollib.network.event.session.DisconnectedEvent; @@ -188,144 +189,24 @@ public class DiscordPlugin { return; } - // ignore my very very ohio code,..,,. + Component output = Component.empty(); - Component attachmentsComponent = Component.empty(); - if (!messageEvent.getAttachments().isEmpty()) { - attachmentsComponent = attachmentsComponent.append(Component.space()); - for (Message.Attachment attachment : messageEvent.getAttachments()) { - attachmentsComponent = attachmentsComponent - .append( - Component - .text("[Attachment]") - .clickEvent(ClickEvent.openUrl(attachment.getProxyUrl())) - .color(NamedTextColor.GREEN) - ) - .append(Component.space()); - } - } + final Message reference = event.getMessage().getReferencedMessage(); - Component embedsComponent = Component.empty(); - if (!messageEvent.getEmbeds().isEmpty()) { - if (messageEvent.getAttachments().isEmpty()) embedsComponent = embedsComponent.append(Component.space()); - for (MessageEmbed embed : messageEvent.getEmbeds()) { - final Component hoverEvent = Component.translatable( - """ - Title: %s - %s""", - embed.getTitle() == null ? - Component.text("No title").color(NamedTextColor.GRAY) : - Component.text(embed.getTitle()).color(ColorUtilities.getColorByString(bot.config.colorPalette.string)), - embed.getDescription() == null ? - Component.text("No description").color(NamedTextColor.GRAY) : - Component.text(embed.getDescription()).color(NamedTextColor.WHITE) - ).color(NamedTextColor.GREEN); - - embedsComponent = embedsComponent - .append( - Component - .text("[Embed]") - .hoverEvent(HoverEvent.showText(hoverEvent)) - .color(NamedTextColor.GREEN) - ) - .append(Component.space()); - } - } - - final Member member = event.getMember(); - - final String username = event.getAuthor().getName(); - final String displayName = member == null ? username : member.getEffectiveName(); - - final List roles = member == null ? Collections.emptyList() : member.getRoles(); - - Component rolesComponent = Component.empty(); - if (!roles.isEmpty()) { - rolesComponent = rolesComponent - .append(Component.text("Roles:").color(NamedTextColor.GRAY)) - .append(Component.newline()); - - final List rolesList = new ArrayList<>(); - - for (Role role : roles) { - final Color color = role.getColor(); - - rolesList.add( - Component - .text(role.getName()) - .color( - color == null ? - NamedTextColor.WHITE : - TextColor.color( - color.getRed(), - color.getGreen(), - color.getBlue() - ) - ) - ); - } - - rolesComponent = rolesComponent.append(Component.join(JoinConfiguration.newlines(), rolesList)); - } else { - rolesComponent = rolesComponent.append(Component.text("No roles").color(NamedTextColor.GRAY)); - } - - Component nameComponent = Component - .text(displayName) - .clickEvent(ClickEvent.copyToClipboard(username)) - .hoverEvent( - HoverEvent.showText( - Component.translatable( - """ - %s - %s - - %s""", - Component.text(username).color(NamedTextColor.WHITE), - rolesComponent, - Component.text("Click here to copy the tag to your clipboard").color(NamedTextColor.GREEN) - ).color(NamedTextColor.DARK_GRAY) - ) - ); - - // too ohio - for (Role role : roles) { - final Color color = role.getColor(); - - if (color == null) continue; - - nameComponent = nameComponent.color( - TextColor.color( - color.getRed(), - color.getGreen(), - color.getBlue() + if (reference != null) { + output = output + .append( + Component.empty() + .append(Component.text("Replying to ").color(NamedTextColor.GRAY)) + .append(getMessageComponent(bot, reference)) + .decorate(TextDecoration.ITALIC) ) - ); - - break; + .append(Component.newline()); } - if (nameComponent.color() == null) nameComponent = nameComponent.color(NamedTextColor.RED); + output = output.append(getMessageComponent(bot, event.getMessage())); - final Component deserialized = LegacyComponentSerializer.legacyAmpersand().deserialize(message.replace("\uD83D\uDC80", "☠")); - - final Component messageComponent = Component - .text("") - .color(NamedTextColor.GRAY) - .append( - deserialized - .append(attachmentsComponent) - .append(embedsComponent) - ); - - final Component component = Component.translatable( - "[%s] %s › %s", - messagePrefix, - nameComponent, - messageComponent - ).color(NamedTextColor.DARK_GRAY); - - bot.chat.tellraw(component); + bot.chat.tellraw(output); } @Override @@ -338,6 +219,153 @@ public class DiscordPlugin { } } + private Component getMessageComponent (Bot bot, Message message) { + // ignore my very very ohio code,..,,. + + Component attachmentsComponent = Component.empty(); + if (!message.getAttachments().isEmpty()) { + if (message.getContentStripped().isEmpty()) attachmentsComponent = attachmentsComponent.append(Component.space()); + + for (Message.Attachment attachment : message.getAttachments()) { + attachmentsComponent = attachmentsComponent + .append( + Component + .text("[Attachment]") + .clickEvent(ClickEvent.openUrl(attachment.getProxyUrl())) + .color(NamedTextColor.GREEN) + ) + .append(Component.space()); + } + } + + Component embedsComponent = Component.empty(); + if (!message.getEmbeds().isEmpty()) { + if (message.getAttachments().isEmpty()) embedsComponent = embedsComponent.append(Component.space()); + + for (MessageEmbed embed : message.getEmbeds()) { + final Component hoverEvent = Component.translatable( + """ + Title: %s + %s""", + embed.getTitle() == null ? + Component.text("No title").color(NamedTextColor.GRAY) : + Component.text(embed.getTitle()).color(ColorUtilities.getColorByString(bot.config.colorPalette.string)), + embed.getDescription() == null ? + Component.text("No description").color(NamedTextColor.GRAY) : + Component.text(embed.getDescription()).color(NamedTextColor.WHITE) + ).color(NamedTextColor.GREEN); + + embedsComponent = embedsComponent + .append( + Component + .text("[Embed]") + .hoverEvent(HoverEvent.showText(hoverEvent)) + .color(NamedTextColor.GREEN) + ) + .append(Component.space()); + } + } + + final Member member = message.getMember(); + + final String username = message.getAuthor().getName(); + final String displayName = member == null ? username : member.getEffectiveName(); + + final List roles = member == null ? Collections.emptyList() : member.getRoles(); + + Component rolesComponent = Component.empty(); + if (!roles.isEmpty()) { + rolesComponent = rolesComponent + .append(Component.text("Roles:").color(NamedTextColor.GRAY)) + .append(Component.newline()); + + final List rolesList = new ArrayList<>(); + + for (Role role : roles) { + final Color color = role.getColor(); + + rolesList.add( + Component + .text(role.getName()) + .color( + color == null ? + NamedTextColor.WHITE : + TextColor.color( + color.getRed(), + color.getGreen(), + color.getBlue() + ) + ) + ); + } + + rolesComponent = rolesComponent.append(Component.join(JoinConfiguration.newlines(), rolesList)); + } else { + rolesComponent = rolesComponent.append(Component.text("No roles").color(NamedTextColor.GRAY)); + } + + Component nameComponent = Component + .text(displayName) + .clickEvent(ClickEvent.copyToClipboard(username)) + .hoverEvent( + HoverEvent.showText( + Component.translatable( + """ + %s + %s + + %s""", + Component.text(username).color(NamedTextColor.WHITE), + rolesComponent, + Component.text("Click here to copy the tag to your clipboard").color(NamedTextColor.GREEN) + ).color(NamedTextColor.DARK_GRAY) + ) + ); + + // too ohio + for (Role role : roles) { + final Color color = role.getColor(); + + if (color == null) continue; + + nameComponent = nameComponent.color( + TextColor.color( + color.getRed(), + color.getGreen(), + color.getBlue() + ) + ); + + break; + } + + if (nameComponent.color() == null) nameComponent = nameComponent.color(NamedTextColor.RED); + + final Component deserialized = LegacyComponentSerializer + .legacyAmpersand() + .deserialize( + message.getContentStripped() + // replaces skull emoji + .replace("\uD83D\uDC80", "☠") + ); + + final Component messageComponent = Component + .text("") + .color(NamedTextColor.GRAY) + .append( + deserialized + .append(attachmentsComponent) + .append(embedsComponent) + ); + + return Component.translatable( + "[%s] %s › %s", + messagePrefix, + nameComponent, + messageComponent + ).color(NamedTextColor.DARK_GRAY); + } + // totallynotskidded™️ from HBot (and changed a bit) final Map logMessages = new HashMap<>(); final Map nextLogTimes = new HashMap<>();