diff --git a/pom.xml b/pom.xml index 3a40667..f9006bf 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ uk.co.angrybee.joe discord-whitelister - 1.4.4 + 1.4.5 discord-whitelister https://github.com/JoeShimell/DiscordWhitelisterSpigot diff --git a/src/main/java/uk/co/angrybee/joe/DiscordClient.java b/src/main/java/uk/co/angrybee/joe/DiscordClient.java index 1dfdd81..28ff1a8 100644 --- a/src/main/java/uk/co/angrybee/joe/DiscordClient.java +++ b/src/main/java/uk/co/angrybee/joe/DiscordClient.java @@ -27,10 +27,12 @@ import uk.co.angrybee.joe.stores.WhitelistedPlayers; import javax.annotation.Nonnull; import javax.security.auth.login.LoginException; +import javax.xml.soap.Text; import java.awt.Color; import java.io.*; import java.net.URL; import java.util.*; +import java.util.concurrent.TimeUnit; // handles Discord interaction public class DiscordClient extends ListenerAdapter @@ -330,13 +332,18 @@ public class DiscordClient extends ListenerAdapter // TODO remove, use in command classes when complete AuthorPermissions authorPermissions = new AuthorPermissions(messageReceivedEvent); User author = messageReceivedEvent.getAuthor(); - //String messageContents = messageReceivedEvent.getMessage().getContentDisplay(); // used above TextChannel channel = messageReceivedEvent.getTextChannel(); // determine which command to run if (splitMessage.length == 1 && CheckForPrefix(whitelistInfoPrefix, splitMessage)) { + if(MainConfig.getMainConfig().getBoolean("hide-info-command-replies")) + return; + CommandInfo.ExecuteCommand(messageReceivedEvent); + + if(DiscordWhitelister.removeUnnecessaryMessages) + RemoveMessageAfterSeconds(messageReceivedEvent, DiscordWhitelister.removeMessageWaitTime); return; } @@ -344,6 +351,9 @@ public class DiscordClient extends ListenerAdapter || DiscordWhitelister.getUseCustomPrefixes() && splitMessage.length >= customWhitelistAddPrefixSplit.length && CheckForPrefix(customWhitelistAddPrefixSplit, splitMessage)) { CommandAdd.ExecuteCommand(messageReceivedEvent, splitMessage); + + if(DiscordWhitelister.removeUnnecessaryMessages) + RemoveMessageAfterSeconds(messageReceivedEvent, DiscordWhitelister.removeMessageWaitTime); return; } @@ -375,7 +385,10 @@ public class DiscordClient extends ListenerAdapter if (finalNameToRemove.isEmpty()) { - channel.sendMessage(removeCommandInfo).queue(); + if(!MainConfig.getMainConfig().getBoolean("hide-info-command-replies")) + QueueAndRemoveAfterSeconds(channel, removeCommandInfo); + + TempRemoveOriginalMessageAfterSeconds(messageReceivedEvent); return; } else @@ -390,7 +403,11 @@ public class DiscordClient extends ListenerAdapter if(!DiscordWhitelister.useCustomMessages) { - channel.sendMessage(CreateEmbeddedMessage("This user is not on the whitelist", (author.getAsMention() + ", cannot remove user as `" + finalNameToRemove + "` is not on the whitelist!"), EmbedMessageType.INFO).build()).queue(); + MessageEmbed messageEmbed = CreateEmbeddedMessage("This user is not on the whitelist", + (author.getAsMention() + ", cannot remove user as `" + finalNameToRemove + "` is not on the whitelist!"), EmbedMessageType.INFO).build(); + QueueAndRemoveAfterSeconds(channel, messageEmbed); + TempRemoveOriginalMessageAfterSeconds(messageReceivedEvent); + // Return below } else { @@ -399,7 +416,9 @@ public class DiscordClient extends ListenerAdapter customMessage = customMessage.replaceAll("\\{Sender}", author.getAsMention()); customMessage = customMessage.replaceAll("\\{MinecraftUsername}", finalNameToRemove); - channel.sendMessage(CreateEmbeddedMessage(customTitle, customMessage, EmbedMessageType.INFO).build()).queue(); + MessageEmbed messageEmbed = CreateEmbeddedMessage(customTitle, customMessage, EmbedMessageType.INFO).build(); + QueueAndRemoveAfterSeconds(channel, messageEmbed); + TempRemoveOriginalMessageAfterSeconds(messageReceivedEvent); } } @@ -416,7 +435,10 @@ public class DiscordClient extends ListenerAdapter if(!DiscordWhitelister.useCustomMessages) { - embedBuilderSuccess = CreateEmbeddedMessage((finalNameToRemove + " has been removed"), (author.getAsMention() + " has removed `" + finalNameToRemove + "` from the whitelist."), EmbedMessageType.SUCCESS); + if(!MainConfig.getMainConfig().getBoolean("set-removed-message-colour-to-red")) + embedBuilderSuccess = CreateEmbeddedMessage((finalNameToRemove + " has been removed"), (author.getAsMention() + " has removed `" + finalNameToRemove + "` from the whitelist."), EmbedMessageType.SUCCESS); + else + embedBuilderSuccess = CreateEmbeddedMessage((finalNameToRemove + " has been removed"), (author.getAsMention() + " has removed `" + finalNameToRemove + "` from the whitelist."), EmbedMessageType.FAILURE); } else { @@ -427,7 +449,16 @@ public class DiscordClient extends ListenerAdapter customMessage = customMessage.replaceAll("\\{Sender}", author.getAsMention()); customMessage = customMessage.replaceAll("\\{MinecraftUsername}", finalNameToRemove); - embedBuilderSuccess = CreateEmbeddedMessage(customTitle, customMessage, EmbedMessageType.SUCCESS); + if(!MainConfig.getMainConfig().getBoolean("set-removed-message-colour-to-red")) + embedBuilderSuccess = CreateEmbeddedMessage(customTitle, customMessage, EmbedMessageType.SUCCESS); + else + embedBuilderSuccess = CreateEmbeddedMessage(customTitle, customMessage, EmbedMessageType.FAILURE); + } + + if(DiscordWhitelister.showPlayerSkin) + { + String playerUUID = DiscordClient.minecraftUsernameToUUID(finalNameToRemove); + embedBuilderSuccess.setThumbnail("https://minotar.net/armor/bust/" + playerUUID + "/100.png"); } EmbedBuilder embedBuilderFailure; @@ -442,6 +473,7 @@ public class DiscordClient extends ListenerAdapter || !WhitelistedPlayers.usingEasyWhitelist && !WhitelistedPlayers.CheckForPlayer(finalNameToRemove)) { channel.sendMessage(embedBuilderSuccess.build()).queue(); + TempRemoveOriginalMessageAfterSeconds(messageReceivedEvent); if(DiscordWhitelister.useUltraPerms) { @@ -525,14 +557,17 @@ public class DiscordClient extends ListenerAdapter } else { - channel.sendMessage(embedBuilderFailure.build()).queue(); + QueueAndRemoveAfterSeconds(channel, embedBuilderFailure.build()); + TempRemoveOriginalMessageAfterSeconds(messageReceivedEvent); } + return null; }); return; } return; } + } if (authorPermissions.isUserCanAdd() && !authorPermissions.isUserCanAddRemove()) @@ -558,12 +593,14 @@ public class DiscordClient extends ListenerAdapter embedBuilderInfo = CreateEmbeddedMessage(customTitle, customMessage, EmbedMessageType.INFO); } - channel.sendMessage(embedBuilderInfo.build()).queue(); + QueueAndRemoveAfterSeconds(channel, embedBuilderInfo.build()); + TempRemoveOriginalMessageAfterSeconds(messageReceivedEvent); return; } // if the user doesn't have any allowed roles - channel.sendMessage(CreateInsufficientPermsMessage(author)).queue(); + QueueAndRemoveAfterSeconds(channel, CreateInsufficientPermsMessage(author)); + //TempRemoveOriginalMessageAfterSeconds(messageReceivedEvent); } // Clear Whitelists command @@ -579,11 +616,24 @@ public class DiscordClient extends ListenerAdapter if(messageContents.toLowerCase().trim().equals("!clearname") && !DiscordWhitelister.getUseCustomPrefixes() || messageContents.toLowerCase().trim().equals(customClearNamePrefix) && DiscordWhitelister.getUseCustomPrefixes()) { - if(!DiscordWhitelister.getUseCustomPrefixes()) - channel.sendMessage(CreateEmbeddedMessage("Clear Name Command", "Usage: `!clearname `\n", EmbedMessageType.INFO).build()).queue(); - else - channel.sendMessage(CreateEmbeddedMessage("Clear Name Command", "Usage: `" + customClearNamePrefix + " `\n", EmbedMessageType.INFO).build()).queue(); + if(!MainConfig.getMainConfig().getBoolean("hide-info-command-replies")) + { + TempRemoveOriginalMessageAfterSeconds(messageReceivedEvent); + return; + } + if(!DiscordWhitelister.getUseCustomPrefixes()) + { + MessageEmbed messageEmbed = CreateEmbeddedMessage("Clear Name Command", "Usage: `!clearname `\n", EmbedMessageType.INFO).build(); + QueueAndRemoveAfterSeconds(channel, messageEmbed); + } + else + { + MessageEmbed messageEmbed = CreateEmbeddedMessage("Clear Name Command", "Usage: `" + customClearNamePrefix + " `\n", EmbedMessageType.INFO).build(); + QueueAndRemoveAfterSeconds(channel, messageEmbed); + } + + TempRemoveOriginalMessageAfterSeconds(messageReceivedEvent); return; } @@ -691,20 +741,28 @@ public class DiscordClient extends ListenerAdapter clearNameTitle = clearNameTitle.replaceAll("\\{MinecraftUsername}", splitMessage[userNameIndex]); - channel.sendMessage(CreateEmbeddedMessage(clearNameTitle, clearNameMessage, EmbedMessageType.SUCCESS).build()).queue(); + MessageEmbed messageEmbed = CreateEmbeddedMessage(clearNameTitle, clearNameMessage, EmbedMessageType.SUCCESS).build(); + QueueAndRemoveAfterSeconds(channel, messageEmbed); } else { - channel.sendMessage(CreateEmbeddedMessage("Successfully Cleared Name", (author.getAsMention() + " successfully cleared username `" + splitMessage[userNameIndex] + - "` from <@" + targetDiscordId + ">'s whitelisted users."), EmbedMessageType.SUCCESS).build()).queue(); + MessageEmbed messageEmbed = CreateEmbeddedMessage("Successfully Cleared Name", (author.getAsMention() + " successfully cleared username `" + splitMessage[userNameIndex] + + "` from <@" + targetDiscordId + ">'s whitelisted users."), EmbedMessageType.SUCCESS).build(); + QueueAndRemoveAfterSeconds(channel, messageEmbed); } + + TempRemoveOriginalMessageAfterSeconds(messageReceivedEvent); + return; } else { // Name not found if(!DiscordWhitelister.useCustomMessages) { - channel.sendMessage(CreateEmbeddedMessage((splitMessage[userNameIndex] + " not Found"), (author.getAsMention() + ", could not find name " + splitMessage[userNameIndex] + " to clear in user list."), EmbedMessageType.FAILURE).build()).queue(); + MessageEmbed messageEmbed = + CreateEmbeddedMessage((splitMessage[userNameIndex] + " not Found"), + (author.getAsMention() + ", could not find name " + splitMessage[userNameIndex] + " to clear in user list."), EmbedMessageType.FAILURE).build(); + QueueAndRemoveAfterSeconds(channel, messageEmbed); } else { @@ -714,13 +772,18 @@ public class DiscordClient extends ListenerAdapter customMessage = customMessage.replaceAll("\\{MinecraftUsername}", splitMessage[userNameIndex]); customTitle = customTitle.replaceAll("\\{MinecraftUsername}", splitMessage[userNameIndex]); - channel.sendMessage(CreateEmbeddedMessage(customTitle, customMessage, EmbedMessageType.FAILURE).build()).queue(); + MessageEmbed messageEmbed = CreateEmbeddedMessage(customTitle, customMessage, EmbedMessageType.FAILURE).build(); + QueueAndRemoveAfterSeconds(channel, messageEmbed); } + + TempRemoveOriginalMessageAfterSeconds(messageReceivedEvent); + return; } } else // Don't have permission { - channel.sendMessage(CreateInsufficientPermsMessage(author)).queue(); + QueueAndRemoveAfterSeconds(channel, CreateInsufficientPermsMessage(author)); + TempRemoveOriginalMessageAfterSeconds(messageReceivedEvent); return; } } @@ -735,8 +798,10 @@ public class DiscordClient extends ListenerAdapter // just inform staff, can add custom messages later if really needed if(authorPermissions.isUserCanAddRemove() && !authorPermissions.isUserIsBanned() || authorPermissions.isUserCanAdd() && !authorPermissions.isUserIsBanned()) { - channel.sendMessage(CreateEmbeddedMessage("This Command is Only Available for Limited Whitelister Roles", - "If staff members need to clear a name from the whitelist please use `!clearname `.", EmbedMessageType.INFO).build()).queue(); + MessageEmbed messageEmbed = CreateEmbeddedMessage("This Command is Only Available for Limited Whitelister Roles", + "If staff members need to clear a name from the whitelist please use `!clearname `.", EmbedMessageType.INFO).build(); + QueueAndRemoveAfterSeconds(channel, messageEmbed); + TempRemoveOriginalMessageAfterSeconds(messageReceivedEvent); return; } @@ -783,8 +848,9 @@ public class DiscordClient extends ListenerAdapter } message += "\n You now have **" + maxWhitelistAmount + " whitelist(s) remaining**."; - channel.sendMessage(CreateEmbeddedMessage(("Successfully Removed " + author.getName() + "'s Whitelisted Entries"), - message, EmbedMessageType.FAILURE).build()).queue(); + MessageEmbed messageEmbed = CreateEmbeddedMessage(("Successfully Removed " + author.getName() + "'s Whitelisted Entries"), + message, EmbedMessageType.FAILURE).build(); + QueueAndRemoveAfterSeconds(channel, messageEmbed); } else { @@ -802,7 +868,8 @@ public class DiscordClient extends ListenerAdapter customMessage = customMessage.replaceAll("\\{RemovedEntries}", removedNames); customMessage = customMessage.replaceAll("\\{MaxWhitelistAmount}", String.valueOf(maxWhitelistAmount)); - channel.sendMessage(CreateEmbeddedMessage(customTitle,customMessage,EmbedMessageType.SUCCESS).build()).queue(); + MessageEmbed messageEmbed = CreateEmbeddedMessage(customTitle,customMessage,EmbedMessageType.SUCCESS).build(); + QueueAndRemoveAfterSeconds(channel, messageEmbed); } if(MainConfig.getMainConfig().getBoolean("whitelisted-role-auto-remove")) @@ -814,6 +881,9 @@ public class DiscordClient extends ListenerAdapter RemoveRolesFromUser(javaDiscordAPI.getGuilds().get(i), author.getId(), Arrays.asList(whitelistedRoleNames)); } } + + TempRemoveOriginalMessageAfterSeconds(messageReceivedEvent); + return; } else { @@ -823,8 +893,9 @@ public class DiscordClient extends ListenerAdapter // Log in Discord channel if(!DiscordWhitelister.useCustomMessages) { - channel.sendMessage(CreateEmbeddedMessage("No Entries to Remove", - (author.getAsMention() + ", you do not have any whitelisted entries to remove."), EmbedMessageType.FAILURE).build()).queue(); + MessageEmbed messageEmbed = CreateEmbeddedMessage("No Entries to Remove", + (author.getAsMention() + ", you do not have any whitelisted entries to remove."), EmbedMessageType.FAILURE).build(); + QueueAndRemoveAfterSeconds(channel, messageEmbed); } else { @@ -832,14 +903,19 @@ public class DiscordClient extends ListenerAdapter String customMessage = DiscordWhitelister.getCustomMessagesConfig().getString("whitelist-clear-failure-message"); customMessage = customMessage.replaceAll("\\{Sender}", author.getAsMention()); - channel.sendMessage(CreateEmbeddedMessage(customTitle, customMessage, EmbedMessageType.FAILURE).build()).queue(); + MessageEmbed messageEmbed = CreateEmbeddedMessage(customTitle, customMessage, EmbedMessageType.FAILURE).build(); + QueueAndRemoveAfterSeconds(channel, messageEmbed); } + + TempRemoveOriginalMessageAfterSeconds(messageReceivedEvent); + return; } } if(!authorPermissions.isUserCanAddRemove() && !authorPermissions.isUserCanAdd() && !authorPermissions.isUserHasLimitedAdd() || authorPermissions.isUserIsBanned()) { - channel.sendMessage(CreateInsufficientPermsMessage(author)).queue(); + QueueAndRemoveAfterSeconds(channel, CreateInsufficientPermsMessage(author)); + TempRemoveOriginalMessageAfterSeconds(messageReceivedEvent); return; } } @@ -853,12 +929,25 @@ public class DiscordClient extends ListenerAdapter if(messageContents.toLowerCase().trim().equals("!clearban") && !DiscordWhitelister.getUseCustomPrefixes() || messageContents.toLowerCase().trim().equals(customClearBanPrefix) && DiscordWhitelister.getUseCustomPrefixes()) { + if(!MainConfig.getMainConfig().getBoolean("hide-info-command-replies")) + { + TempRemoveOriginalMessageAfterSeconds(messageReceivedEvent); + return; + } + // Send info message if(!DiscordWhitelister.getUseCustomPrefixes()) - channel.sendMessage(CreateEmbeddedMessage("Clear Ban Command", "Usage: `!clearban `\n", EmbedMessageType.INFO).build()).queue(); + { + MessageEmbed messageEmbed = CreateEmbeddedMessage("Clear Ban Command", "Usage: `!clearban `\n", EmbedMessageType.INFO).build(); + QueueAndRemoveAfterSeconds(channel, messageEmbed); + } else - channel.sendMessage(CreateEmbeddedMessage("Clear Ban Command", "Usage: `" + customClearBanPrefix + " `\n", EmbedMessageType.INFO).build()).queue(); + { + MessageEmbed messageEmbed = CreateEmbeddedMessage("Clear Ban Command", "Usage: `" + customClearBanPrefix + " `\n", EmbedMessageType.INFO).build(); + QueueAndRemoveAfterSeconds(channel, messageEmbed); + } + TempRemoveOriginalMessageAfterSeconds(messageReceivedEvent); return; } @@ -900,8 +989,9 @@ public class DiscordClient extends ListenerAdapter if(!DiscordWhitelister.useCustomMessages) { - channel.sendMessage(CreateEmbeddedMessage(("Successfully Cleared `" + targetName + "`"), - (author.getAsMention() + " has successfully cleared `" + targetName + "` from the removed list(s)."), EmbedMessageType.SUCCESS).build()).queue(); + MessageEmbed messageEmbed = CreateEmbeddedMessage(("Successfully Cleared `" + targetName + "`"), + (author.getAsMention() + " has successfully cleared `" + targetName + "` from the removed list(s)."), EmbedMessageType.SUCCESS).build(); + QueueAndRemoveAfterSeconds(channel, messageEmbed); } else { @@ -911,17 +1001,20 @@ public class DiscordClient extends ListenerAdapter customMessage = customMessage.replaceAll("\\{MinecraftUsername}", targetName); customTitle = customTitle.replaceAll("\\{MinecraftUsername}", targetName); - channel.sendMessage(CreateEmbeddedMessage(customTitle, customMessage, EmbedMessageType.INFO).build()).queue(); + MessageEmbed messageEmbed = CreateEmbeddedMessage(customTitle, customMessage, EmbedMessageType.INFO).build(); + QueueAndRemoveAfterSeconds(channel, messageEmbed); } + TempRemoveOriginalMessageAfterSeconds(messageReceivedEvent); return; } else { if(!DiscordWhitelister.useCustomMessages) { - channel.sendMessage(CreateEmbeddedMessage(("Failed to Clear `" + targetName + "`"), - (author.getAsMention() + ", `" + targetName + "` cannot be found in any of the removed lists!"), EmbedMessageType.FAILURE).build()).queue(); + MessageEmbed messageEmbed = CreateEmbeddedMessage(("Failed to Clear `" + targetName + "`"), + (author.getAsMention() + ", `" + targetName + "` cannot be found in any of the removed lists!"), EmbedMessageType.FAILURE).build(); + QueueAndRemoveAfterSeconds(channel, messageEmbed); } else { @@ -931,15 +1024,18 @@ public class DiscordClient extends ListenerAdapter customMessage = customMessage.replaceAll("\\{MinecraftUsername}", targetName); customTitle = customTitle.replaceAll("\\{MinecraftUsername}", targetName); - channel.sendMessage(CreateEmbeddedMessage(customTitle, customMessage, EmbedMessageType.FAILURE).build()).queue(); + MessageEmbed messageEmbed = CreateEmbeddedMessage(customTitle, customMessage, EmbedMessageType.FAILURE).build(); + QueueAndRemoveAfterSeconds(channel, messageEmbed); } + TempRemoveOriginalMessageAfterSeconds(messageReceivedEvent); return; } } else { - channel.sendMessage(CreateInsufficientPermsMessage(author)); + QueueAndRemoveAfterSeconds(channel, CreateInsufficientPermsMessage(author)); + TempRemoveOriginalMessageAfterSeconds(messageReceivedEvent); return; } } @@ -948,8 +1044,37 @@ public class DiscordClient extends ListenerAdapter || DiscordWhitelister.getUseCustomPrefixes() && splitMessage.length >= customWhoIsPrefix.length && CheckForPrefix(customWhoIsPrefix, splitMessage)) { CommandWhoIs.ExecuteCommand(messageReceivedEvent, splitMessage); + + if(DiscordWhitelister.removeUnnecessaryMessages) + RemoveMessageAfterSeconds(messageReceivedEvent, DiscordWhitelister.removeMessageWaitTime); return; } + + // if no commands are executed, delete the message, if enabled + if(DiscordWhitelister.removeUnnecessaryMessages) + { + RemoveMessageAfterSeconds(messageReceivedEvent, DiscordWhitelister.removeMessageWaitTime); + + if(MainConfig.getMainConfig().getBoolean("show-warning-in-command-channel")) + { + if(!DiscordWhitelister.useCustomMessages) + { + MessageEmbed messageEmbed = CreateEmbeddedMessage("This Channel is for Commands Only", (author.getAsMention() + ", this channel is for commands only, please use another channel."), + EmbedMessageType.FAILURE).build(); + QueueAndRemoveAfterSeconds(channel, messageEmbed); + } + else + { + String customTitle = DiscordWhitelister.getCustomMessagesConfig().getString("command-channel-title"); + + String customMessage = DiscordWhitelister.getCustomMessagesConfig().getString("command-channel-message"); + customMessage = customMessage.replaceAll("\\{Sender}", author.getAsMention()); + + MessageEmbed messageEmbed = DiscordClient.CreateEmbeddedMessage(customTitle, customMessage, DiscordClient.EmbedMessageType.FAILURE).build(); + QueueAndRemoveAfterSeconds(channel, messageEmbed); + } + } + } } } @@ -1295,6 +1420,60 @@ public class DiscordClient extends ListenerAdapter } } + public static void RemoveMessageAfterSeconds(MessageReceivedEvent messageReceivedEvent, Integer timeToWait) + { + Thread removeTimerThread = new Thread(() -> + { + try + { + TimeUnit.SECONDS.sleep(timeToWait); + messageReceivedEvent.getMessage().delete().queue(); + } + catch (InterruptedException e) + { + e.printStackTrace(); + } + }); + + removeTimerThread.start(); + } + +// public static void SendAndRemoveMessagesAfterSeconds(MessageReceivedEvent messageReceivedEvent, List messages, Integer timeToWait) +// { +// TextChannel textChannel = messageReceivedEvent.getTextChannel(); +// +// for (Object o : messages) +// { +// // Only Remove supplied Messages +// if(o instanceof Message) +// { +// if(DiscordWhitelister.removeUnnecessaryMessages) +// RemoveMessageAfterSeconds(messageReceivedEvent, DiscordWhitelister.removeMessageWaitTime); +// } +// else if(o instanceof MessageEmbed) +// { +// if(DiscordWhitelister.removeUnnecessaryMessages) +// textChannel.sendMessage((MessageEmbed) o).queue(message -> message.delete().queueAfter(timeToWait, TimeUnit.SECONDS)); +// else +// textChannel.sendMessage((MessageEmbed) o).queue(); +// } +// } +// } + + public static void QueueAndRemoveAfterSeconds(TextChannel textChannel, MessageEmbed messageEmbed) + { + if(DiscordWhitelister.removeUnnecessaryMessages) + textChannel.sendMessage(messageEmbed).queue(message -> message.delete().queueAfter(DiscordWhitelister.removeMessageWaitTime, TimeUnit.SECONDS)); + else + textChannel.sendMessage(messageEmbed).queue(); + } + + public static void TempRemoveOriginalMessageAfterSeconds(MessageReceivedEvent messageReceivedEvent) + { + if(DiscordWhitelister.removeUnnecessaryMessages) + RemoveMessageAfterSeconds(messageReceivedEvent, DiscordWhitelister.removeMessageWaitTime); + } + // TODO: improve, not go through console commands // For ultra perms public static void AssignPermsToUser(String targetPlayerName, List permsToAssign) diff --git a/src/main/java/uk/co/angrybee/joe/DiscordWhitelister.java b/src/main/java/uk/co/angrybee/joe/DiscordWhitelister.java index 108d8aa..3fb591a 100755 --- a/src/main/java/uk/co/angrybee/joe/DiscordWhitelister.java +++ b/src/main/java/uk/co/angrybee/joe/DiscordWhitelister.java @@ -34,6 +34,7 @@ public class DiscordWhitelister extends JavaPlugin public static boolean useOnBanEvents = true; public static boolean useUltraPerms = false; public static boolean useOnWhitelistCommands = false; + public static boolean removeUnnecessaryMessages = false; public static boolean botEnabled; @@ -46,6 +47,8 @@ public class DiscordWhitelister extends JavaPlugin // For not counting vanished players when other players join/leave private static int vanishedPlayersCount; + public static int removeMessageWaitTime = 5; + @Override public void onEnable() { @@ -121,6 +124,9 @@ public class DiscordWhitelister extends JavaPlugin showVanishedPlayersInCount = MainConfig.getMainConfig().getBoolean("show-vanished-players-in-player-count"); useInGameAddRemoves = MainConfig.getMainConfig().getBoolean("add-in-game-adds-and-removes-to-list"); useOnBanEvents = MainConfig.getMainConfig().getBoolean("use-on-ban-events"); + removeUnnecessaryMessages = MainConfig.getMainConfig().getBoolean("remove-unnecessary-messages-from-whitelist-channel"); + + removeMessageWaitTime = MainConfig.getMainConfig().getInt("seconds-to-remove-message-from-whitelist-channel"); // Check for UltraPerms first if(MainConfig.getMainConfig().getBoolean("assign-perms-with-ultra-perms")) diff --git a/src/main/java/uk/co/angrybee/joe/VersionInfo.java b/src/main/java/uk/co/angrybee/joe/VersionInfo.java index f4e3cb0..dfcc886 100644 --- a/src/main/java/uk/co/angrybee/joe/VersionInfo.java +++ b/src/main/java/uk/co/angrybee/joe/VersionInfo.java @@ -10,5 +10,5 @@ public class VersionInfo return "v." + getVersion(); } - private static String version = "1.4.4"; + private static String version = "1.4.5"; } diff --git a/src/main/java/uk/co/angrybee/joe/commands/discord/CommandAdd.java b/src/main/java/uk/co/angrybee/joe/commands/discord/CommandAdd.java index ee5bf3c..534c57d 100644 --- a/src/main/java/uk/co/angrybee/joe/commands/discord/CommandAdd.java +++ b/src/main/java/uk/co/angrybee/joe/commands/discord/CommandAdd.java @@ -1,10 +1,7 @@ package uk.co.angrybee.joe.commands.discord; import net.dv8tion.jda.api.EmbedBuilder; -import net.dv8tion.jda.api.entities.Member; -import net.dv8tion.jda.api.entities.Role; -import net.dv8tion.jda.api.entities.TextChannel; -import net.dv8tion.jda.api.entities.User; +import net.dv8tion.jda.api.entities.*; import net.dv8tion.jda.api.events.message.MessageReceivedEvent; import uk.co.angrybee.joe.AuthorPermissions; import uk.co.angrybee.joe.DiscordClient; @@ -20,6 +17,7 @@ import uk.co.angrybee.joe.stores.WhitelistedPlayers; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; +import java.util.Queue; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; @@ -36,7 +34,10 @@ public class CommandAdd { if(!DiscordWhitelister.useCustomMessages) { - channel.sendMessage(DiscordClient.CreateEmbeddedMessage("You have been banned!", (author.getAsMention() + ", you cannot use this bot as you have been banned!"), DiscordClient.EmbedMessageType.FAILURE).build()).queue(); + MessageEmbed messageEmbed = + DiscordClient.CreateEmbeddedMessage("You have been banned!", (author.getAsMention() + ", you cannot use this bot as you have been banned!"), DiscordClient.EmbedMessageType.FAILURE).build(); + + DiscordClient.QueueAndRemoveAfterSeconds(channel, messageEmbed); } else { @@ -44,16 +45,16 @@ public class CommandAdd String customMessage = DiscordWhitelister.getCustomMessagesConfig().getString("banned-message"); customMessage = customMessage.replaceAll("\\{Sender}", author.getAsMention()); // Only checking for {Sender} - channel.sendMessage(DiscordClient.CreateEmbeddedMessage(customTitle, customMessage, DiscordClient.EmbedMessageType.FAILURE).build()).queue(); + MessageEmbed messageEmbed = DiscordClient.CreateEmbeddedMessage(customTitle, customMessage, DiscordClient.EmbedMessageType.FAILURE).build(); + DiscordClient.QueueAndRemoveAfterSeconds(channel, messageEmbed); } - return; } // Permission check if (!(authorPermissions.isUserCanAddRemove() || authorPermissions.isUserCanAdd() || DiscordClient.limitedWhitelistEnabled && authorPermissions.isUserHasLimitedAdd())) { - channel.sendMessage(DiscordClient.CreateInsufficientPermsMessage(author)).queue(); + DiscordClient.QueueAndRemoveAfterSeconds(channel, DiscordClient.CreateInsufficientPermsMessage(author)); return; } @@ -107,10 +108,12 @@ public class CommandAdd } exampleCommand.append(" <@discordMention>"); - channel.sendMessage(DiscordClient.CreateEmbeddedMessage("Too many arguments", + MessageEmbed messageEmbed = DiscordClient.CreateEmbeddedMessage("Too many arguments", (author.getAsMention() + ", expected 1 or 2 arguments but found " + amountOfArgs + ".\n" + "Example: " + exampleCommand.toString() + "\n\n **NOTE:** Only staff members may use the <@discordMention> parameter."), - DiscordClient.EmbedMessageType.FAILURE).build()).queue(); + DiscordClient.EmbedMessageType.FAILURE).build(); + + DiscordClient.QueueAndRemoveAfterSeconds(channel, messageEmbed); return; } @@ -135,9 +138,10 @@ public class CommandAdd { if(onlyHasLimitedAdd) { - channel.sendMessage(DiscordClient.CreateEmbeddedMessage("Insufficient Permissions", - (author.getAsMention() + ", only staff members can manually link Discord IDs. Please only enter your Minecraft name."), DiscordClient.EmbedMessageType.FAILURE).build()).queue(); + MessageEmbed messageEmbed = DiscordClient.CreateEmbeddedMessage("Insufficient Permissions", + (author.getAsMention() + ", only staff members can manually link Discord IDs. Please only enter your Minecraft name."), DiscordClient.EmbedMessageType.FAILURE).build(); + DiscordClient.QueueAndRemoveAfterSeconds(channel, messageEmbed); return; } else @@ -161,10 +165,11 @@ public class CommandAdd if(finalDiscordIdProvided && suppliedMember == null) { - channel.sendMessage(DiscordClient.CreateEmbeddedMessage("Discord ID not found in Guild or is incorrect", + MessageEmbed messageEmbed = DiscordClient.CreateEmbeddedMessage("Discord ID not found in Guild or is incorrect", (author.getAsMention() + ", the ID supplied (`" + discordIdStripped + "`) could not be located in this Discord Server/Guild."), - DiscordClient.EmbedMessageType.FAILURE).build()).queue(); + DiscordClient.EmbedMessageType.FAILURE).build(); + DiscordClient.QueueAndRemoveAfterSeconds(channel, messageEmbed); return; } @@ -194,8 +199,9 @@ public class CommandAdd { if(!DiscordWhitelister.useCustomMessages) { - channel.sendMessage(DiscordClient.CreateEmbeddedMessage("No Whitelists Remaining", (author.getAsMention() + ", unable to whitelist. You have **" + (DiscordClient.maxWhitelistAmount - timesWhitelisted) - + " out of " + DiscordClient.maxWhitelistAmount + "** whitelists remaining."), DiscordClient.EmbedMessageType.INFO).build()).queue(); + MessageEmbed messageEmbed = DiscordClient.CreateEmbeddedMessage("No Whitelists Remaining", (author.getAsMention() + ", unable to whitelist. You have **" + (DiscordClient.maxWhitelistAmount - timesWhitelisted) + + " out of " + DiscordClient.maxWhitelistAmount + "** whitelists remaining."), DiscordClient.EmbedMessageType.INFO).build(); + DiscordClient.QueueAndRemoveAfterSeconds(channel, messageEmbed); } else { @@ -205,7 +211,8 @@ public class CommandAdd customMessage = customMessage.replaceAll("\\{RemainingWhitelists}", String.valueOf((DiscordClient.maxWhitelistAmount - timesWhitelisted))); customMessage = customMessage.replaceAll("\\{MaxWhitelistAmount}", String.valueOf(DiscordClient.maxWhitelistAmount)); - channel.sendMessage(DiscordClient.CreateEmbeddedMessage(customTitle, customMessage, DiscordClient.EmbedMessageType.INFO).build()).queue(); + MessageEmbed messageEmbed = DiscordClient.CreateEmbeddedMessage(customTitle, customMessage, DiscordClient.EmbedMessageType.INFO).build(); + DiscordClient.QueueAndRemoveAfterSeconds(channel, messageEmbed); } return; @@ -216,7 +223,8 @@ public class CommandAdd || !DiscordWhitelister.getUseCustomPrefixes() && splitMessage.length == DiscordClient.whitelistAddPrefix.length || finalNameToAdd.isEmpty()) { - channel.sendMessage(DiscordClient.addCommandInfo).queue(); + if(!MainConfig.getMainConfig().getBoolean("hide-info-command-replies")) + DiscordClient.QueueAndRemoveAfterSeconds(channel, DiscordClient.addCommandInfo); } else { @@ -247,7 +255,7 @@ public class CommandAdd DiscordClient.AddWhitelistRemainingCount(embedBuilderInvalidChar, timesWhitelisted); } - channel.sendMessage(embedBuilderInvalidChar.build()).queue(); + DiscordClient.QueueAndRemoveAfterSeconds(channel, embedBuilderInvalidChar.build()); return; } } @@ -275,7 +283,7 @@ public class CommandAdd DiscordClient.AddWhitelistRemainingCount(embedBuilderLengthInvalid, timesWhitelisted); } - channel.sendMessage(embedBuilderLengthInvalid.build()).queue(); + DiscordClient.QueueAndRemoveAfterSeconds(channel, embedBuilderLengthInvalid.build()); return; } } @@ -303,7 +311,10 @@ public class CommandAdd { if(!DiscordWhitelister.useCustomMessages) { - channel.sendMessage(DiscordClient.CreateEmbeddedMessage("User already on the whitelist", (author.getAsMention() + ", cannot add user as `" + finalNameToAdd + "` is already on the whitelist!"), DiscordClient.EmbedMessageType.INFO).build()).queue(); + MessageEmbed messageEmbed = + DiscordClient.CreateEmbeddedMessage("User already on the whitelist", + (author.getAsMention() + ", cannot add user as `" + finalNameToAdd + "` is already on the whitelist!"), DiscordClient.EmbedMessageType.INFO).build(); + DiscordClient.QueueAndRemoveAfterSeconds(channel, messageEmbed); } else { @@ -312,7 +323,8 @@ public class CommandAdd customMessage = customMessage.replaceAll("\\{Sender}", author.getAsMention()); customMessage = customMessage.replaceAll("\\{MinecraftUsername}", finalNameToAdd); - channel.sendMessage(DiscordClient.CreateEmbeddedMessage(customTitle, customMessage, DiscordClient.EmbedMessageType.INFO).build()).queue(); + MessageEmbed messageEmbed = DiscordClient.CreateEmbeddedMessage(customTitle, customMessage, DiscordClient.EmbedMessageType.INFO).build(); + DiscordClient.QueueAndRemoveAfterSeconds(channel, messageEmbed); } return; } @@ -342,8 +354,7 @@ public class CommandAdd } DiscordClient.AddWhitelistRemainingCount(embedBuilderRemovedByStaff, timesWhitelisted); - - channel.sendMessage(embedBuilderRemovedByStaff.build()).queue(); + DiscordClient.QueueAndRemoveAfterSeconds(channel, embedBuilderRemovedByStaff.build()); return; } else @@ -384,7 +395,7 @@ public class CommandAdd DiscordClient.AddWhitelistRemainingCount(embedBuilderRemovedByInGameStaff, timesWhitelisted); - channel.sendMessage(embedBuilderRemovedByInGameStaff.build()).queue(); + DiscordClient.QueueAndRemoveAfterSeconds(channel, embedBuilderRemovedByInGameStaff.build()); return; } else @@ -566,30 +577,30 @@ public class CommandAdd } } } + } - if (onlyHasLimitedAdd || finalDiscordIdProvided) + if (onlyHasLimitedAdd || finalDiscordIdProvided) + { + if(!finalDiscordIdProvided) { - if(!finalDiscordIdProvided) - { - UserList.addRegisteredUser(author.getId(), finalNameToAdd); - } - else - { - UserList.addRegisteredUser(suppliedMember.getId(), finalNameToAdd); - } - - if(!finalDiscordIdProvided) - DiscordWhitelister.getPluginLogger().info(author.getName() + "(" + author.getId() + ") successfully added " + finalNameToAdd - + " to the whitelist, " + (DiscordClient.maxWhitelistAmount - finalTimesWhitelisted) + " whitelists remaining."); - else - DiscordWhitelister.getPluginLogger().info(author.getName() + "(" + author.getId() + ") successfully added " + finalNameToAdd - + " to the whitelist and linked " + finalNameToAdd + " to "+ suppliedMember.getEffectiveName() + "(" + suppliedMember.getId() + ")."); + UserList.addRegisteredUser(author.getId(), finalNameToAdd); } + else + { + UserList.addRegisteredUser(suppliedMember.getId(), finalNameToAdd); + } + + if(!finalDiscordIdProvided) + DiscordWhitelister.getPluginLogger().info(author.getName() + "(" + author.getId() + ") successfully added " + finalNameToAdd + + " to the whitelist, " + (DiscordClient.maxWhitelistAmount - finalTimesWhitelisted) + " whitelists remaining."); + else + DiscordWhitelister.getPluginLogger().info(author.getName() + "(" + author.getId() + ") successfully added " + finalNameToAdd + + " to the whitelist and linked " + finalNameToAdd + " to "+ suppliedMember.getEffectiveName() + "(" + suppliedMember.getId() + ")."); } } else { - channel.sendMessage(embedBuilderWhitelistFailure.build()).queue(); + DiscordClient.QueueAndRemoveAfterSeconds(channel, embedBuilderWhitelistFailure.build()); } return null; }); diff --git a/src/main/java/uk/co/angrybee/joe/commands/discord/CommandInfo.java b/src/main/java/uk/co/angrybee/joe/commands/discord/CommandInfo.java index dd399fd..4184650 100644 --- a/src/main/java/uk/co/angrybee/joe/commands/discord/CommandInfo.java +++ b/src/main/java/uk/co/angrybee/joe/commands/discord/CommandInfo.java @@ -16,11 +16,11 @@ public class CommandInfo if (authorPermissions.isUserCanUseCommand()) { - channel.sendMessage(DiscordClient.botInfo).queue(); + DiscordClient.QueueAndRemoveAfterSeconds(channel, DiscordClient.botInfo); } else { - channel.sendMessage(DiscordClient.CreateInsufficientPermsMessage(author)).queue(); + DiscordClient.QueueAndRemoveAfterSeconds(channel, DiscordClient.CreateInsufficientPermsMessage(author)); } } } diff --git a/src/main/java/uk/co/angrybee/joe/commands/discord/CommandWhoIs.java b/src/main/java/uk/co/angrybee/joe/commands/discord/CommandWhoIs.java index c884cf3..7860d07 100644 --- a/src/main/java/uk/co/angrybee/joe/commands/discord/CommandWhoIs.java +++ b/src/main/java/uk/co/angrybee/joe/commands/discord/CommandWhoIs.java @@ -2,24 +2,24 @@ package uk.co.angrybee.joe.commands.discord; import com.sun.org.apache.xpath.internal.operations.Bool; import net.dv8tion.jda.api.EmbedBuilder; -import net.dv8tion.jda.api.entities.Member; -import net.dv8tion.jda.api.entities.MessageEmbed; -import net.dv8tion.jda.api.entities.TextChannel; -import net.dv8tion.jda.api.entities.User; +import net.dv8tion.jda.api.entities.*; import net.dv8tion.jda.api.events.message.MessageReceivedEvent; import net.dv8tion.jda.api.exceptions.AccountTypeException; import org.yaml.snakeyaml.Yaml; import uk.co.angrybee.joe.AuthorPermissions; import uk.co.angrybee.joe.DiscordClient; import uk.co.angrybee.joe.DiscordWhitelister; +import uk.co.angrybee.joe.configs.MainConfig; import uk.co.angrybee.joe.stores.UserList; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.InputStream; +import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Map; +import java.util.concurrent.TimeUnit; public class CommandWhoIs { @@ -28,11 +28,10 @@ public class CommandWhoIs AuthorPermissions authorPermissions = new AuthorPermissions(messageReceivedEvent); User author = messageReceivedEvent.getAuthor(); TextChannel channel = messageReceivedEvent.getTextChannel(); - Member member = messageReceivedEvent.getMember(); if (!authorPermissions.isUserCanAddRemove() && !authorPermissions.isUserCanAdd()) { - channel.sendMessage(DiscordClient.CreateInsufficientPermsMessage(author)).queue(); + DiscordClient.QueueAndRemoveAfterSeconds(channel, DiscordClient.CreateInsufficientPermsMessage(author)); return; } @@ -63,9 +62,11 @@ public class CommandWhoIs } exampleCommand.append(""); - channel.sendMessage(DiscordClient.CreateEmbeddedMessage("Too many arguments", + MessageEmbed messageEmbed = DiscordClient.CreateEmbeddedMessage("Too many arguments", (author.getAsMention() + ", expected 1 argument but found " + amountOfArgs + ".\n" + - "Example: " + exampleCommand.toString()), DiscordClient.EmbedMessageType.FAILURE).build()).queue(); + "Example: " + exampleCommand.toString()), DiscordClient.EmbedMessageType.FAILURE).build(); + + DiscordClient.QueueAndRemoveAfterSeconds(channel, messageEmbed); return; } @@ -79,7 +80,10 @@ public class CommandWhoIs if(DiscordWhitelister.getUseCustomPrefixes() && splitMessage.length == DiscordClient.customWhoIsPrefix.length || !DiscordWhitelister.getUseCustomPrefixes() && splitMessage.length == DiscordClient.whitelistWhoIsPrefix.length || nameToCheck.isEmpty()) { - channel.sendMessage(DiscordClient.whoIsInfo).queue(); + if(!MainConfig.getMainConfig().getBoolean("hide-info-command-replies")) + return; + + DiscordClient.QueueAndRemoveAfterSeconds(channel, DiscordClient.whoIsInfo); return; } @@ -134,14 +138,16 @@ public class CommandWhoIs else DiscordWhitelister.getPluginLogger().warning("Failed to fetch avatar linked to Discord ID: " + targetDiscordId); - channel.sendMessage(idFoundMessage.build()).queue(); + DiscordClient.QueueAndRemoveAfterSeconds(channel, idFoundMessage.build()); } else { - channel.sendMessage(DiscordClient.CreateEmbeddedMessage(("Could not find an account linked to `" + nameToCheck + "`"), + MessageEmbed messageEmbed = DiscordClient.CreateEmbeddedMessage(("Could not find an account linked to `" + nameToCheck + "`"), (author.getAsMention() + ", the name: `" + nameToCheck + "` could not be found in the users list. Please make sure that the Minecraft name is valid and whitelisted + linked to an ID before."), - DiscordClient.EmbedMessageType.FAILURE).build()).queue(); + DiscordClient.EmbedMessageType.FAILURE).build(); + + DiscordClient.QueueAndRemoveAfterSeconds(channel, messageEmbed); } } } diff --git a/src/main/java/uk/co/angrybee/joe/configs/CustomMessagesConfig.java b/src/main/java/uk/co/angrybee/joe/configs/CustomMessagesConfig.java index e66e4a2..c4accff 100644 --- a/src/main/java/uk/co/angrybee/joe/configs/CustomMessagesConfig.java +++ b/src/main/java/uk/co/angrybee/joe/configs/CustomMessagesConfig.java @@ -130,6 +130,9 @@ public class CustomMessagesConfig CheckEntry("whitelist-clear-failure-title", "No Entries to Remove"); CheckEntry("whitelist-clear-failure-message", "{Sender}, you do not have any whitelisted entries to remove. "); + + CheckEntry("command-channel-title", "This Channel is for Commands Only"); + CheckEntry("command-channel-message", "{Sender}, this channel is for commands only, please use another channel."); } } diff --git a/src/main/java/uk/co/angrybee/joe/configs/MainConfig.java b/src/main/java/uk/co/angrybee/joe/configs/MainConfig.java index 8077c6f..f394fe2 100644 --- a/src/main/java/uk/co/angrybee/joe/configs/MainConfig.java +++ b/src/main/java/uk/co/angrybee/joe/configs/MainConfig.java @@ -143,6 +143,16 @@ public class MainConfig CheckEntry("un-whitelist-on-server-leave", true); + CheckEntry("remove-unnecessary-messages-from-whitelist-channel", false); + + CheckEntry("seconds-to-remove-message-from-whitelist-channel", 5); + + CheckEntry("set-removed-message-colour-to-red", false); + + CheckEntry("show-warning-in-command-channel", false); + + CheckEntry("hide-info-command-replies", false); + // Remove old role entry if found, move role to new array (for people with v1.3.6 or below) if(whitelisterBotConfig.get("whitelisted-role") != null) { diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 2760171..9a42b4c 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,5 +1,5 @@ name: DiscordWhitelister -version: 1.4.4 +version: 1.4.5 author: Joe Shimell main: uk.co.angrybee.joe.DiscordWhitelister description: Discord Whitelister.