diff --git a/src/main/java/buttondevteam/discordplugin/DiscordPlugin.java b/src/main/java/buttondevteam/discordplugin/DiscordPlugin.java index 9174dff..bb26d6c 100644 --- a/src/main/java/buttondevteam/discordplugin/DiscordPlugin.java +++ b/src/main/java/buttondevteam/discordplugin/DiscordPlugin.java @@ -64,6 +64,9 @@ public class DiscordPlugin extends JavaPlugin implements IListener { public static IChannel chatchannel; public static IChannel issuechannel; public static IChannel botroomchannel; + /** + * Don't send messages, just receive, the same channel is used when testing + */ public static IChannel officechannel; public static IChannel coffeechannel; public static IChannel updatechannel; @@ -97,7 +100,7 @@ public class DiscordPlugin extends JavaPlugin implements IListener { botroomchannel = botchannel;// bot-room issuechannel = botchannel; // bot-room chatchannel = devServer.getChannelByID("248185455508455424"); // minecraft_chat_test - officechannel = botchannel; // bot-room + officechannel = devServer.getChannelByID("219626707458457603"); // developers-office coffeechannel = botchannel; // bot-room updatechannel = botchannel; dc.changeStatus(Status.game("testing")); @@ -228,7 +231,7 @@ public class DiscordPlugin extends JavaPlugin implements IListener { } try { if (channel == chatchannel) - MCChatListener.resetLastMessage(); //If this is a chat message, it'll be set again + MCChatListener.resetLastMessage(); // If this is a chat message, it'll be set again final String content = TBMCCoreAPI.IsTestServer() && channel != chatchannel ? "*The following message is from a test server*\n" + message : message; return embed == null ? channel.sendMessage(content) : channel.sendMessage(content, embed, false); @@ -269,11 +272,17 @@ public class DiscordPlugin extends JavaPlugin implements IListener { /** Removes §[char] colour codes from strings */ public static String sanitizeString(String string) { String sanitizedString = ""; + boolean random = false; for (int i = 0; i < string.length(); i++) { if (string.charAt(i) == '§') { i++;// Skips the data value, the 4 in "§4Alisolarflare" + if (string.charAt(i) == 'k') + random = true; + else + random = false; } else { - sanitizedString += string.charAt(i); + if (!random) // Skip random/obfuscated characters + sanitizedString += string.charAt(i); } } return sanitizedString; diff --git a/src/main/java/buttondevteam/discordplugin/listeners/AutoUpdaterListener.java b/src/main/java/buttondevteam/discordplugin/listeners/AutoUpdaterListener.java index 2c1cb77..0d77146 100644 --- a/src/main/java/buttondevteam/discordplugin/listeners/AutoUpdaterListener.java +++ b/src/main/java/buttondevteam/discordplugin/listeners/AutoUpdaterListener.java @@ -1,10 +1,16 @@ package buttondevteam.discordplugin.listeners; +import java.awt.Color; +import java.util.function.Predicate; +import java.util.function.Supplier; + import buttondevteam.discordplugin.DiscordPlugin; import buttondevteam.discordplugin.DiscordSender; import buttondevteam.lib.TBMCCoreAPI; import sx.blah.discord.api.events.IListener; import sx.blah.discord.handle.impl.events.MessageReceivedEvent; +import sx.blah.discord.handle.obj.IEmbed; +import sx.blah.discord.util.EmbedBuilder; import sx.blah.discord.util.RateLimitException; public class AutoUpdaterListener implements IListener { @@ -16,7 +22,8 @@ public class AutoUpdaterListener implements IListener { return; if (event.getMessage().getEmbedded().size() == 0) return; - final String title = event.getMessage().getEmbedded().get(0).getTitle(); + final IEmbed embed = event.getMessage().getEmbedded().get(0); + final String title = embed.getTitle(); if (!title.contains("new commit")) return; String branch = title.substring(title.indexOf(':') + 1, title.indexOf(']')); @@ -28,12 +35,39 @@ public class AutoUpdaterListener implements IListener { ? DiscordPlugin.chatchannel // : DiscordPlugin.updatechannel), branch) - && (!TBMCCoreAPI.IsTestServer() || !branch.equals("master"))) - try { - event.getMessage().addReaction(DiscordPlugin.DELIVERED_REACTION); - } catch (RateLimitException e) { // TODO: Handle - } catch (Exception e) { - TBMCCoreAPI.SendException("An error occured while reacting to plugin update!", e); - } + && ((Supplier) () -> { // Best looking code I've ever written + try { + int hi, ei, prnum; + if ((hi = embed.getDescription().indexOf('#')) > -1 + && ((ei = embed.getDescription().indexOf(' ', hi + 1)) > -1 + || (ei = embed.getDescription().indexOf(".", hi + 1)) > -1 + || (ei = embed.getDescription().length()) > -1) + && (prnum = Integer.parseInt(embed.getDescription().substring(hi + 1, ei))) > -1) + DiscordPlugin.sendMessageToChannel(DiscordPlugin.updatechannel, "", + new EmbedBuilder().withColor(Color.WHITE).withTitle("Update details") + .withUrl("https://github.com/TBMCPlugins/" + project + "/pull/" + prnum) + .build()); + else + throw new Exception("No PR found"); + } catch (Exception e) { + DiscordPlugin.sendMessageToChannel(DiscordPlugin.updatechannel, "", + new EmbedBuilder().withColor(Color.WHITE).withTitle("Update details:") + .withDescription(embed.getDescription() + " (" + e.getMessage() + ")").build()); + } + return true; + }).get() && (!TBMCCoreAPI.IsTestServer() || !branch.equals("master"))) + while (true) + try { + event.getMessage().addReaction(DiscordPlugin.DELIVERED_REACTION); + break; + } catch (RateLimitException e) { + try { + if (e.getRetryDelay() > 0) + Thread.sleep(e.getRetryDelay()); + } catch (InterruptedException ie) { + } + } catch (Exception e) { + TBMCCoreAPI.SendException("An error occured while reacting to plugin update!", e); + } } } diff --git a/src/main/java/buttondevteam/discordplugin/listeners/MCChatListener.java b/src/main/java/buttondevteam/discordplugin/listeners/MCChatListener.java index 96712e3..2794b5e 100644 --- a/src/main/java/buttondevteam/discordplugin/listeners/MCChatListener.java +++ b/src/main/java/buttondevteam/discordplugin/listeners/MCChatListener.java @@ -60,6 +60,7 @@ public class MCChatListener implements Listener, IListener public static final HashMap UnconnectedSenders = new HashMap<>(); public static final HashMap ConnectedSenders = new HashMap<>(); + public static short ListC = 0; public static void resetLastMessage() { lastmessage = null; @@ -110,17 +111,21 @@ public class MCChatListener implements Listener, IListener "Sorry, you need to be online on the server and have your accounts connected, you can only access these commands:\n" + Arrays.stream(UnconnectedCmds).map(uc -> "/" + uc) .collect(Collectors.joining(", ")) - + "\nTo connect your accounts, use @ChromaBot connect here or in " + + "\nTo connect your accounts, use @ChromaBot connect in " + DiscordPlugin.botchannel.mention()); return; } - Bukkit.dispatchCommand(dsender, cmd); + if (cmd.equals("list") && Bukkit.getOnlinePlayers().size() == 0 && ListC++ > 2) // Lowered already + { + dsender.sendMessage("Stop it. You know the answer."); + ListC = 0; + } else + Bukkit.dispatchCommand(dsender, cmd); } else TBMCChatAPI.SendChatMessage(Channel.GlobalChat, dsender, dmessage + (event.getMessage().getAttachments().size() > 0 ? "\n" + event.getMessage() .getAttachments().stream().map(a -> a.getUrl()).collect(Collectors.joining("\n")) : "")); - event.getMessage().addReaction(DiscordPlugin.DELIVERED_REACTION); event.getMessage().getChannel().getMessages().stream().forEach(m -> { try { final IReaction reaction = m.getReactionByName(DiscordPlugin.DELIVERED_REACTION); @@ -139,6 +144,16 @@ public class MCChatListener implements Listener, IListener TBMCCoreAPI.SendException("An error occured while removing reactions from chat!", e); } }); + while (true) + try { + event.getMessage().addReaction(DiscordPlugin.DELIVERED_REACTION); + break; + } catch (RateLimitException e) { + if (e.getRetryDelay() > 0) + Thread.sleep(e.getRetryDelay()); + else + Thread.sleep(100); + } } catch (Exception e) { TBMCCoreAPI.SendException("An error occured while handling message \"" + dmessage + "\"!", e); return; diff --git a/src/main/java/buttondevteam/discordplugin/listeners/MCListener.java b/src/main/java/buttondevteam/discordplugin/listeners/MCListener.java index f7a4b95..ee5a155 100644 --- a/src/main/java/buttondevteam/discordplugin/listeners/MCListener.java +++ b/src/main/java/buttondevteam/discordplugin/listeners/MCListener.java @@ -29,6 +29,7 @@ public class MCListener implements Listener { } DiscordPlugin.sendMessageToChannel(DiscordPlugin.chatchannel, e.GetPlayer().getPlayerName() + " joined the game"); + MCChatListener.ListC = 0; } @EventHandler