From 1ba108fb217e037bd51232c5cb5613a3444fdd72 Mon Sep 17 00:00:00 2001 From: NorbiPeti Date: Fri, 28 Apr 2017 17:52:01 +0200 Subject: [PATCH 1/6] Added mute support and other stuff --- .../discordplugin/commands/RoleCommand.java | 2 +- .../listeners/DebugMessageListener.java | 2 +- .../discordplugin/listeners/MCListener.java | 35 +++++++++++++++---- .../mccommands/AcceptMCCommand.java | 30 +++++----------- .../mccommands/DeclineMCCommand.java | 28 +++++---------- .../mccommands/DiscordMCCommandBase.java | 13 +++---- 6 files changed, 51 insertions(+), 59 deletions(-) diff --git a/src/main/java/buttondevteam/discordplugin/commands/RoleCommand.java b/src/main/java/buttondevteam/discordplugin/commands/RoleCommand.java index 17eb355..327b456 100644 --- a/src/main/java/buttondevteam/discordplugin/commands/RoleCommand.java +++ b/src/main/java/buttondevteam/discordplugin/commands/RoleCommand.java @@ -50,7 +50,7 @@ public class RoleCommand extends DiscordCommandBase { "List of game roles:\n" + DiscordPlugin.GameRoles.stream().collect(Collectors.joining("\n"))); } else if (argsa[0].equalsIgnoreCase("addrole")) { if (!message.getAuthor().getRolesForGuild(DiscordPlugin.mainServer).stream() - .anyMatch(r -> r.getName().equals("Moderator"))) { + .anyMatch(r -> r.getID().equals("126030201472811008"))) { DiscordPlugin.sendMessageToChannel(message.getChannel(), "You need to be a moderator to use this command."); return; diff --git a/src/main/java/buttondevteam/discordplugin/listeners/DebugMessageListener.java b/src/main/java/buttondevteam/discordplugin/listeners/DebugMessageListener.java index 70a6134..220ff45 100644 --- a/src/main/java/buttondevteam/discordplugin/listeners/DebugMessageListener.java +++ b/src/main/java/buttondevteam/discordplugin/listeners/DebugMessageListener.java @@ -7,7 +7,7 @@ import buttondevteam.lib.TBMCDebugMessageEvent; public class DebugMessageListener implements Listener{ @EventHandler - public void onException(TBMCDebugMessageEvent e) { + public void onDebugMessage(TBMCDebugMessageEvent e) { SendMessage(e.getDebugMessage()); e.setSent(); } diff --git a/src/main/java/buttondevteam/discordplugin/listeners/MCListener.java b/src/main/java/buttondevteam/discordplugin/listeners/MCListener.java index 919b0e8..9009b19 100644 --- a/src/main/java/buttondevteam/discordplugin/listeners/MCListener.java +++ b/src/main/java/buttondevteam/discordplugin/listeners/MCListener.java @@ -8,13 +8,19 @@ import org.bukkit.event.Listener; import org.bukkit.event.entity.PlayerDeathEvent; import org.bukkit.event.server.ServerCommandEvent; +import com.earth2me.essentials.CommandSource; + import buttondevteam.discordplugin.DiscordPlayer; import buttondevteam.discordplugin.DiscordPlugin; import buttondevteam.discordplugin.commands.ConnectCommand; +import buttondevteam.lib.TBMCCoreAPI; import buttondevteam.lib.player.*; import net.ess3.api.events.*; +import sx.blah.discord.handle.obj.IRole; import sx.blah.discord.handle.obj.IUser; import sx.blah.discord.handle.obj.Status.StatusType; +import sx.blah.discord.util.DiscordException; +import sx.blah.discord.util.MissingPermissionsException; public class MCListener implements Listener { @EventHandler @@ -43,9 +49,6 @@ public class MCListener implements Listener { if (DiscordPlugin.SafeMode) return; DiscordPlayer dp = e.getPlayer().getAs(DiscordPlayer.class); - /*System.out.println("dp: " + dp); - if (dp != null) - System.out.println("dp.did: " + dp.getDiscordID());*/ if (dp == null || dp.getDiscordID() == null || dp.getDiscordID() == "") return; IUser user = DiscordPlugin.dc.getUserByID(dp.getDiscordID()); @@ -66,6 +69,8 @@ public class MCListener implements Listener { @EventHandler public void onPlayerAFK(AfkStatusChangeEvent e) { + if (e.isCancelled()) + return; DiscordPlugin.sendMessageToChannel(DiscordPlugin.chatchannel, DiscordPlugin.sanitizeString(e.getAffected().getBase().getDisplayName()) + " is " + (e.getValue() ? "now" : "no longer") + " AFK."); @@ -76,7 +81,25 @@ public class MCListener implements Listener { DiscordPlugin.Restart = !e.getCommand().equalsIgnoreCase("stop"); // The variable is always true except if stopped } - /* - * @EventHandler public void onPlayerMute(MuteStatusChangeEvent e) { e.getAffected() } - */ + @EventHandler + public void onPlayerMute(MuteStatusChangeEvent e) { + try { + DiscordPlugin.perform(() -> { + final IRole role = DiscordPlugin.dc.getRoleByID("164090010461667328"); + final CommandSource source = e.getAffected().getSource(); + if (!source.isPlayer()) + return; + final IUser user = DiscordPlugin.dc + .getUserByID(TBMCPlayerBase.getPlayer(source.getPlayer().getUniqueId(), TBMCPlayer.class) + .getAs(DiscordPlayer.class).getDiscordID()); + if (e.getValue()) + user.addRole(role); + else + user.removeRole(role); + }); + } catch (DiscordException | MissingPermissionsException ex) { + TBMCCoreAPI.SendException("Failed to give/take Muted role to player " + e.getAffected().getName() + "!", + ex); + } + } } diff --git a/src/main/java/buttondevteam/discordplugin/mccommands/AcceptMCCommand.java b/src/main/java/buttondevteam/discordplugin/mccommands/AcceptMCCommand.java index 17dbcbf..abe8723 100644 --- a/src/main/java/buttondevteam/discordplugin/mccommands/AcceptMCCommand.java +++ b/src/main/java/buttondevteam/discordplugin/mccommands/AcceptMCCommand.java @@ -1,22 +1,18 @@ package buttondevteam.discordplugin.mccommands; -import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import buttondevteam.discordplugin.DiscordPlayer; import buttondevteam.discordplugin.commands.ConnectCommand; import buttondevteam.discordplugin.listeners.MCChatListener; +import buttondevteam.lib.chat.CommandClass; import buttondevteam.lib.player.ChromaGamerBase; import buttondevteam.lib.player.TBMCPlayer; import buttondevteam.lib.player.TBMCPlayerBase; +@CommandClass(modOnly = false, path = "accept") public class AcceptMCCommand extends DiscordMCCommandBase { - @Override - public String GetDiscordCommandPath() { - return "accept"; - } - @Override public String[] GetHelpText(String alias) { return new String[] { // @@ -28,30 +24,20 @@ public class AcceptMCCommand extends DiscordMCCommandBase { } @Override - public boolean GetModOnly() { - return false; - } - - @Override - public boolean GetPlayerOnly() { - return true; - } - - @Override - public boolean OnCommand(CommandSender sender, String alias, String[] args) { - String did = ConnectCommand.WaitingToConnect.get(sender.getName()); + public boolean OnCommand(Player player, String alias, String[] args) { + String did = ConnectCommand.WaitingToConnect.get(player.getName()); if (did == null) { - sender.sendMessage("§cYou don't have a pending connection to Discord."); + player.sendMessage("§cYou don't have a pending connection to Discord."); return true; } DiscordPlayer dp = ChromaGamerBase.getUser(did, DiscordPlayer.class); - TBMCPlayer mcp = TBMCPlayerBase.getPlayer(((Player) sender).getUniqueId(), TBMCPlayer.class); + TBMCPlayer mcp = TBMCPlayerBase.getPlayer(player.getUniqueId(), TBMCPlayer.class); dp.connectWith(mcp); dp.save(); mcp.save(); - ConnectCommand.WaitingToConnect.remove(sender.getName()); + ConnectCommand.WaitingToConnect.remove(player.getName()); MCChatListener.UnconnectedSenders.remove(did); - sender.sendMessage("§bAccounts connected."); + player.sendMessage("§bAccounts connected."); return true; } diff --git a/src/main/java/buttondevteam/discordplugin/mccommands/DeclineMCCommand.java b/src/main/java/buttondevteam/discordplugin/mccommands/DeclineMCCommand.java index ca7c46f..813cc3a 100644 --- a/src/main/java/buttondevteam/discordplugin/mccommands/DeclineMCCommand.java +++ b/src/main/java/buttondevteam/discordplugin/mccommands/DeclineMCCommand.java @@ -1,15 +1,13 @@ package buttondevteam.discordplugin.mccommands; -import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + import buttondevteam.discordplugin.commands.ConnectCommand; +import buttondevteam.lib.chat.CommandClass; +@CommandClass(modOnly = false, path = "decline") public class DeclineMCCommand extends DiscordMCCommandBase { - @Override - public String GetDiscordCommandPath() { - return "decline"; - } - @Override public String[] GetHelpText(String alias) { return new String[] { // @@ -21,23 +19,13 @@ public class DeclineMCCommand extends DiscordMCCommandBase { } @Override - public boolean GetModOnly() { - return false; - } - - @Override - public boolean GetPlayerOnly() { - return true; - } - - @Override - public boolean OnCommand(CommandSender sender, String alias, String[] args) { - String did = ConnectCommand.WaitingToConnect.remove(sender.getName()); + public boolean OnCommand(Player player, String alias, String[] args) { + String did = ConnectCommand.WaitingToConnect.remove(player.getName()); if (did == null) { - sender.sendMessage("§cYou don't have a pending connection to Discord."); + player.sendMessage("§cYou don't have a pending connection to Discord."); return true; } - sender.sendMessage("§bPending connection declined."); + player.sendMessage("§bPending connection declined."); return true; } diff --git a/src/main/java/buttondevteam/discordplugin/mccommands/DiscordMCCommandBase.java b/src/main/java/buttondevteam/discordplugin/mccommands/DiscordMCCommandBase.java index beb598e..5edbafe 100644 --- a/src/main/java/buttondevteam/discordplugin/mccommands/DiscordMCCommandBase.java +++ b/src/main/java/buttondevteam/discordplugin/mccommands/DiscordMCCommandBase.java @@ -1,14 +1,9 @@ package buttondevteam.discordplugin.mccommands; -import buttondevteam.lib.chat.TBMCCommandBase; +import buttondevteam.lib.chat.CommandClass; +import buttondevteam.lib.chat.PlayerCommandBase; -public abstract class DiscordMCCommandBase extends TBMCCommandBase { - - @Override - public String GetCommandPath() { - return "discord " + GetDiscordCommandPath(); - } - - public abstract String GetDiscordCommandPath(); +@CommandClass(modOnly = false, path = "discord") +public abstract class DiscordMCCommandBase extends PlayerCommandBase { } From c23d9aee09cb6a24b83e62db34f682b919169b2a Mon Sep 17 00:00:00 2001 From: NorbiPeti Date: Fri, 28 Apr 2017 22:41:23 +0200 Subject: [PATCH 2/6] Fixed chat msg loss <@187257785199624194> Probably Also fixed exception filtering --- .../listeners/ExceptionListener.java | 2 +- .../listeners/MCChatListener.java | 138 +++++++++--------- .../buttondevteam/DiscordPlugin/AppTest.java | 72 +++++---- 3 files changed, 118 insertions(+), 94 deletions(-) diff --git a/src/main/java/buttondevteam/discordplugin/listeners/ExceptionListener.java b/src/main/java/buttondevteam/discordplugin/listeners/ExceptionListener.java index c894e4b..42c7416 100644 --- a/src/main/java/buttondevteam/discordplugin/listeners/ExceptionListener.java +++ b/src/main/java/buttondevteam/discordplugin/listeners/ExceptionListener.java @@ -48,7 +48,7 @@ public class ExceptionListener implements Listener { sb.append(sourcemessage).append("\n"); sb.append("```").append("\n"); String stackTrace = Arrays.stream(ExceptionUtils.getStackTrace(e).split("\\n")) - .filter(s -> !(s.contains(" at ") && ( // + .filter(s -> !(s.contains("\tat ") && ( // s.contains("java.util") // || s.contains("java.lang") // || s.contains("net.minecraft.server") // diff --git a/src/main/java/buttondevteam/discordplugin/listeners/MCChatListener.java b/src/main/java/buttondevteam/discordplugin/listeners/MCChatListener.java index e5143bc..3d99635 100644 --- a/src/main/java/buttondevteam/discordplugin/listeners/MCChatListener.java +++ b/src/main/java/buttondevteam/discordplugin/listeners/MCChatListener.java @@ -28,7 +28,9 @@ public class MCChatListener implements Listener, IListener return; if (e.getSender() instanceof DiscordSender || e.getSender() instanceof DiscordPlayerSender) return; - if (e.getChannel().equals(Channel.GlobalChat)) { + if (!e.getChannel().equals(Channel.GlobalChat)) + return; + synchronized (this) { final String authorPlayer = DiscordPlugin.sanitizeString(e.getSender() instanceof Player // ? ((Player) e.getSender()).getDisplayName() // : e.getSender().getName()); @@ -83,76 +85,78 @@ public class MCChatListener implements Listener, IListener if (CommandListener.runCommand(event.getMessage(), true)) return; String dmessage = event.getMessage().getContent(); - try { - DiscordPlayer dp = ChromaGamerBase.getUser(author.getID(), DiscordPlayer.class); - final DiscordSenderBase dsender; - Player mcp = null; // Offline players can't really run commands - final String cid; - if ((cid = dp.getConnectedID(TBMCPlayer.class)) != null // Connected? - && (mcp = Bukkit.getPlayer(cid)) != null) { // Execute as ingame player, if online - if (!ConnectedSenders.containsKey(author.getID())) - ConnectedSenders.put(author.getID(), - new DiscordPlayerSender(author, event.getMessage().getChannel(), mcp)); - dsender = ConnectedSenders.get(author.getID()); - } else { - TBMCPlayer p = dp.getAs(TBMCPlayer.class); - if (!UnconnectedSenders.containsKey(author.getID())) - UnconnectedSenders.put(author.getID(), new DiscordSender(author, event.getMessage().getChannel(), - p == null ? null : p.PlayerName().get())); // Display the playername, if found - dsender = UnconnectedSenders.get(author.getID()); - } - - for (IUser u : event.getMessage().getMentions()) { - dmessage = dmessage.replace(u.mention(false), "@" + u.getName()); // TODO: IG Formatting - final Optional nick = u.getNicknameForGuild(DiscordPlugin.mainServer); - dmessage = dmessage.replace(u.mention(true), "@" + (nick.isPresent() ? nick.get() : u.getName())); - } - - if (dmessage.startsWith("/")) { - final String cmd = dmessage.substring(1).toLowerCase(); - if (mcp == null - && !Arrays.stream(UnconnectedCmds).anyMatch(s -> cmd.equals(s) || cmd.startsWith(s + " "))) { - // Command not whitelisted - DiscordPlugin.sendMessageToChannel(event.getMessage().getChannel(), // TODO - "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 in " - + DiscordPlugin.botchannel.mention()); - return; + synchronized (this) { + try { + DiscordPlayer dp = ChromaGamerBase.getUser(author.getID(), DiscordPlayer.class); + final DiscordSenderBase dsender; + Player mcp = null; // Offline players can't really run commands + final String cid; + if ((cid = dp.getConnectedID(TBMCPlayer.class)) != null // Connected? + && (mcp = Bukkit.getPlayer(cid)) != null) { // Execute as ingame player, if online + if (!ConnectedSenders.containsKey(author.getID())) + ConnectedSenders.put(author.getID(), + new DiscordPlayerSender(author, event.getMessage().getChannel(), mcp)); + dsender = ConnectedSenders.get(author.getID()); + } else { + TBMCPlayer p = dp.getAs(TBMCPlayer.class); + if (!UnconnectedSenders.containsKey(author.getID())) + UnconnectedSenders.put(author.getID(), new DiscordSender(author, + event.getMessage().getChannel(), p == null ? null : p.PlayerName().get())); // Display the playername, if found + dsender = UnconnectedSenders.get(author.getID()); } - if (lastlist > 5) { - ListC = 0; - lastlist = 0; + + for (IUser u : event.getMessage().getMentions()) { + dmessage = dmessage.replace(u.mention(false), "@" + u.getName()); // TODO: IG Formatting + final Optional nick = u.getNicknameForGuild(DiscordPlugin.mainServer); + dmessage = dmessage.replace(u.mention(true), "@" + (nick.isPresent() ? nick.get() : u.getName())); } - if (cmd.equals("list") && Bukkit.getOnlinePlayers().size() == lastlistp && ListC++ > 2) // Lowered already - { - dsender.sendMessage("Stop it. You know the answer."); - lastlist = 0; - } else - Bukkit.dispatchCommand(dsender, cmd); - lastlistp = (short) Bukkit.getOnlinePlayers().size(); - if (!event.getMessage().isDeleted()) - event.getMessage().delete(); - } 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().getChannel().getMessages().stream().forEach(m -> { - try { - final IReaction reaction = m.getReactionByName(DiscordPlugin.DELIVERED_REACTION); - if (reaction != null) - DiscordPlugin.perform(() -> m.removeReaction(reaction)); - } catch (Exception e) { - TBMCCoreAPI.SendException("An error occured while removing reactions from chat!", e); + + if (dmessage.startsWith("/")) { + final String cmd = dmessage.substring(1).toLowerCase(); + if (mcp == null && !Arrays.stream(UnconnectedCmds) + .anyMatch(s -> cmd.equals(s) || cmd.startsWith(s + " "))) { + // Command not whitelisted + DiscordPlugin.sendMessageToChannel(event.getMessage().getChannel(), // TODO + "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 in " + + DiscordPlugin.botchannel.mention()); + return; } - }); - DiscordPlugin.perform(() -> event.getMessage().addReaction(DiscordPlugin.DELIVERED_REACTION)); + if (lastlist > 5) { + ListC = 0; + lastlist = 0; + } + if (cmd.equals("list") && Bukkit.getOnlinePlayers().size() == lastlistp && ListC++ > 2) // Lowered already + { + dsender.sendMessage("Stop it. You know the answer."); + lastlist = 0; + } else + Bukkit.dispatchCommand(dsender, cmd); + lastlistp = (short) Bukkit.getOnlinePlayers().size(); + if (!event.getMessage().isDeleted()) + event.getMessage().delete(); + } 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().getChannel().getMessages().stream().forEach(m -> { + try { + final IReaction reaction = m.getReactionByName(DiscordPlugin.DELIVERED_REACTION); + if (reaction != null) + DiscordPlugin.perform(() -> m.removeReaction(reaction)); + } catch (Exception e) { + TBMCCoreAPI.SendException("An error occured while removing reactions from chat!", e); + } + }); + DiscordPlugin.perform(() -> event.getMessage().addReaction(DiscordPlugin.DELIVERED_REACTION)); + } + } catch (Exception e) { + TBMCCoreAPI.SendException("An error occured while handling message \"" + dmessage + "\"!", e); + return; } - } catch (Exception e) { - TBMCCoreAPI.SendException("An error occured while handling message \"" + dmessage + "\"!", e); - return; } } } diff --git a/src/test/java/buttondevteam/DiscordPlugin/AppTest.java b/src/test/java/buttondevteam/DiscordPlugin/AppTest.java index be62810..1bac044 100644 --- a/src/test/java/buttondevteam/DiscordPlugin/AppTest.java +++ b/src/test/java/buttondevteam/DiscordPlugin/AppTest.java @@ -1,5 +1,11 @@ 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; @@ -7,32 +13,46 @@ import junit.framework.TestSuite; /** * Unit test for simple App. */ -public class AppTest - extends TestCase -{ - /** - * Create the test case - * - * @param testName name of the test case - */ - public AppTest( String testName ) - { - super( testName ); - } +public class AppTest extends TestCase { + /** + * Create the test case + * + * @param testName + * name of the test case + */ + public AppTest(String testName) { + super(testName); + } - /** - * @return the suite of tests being tested - */ - public static Test suite() - { - return new TestSuite( AppTest.class ); - } + /** + * @return the suite of tests being tested + */ + public static Test suite() { + return new TestSuite(AppTest.class); + } - /** - * Rigourous Test :-) - */ - public void testApp() - { - assertTrue( true ); - } + /** + * Rigourous Test :-) + */ + public void testApp() { + /*String sourcemessage = "Test message"; + Exception e = new Exception("Test exception"); + StringBuilder sb = TBMCCoreAPI.IsTestServer() ? new StringBuilder() : new StringBuilder("").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(true); + } } From 01db886917437a6187cce070fcf78222f98479e5 Mon Sep 17 00:00:00 2001 From: NorbiPeti Date: Sun, 7 May 2017 01:06:57 +0200 Subject: [PATCH 3/6] Updated Discord4J stuff, getInfo shows more, etc. --- .../discordplugin/DiscordPlugin.java | 28 ++++++++-------- .../commands/ConnectCommand.java | 10 +++--- .../discordplugin/commands/RoleCommand.java | 2 +- .../commands/UserinfoCommand.java | 4 +-- .../listeners/AutoUpdaterListener.java | 10 +++--- .../listeners/CommandListener.java | 8 ++--- .../listeners/MCChatListener.java | 33 +++++++++---------- .../discordplugin/listeners/MCListener.java | 25 +++++++------- .../buttondevteam/DiscordPlugin/AppTest.java | 6 ++-- 9 files changed, 62 insertions(+), 64 deletions(-) diff --git a/src/main/java/buttondevteam/discordplugin/DiscordPlugin.java b/src/main/java/buttondevteam/discordplugin/DiscordPlugin.java index 709fb65..0478c4b 100644 --- a/src/main/java/buttondevteam/discordplugin/DiscordPlugin.java +++ b/src/main/java/buttondevteam/discordplugin/DiscordPlugin.java @@ -76,29 +76,29 @@ public class DiscordPlugin extends JavaPlugin implements IListener { try { task = Bukkit.getScheduler().runTaskTimerAsynchronously(this, () -> { if (mainServer == null || devServer == null) { - mainServer = event.getClient().getGuildByID("125813020357165056"); - devServer = event.getClient().getGuildByID("219529124321034241"); + mainServer = event.getClient().getGuildByID(125813020357165056L); + devServer = event.getClient().getGuildByID(219529124321034241L); } if (mainServer == null || devServer == null) return; // Retry if (!TBMCCoreAPI.IsTestServer()) { - botchannel = mainServer.getChannelByID("209720707188260864"); // bot - annchannel = mainServer.getChannelByID("126795071927353344"); // announcements - genchannel = mainServer.getChannelByID("125813020357165056"); // general - chatchannel = mainServer.getChannelByID("249663564057411596"); // minecraft_chat - botroomchannel = devServer.getChannelByID("239519012529111040"); // bot-room - officechannel = devServer.getChannelByID("219626707458457603"); // developers-office - updatechannel = devServer.getChannelByID("233724163519414272"); // server-updates - dc.changeStatus(Status.game("on TBMC")); + botchannel = mainServer.getChannelByID(209720707188260864L); // bot + annchannel = mainServer.getChannelByID(126795071927353344L); // announcements + genchannel = mainServer.getChannelByID(125813020357165056L); // general + chatchannel = mainServer.getChannelByID(249663564057411596L); // minecraft_chat + botroomchannel = devServer.getChannelByID(239519012529111040L); // bot-room + officechannel = devServer.getChannelByID(219626707458457603L); // developers-office + updatechannel = devServer.getChannelByID(233724163519414272L); // server-updates + dc.online("on TBMC"); } else { - botchannel = devServer.getChannelByID("239519012529111040"); // bot-room + botchannel = devServer.getChannelByID(239519012529111040L); // bot-room annchannel = botchannel; // bot-room genchannel = botchannel; // bot-room botroomchannel = botchannel;// bot-room chatchannel = botchannel;// bot-room - officechannel = devServer.getChannelByID("219626707458457603"); // developers-office + officechannel = devServer.getChannelByID(219626707458457603L); // developers-office updatechannel = botchannel; - dc.changeStatus(Status.game("testing")); + dc.online("testing"); } if (botchannel == null || annchannel == null || genchannel == null || botroomchannel == null || chatchannel == null || officechannel == null || updatechannel == null) @@ -155,7 +155,7 @@ public class DiscordPlugin extends JavaPlugin implements IListener { sendMessageToChannel(chatchannel, "", new EmbedBuilder().withColor(Restart ? Color.ORANGE : Color.RED) .withTitle(Restart ? "Server restarting" : "Server stopping").build()); try { - dc.changeStatus(Status.game("on TBMC")); + dc.online("on TBMC"); dc.logout(); } catch (Exception e) { TBMCCoreAPI.SendException("An error occured while disabling DiscordPlugin!", e); diff --git a/src/main/java/buttondevteam/discordplugin/commands/ConnectCommand.java b/src/main/java/buttondevteam/discordplugin/commands/ConnectCommand.java index 928726f..0eb837e 100644 --- a/src/main/java/buttondevteam/discordplugin/commands/ConnectCommand.java +++ b/src/main/java/buttondevteam/discordplugin/commands/ConnectCommand.java @@ -37,10 +37,10 @@ public class ConnectCommand extends DiscordCommandBase { "Too many arguments.\nUsage: connect "); return; } - if (WaitingToConnect.inverse().containsKey(message.getAuthor().getID())) { + if (WaitingToConnect.inverse().containsKey(message.getAuthor().getStringID())) { DiscordPlugin.sendMessageToChannel(message.getChannel(), - "Replacing " + WaitingToConnect.inverse().get(message.getAuthor().getID()) + " with " + args); - WaitingToConnect.inverse().remove(message.getAuthor().getID()); + "Replacing " + WaitingToConnect.inverse().get(message.getAuthor().getStringID()) + " with " + args); + WaitingToConnect.inverse().remove(message.getAuthor().getStringID()); } @SuppressWarnings("deprecation") OfflinePlayer p = Bukkit.getOfflinePlayer(args); @@ -50,7 +50,7 @@ public class ConnectCommand extends DiscordCommandBase { } try (TBMCPlayer pl = TBMCPlayerBase.getPlayer(p.getUniqueId(), TBMCPlayer.class)) { DiscordPlayer dp = pl.getAs(DiscordPlayer.class); - if (dp != null && message.getAuthor().getID().equals(dp.getDiscordID())) { + if (dp != null && message.getAuthor().getStringID().equals(dp.getDiscordID())) { DiscordPlugin.sendMessageToChannel(message.getChannel(), "You already have this account connected."); return; } @@ -58,7 +58,7 @@ public class ConnectCommand extends DiscordCommandBase { TBMCCoreAPI.SendException("An error occured while connecting a Discord account!", e); DiscordPlugin.sendMessageToChannel(message.getChannel(), "An internal error occured!\n" + e); } - WaitingToConnect.put(p.getName(), message.getAuthor().getID()); + WaitingToConnect.put(p.getName(), message.getAuthor().getStringID()); DiscordPlugin.sendMessageToChannel(message.getChannel(), "Pending connection - accept connection in Minecraft from the account " + args + " before the server gets restarted. You can also adjust the Minecraft name you want to connect to with the same command."); diff --git a/src/main/java/buttondevteam/discordplugin/commands/RoleCommand.java b/src/main/java/buttondevteam/discordplugin/commands/RoleCommand.java index 327b456..6f573f8 100644 --- a/src/main/java/buttondevteam/discordplugin/commands/RoleCommand.java +++ b/src/main/java/buttondevteam/discordplugin/commands/RoleCommand.java @@ -50,7 +50,7 @@ public class RoleCommand extends DiscordCommandBase { "List of game roles:\n" + DiscordPlugin.GameRoles.stream().collect(Collectors.joining("\n"))); } else if (argsa[0].equalsIgnoreCase("addrole")) { if (!message.getAuthor().getRolesForGuild(DiscordPlugin.mainServer).stream() - .anyMatch(r -> r.getID().equals("126030201472811008"))) { + .anyMatch(r -> r.getLongID() == 126030201472811008L)) { DiscordPlugin.sendMessageToChannel(message.getChannel(), "You need to be a moderator to use this command."); return; diff --git a/src/main/java/buttondevteam/discordplugin/commands/UserinfoCommand.java b/src/main/java/buttondevteam/discordplugin/commands/UserinfoCommand.java index 1c7a062..b5a7ad2 100644 --- a/src/main/java/buttondevteam/discordplugin/commands/UserinfoCommand.java +++ b/src/main/java/buttondevteam/discordplugin/commands/UserinfoCommand.java @@ -30,7 +30,7 @@ public class UserinfoCommand extends DiscordCommandBase { target = message.getAuthor(); else { final Optional firstmention = message.getMentions().stream() - .filter(m -> !m.getID().equals(DiscordPlugin.dc.getOurUser().getID())).findFirst(); + .filter(m -> !m.getStringID().equals(DiscordPlugin.dc.getOurUser().getStringID())).findFirst(); if (firstmention.isPresent()) target = firstmention.get(); else if (args.contains("#")) { @@ -68,7 +68,7 @@ public class UserinfoCommand extends DiscordCommandBase { target = targets.get(0); } } - try (DiscordPlayer dp = ChromaGamerBase.getUser(target.getID(), DiscordPlayer.class)) { + try (DiscordPlayer dp = ChromaGamerBase.getUser(target.getStringID(), DiscordPlayer.class)) { StringBuilder uinfo = new StringBuilder("User info for ").append(target.getName()).append(":\n"); uinfo.append(dp.getInfo(InfoTarget.Discord)); DiscordPlugin.sendMessageToChannel(message.getChannel(), uinfo.toString()); diff --git a/src/main/java/buttondevteam/discordplugin/listeners/AutoUpdaterListener.java b/src/main/java/buttondevteam/discordplugin/listeners/AutoUpdaterListener.java index 114d588..276797b 100644 --- a/src/main/java/buttondevteam/discordplugin/listeners/AutoUpdaterListener.java +++ b/src/main/java/buttondevteam/discordplugin/listeners/AutoUpdaterListener.java @@ -7,7 +7,7 @@ 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.impl.events.guild.channel.message.MessageReceivedEvent; import sx.blah.discord.handle.obj.IEmbed; import sx.blah.discord.util.EmbedBuilder; @@ -16,13 +16,13 @@ public class AutoUpdaterListener implements IListener { public void handle(MessageReceivedEvent event) { if (DiscordPlugin.SafeMode) return; - if (!event.getMessage().getChannel().getID().equals(DiscordPlugin.officechannel.getID())) + if (!event.getMessage().getChannel().getStringID().equals(DiscordPlugin.officechannel.getStringID())) return; - if (!"239123781401051138".equals(event.getMessage().getWebhookID())) + if (239123781401051138L != event.getMessage().getWebhookLongID()) return; - if (event.getMessage().getEmbedded().size() == 0) + if (event.getMessage().getEmbeds().size() == 0) return; - final IEmbed embed = event.getMessage().getEmbedded().get(0); + final IEmbed embed = event.getMessage().getEmbeds().get(0); final String title = embed.getTitle(); if (!title.contains("new commit")) return; diff --git a/src/main/java/buttondevteam/discordplugin/listeners/CommandListener.java b/src/main/java/buttondevteam/discordplugin/listeners/CommandListener.java index b7717d3..f9941df 100644 --- a/src/main/java/buttondevteam/discordplugin/listeners/CommandListener.java +++ b/src/main/java/buttondevteam/discordplugin/listeners/CommandListener.java @@ -3,8 +3,8 @@ package buttondevteam.discordplugin.listeners; import buttondevteam.discordplugin.DiscordPlugin; import buttondevteam.discordplugin.commands.DiscordCommandBase; import sx.blah.discord.api.events.IListener; -import sx.blah.discord.handle.impl.events.MentionEvent; -import sx.blah.discord.handle.impl.events.MessageReceivedEvent; +import sx.blah.discord.handle.impl.events.guild.channel.message.MentionEvent; +import sx.blah.discord.handle.impl.events.guild.channel.message.MessageReceivedEvent; import sx.blah.discord.handle.obj.IChannel; import sx.blah.discord.handle.obj.IMessage; @@ -19,9 +19,9 @@ public class CommandListener { if (event.getMessage().getAuthor().isBot()) return; final IChannel channel = event.getMessage().getChannel(); - if (!channel.getID().equals(DiscordPlugin.botchannel.getID()) && !channel.isPrivate()) + if (!channel.getStringID().equals(DiscordPlugin.botchannel.getStringID()) && !channel.isPrivate()) return; - if (channel.getID().equals(DiscordPlugin.chatchannel.getID())) + if (channel.getStringID().equals(DiscordPlugin.chatchannel.getStringID())) return; // The chat code already handles this - Right now while testing botchannel is the same as chatchannel runCommand(event.getMessage(), true); } diff --git a/src/main/java/buttondevteam/discordplugin/listeners/MCChatListener.java b/src/main/java/buttondevteam/discordplugin/listeners/MCChatListener.java index 3d99635..5c9e3d5 100644 --- a/src/main/java/buttondevteam/discordplugin/listeners/MCChatListener.java +++ b/src/main/java/buttondevteam/discordplugin/listeners/MCChatListener.java @@ -2,7 +2,6 @@ package buttondevteam.discordplugin.listeners; import java.util.Arrays; import java.util.HashMap; -import java.util.Optional; import java.util.stream.Collectors; import org.bukkit.Bukkit; import org.bukkit.entity.Player; @@ -17,7 +16,7 @@ import buttondevteam.lib.player.ChromaGamerBase; import buttondevteam.lib.player.TBMCPlayer; import sx.blah.discord.api.events.IListener; import sx.blah.discord.api.internal.json.objects.EmbedObject; -import sx.blah.discord.handle.impl.events.MessageReceivedEvent; +import sx.blah.discord.handle.impl.events.guild.channel.message.MessageReceivedEvent; import sx.blah.discord.handle.obj.*; import sx.blah.discord.util.*; @@ -41,13 +40,13 @@ public class MCChatListener implements Listener, IListener : embed.build(); final long nanoTime = System.nanoTime(); if (lastmessage == null || lastmessage.isDeleted() - || !authorPlayer.equals(lastmessage.getEmbedded().get(0).getAuthor().getName()) + || !authorPlayer.equals(lastmessage.getEmbeds().get(0).getAuthor().getName()) || lastmsgtime / 1000000000f < nanoTime / 1000000000f - 120) { lastmessage = DiscordPlugin.sendMessageToChannel(DiscordPlugin.chatchannel, "", embedObject); lastmsgtime = nanoTime; } else try { - embedObject.description = lastmessage.getEmbedded().get(0).getDescription() + "\n" + embedObject.description = lastmessage.getEmbeds().get(0).getDescription() + "\n" + embedObject.description; DiscordPlugin.perform(() -> lastmessage.edit("", embedObject)); } catch (MissingPermissionsException | DiscordException e1) { @@ -73,9 +72,9 @@ public class MCChatListener implements Listener, IListener } @Override // Discord - public void handle(MessageReceivedEvent event) { + public void handle(sx.blah.discord.handle.impl.events.guild.channel.message.MessageReceivedEvent event) { final IUser author = event.getMessage().getAuthor(); - if (!event.getMessage().getChannel().getID().equals(DiscordPlugin.chatchannel.getID()) + if (!event.getMessage().getChannel().getStringID().equals(DiscordPlugin.chatchannel.getStringID()) /* && !(event.getMessage().getChannel().isPrivate() && privatechat) */) return; lastmessage = null; @@ -87,28 +86,28 @@ public class MCChatListener implements Listener, IListener String dmessage = event.getMessage().getContent(); synchronized (this) { try { - DiscordPlayer dp = ChromaGamerBase.getUser(author.getID(), DiscordPlayer.class); + DiscordPlayer dp = ChromaGamerBase.getUser(author.getStringID(), DiscordPlayer.class); final DiscordSenderBase dsender; Player mcp = null; // Offline players can't really run commands final String cid; if ((cid = dp.getConnectedID(TBMCPlayer.class)) != null // Connected? && (mcp = Bukkit.getPlayer(cid)) != null) { // Execute as ingame player, if online - if (!ConnectedSenders.containsKey(author.getID())) - ConnectedSenders.put(author.getID(), + if (!ConnectedSenders.containsKey(author.getStringID())) + ConnectedSenders.put(author.getStringID(), new DiscordPlayerSender(author, event.getMessage().getChannel(), mcp)); - dsender = ConnectedSenders.get(author.getID()); + dsender = ConnectedSenders.get(author.getStringID()); } else { TBMCPlayer p = dp.getAs(TBMCPlayer.class); - if (!UnconnectedSenders.containsKey(author.getID())) - UnconnectedSenders.put(author.getID(), new DiscordSender(author, + if (!UnconnectedSenders.containsKey(author.getStringID())) + UnconnectedSenders.put(author.getStringID(), new DiscordSender(author, event.getMessage().getChannel(), p == null ? null : p.PlayerName().get())); // Display the playername, if found - dsender = UnconnectedSenders.get(author.getID()); + dsender = UnconnectedSenders.get(author.getStringID()); } for (IUser u : event.getMessage().getMentions()) { dmessage = dmessage.replace(u.mention(false), "@" + u.getName()); // TODO: IG Formatting - final Optional nick = u.getNicknameForGuild(DiscordPlugin.mainServer); - dmessage = dmessage.replace(u.mention(true), "@" + (nick.isPresent() ? nick.get() : u.getName())); + final String nick = u.getNicknameForGuild(DiscordPlugin.mainServer); + dmessage = dmessage.replace(u.mention(true), "@" + (nick != null ? nick : u.getName())); } if (dmessage.startsWith("/")) { @@ -142,9 +141,9 @@ public class MCChatListener implements Listener, IListener dmessage + (event.getMessage().getAttachments().size() > 0 ? "\n" + event.getMessage() .getAttachments().stream().map(a -> a.getUrl()).collect(Collectors.joining("\n")) : "")); - event.getMessage().getChannel().getMessages().stream().forEach(m -> { + event.getMessage().getChannel().getMessageHistory().stream().forEach(m -> { try { - final IReaction reaction = m.getReactionByName(DiscordPlugin.DELIVERED_REACTION); + final IReaction reaction = m.getReactionByUnicode(DiscordPlugin.DELIVERED_REACTION); if (reaction != null) DiscordPlugin.perform(() -> m.removeReaction(reaction)); } catch (Exception e) { diff --git a/src/main/java/buttondevteam/discordplugin/listeners/MCListener.java b/src/main/java/buttondevteam/discordplugin/listeners/MCListener.java index 9009b19..89af699 100644 --- a/src/main/java/buttondevteam/discordplugin/listeners/MCListener.java +++ b/src/main/java/buttondevteam/discordplugin/listeners/MCListener.java @@ -18,7 +18,6 @@ import buttondevteam.lib.player.*; import net.ess3.api.events.*; import sx.blah.discord.handle.obj.IRole; import sx.blah.discord.handle.obj.IUser; -import sx.blah.discord.handle.obj.Status.StatusType; import sx.blah.discord.util.DiscordException; import sx.blah.discord.util.MissingPermissionsException; @@ -28,7 +27,7 @@ public class MCListener implements Listener { final Player p = Bukkit.getPlayer(e.GetPlayer().getUUID()); if (ConnectCommand.WaitingToConnect.containsKey(e.GetPlayer().PlayerName().get())) { IUser user = DiscordPlugin.dc - .getUserByID(ConnectCommand.WaitingToConnect.get(e.GetPlayer().PlayerName().get())); + .getUserByID(Long.parseLong(ConnectCommand.WaitingToConnect.get(e.GetPlayer().PlayerName().get()))); 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"); @@ -51,15 +50,13 @@ public class MCListener implements Listener { DiscordPlayer dp = e.getPlayer().getAs(DiscordPlayer.class); if (dp == null || dp.getDiscordID() == null || dp.getDiscordID() == "") return; - IUser user = DiscordPlugin.dc.getUserByID(dp.getDiscordID()); + IUser user = DiscordPlugin.dc.getUserByID(Long.parseLong(dp.getDiscordID())); e.addInfo("Discord tag: " + user.getName() + "#" + user.getDiscriminator()); - if (!user.getStatus().getType().equals(StatusType.NONE)) { - if (user.getStatus().getType().equals(StatusType.GAME)) - e.addInfo("Discord status: Playing " + user.getStatus().getStatusMessage()); - else if (user.getStatus().getType().equals(StatusType.STREAM)) - e.addInfo("Discord status: Streaming " + user.getStatus().getStatusMessage() + " - " - + user.getStatus().getUrl()); - } + e.addInfo(user.getPresence().getStatus().toString()); + if (user.getPresence().getPlayingText().isPresent()) + e.addInfo("Playing " + user.getPresence().getPlayingText().get()); + else if (user.getPresence().getStreamingUrl().isPresent()) + e.addInfo("Streaming " + user.getPresence().getStreamingUrl().get()); } @EventHandler(priority = EventPriority.LOW) @@ -85,13 +82,13 @@ public class MCListener implements Listener { public void onPlayerMute(MuteStatusChangeEvent e) { try { DiscordPlugin.perform(() -> { - final IRole role = DiscordPlugin.dc.getRoleByID("164090010461667328"); + final IRole role = DiscordPlugin.dc.getRoleByID(164090010461667328L); final CommandSource source = e.getAffected().getSource(); if (!source.isPlayer()) return; - final IUser user = DiscordPlugin.dc - .getUserByID(TBMCPlayerBase.getPlayer(source.getPlayer().getUniqueId(), TBMCPlayer.class) - .getAs(DiscordPlayer.class).getDiscordID()); + final IUser user = DiscordPlugin.dc.getUserByID( + Long.parseLong(TBMCPlayerBase.getPlayer(source.getPlayer().getUniqueId(), TBMCPlayer.class) + .getAs(DiscordPlayer.class).getDiscordID())); // TODO: Use long if (e.getValue()) user.addRole(role); else diff --git a/src/test/java/buttondevteam/DiscordPlugin/AppTest.java b/src/test/java/buttondevteam/DiscordPlugin/AppTest.java index 1bac044..c560777 100644 --- a/src/test/java/buttondevteam/DiscordPlugin/AppTest.java +++ b/src/test/java/buttondevteam/DiscordPlugin/AppTest.java @@ -37,7 +37,8 @@ public class AppTest extends TestCase { public void testApp() { /*String sourcemessage = "Test message"; Exception e = new Exception("Test exception"); - StringBuilder sb = TBMCCoreAPI.IsTestServer() ? new StringBuilder() : new StringBuilder("").append("\n"); + 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")) @@ -52,7 +53,8 @@ public class AppTest extends TestCase { stackTrace = stackTrace.substring(0, 1800); sb.append(stackTrace).append("\n"); sb.append("```"); - System.out.println(sb.toString()); */ + System.out.println(sb.toString()); + assertTrue(sb.toString().contains("Coder role"));*/ assertTrue(true); } } From cf0d2e7d5d4044215568415e1824b851e9f5a6b6 Mon Sep 17 00:00:00 2001 From: NorbiPeti Date: Sat, 13 May 2017 16:08:01 +0200 Subject: [PATCH 4/6] Fixed #27 and did a bit of #16 --- .../listeners/MCChatListener.java | 32 +++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/src/main/java/buttondevteam/discordplugin/listeners/MCChatListener.java b/src/main/java/buttondevteam/discordplugin/listeners/MCChatListener.java index 5c9e3d5..c7124b4 100644 --- a/src/main/java/buttondevteam/discordplugin/listeners/MCChatListener.java +++ b/src/main/java/buttondevteam/discordplugin/listeners/MCChatListener.java @@ -44,10 +44,10 @@ public class MCChatListener implements Listener, IListener || lastmsgtime / 1000000000f < nanoTime / 1000000000f - 120) { lastmessage = DiscordPlugin.sendMessageToChannel(DiscordPlugin.chatchannel, "", embedObject); lastmsgtime = nanoTime; + lastmsg = e.getMessage(); } else try { - embedObject.description = lastmessage.getEmbeds().get(0).getDescription() + "\n" - + embedObject.description; + lastmsg = embedObject.description = lastmsg + "\n" + embedObject.description; DiscordPlugin.perform(() -> lastmessage.edit("", embedObject)); } catch (MissingPermissionsException | DiscordException e1) { TBMCCoreAPI.SendException("An error occured while editing chat message!", e1); @@ -55,11 +55,39 @@ public class MCChatListener implements Listener, IListener } // TODO: Author URL } + @EventHandler + public void onChatPreprocess(TBMCChatPreprocessEvent event) { + int start = -1; + // System.out.println("A"); + while ((start = event.getMessage().indexOf('@', start + 1)) != -1) { + // System.out.println("Start: " + start); + int mid = event.getMessage().indexOf('#', start + 1); + // System.out.println("Mid: " + mid); + if (mid == -1) + return; + int end_ = event.getMessage().indexOf(' ', mid + 1); + // System.out.println("End: " + end_); + if (end_ == -1) + end_ = event.getMessage().length(); + final int end = end_; + final int startF = start; + // System.out.println("Name: " + event.getMessage().substring(start, mid)); + // System.out.println("Disc: " + event.getMessage().substring(mid, end)); + DiscordPlugin.dc.getUsersByName(event.getMessage().substring(start + 1, mid)).stream() + .filter(u -> u.getDiscriminator().equals(event.getMessage().substring(mid + 1, end))).findAny() + .ifPresent(user -> event.setMessage(event.getMessage().substring(0, startF) + "@" + user.getName() + + (event.getMessage().length() > end ? event.getMessage().substring(end) + : ""))); // TODO: Add formatting + start = end; // Skip any @s inside the mention + } + } + private static final String[] UnconnectedCmds = new String[] { "list", "u", "shrug", "tableflip", "unflip", "mwiki", "yeehaw" }; private static IMessage lastmessage = null; private static long lastmsgtime = 0; + private static String lastmsg; private static short lastlist = 0; private static short lastlistp = 0; From 0bbb436992e8577f9222b55523cf553b5df925cf Mon Sep 17 00:00:00 2001 From: NorbiPeti Date: Mon, 15 May 2017 01:52:09 +0200 Subject: [PATCH 5/6] Added when server will be ready --- .../listeners/CommandListener.java | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/src/main/java/buttondevteam/discordplugin/listeners/CommandListener.java b/src/main/java/buttondevteam/discordplugin/listeners/CommandListener.java index f9941df..461349e 100644 --- a/src/main/java/buttondevteam/discordplugin/listeners/CommandListener.java +++ b/src/main/java/buttondevteam/discordplugin/listeners/CommandListener.java @@ -1,5 +1,8 @@ package buttondevteam.discordplugin.listeners; +import java.util.ArrayList; +import java.util.Random; + import buttondevteam.discordplugin.DiscordPlugin; import buttondevteam.discordplugin.commands.DiscordCommandBase; import sx.blah.discord.api.events.IListener; @@ -10,6 +13,25 @@ import sx.blah.discord.handle.obj.IMessage; public class CommandListener { + private static final String[] serverReadyStrings = new String[] { "In one week from now", // Ali + "Between now and the heat-death of the universe.", // Ghostise + "Soon™", "Ask again this time next month", // Ghostise + "In about 3 seconds", // Nicolai + }; + + private static final Random serverReadyRandom = new Random(); + private static final ArrayList usableServerReadyStrings = new ArrayList(serverReadyStrings.length) { + private static final long serialVersionUID = 2213771460909848770L; + { + createUsableServerReadyStrings(); + } + }; + + private static void createUsableServerReadyStrings() { + for (short i = 0; i < serverReadyStrings.length; i++) + usableServerReadyStrings.add(i); + } + public static IListener[] getListeners() { return new IListener[] { new IListener() { @Override @@ -30,6 +52,18 @@ public class CommandListener { public void handle(MessageReceivedEvent event) { if (DiscordPlugin.SafeMode) return; + if (event.getMessage().getContent().toLowerCase().contains("when will the server be open?")) { + int next; + /* + * if (serverReadyStrings.length <= lastServerReadyStrings.size()) { next = lastServerReadyStrings.get(0); lastServerReadyStrings.clear(); } else { next = (short) serverReadyRandom + * .nextInt(serverReadyStrings.length - lastServerReadyStrings.size()); for (short i = 0; i < lastServerReadyStrings.size(); i++) { short j = lastServerReadyStrings.get(i); if + * (next == j) next++; if (next >= serverReadyStrings.length) next = 0; } lastServerReadyStrings.add(next); } + */ + if (usableServerReadyStrings.size() == 0) + createUsableServerReadyStrings(); + next = usableServerReadyStrings.remove(serverReadyRandom.nextInt(usableServerReadyStrings.size())); + DiscordPlugin.sendMessageToChannel(event.getMessage().getChannel(), serverReadyStrings[next]); + } if (!event.getMessage().getChannel().isPrivate()) return; if (event.getMessage().getAuthor().isBot()) From bb416ee075372520d2daee04b304020e9f159a31 Mon Sep 17 00:00:00 2001 From: NorbiPeti Date: Mon, 15 May 2017 02:19:40 +0200 Subject: [PATCH 6/6] Fixed issue --- .../discordplugin/listeners/CommandListener.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/buttondevteam/discordplugin/listeners/CommandListener.java b/src/main/java/buttondevteam/discordplugin/listeners/CommandListener.java index 461349e..2d0cdb1 100644 --- a/src/main/java/buttondevteam/discordplugin/listeners/CommandListener.java +++ b/src/main/java/buttondevteam/discordplugin/listeners/CommandListener.java @@ -23,13 +23,13 @@ public class CommandListener { private static final ArrayList usableServerReadyStrings = new ArrayList(serverReadyStrings.length) { private static final long serialVersionUID = 2213771460909848770L; { - createUsableServerReadyStrings(); + createUsableServerReadyStrings(this); } }; - private static void createUsableServerReadyStrings() { + private static void createUsableServerReadyStrings(ArrayList list) { for (short i = 0; i < serverReadyStrings.length; i++) - usableServerReadyStrings.add(i); + list.add(i); } public static IListener[] getListeners() { @@ -60,7 +60,7 @@ public class CommandListener { * (next == j) next++; if (next >= serverReadyStrings.length) next = 0; } lastServerReadyStrings.add(next); } */ if (usableServerReadyStrings.size() == 0) - createUsableServerReadyStrings(); + createUsableServerReadyStrings(usableServerReadyStrings); next = usableServerReadyStrings.remove(serverReadyRandom.nextInt(usableServerReadyStrings.size())); DiscordPlugin.sendMessageToChannel(event.getMessage().getChannel(), serverReadyStrings[next]); }