diff --git a/src/main/java/buttondevteam/discordplugin/commands/MCChatCommand.java b/src/main/java/buttondevteam/discordplugin/commands/MCChatCommand.java index 66294c6..a7fe4de 100644 --- a/src/main/java/buttondevteam/discordplugin/commands/MCChatCommand.java +++ b/src/main/java/buttondevteam/discordplugin/commands/MCChatCommand.java @@ -21,9 +21,10 @@ public class MCChatCommand extends DiscordCommandBase { try (final DiscordPlayer user = DiscordPlayer.getUser(message.getAuthor().getStringID(), DiscordPlayer.class)) { PlayerData mcchat = user.minecraftChat(); mcchat.set(!mcchat.getOrDefault(false)); - message.reply( - "Minecraft chat " + (mcchat.get() ? "enabled. Use '" + message.getClient().getOurUser().mention() - + " mcchat' (with the mention) to disable." : "disabled.")); + message.reply("Minecraft chat " + (mcchat.getOrDefault(false) // + ? "enabled. Use '" + message.getClient().getOurUser().mention() + + " mcchat' (with the mention) to disable." // + : "disabled.")); } catch (Exception e) { TBMCCoreAPI.SendException("Error while setting mcchat for user" + message.getAuthor().getName(), e); } diff --git a/src/main/java/buttondevteam/discordplugin/listeners/CommandListener.java b/src/main/java/buttondevteam/discordplugin/listeners/CommandListener.java index aee7230..82fa5cd 100644 --- a/src/main/java/buttondevteam/discordplugin/listeners/CommandListener.java +++ b/src/main/java/buttondevteam/discordplugin/listeners/CommandListener.java @@ -28,12 +28,13 @@ public class CommandListener { "Once the server stops screaming.", // Ali "After HL3 comes out", // Ali "Next time you ask", // Ali - "When will *you* be open?" //Ali + "When will *you* be open?" // Ali }; private static final String[] serverReadyQuestions = new String[] { "when will the server be open", "when will the server be ready", "when will the server be done", "when will the server be complete", - "when will the server be finished", "when's the server ready", "when's the server open", "Vhen vill ze server be open?" }; + "when will the server be finished", "when's the server ready", "when's the server open", + "Vhen vill ze server be open?" }; private static final Random serverReadyRandom = new Random(); private static final ArrayList usableServerReadyStrings = new ArrayList(serverReadyStrings.length) { @@ -64,6 +65,7 @@ public class CommandListener { if (DiscordPlayer.getUser(event.getAuthor().getStringID(), DiscordPlayer.class).minecraftChat() .getOrDefault(false)) // Let the MCChatListener handle it return; + event.getMessage().getChannel().setTypingStatus(true); // Fun runCommand(event.getMessage(), true); } }, new IListener() { @@ -102,7 +104,6 @@ public class CommandListener { public static boolean runCommand(IMessage message, boolean mentionedonly) { if (DiscordPlugin.SafeMode) return true; - message.getChannel().setTypingStatus(true); final StringBuilder cmdwithargs = new StringBuilder(message.getContent()); final String mention = DiscordPlugin.dc.getOurUser().mention(false); final String mentionNick = DiscordPlugin.dc.getOurUser().mention(true); @@ -114,6 +115,7 @@ public class CommandListener { message.getChannel().setTypingStatus(false); return false; } + message.getChannel().setTypingStatus(true); int index = cmdwithargs.indexOf(" "); String cmd; String args; diff --git a/src/main/java/buttondevteam/discordplugin/listeners/MCChatListener.java b/src/main/java/buttondevteam/discordplugin/listeners/MCChatListener.java index 1bc5218..c60b6c9 100644 --- a/src/main/java/buttondevteam/discordplugin/listeners/MCChatListener.java +++ b/src/main/java/buttondevteam/discordplugin/listeners/MCChatListener.java @@ -34,24 +34,26 @@ public class MCChatListener implements Listener, IListener ? ((Player) e.getSender()).getDisplayName() // : e.getSender().getName()); final EmbedBuilder embed = new EmbedBuilder().withAuthorName(authorPlayer).withDescription(e.getMessage()); - final EmbedObject embedObject = e.getSender() instanceof Player - ? embed.withAuthorIcon( - "https://minotar.net/avatar/" + ((Player) e.getSender()).getName() + "/32.png").build() - : embed.build(); + if (e.getSender() instanceof Player) + embed.withAuthorIcon("https://minotar.net/avatar/" + ((Player) e.getSender()).getName() + "/32.png"); final long nanoTime = System.nanoTime(); Consumer doit = lastmsgdata -> { + final EmbedObject embedObject = embed.build(); + String msg = lastmsgdata.channel.isPrivate() ? DiscordPlugin.sanitizeString(e.getChannel().DisplayName) + : ""; if (lastmsgdata.message == null || lastmsgdata.message.isDeleted() || !authorPlayer.equals(lastmsgdata.message.getEmbeds().get(0).getAuthor().getName()) - || lastmsgdata.time / 1000000000f < nanoTime / 1000000000f - 120) { - lastmsgdata.message = DiscordPlugin.sendMessageToChannel(lastmsgdata.channel, - lastmsgdata.channel.isPrivate() ? e.getChannel().DisplayName : "", embedObject); + || lastmsgdata.time / 1000000000f < nanoTime / 1000000000f - 120 + || !lastmsgdata.mcchannel.ID.equals(e.getChannel().ID)) { + lastmsgdata.message = DiscordPlugin.sendMessageToChannel(lastmsgdata.channel, msg, embedObject); lastmsgdata.time = nanoTime; + lastmsgdata.mcchannel = e.getChannel(); } else try { lastmsgdata.content = embedObject.description = lastmsgdata.content + "\n" + embedObject.description;// The message object doesn't get updated final LastMsgData _lastmsgdata = lastmsgdata; - DiscordPlugin.perform(() -> _lastmsgdata.message.edit("", embedObject)); + DiscordPlugin.perform(() -> _lastmsgdata.message.edit(msg, embedObject)); } catch (MissingPermissionsException | DiscordException e1) { TBMCCoreAPI.SendException("An error occured while editing chat message!", e1); } @@ -74,6 +76,7 @@ public class MCChatListener implements Listener, IListener public long time; public String content; public IChannel channel; + public Channel mcchannel; public LastMsgData(IChannel channel) { this.channel = channel; @@ -112,6 +115,14 @@ public class MCChatListener implements Listener, IListener */ private static ArrayList lastmsgPerUser = new ArrayList(); + public static boolean startPrivateMCChat(IChannel channel) { + return lastmsgPerUser.add(new LastMsgData(channel)); + } + + public static boolean stopPrivateMCChat(IChannel channel) { + return lastmsgPerUser.removeIf(lmd -> lmd.channel.getLongID() == channel.getLongID()); + } + public static final HashMap UnconnectedSenders = new HashMap<>(); public static final HashMap ConnectedSenders = new HashMap<>(); public static short ListC = 0; @@ -214,7 +225,7 @@ public class MCChatListener implements Listener, IListener TBMCPlayer p = dp.getAs(TBMCPlayer.class); if (!UnconnectedSenders.containsKey(author.getStringID())) UnconnectedSenders.put(author.getStringID(), - new DiscordSender(author, channel, p == null ? null : p.PlayerName().get())); // Display the playername, if found + new DiscordSender(author, channel, p == null ? null : p.PlayerName().getOrDefault(null))); // Display the playername, if found dsender = UnconnectedSenders.get(author.getStringID()); } return dsender; diff --git a/src/main/java/buttondevteam/discordplugin/listeners/MCListener.java b/src/main/java/buttondevteam/discordplugin/listeners/MCListener.java index 89af699..3ca03ff 100644 --- a/src/main/java/buttondevteam/discordplugin/listeners/MCListener.java +++ b/src/main/java/buttondevteam/discordplugin/listeners/MCListener.java @@ -25,22 +25,22 @@ public class MCListener implements Listener { @EventHandler public void onPlayerJoin(TBMCPlayerJoinEvent e) { final Player p = Bukkit.getPlayer(e.GetPlayer().getUUID()); - if (ConnectCommand.WaitingToConnect.containsKey(e.GetPlayer().PlayerName().get())) { - IUser user = DiscordPlugin.dc - .getUserByID(Long.parseLong(ConnectCommand.WaitingToConnect.get(e.GetPlayer().PlayerName().get()))); + if (ConnectCommand.WaitingToConnect.containsKey(e.GetPlayer().PlayerName().getOrDefault(null))) { + IUser user = DiscordPlugin.dc.getUserByID( + Long.parseLong(ConnectCommand.WaitingToConnect.get(e.GetPlayer().PlayerName().getOrDefault(null)))); p.sendMessage("§bTo connect with the Discord account @" + user.getName() + "#" + user.getDiscriminator() + " do /discord accept"); p.sendMessage("§bIf it wasn't you, do /discord decline"); } DiscordPlugin.sendMessageToChannel(DiscordPlugin.chatchannel, - e.GetPlayer().PlayerName().get() + " joined the game"); + e.GetPlayer().PlayerName().getOrDefault(null) + " joined the game"); MCChatListener.ListC = 0; } @EventHandler public void onPlayerLeave(TBMCPlayerQuitEvent e) { DiscordPlugin.sendMessageToChannel(DiscordPlugin.chatchannel, - e.GetPlayer().PlayerName().get() + " left the game"); + e.GetPlayer().PlayerName().getOrDefault(null) + " left the game"); } @EventHandler diff --git a/src/test/java/buttondevteam/DiscordPlugin/AppTest.java b/src/test/java/buttondevteam/DiscordPlugin/AppTest.java index c560777..46ad699 100644 --- a/src/test/java/buttondevteam/DiscordPlugin/AppTest.java +++ b/src/test/java/buttondevteam/DiscordPlugin/AppTest.java @@ -1,11 +1,5 @@ package buttondevteam.DiscordPlugin; -import java.util.Arrays; -import java.util.stream.Collectors; - -import org.apache.commons.lang.exception.ExceptionUtils; - -import buttondevteam.lib.TBMCCoreAPI; import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; @@ -35,26 +29,6 @@ public class AppTest extends TestCase { * Rigourous Test :-) */ public void testApp() { - /*String sourcemessage = "Test message"; - Exception e = new Exception("Test exception"); - StringBuilder sb = TBMCCoreAPI.IsTestServer() ? new StringBuilder() - : new StringBuilder("Coder role").append("\n"); - sb.append(sourcemessage).append("\n"); - sb.append("```").append("\n"); - String stackTrace = Arrays.stream(ExceptionUtils.getStackTrace(e).split("\\n")) - .filter(s -> !(s.contains("\tat ") && ( // - s.contains("java.util") // - || s.contains("java.lang") // - || s.contains("net.minecraft.server") // - || s.contains("sun.reflect") // - || s.contains("org.bukkit") // - ))).collect(Collectors.joining("\n")); - if (stackTrace.length() > 1800) - stackTrace = stackTrace.substring(0, 1800); - sb.append(stackTrace).append("\n"); - sb.append("```"); - System.out.println(sb.toString()); - assertTrue(sb.toString().contains("Coder role"));*/ assertTrue(true); } }