From 9a00c260a4a8b69cf4a155e2097e037a851967d6 Mon Sep 17 00:00:00 2001 From: NorbiPeti Date: Wed, 23 Aug 2017 02:44:53 +0200 Subject: [PATCH] Fixes related to mcchat and other fixes - Fixed crash of PresenceUpdateEvent - Lowered the frequency of full houses - Removed testing-related method - Added support for null exception messages... - Added indicator to show if someone is talking from Discord --- .../discordplugin/DiscordPlugin.java | 5 ----- .../listeners/CommandListener.java | 9 ++++++--- .../listeners/ExceptionListener.java | 3 ++- .../listeners/MCChatListener.java | 20 ++++++++++++------- 4 files changed, 21 insertions(+), 16 deletions(-) diff --git a/src/main/java/buttondevteam/discordplugin/DiscordPlugin.java b/src/main/java/buttondevteam/discordplugin/DiscordPlugin.java index df4891a..9c3dc77 100644 --- a/src/main/java/buttondevteam/discordplugin/DiscordPlugin.java +++ b/src/main/java/buttondevteam/discordplugin/DiscordPlugin.java @@ -355,9 +355,4 @@ public class DiscordPlugin extends JavaPlugin implements IListener { return null; return RequestBuffer.request(action).get(); // Let the pros handle this } - - public static boolean checkIfSomeoneIsTestingWhileWeArent() { - return !TBMCCoreAPI.IsTestServer() - && dc.getOurUser().getPresence().getPlayingText().orElse("").equals("testing"); - } } diff --git a/src/main/java/buttondevteam/discordplugin/listeners/CommandListener.java b/src/main/java/buttondevteam/discordplugin/listeners/CommandListener.java index ab885a7..aca214b 100644 --- a/src/main/java/buttondevteam/discordplugin/listeners/CommandListener.java +++ b/src/main/java/buttondevteam/discordplugin/listeners/CommandListener.java @@ -2,6 +2,7 @@ package buttondevteam.discordplugin.listeners; import java.util.ArrayList; import java.util.Arrays; +import java.util.Calendar; import java.util.Random; import java.util.concurrent.TimeUnit; @@ -89,8 +90,7 @@ public class CommandListener { } if (!event.getMessage().getChannel().isPrivate() // || DiscordPlayer.getUser(event.getAuthor().getStringID(), DiscordPlayer.class) - .isMinecraftChatEnabled() - || DiscordPlugin.checkIfSomeoneIsTestingWhileWeArent()) + .isMinecraftChatEnabled()) return; if (event.getMessage().getAuthor().isBot()) return; @@ -99,6 +99,8 @@ public class CommandListener { }, new IListener() { @Override public void handle(PresenceUpdateEvent event) { + if (DiscordPlugin.SafeMode) + return; val devrole = DiscordPlugin.devServer.getRolesByName("Developer").get(0); if (event.getOldPresence().getStatus().equals(StatusType.OFFLINE) && !event.getNewPresence().getStatus().equals(StatusType.OFFLINE) @@ -106,7 +108,8 @@ public class CommandListener { .anyMatch(r -> r.getLongID() == devrole.getLongID()) && DiscordPlugin.devServer.getUsersByRole(devrole).stream() .noneMatch(u -> u.getPresence().getStatus().equals(StatusType.OFFLINE)) - && lasttime + 10 < TimeUnit.NANOSECONDS.toHours(System.nanoTime())) { + && lasttime + 10 < TimeUnit.NANOSECONDS.toHours(System.nanoTime()) + && Calendar.getInstance().get(Calendar.DAY_OF_MONTH) % 5 == 0) { DiscordPlugin.sendMessageToChannel(DiscordPlugin.devofficechannel, "Full house!", new EmbedBuilder() .withImage( diff --git a/src/main/java/buttondevteam/discordplugin/listeners/ExceptionListener.java b/src/main/java/buttondevteam/discordplugin/listeners/ExceptionListener.java index 42c7416..eeec43a 100644 --- a/src/main/java/buttondevteam/discordplugin/listeners/ExceptionListener.java +++ b/src/main/java/buttondevteam/discordplugin/listeners/ExceptionListener.java @@ -24,7 +24,8 @@ public class ExceptionListener implements Listener { return; if (lastthrown.stream() .anyMatch(ex -> Arrays.equals(e.getException().getStackTrace(), ex.getStackTrace()) - && e.getException().getMessage().equals(ex.getMessage())) + && e.getException().getMessage() == null ? ex.getMessage() == null + : e.getException().getMessage().equals(ex.getMessage())) // e.Exception.Message==ex.Message && lastsourcemsg.contains(e.getSourceMessage())) return; SendException(e.getException(), e.getSourceMessage()); diff --git a/src/main/java/buttondevteam/discordplugin/listeners/MCChatListener.java b/src/main/java/buttondevteam/discordplugin/listeners/MCChatListener.java index 7ddce07..87c4a5b 100644 --- a/src/main/java/buttondevteam/discordplugin/listeners/MCChatListener.java +++ b/src/main/java/buttondevteam/discordplugin/listeners/MCChatListener.java @@ -41,6 +41,8 @@ public class MCChatListener implements Listener, IListener final EmbedBuilder embed = new EmbedBuilder().withAuthorName(authorPlayer) .withDescription(e.getMessage()).withColor(new Color(e.getChannel().color.getRed(), e.getChannel().color.getGreen(), e.getChannel().color.getBlue())); + // embed.appendField("Channel", ((e.getSender() instanceof DiscordSenderBase ? "d|" : "") + // + DiscordPlugin.sanitizeString(e.getChannel().DisplayName)), false); if (e.getSender() instanceof Player) embed.withAuthorIcon("https://minotar.net/avatar/" + ((Player) e.getSender()).getName() + "/32.png") .withAuthorUrl("https://tbmcplugins.github.io/profile.html?type=minecraft&id=" @@ -49,16 +51,18 @@ public class MCChatListener implements Listener, IListener embed.withAuthorIcon(((DiscordSenderBase) e.getSender()).getUser().getAvatarURL()) .withAuthorUrl("https://tbmcplugins.github.io/profile.html?type=discord&id=" + ((DiscordSenderBase) e.getSender()).getUser().getStringID()); // TODO: Constant/method to get URLs like this + if (e.getSender() instanceof DiscordSenderBase) + embed.withAuthorName("[D]" + authorPlayer); final long nanoTime = System.nanoTime(); Consumer doit = lastmsgdata -> { final EmbedObject embedObject = embed.build(); - String msg = lastmsgdata.channel.isPrivate() + final String dmsg = 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.mcchannel.ID.equals(e.getChannel().ID)) { - lastmsgdata.message = DiscordPlugin.sendMessageToChannel(lastmsgdata.channel, msg, embedObject); + lastmsgdata.message = DiscordPlugin.sendMessageToChannel(lastmsgdata.channel, dmsg, embedObject); lastmsgdata.time = nanoTime; lastmsgdata.mcchannel = e.getChannel(); lastmsgdata.content = embedObject.description; @@ -67,7 +71,7 @@ public class MCChatListener implements Listener, IListener 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(msg, embedObject)); + DiscordPlugin.perform(() -> _lastmsgdata.message.edit(dmsg, embedObject)); } catch (MissingPermissionsException | DiscordException e1) { TBMCCoreAPI.SendException("An error occured while editing chat message!", e1); } @@ -218,8 +222,7 @@ public class MCChatListener implements Listener, IListener val author = event.getMessage().getAuthor(); val user = DiscordPlayer.getUser(author.getStringID(), DiscordPlayer.class); if (!event.getMessage().getChannel().getStringID().equals(DiscordPlugin.chatchannel.getStringID()) - && !(event.getMessage().getChannel().isPrivate() && user.isMinecraftChatEnabled() - && !DiscordPlugin.checkIfSomeoneIsTestingWhileWeArent())) + && !(event.getMessage().getChannel().isPrivate() && user.isMinecraftChatEnabled())) return; if (!event.getMessage().getChannel().isPrivate()) resetLastMessage(); @@ -281,7 +284,8 @@ public class MCChatListener implements Listener, IListener Optional ch = Channel.getChannels().stream().filter(c -> c.ID.equalsIgnoreCase(topcmd)) .findAny(); if (!ch.isPresent()) - VanillaCommandListener.runBukkitOrVanillaCommand(dsender, cmd); + Bukkit.getScheduler().runTask(DiscordPlugin.plugin, + () -> VanillaCommandListener.runBukkitOrVanillaCommand(dsender, cmd)); else { Channel chc = ch.get(); if (!chc.ID.equals(Channel.GlobalChat.ID) && !event.getMessage().getChannel().isPrivate()) @@ -312,7 +316,9 @@ public class MCChatListener implements Listener, IListener } else {// Not a command if (dmessage.length() == 0 && event.getMessage().getAttachments().size() == 0 && !event.getChannel().isPrivate()) - TBMCChatAPI.SendChatMessage(Channel.GlobalChat, dsender, "pinned a message on Discord."); // TODO: Not chat message + TBMCChatAPI.SendSystemMessage(Channel.GlobalChat, 0, + (dsender instanceof Player ? ((Player) dsender).getDisplayName() : dsender.getName()) + + " pinned a message on Discord."); else { sendChatMessage.accept(dsender.getMcchannel(), dmessage); react = true;