From f4e2857631a4dcf068ada54e742d2d1b91bbde6f Mon Sep 17 00:00:00 2001 From: Chris Naude Date: Sun, 10 Sep 2023 15:26:45 -0700 Subject: [PATCH] Add %ATTACHMENTURLS% for Discord to IRC bridge messages. --- pom.xml | 14 +++++------ .../GameListeners/DiscordListener.java | 6 ++++- .../java/com/cnaude/purpleirc/PurpleBot.java | 25 ++++++++++++++----- .../purpleirc/Utilities/ChatTokenizer.java | 18 ++++++++----- src/main/resources/config.yml | 5 ++-- 5 files changed, 46 insertions(+), 22 deletions(-) diff --git a/pom.xml b/pom.xml index 806ef65..7914543 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ UTF-8 - 1.18 + 1.20-R0.1-SNAPSHOT SNAPSHOT @@ -450,14 +450,14 @@ com.google.guava guava - 31.0.1-jre + 32.1.2-jre junit junit - 4.13.1 + 4.13.2 jar test @@ -491,17 +491,17 @@ maven-compiler-plugin - 3.9.0-SNAPSHOT + 3.11.0 - 11 - 11 + 17 + 17 org.apache.maven.plugins maven-shade-plugin - 3.3.0-SNAPSHOT + 3.5.0 package diff --git a/src/main/java/com/cnaude/purpleirc/GameListeners/DiscordListener.java b/src/main/java/com/cnaude/purpleirc/GameListeners/DiscordListener.java index d3af11b..882326a 100644 --- a/src/main/java/com/cnaude/purpleirc/GameListeners/DiscordListener.java +++ b/src/main/java/com/cnaude/purpleirc/GameListeners/DiscordListener.java @@ -22,6 +22,9 @@ import github.scarsz.discordsrv.DiscordSRV; import github.scarsz.discordsrv.api.ListenerPriority; import github.scarsz.discordsrv.api.Subscribe; import github.scarsz.discordsrv.api.events.DiscordGuildMessageReceivedEvent; +import github.scarsz.discordsrv.dependencies.jda.api.entities.Message.Attachment; +import java.util.ArrayList; +import java.util.List; /** * @@ -58,7 +61,8 @@ public class DiscordListener { event.getMember().getEffectiveName(), event.getMember().getColor(), event.getChannel().getName(), - event.getMessage().getContentDisplay()); + event.getMessage().getContentDisplay(), + event.getMessage().getAttachments()); } } diff --git a/src/main/java/com/cnaude/purpleirc/PurpleBot.java b/src/main/java/com/cnaude/purpleirc/PurpleBot.java index 298df7c..d1b6e1c 100644 --- a/src/main/java/com/cnaude/purpleirc/PurpleBot.java +++ b/src/main/java/com/cnaude/purpleirc/PurpleBot.java @@ -45,6 +45,7 @@ import com.massivecraft.factions.entity.Faction; import com.massivecraft.factions.entity.MPlayer; import com.nyancraft.reportrts.data.Ticket; import com.titankingdoms.dev.titanchat.core.participant.Participant; +import github.scarsz.discordsrv.dependencies.jda.api.entities.Message.Attachment; import java.awt.Color; import java.io.File; import java.io.IOException; @@ -66,7 +67,6 @@ import java.util.concurrent.locks.ReentrantReadWriteLock; import me.botsko.prism.actionlibs.QueryParameters; import me.botsko.prism.events.BlockStateChange; import org.bukkit.Achievement; -import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.GameMode; import org.bukkit.Location; @@ -1360,7 +1360,7 @@ public final class PurpleBot { } if (plugin.ventureChatEnabled) { plugin.logDebug("Calling VentureChatEvent: " + event.getMessage()); - plugin.getServer().getScheduler().runTask(plugin, () -> plugin.getServer().getPluginManager().callEvent(new VentureChatEvent(event, this, channelName))); + plugin.getServer().getScheduler().runTask(plugin, () -> plugin.getServer().getPluginManager().callEvent(new VentureChatEvent(event, this, channelName))); } if (isMessageEnabled(channelName, TemplateName.GAME_CHAT)) { asyncIRCMessage(channelName, plugin.tokenizer @@ -1513,16 +1513,29 @@ public final class PurpleBot { * @param color * @param effectiveName * @param message + * @param attachments */ - public void discordChat(String username, String nickname, String effectiveName, Color color, String discordChannel, String message) { + public void discordChat( + String username, + String nickname, + String effectiveName, + Color color, + String discordChannel, + String message, + List attachments) { if (!this.isConnected()) { return; } + List aList = new ArrayList<>(); + for (Attachment a : attachments) { + aList.add(a.getUrl()); + } + String attUrls = String.join(", ", aList); for (String channelName : botChannels) { if (isMessageEnabled(channelName, TemplateName.DISCORD_CHAT) || isMessageEnabled(channelName, "discord-" + discordChannel + "-chat")) { String template = plugin.getMessageTemplate(botNick, channelName, TemplateName.DISCORD_CHAT); asyncIRCMessage(channelName, plugin.tokenizer - .discordChatToIRCTokenizer(template, username, nickname, effectiveName, color, discordChannel, message) + .discordChatToIRCTokenizer(template, username, nickname, effectiveName, color, discordChannel, message, attUrls) ); } } @@ -2779,9 +2792,9 @@ public final class PurpleBot { } } } - + // https://github.com/cnaude/PurpleIRC-spigot/issues/49 - if (message == null){ + if (message == null) { return; } diff --git a/src/main/java/com/cnaude/purpleirc/Utilities/ChatTokenizer.java b/src/main/java/com/cnaude/purpleirc/Utilities/ChatTokenizer.java index 8e80ca6..88b0e89 100644 --- a/src/main/java/com/cnaude/purpleirc/Utilities/ChatTokenizer.java +++ b/src/main/java/com/cnaude/purpleirc/Utilities/ChatTokenizer.java @@ -23,12 +23,9 @@ import com.cnaude.purpleirc.TemplateName; import com.gmail.nossr50.util.player.UserManager; import com.nyancraft.reportrts.data.Ticket; import com.palmergames.bukkit.TownyChat.channels.Channel; -import github.scarsz.discordsrv.DiscordSRV; import java.awt.Color; import java.util.Set; import java.util.UUID; -import java.util.regex.Matcher; -import java.util.regex.Pattern; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Location; @@ -36,7 +33,6 @@ import org.bukkit.block.Block; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.pircbotx.User; -import github.scarsz.discordsrv.objects.MessageFormat; /** * Main class containing all message template token expanding methods @@ -493,11 +489,20 @@ public class ChatTokenizer { * @param color * @param discordChannel * @param template - * * @param message + * @param attUrls * @return */ - public String discordChatToIRCTokenizer(String template, String username, String nickname, String effectiveName, Color color, String discordChannel, String message) { + public String discordChatToIRCTokenizer( + String template, + String username, + String nickname, + String effectiveName, + Color color, + String discordChannel, + String message, + String attUrls + ) { // String hex = color != null ? Integer.toHexString(color.getRGB()).toUpperCase() : "99AAB5"; // if (hex.length() == 8) { // hex = hex.substring(2); @@ -517,6 +522,7 @@ public class ChatTokenizer { .replace("%CHANNEL%", discordChannel) .replace("%MESSAGE%", plugin.colorConverter.gameColorsToIrc(message)) .replace("%RAWMESSAGE%", ChatColor.stripColor(message)) + .replace("%ATTACHMENTURLS%", attUrls) ); } diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 3df7f8c..4126ef9 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -69,7 +69,8 @@ chat-ping-fix: false # %TOWNYCHANNELTAG% - Towny channel tag name # %TOWNYMSGCOLOR% - Towny message color # %JOBS% - Player jobs -# %JOBSSHORT% - Player jobs shortened +# %JOBSSHORT% - Player jobs +# %ATTACHMENTURLS% - Discord attachment URLs # Prism custom tokens: # prism-rollback: # %COMMAND% @@ -153,7 +154,7 @@ message-format: # AdminPrivateChat message from IRC to game irc-a-chat: '[AdminChat] [&4IRC&r] %MESSAGE%' # Messages from Discord (Valid tokens: %NAME%, %NICKNAME%, %EFFNAME%, %COLOR%, %CHANNEL%, %MESSAGE%, %RAWMESSAGE%) - discord-chat: '[Discord]<%NAME%> %MESSAGE%' + discord-chat: '[Discord]<%NAME%> %MESSAGE% %ATTACHMENTURLS%' # Messages from IRC to Discord irc-discord-chat: '[IRC]<%NAME%> %MESSAGE%' # Actions from IRC to Discord