From e4382bbcd287aa6311b64f78656ac5a952ee0145 Mon Sep 17 00:00:00 2001 From: NorbiPeti Date: Fri, 18 Aug 2017 03:12:33 +0200 Subject: [PATCH] Full house cooldown, reset last msg in PM Plus test account enforced --- .../discordplugin/DiscordPlugin.java | 15 ++++++++++---- .../listeners/CommandListener.java | 8 +++++++- .../listeners/MCChatListener.java | 20 +++++++++++++++---- 3 files changed, 34 insertions(+), 9 deletions(-) diff --git a/src/main/java/buttondevteam/discordplugin/DiscordPlugin.java b/src/main/java/buttondevteam/discordplugin/DiscordPlugin.java index d44fd38..df4891a 100644 --- a/src/main/java/buttondevteam/discordplugin/DiscordPlugin.java +++ b/src/main/java/buttondevteam/discordplugin/DiscordPlugin.java @@ -136,6 +136,13 @@ public class DiscordPlugin extends JavaPlugin implements IListener { } }); sent = true; + if (TBMCCoreAPI.IsTestServer() && !dc.getOurUser().getName().toLowerCase().contains("test")) { + TBMCCoreAPI.SendException( + "Won't load because we're in testing mode and not using the separate account.", + new Exception( + "The plugin refuses to load until you change the token to the testing account.")); + Bukkit.getPluginManager().disablePlugin(this); + } } }, 0, 10); for (IListener listener : CommandListener.getListeners()) @@ -184,7 +191,7 @@ public class DiscordPlugin extends JavaPlugin implements IListener { @Override public void onDisable() { stop = true; - for(val entry : MCChatListener.ConnectedSenders.entrySet()) + for (val entry : MCChatListener.ConnectedSenders.entrySet()) MCListener.callEventExcluding(new PlayerQuitEvent(entry.getValue(), ""), "ProtocolLib"); getConfig().set("lastannouncementtime", lastannouncementtime); getConfig().set("lastseentime", lastseentime); @@ -284,9 +291,9 @@ public class DiscordPlugin extends JavaPlugin implements IListener { try { if (channel == chatchannel) MCChatListener.resetLastMessage(); // If this is a chat message, it'll be set again - final String content = TBMCCoreAPI.IsTestServer() && (channel != chatchannel || channel == botroomchannel // Both are the same for testing - || channel.isPrivate()) // - ? "*The following message is from a test server*\n" + message : message; + else if (channel.isPrivate()) + MCChatListener.resetLastMessage(channel); + final String content = message; return perform( () -> embed == null ? channel.sendMessage(content) : channel.sendMessage(content, embed, false)); } catch (Exception e) { diff --git a/src/main/java/buttondevteam/discordplugin/listeners/CommandListener.java b/src/main/java/buttondevteam/discordplugin/listeners/CommandListener.java index 8d68df0..ab885a7 100644 --- a/src/main/java/buttondevteam/discordplugin/listeners/CommandListener.java +++ b/src/main/java/buttondevteam/discordplugin/listeners/CommandListener.java @@ -3,6 +3,7 @@ package buttondevteam.discordplugin.listeners; import java.util.ArrayList; import java.util.Arrays; import java.util.Random; +import java.util.concurrent.TimeUnit; import buttondevteam.discordplugin.DiscordPlayer; import buttondevteam.discordplugin.DiscordPlugin; @@ -54,6 +55,8 @@ public class CommandListener { list.add(i); } + private static long lasttime = 0; + public static IListener[] getListeners() { return new IListener[] { new IListener() { @Override @@ -102,12 +105,15 @@ public class CommandListener { && event.getUser().getRolesForGuild(DiscordPlugin.devServer).stream() .anyMatch(r -> r.getLongID() == devrole.getLongID()) && DiscordPlugin.devServer.getUsersByRole(devrole).stream() - .noneMatch(u -> u.getPresence().getStatus().equals(StatusType.OFFLINE))) + .noneMatch(u -> u.getPresence().getStatus().equals(StatusType.OFFLINE)) + && lasttime + 10 < TimeUnit.NANOSECONDS.toHours(System.nanoTime())) { DiscordPlugin.sendMessageToChannel(DiscordPlugin.devofficechannel, "Full house!", new EmbedBuilder() .withImage( "https://cdn.discordapp.com/attachments/249295547263877121/249687682618359808/poker-hand-full-house-aces-kings-playing-cards-15553791.png") .build()); + lasttime = TimeUnit.NANOSECONDS.toHours(System.nanoTime()); + } } } }; } diff --git a/src/main/java/buttondevteam/discordplugin/listeners/MCChatListener.java b/src/main/java/buttondevteam/discordplugin/listeners/MCChatListener.java index 0fcd327..7ddce07 100644 --- a/src/main/java/buttondevteam/discordplugin/listeners/MCChatListener.java +++ b/src/main/java/buttondevteam/discordplugin/listeners/MCChatListener.java @@ -190,6 +190,12 @@ public class MCChatListener implements Listener, IListener : lastmsgdata).message = null; } // Don't set the whole object to null, the player and channel information should be preserved + public static void resetLastMessage(IChannel channel) { + for (LastMsgData data : lastmsgPerUser) + if (data.channel.getLongID() == channel.getLongID()) + data.message = null; // Since only private channels are stored, only those will work anyways + } + /** * This overload sends it to the global chat. */ @@ -215,7 +221,10 @@ public class MCChatListener implements Listener, IListener && !(event.getMessage().getChannel().isPrivate() && user.isMinecraftChatEnabled() && !DiscordPlugin.checkIfSomeoneIsTestingWhileWeArent())) return; - resetLastMessage(); + if (!event.getMessage().getChannel().isPrivate()) + resetLastMessage(); + else + resetLastMessage(event.getMessage().getChannel()); lastlist++; if (author.isBot()) return; @@ -284,9 +293,12 @@ public class MCChatListener implements Listener, IListener val oldch = dsender.getMcchannel(); if (oldch instanceof ChatRoom) ((ChatRoom) oldch).leaveRoom(dsender); - dsender.setMcchannel(chc); - if (chc instanceof ChatRoom) - ((ChatRoom) chc).joinRoom(dsender); + if (!oldch.ID.equals(chc.ID)) { + dsender.setMcchannel(chc); + if (chc instanceof ChatRoom) + ((ChatRoom) chc).joinRoom(dsender); + } else + dsender.setMcchannel(Channel.GlobalChat); dsender.sendMessage("You're now talking in: " + DiscordPlugin.sanitizeString(dsender.getMcchannel().DisplayName)); } else { // Send single message