diff --git a/src/main/java/wtf/beatrice/hidekobot/Cache.java b/src/main/java/wtf/beatrice/hidekobot/Cache.java index bf54a36..7a1385e 100644 --- a/src/main/java/wtf/beatrice/hidekobot/Cache.java +++ b/src/main/java/wtf/beatrice/hidekobot/Cache.java @@ -22,7 +22,8 @@ import java.util.concurrent.ScheduledExecutorService; public class Cache { - private Cache() { + private Cache() + { throw new IllegalStateException("Utility class"); } @@ -70,7 +71,7 @@ public class Cache private static String botApplicationId = ""; // discord api returns a broken image if you don't use specific sizes (powers of 2), so we limit it to these - private static final int[] supportedAvatarResolutions = { 16, 32, 64, 128, 256, 512, 1024 }; + private static final int[] supportedAvatarResolutions = {16, 32, 64, 128, 256, 512, 1024}; /** * Get an array of all the Discord-supported avatar resolutions. @@ -78,7 +79,10 @@ public class Cache * * @return array of supported resolutions. */ - public static int[] getSupportedAvatarResolutions() { return supportedAvatarResolutions; } + public static int[] getSupportedAvatarResolutions() + { + return supportedAvatarResolutions; + } /** @@ -86,7 +90,10 @@ public class Cache * * @return a boolean which is true if the bot is in verbose-mode */ - public static synchronized boolean isVerbose() { return verbose; } + public static synchronized boolean isVerbose() + { + return verbose; + } /** * Set the bot's verbosity status at runtime. @@ -98,13 +105,13 @@ public class Cache { verbose = v; - if(verbosityLogger != null) + if (verbosityLogger != null) { HidekoBot.getAPI().removeEventListener(verbosityLogger); verbosityLogger = null; } - if(v) + if (v) { verbosityLogger = new MessageLogger(); HidekoBot.getAPI().addEventListener(verbosityLogger); @@ -116,7 +123,8 @@ public class Cache * * @return a long of the account's id */ - public static long getBotOwnerId() { + public static long getBotOwnerId() + { return configurationSource == null ? 0L : (Long) configurationSource.getConfigValue(ConfigurationEntry.BOT_OWNER_ID); } @@ -126,7 +134,8 @@ public class Cache * * @return a String of the bot's token. */ - public static String getBotToken() { + public static String getBotToken() + { return configurationSource == null ? null : (String) configurationSource.getConfigValue(ConfigurationEntry.BOT_TOKEN); } @@ -136,8 +145,11 @@ public class Cache * * @return a long of the account's id */ - - public static long getBotMaintainerId() { return BOT_MAINTAINER_ID; } + + public static long getBotMaintainerId() + { + return BOT_MAINTAINER_ID; + } /** * Set the bot's application id. @@ -154,14 +166,18 @@ public class Cache * * @return a string of the bot's application id */ - public static String getBotApplicationId() { return botApplicationId; } + public static String getBotApplicationId() + { + return botApplicationId; + } /** * Function to generate an invite link for the bot * * @return a string containing the invite link */ - public static String getInviteUrl() { + public static String getInviteUrl() + { return DEFAULT_INVITE_LINK.replace("%userid%", botApplicationId); } @@ -180,7 +196,10 @@ public class Cache * * @return the DatabaseSource instance. */ - public static @Nullable DatabaseSource getDatabaseSource() { return databaseSource; } + public static @Nullable DatabaseSource getDatabaseSource() + { + return databaseSource; + } /** * Set the properties source instance loaded from the JAR archive. @@ -197,24 +216,34 @@ public class Cache * * @return the String of the DateTimeFormatter format. */ - public static String getExpiryTimestampFormat(){ return EXPIRY_TIMESTAMP_FORMAT; } + public static String getExpiryTimestampFormat() + { + return EXPIRY_TIMESTAMP_FORMAT; + } /** * Get the amount of seconds after which a message expires. * * @return long value of the expiry seconds. */ - public static long getExpiryTimeSeconds() { return EXPIRY_TIME_SECONDS; } + public static long getExpiryTimeSeconds() + { + return EXPIRY_TIME_SECONDS; + } - public static String getBotName() { return BOT_NAME; } + public static String getBotName() + { + return BOT_NAME; + } /** * Get the bot's version. * * @return a String of the bot version. */ - public static String getBotVersion() { + public static String getBotVersion() + { return propertiesSource.getProperty("bot.version"); } @@ -223,7 +252,8 @@ public class Cache * * @return a String containing the base URL of the repository, including a trailing slash. */ - public static String getRepositoryUrl() { + public static String getRepositoryUrl() + { String url = propertiesSource.getProperty("repo.base_url"); return url.endsWith("/") ? url : url + "/"; } @@ -233,16 +263,19 @@ public class Cache * * @return the Color object. */ - public static Color getBotColor() { + public static Color getBotColor() + { Color defaultColor = Color.PINK; - if(configurationSource == null) return defaultColor; + if (configurationSource == null) return defaultColor; String colorName = (String) configurationSource.getConfigValue(ConfigurationEntry.BOT_COLOR); Color color = null; - try { + try + { Field field = Color.class.getField(colorName); - color = (Color)field.get(null); - } catch (RuntimeException | NoSuchFieldException | IllegalAccessException e) { + color = (Color) field.get(null); + } catch (RuntimeException | NoSuchFieldException | IllegalAccessException e) + { LOGGER.error("Unknown color: {}", colorName); } return color == null ? defaultColor : color; @@ -251,21 +284,36 @@ public class Cache //todo javadocs public static void setSlashCommandListener(SlashCommandListener commandListener) - { slashCommandListener = commandListener; } + { + slashCommandListener = commandListener; + } - public static SlashCommandListener getSlashCommandListener() { return slashCommandListener; } + public static SlashCommandListener getSlashCommandListener() + { + return slashCommandListener; + } public static void setSlashCommandCompletionListener(SlashCommandCompletionListener commandCompletionListener) - { slashCommandCompletionListener = commandCompletionListener; } + { + slashCommandCompletionListener = commandCompletionListener; + } - public static SlashCommandCompletionListener getSlashCommandCompletionListener() { return slashCommandCompletionListener; } + public static SlashCommandCompletionListener getSlashCommandCompletionListener() + { + return slashCommandCompletionListener; + } public static void setMessageCommandListener(MessageCommandListener commandListener) - { messageCommandListener = commandListener; } + { + messageCommandListener = commandListener; + } - public static MessageCommandListener getMessageCommandListener() { return messageCommandListener; } + public static MessageCommandListener getMessageCommandListener() + { + return messageCommandListener; + } /** * Set the bot's startup time. Generally only used at boot time. @@ -273,7 +321,9 @@ public class Cache * @param time a LocalDateTime of the startup moment. */ public static void setStartupTime(LocalDateTime time) - { startupTime = time; } + { + startupTime = time; + } /** @@ -281,37 +331,54 @@ public class Cache * * @return a LocalDateTime object of the startup instant. */ - public static LocalDateTime getStartupTime() { return startupTime; } + public static LocalDateTime getStartupTime() + { + return startupTime; + } /** * Get the time of when the bot was created. * * @return a LocalDateTime object of the first commit's instant. */ - public static LocalDateTime getBotBirthDate() { return botBirthDate; } + public static LocalDateTime getBotBirthDate() + { + return botBirthDate; + } - public static String getFullHeartBeatLink() { + public static String getFullHeartBeatLink() + { return configurationSource == null ? null : (String) configurationSource.getConfigValue(ConfigurationEntry.HEARTBEAT_LINK); } + //todo javadocs - public static String getExecPath() { return EXEC_PATH; } + public static String getExecPath() + { + return EXEC_PATH; + } /*private static ConfigurationSource getConfigurationSource() { return configurationSource; }*/ - public static String getRandomOrgApiKey() { + public static String getRandomOrgApiKey() + { return configurationSource == null ? null : (String) configurationSource.getConfigValue(ConfigurationEntry.RANDOM_ORG_API_KEY); } public static void setConfigurationSource(ConfigurationSource configurationSource) - { Cache.configurationSource = configurationSource; } + { + Cache.configurationSource = configurationSource; + } /** * Get the bot's prefix * * @return a String of the bot's prefix. */ - public static String getBotPrefix() { return BOT_PREFIX; } + public static String getBotPrefix() + { + return BOT_PREFIX; + } public static void cacheLoveCalculatorValue(String userId1, String userId2, int value) { @@ -326,7 +393,7 @@ public class Cache String merged2 = userId2 + "|" + userId1; Integer value = null; value = loveCalculatorValues.get(merged1); - if(value == null) value = loveCalculatorValues.get(merged2); + if (value == null) value = loveCalculatorValues.get(merged2); return value; } @@ -336,7 +403,8 @@ public class Cache loveCalculatorValues.remove(userId2 + "|" + userId1); } - public static ScheduledExecutorService getTaskScheduler() { + public static ScheduledExecutorService getTaskScheduler() + { return taskScheduler; } diff --git a/src/main/java/wtf/beatrice/hidekobot/HidekoBot.java b/src/main/java/wtf/beatrice/hidekobot/HidekoBot.java index ee150e6..cffb67e 100644 --- a/src/main/java/wtf/beatrice/hidekobot/HidekoBot.java +++ b/src/main/java/wtf/beatrice/hidekobot/HidekoBot.java @@ -56,7 +56,7 @@ public class HidekoBot // check loaded bot token String botToken = Cache.getBotToken(); - if(botToken == null || botToken.isEmpty()) + if (botToken == null || botToken.isEmpty()) { LOGGER.error("Invalid bot token!"); shutdown(); @@ -76,12 +76,12 @@ public class HidekoBot ); jda = jdaBuilder.build().awaitReady(); - } catch (InterruptedException e) { + } catch (InterruptedException e) + { LOGGER.error(e.getMessage()); // print the error message, omit the stack trace. Thread.currentThread().interrupt(); // send interrupt to the thread. shutdown(); // if we failed connecting and authenticating, then quit. - } - catch (Exception e) + } catch (Exception e) { LOGGER.error(e.getMessage()); // print the error message, omit the stack trace. shutdown(); // if we failed connecting and authenticating, then quit. @@ -96,19 +96,20 @@ public class HidekoBot // if there is at least one arg, then iterate through them because we have additional things to do. // we are doing this at the end because we might need the API to be already initialized for some things. - if(args.length > 0) { + if (args.length > 0) + { List argsList = new ArrayList<>(Arrays.asList(args)); // NOTE: do not replace with enhanced for, since we might need // to know what position we're at or do further elaboration of the string. // we were using this for api key parsing in the past. - for(int i = 0; i < argsList.size(); i++) + for (int i = 0; i < argsList.size(); i++) { String arg = argsList.get(i); - if(arg.equals("verbose")) Cache.setVerbose(true); - if(arg.equals("refresh")) forceUpdateCommands = true; + if (arg.equals("verbose")) Cache.setVerbose(true); + if (arg.equals("refresh")) forceUpdateCommands = true; } } @@ -117,7 +118,7 @@ public class HidekoBot boolean enableRandomSeedUpdaterTask = false; // initialize random.org object if API key is provided { - if(RandomUtil.isRandomOrgKeyValid()) + if (RandomUtil.isRandomOrgKeyValid()) { LOGGER.info("Enabling Random.org integration... This might take a while!"); RandomUtil.initRandomOrg(); @@ -187,7 +188,8 @@ public class HidekoBot // update slash commands (delayed) final boolean finalForceUpdateCommands = forceUpdateCommands; - try (ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor()) { + try (ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor()) + { executor.schedule(() -> CommandUtil.updateSlashCommands(finalForceUpdateCommands), 1, TimeUnit.SECONDS); } @@ -199,7 +201,7 @@ public class HidekoBot LOGGER.info("Connecting to database..."); String dbFilePath = Cache.getExecPath() + File.separator + "db.sqlite"; // in current directory DatabaseSource databaseSource = new DatabaseSource(dbFilePath); - if(databaseSource.connect() && databaseSource.initDb()) + if (databaseSource.connect() && databaseSource.initDb()) { LOGGER.info("Database connection initialized!"); Cache.setDatabaseSourceInstance(databaseSource); @@ -207,7 +209,8 @@ public class HidekoBot // load data here... LOGGER.info("Database data loaded into memory!"); - } else { + } else + { LOGGER.error("Error initializing database connection!"); } @@ -219,7 +222,7 @@ public class HidekoBot scheduler.scheduleAtFixedRate(heartBeatTask, 10L, 30L, TimeUnit.SECONDS); //every 30 seconds StatusUpdateTask statusUpdateTask = new StatusUpdateTask(); scheduler.scheduleAtFixedRate(statusUpdateTask, 0L, 60L * 5L, TimeUnit.SECONDS); // every 5 minutes - if(enableRandomSeedUpdaterTask) + if (enableRandomSeedUpdaterTask) { RandomOrgSeedTask randomSeedTask = new RandomOrgSeedTask(); scheduler.scheduleAtFixedRate(randomSeedTask, 15L, 15L, TimeUnit.MINUTES); // every 15 minutes @@ -240,6 +243,7 @@ public class HidekoBot LOGGER.info("Invite Link: {}", Cache.getInviteUrl()); } + public static JDA getAPI() { return jda; @@ -254,7 +258,7 @@ public class HidekoBot private static void preShutdown() { LOGGER.warn("WARNING! Shutting down!"); - if(jda != null) jda.shutdown(); + if (jda != null) jda.shutdown(); } } diff --git a/src/main/java/wtf/beatrice/hidekobot/commands/base/Alias.java b/src/main/java/wtf/beatrice/hidekobot/commands/base/Alias.java index c8f3014..55ec155 100644 --- a/src/main/java/wtf/beatrice/hidekobot/commands/base/Alias.java +++ b/src/main/java/wtf/beatrice/hidekobot/commands/base/Alias.java @@ -6,7 +6,8 @@ import java.util.LinkedList; public class Alias { - private Alias() { + private Alias() + { throw new IllegalStateException("Utility class"); } @@ -14,11 +15,11 @@ public class Alias { LinkedList aliases = command.getCommandLabels(); StringBuilder aliasesStringBuilder = new StringBuilder(); - for(int i = 0; i < aliases.size(); i++) + for (int i = 0; i < aliases.size(); i++) { aliasesStringBuilder.append("`").append(aliases.get(i)).append("`"); - if(i + 1 != aliases.size()) + if (i + 1 != aliases.size()) aliasesStringBuilder.append(", "); // separate with comma except on last iteration } diff --git a/src/main/java/wtf/beatrice/hidekobot/commands/base/BotInfo.java b/src/main/java/wtf/beatrice/hidekobot/commands/base/BotInfo.java index c9442d3..977421b 100644 --- a/src/main/java/wtf/beatrice/hidekobot/commands/base/BotInfo.java +++ b/src/main/java/wtf/beatrice/hidekobot/commands/base/BotInfo.java @@ -13,7 +13,8 @@ import java.util.List; public class BotInfo { - private BotInfo() { + private BotInfo() + { throw new IllegalStateException("Utility class"); } @@ -25,7 +26,7 @@ public class BotInfo // thumbnail String botAvatarUrl = HidekoBot.getAPI().getSelfUser().getAvatarUrl(); - if(botAvatarUrl != null) embedBuilder.setThumbnail(botAvatarUrl); + if (botAvatarUrl != null) embedBuilder.setThumbnail(botAvatarUrl); // help field long ownerId = Cache.getBotOwnerId(); @@ -37,12 +38,12 @@ public class BotInfo // type-specific commands list field StringBuilder commandsListBuilder = new StringBuilder(); - commandsListBuilder.append(commandLabels.size()).append( " total - "); - for(int i = 0; i < commandLabels.size(); i++) + commandsListBuilder.append(commandLabels.size()).append(" total - "); + for (int i = 0; i < commandLabels.size(); i++) { commandsListBuilder.append("`").append(commandLabels.get(i)).append("`"); - if(i + 1 != commandLabels.size()) // don't add comma in last iteration + if (i + 1 != commandLabels.size()) // don't add comma in last iteration { commandsListBuilder.append(", "); } @@ -55,9 +56,10 @@ public class BotInfo // message commands info field String messageCommandsInfo; - if(Cache.getMessageCommandListener() == null) + if (Cache.getMessageCommandListener() == null) messageCommandsInfo = "❌ disabled"; - else { + else + { messageCommandsInfo = "✅ available"; commandsCount += Cache.getMessageCommandListener().getRegisteredCommands().size(); } @@ -65,9 +67,10 @@ public class BotInfo // slash commands info field String slashCommandsInfo; - if(Cache.getMessageCommandListener() == null) + if (Cache.getMessageCommandListener() == null) slashCommandsInfo = "❌ disabled"; - else { + else + { slashCommandsInfo = "✅ available"; commandsCount += Cache.getSlashCommandListener().getRegisteredCommands().size(); } @@ -75,10 +78,11 @@ public class BotInfo // random.org integration field String randomOrgInfo; - if(RandomUtil.isRandomOrgKeyValid()) + if (RandomUtil.isRandomOrgKeyValid()) { randomOrgInfo = "✅ connected"; - } else { + } else + { randomOrgInfo = "❌ disabled"; } embedBuilder.addField("Random.org", randomOrgInfo, true); diff --git a/src/main/java/wtf/beatrice/hidekobot/commands/base/ClearChat.java b/src/main/java/wtf/beatrice/hidekobot/commands/base/ClearChat.java index b3844f7..09b57cc 100644 --- a/src/main/java/wtf/beatrice/hidekobot/commands/base/ClearChat.java +++ b/src/main/java/wtf/beatrice/hidekobot/commands/base/ClearChat.java @@ -14,34 +14,42 @@ import java.util.List; public class ClearChat { - private ClearChat() { + private ClearChat() + { throw new IllegalStateException("Utility class"); } - public static String getLabel() { + public static String getLabel() + { return "clear"; } - public static String getDescription() { + public static String getDescription() + { return "Clear the current channel's chat."; } - public static Permission getPermission() { + public static Permission getPermission() + { return Permission.MESSAGE_MANAGE; } public static String checkDMs(Channel channel) { - if(!(channel instanceof TextChannel)) - { return "\uD83D\uDE22 Sorry! I can't delete messages here."; } + if (!(channel instanceof TextChannel)) + { + return "\uD83D\uDE22 Sorry! I can't delete messages here."; + } return null; } public static String checkDeleteAmount(int toDeleteAmount) { - if(toDeleteAmount <= 0) - { return "\uD83D\uDE22 Sorry, I can't delete that amount of messages!"; } + if (toDeleteAmount <= 0) + { + return "\uD83D\uDE22 Sorry, I can't delete that amount of messages!"; + } return null; } @@ -65,7 +73,7 @@ public class ClearChat //if there are some messages left, but less than , we need one more iterations. int remainder = toDeleteAmount % limit; - if(remainder != 0) iterations++; + if (remainder != 0) iterations++; // set the starting point. long messageId = startingMessageId; @@ -74,59 +82,62 @@ public class ClearChat boolean outOfBounds = false; // do iterate. - for(int iteration = 0; iteration < iterations; iteration++) + for (int iteration = 0; iteration < iterations; iteration++) { - if(outOfBounds) break; + if (outOfBounds) break; // set how many messages to delete for this iteration (usually unless there's a remainder) int iterationSize = limit; // if we are at the last iteration... check if we have or fewer messages to delete - if(iteration+1 == iterations && remainder != 0) { + if (iteration + 1 == iterations && remainder != 0) + { iterationSize = remainder; } - if(iterationSize == 1) + if (iterationSize == 1) { // grab the message Message toDelete = channel.retrieveMessageById(messageId).complete(); //only delete one message - if(toDelete != null) toDelete.delete().queue(); + if (toDelete != null) toDelete.delete().queue(); else outOfBounds = true; // increase deleted counter by 1 deleted++; - } else { + } else + { // get the last messages. MessageHistory.MessageRetrieveAction action = channel.getHistoryBefore(messageId, iterationSize - 1); // note: first one is the most recent, last one is the oldest message. List messages = new ArrayList<>(); // (we are skipping first iteration since it would return an error, given that the id is the slash command and not a message) - if(iteration!=0) messages.add(channel.retrieveMessageById(messageId).complete()); + if (iteration != 0) messages.add(channel.retrieveMessageById(messageId).complete()); messages.addAll(action.complete().getRetrievedHistory()); // check if we only have one or zero messages left (trying to delete more than possible) - if(messages.size() <= 1) + if (messages.size() <= 1) { outOfBounds = true; - } else { + } else + { // before deleting, we need to grab the message's id for next iteration. action = channel.getHistoryBefore(messages.getLast().getIdLong(), 1); List previousMessage = action.complete().getRetrievedHistory(); // if that message exists (we are not out of bounds)... store it - if(!previousMessage.isEmpty()) messageId = previousMessage.getFirst().getIdLong(); + if (!previousMessage.isEmpty()) messageId = previousMessage.getFirst().getIdLong(); else outOfBounds = true; } // queue messages for deletion - if(messages.size() == 1) + if (messages.size() == 1) { messages.getFirst().delete().queue(); - } - else if(!messages.isEmpty()) + } else if (!messages.isEmpty()) { - try { + try + { ((TextChannel) channel).deleteMessages(messages).complete(); /* alternatively, we could use purgeMessages, which is smarter... however, it also tries to delete messages older than 2 weeks @@ -156,18 +167,22 @@ public class ClearChat public static String parseAmount(int deleted) { - if(deleted < 1) + if (deleted < 1) { return "\uD83D\uDE22 Couldn't clear any message!"; - } else if(deleted == 1) + } else if (deleted == 1) { return "✂ Cleared 1 message!"; - } else { + } else + { return "✂ Cleared " + deleted + " messages!"; } } // cap the amount to avoid abuse. - public static int getMaxAmount() { return 1000; } + public static int getMaxAmount() + { + return 1000; + } } diff --git a/src/main/java/wtf/beatrice/hidekobot/commands/base/CoinFlip.java b/src/main/java/wtf/beatrice/hidekobot/commands/base/CoinFlip.java index 46ef21f..2ce7cbd 100644 --- a/src/main/java/wtf/beatrice/hidekobot/commands/base/CoinFlip.java +++ b/src/main/java/wtf/beatrice/hidekobot/commands/base/CoinFlip.java @@ -14,11 +14,13 @@ import java.util.List; public class CoinFlip { - private CoinFlip() { + private CoinFlip() + { throw new IllegalStateException("Utility class"); } - public static Button getReflipButton() { + public static Button getReflipButton() + { return Button.primary("coinflip_reflip", "Flip again") .withEmoji(Emoji.fromUnicode("\uD83E\uDE99")); } @@ -28,10 +30,11 @@ public class CoinFlip int rand = RandomUtil.getRandomNumber(0, 1); String msg; - if(rand == 1) + if (rand == 1) { msg = ":coin: It's **Heads**!"; - } else { + } else + { msg = "It's **Tails**! :coin:"; } @@ -41,7 +44,7 @@ public class CoinFlip public static void buttonReFlip(ButtonInteractionEvent event) { // check if the user interacting is the same one who ran the command - if(!(Cache.getDatabaseSource().isUserTrackedFor(event.getUser().getId(), event.getMessageId()))) + if (!(Cache.getDatabaseSource().isUserTrackedFor(event.getUser().getId(), event.getMessageId()))) { event.reply("❌ You did not run this command!").setEphemeral(true).queue(); return; @@ -59,7 +62,8 @@ public class CoinFlip { // set the command as expiring and restrict it to the user who ran it trackAndRestrict(message, event.getUser()); - }, (error) -> {}); + }, (error) -> { + }); } public static void trackAndRestrict(Message replyMessage, User user) diff --git a/src/main/java/wtf/beatrice/hidekobot/commands/base/DiceRoll.java b/src/main/java/wtf/beatrice/hidekobot/commands/base/DiceRoll.java index 827b9ba..7a72f97 100644 --- a/src/main/java/wtf/beatrice/hidekobot/commands/base/DiceRoll.java +++ b/src/main/java/wtf/beatrice/hidekobot/commands/base/DiceRoll.java @@ -15,7 +15,8 @@ import java.util.UUID; public class DiceRoll { - private DiceRoll() { + private DiceRoll() + { throw new IllegalStateException("Utility class"); } @@ -30,25 +31,26 @@ public class DiceRoll UUID lastPushedDice = null; int totalRolls = 0; - for(String arg : args) + for (String arg : args) { - if(totalRolls > 200) + if (totalRolls > 200) { return new MessageResponse("Too many total rolls!", null); } - if(arg.matches(amountRegex)) + if (arg.matches(amountRegex)) { currentAmount = Integer.parseInt(arg); - if(currentDice == null) + if (currentDice == null) { currentDice = new Dice(6); - } else { + } else + { currentDice = new Dice(currentDice); } - if(currentAmount > 100) + if (currentAmount > 100) { return new MessageResponse("Too many rolls (`" + currentAmount + "`)!", null); } @@ -56,25 +58,24 @@ public class DiceRoll lastPushedDice = currentDice.getUUID(); dicesToRoll.put(currentDice, currentAmount); totalRolls += currentAmount; - } - else if(arg.matches(diceRegex)) + } else if (arg.matches(diceRegex)) { int sides = Integer.parseInt(arg.substring(1)); - if(sides > 10000) + if (sides > 10000) { return new MessageResponse("Too many sides (`" + sides + "`)!", null); } - if(args.length == 1) + if (args.length == 1) { dicesToRoll.put(new Dice(sides), 1); totalRolls++; } else { - if(currentDice != null) + if (currentDice != null) { - if(lastPushedDice == null || !lastPushedDice.equals(currentDice.getUUID())) + if (lastPushedDice == null || !lastPushedDice.equals(currentDice.getUUID())) { dicesToRoll.put(currentDice, 1); lastPushedDice = currentDice.getUUID(); @@ -87,16 +88,16 @@ public class DiceRoll } } - if(lastPushedDice == null) + if (lastPushedDice == null) { - if(currentDice != null) + if (currentDice != null) { dicesToRoll.put(currentDice, 1); totalRolls++; } } else { - if(!lastPushedDice.equals(currentDice.getUUID())) + if (!lastPushedDice.equals(currentDice.getUUID())) { dicesToRoll.put(new Dice(currentDice), 1); totalRolls++; @@ -106,19 +107,19 @@ public class DiceRoll LinkedList rolledDices = new LinkedList<>(); // in case no dice was specified (or invalid), roll a standard 6-sided dice. - if(dicesToRoll.isEmpty()) + if (dicesToRoll.isEmpty()) { Dice standardDice = new Dice(6); dicesToRoll.put(standardDice, 1); totalRolls = 1; } - for(Map.Entry entry : dicesToRoll.entrySet()) + for (Map.Entry entry : dicesToRoll.entrySet()) { Dice dice = entry.getKey(); Integer rollsToMake = entry.getValue(); - - for(int roll = 0; roll < rollsToMake; roll++) + + for (int roll = 0; roll < rollsToMake; roll++) { dice.roll(); rolledDices.add(new Dice(dice)); @@ -131,20 +132,23 @@ public class DiceRoll embedBuilder.setAuthor(author.getAsTag(), null, author.getAvatarUrl()); embedBuilder.setTitle("Dice Roll"); - if(RandomUtil.isRandomOrgKeyValid()) + if (RandomUtil.isRandomOrgKeyValid()) embedBuilder.setFooter("Seed provided by random.org"); StringBuilder message = new StringBuilder(); int total = 0; int previousDiceSides = 0; - for (Dice dice : rolledDices) { + for (Dice dice : rolledDices) + { int diceSize = dice.getSides(); - if (previousDiceSides != diceSize) { + if (previousDiceSides != diceSize) + { message.append("\nd").append(diceSize).append(": "); previousDiceSides = diceSize; - } else if (previousDiceSides != 0) { + } else if (previousDiceSides != 0) + { message.append(", "); } @@ -154,7 +158,7 @@ public class DiceRoll } // discord doesn't allow embed fields to be longer than 1024 and errors out - if(message.length() > 1024) + if (message.length() > 1024) { return new MessageResponse("Too many rolls!", null); } diff --git a/src/main/java/wtf/beatrice/hidekobot/commands/base/Invite.java b/src/main/java/wtf/beatrice/hidekobot/commands/base/Invite.java index e754214..1ad237d 100644 --- a/src/main/java/wtf/beatrice/hidekobot/commands/base/Invite.java +++ b/src/main/java/wtf/beatrice/hidekobot/commands/base/Invite.java @@ -10,7 +10,8 @@ import wtf.beatrice.hidekobot.HidekoBot; public class Invite { - private Invite() { + private Invite() + { throw new IllegalStateException("Utility class"); } @@ -22,7 +23,7 @@ public class Invite { embedBuilder.setColor(Cache.getBotColor()); String avatarUrl = HidekoBot.getAPI().getSelfUser().getAvatarUrl(); - if(avatarUrl != null) embedBuilder.setThumbnail(avatarUrl); + if (avatarUrl != null) embedBuilder.setThumbnail(avatarUrl); embedBuilder.setTitle("Invite"); embedBuilder.appendDescription("Click on the button below to invite " + Cache.getBotName() + diff --git a/src/main/java/wtf/beatrice/hidekobot/commands/base/LoveCalculator.java b/src/main/java/wtf/beatrice/hidekobot/commands/base/LoveCalculator.java index 871c160..8f02bd3 100644 --- a/src/main/java/wtf/beatrice/hidekobot/commands/base/LoveCalculator.java +++ b/src/main/java/wtf/beatrice/hidekobot/commands/base/LoveCalculator.java @@ -11,7 +11,8 @@ import java.util.concurrent.TimeUnit; public class LoveCalculator { - private LoveCalculator() { + private LoveCalculator() + { throw new IllegalStateException("Utility class"); } @@ -21,7 +22,7 @@ public class LoveCalculator String userId2 = user2.getId(); Integer loveAmount = Cache.getLoveCalculatorValue(userId1, userId2); - if(loveAmount == null) + if (loveAmount == null) { loveAmount = RandomUtil.getRandomNumber(0, 100); Cache.cacheLoveCalculatorValue(userId1, userId2, loveAmount); @@ -30,9 +31,9 @@ public class LoveCalculator } String formattedAmount = loveAmount + "%"; - if(loveAmount <= 30) formattedAmount += "... \uD83D\uDE22"; - else if(loveAmount < 60) formattedAmount += "! \uD83E\uDDD0"; - else if(loveAmount < 75) formattedAmount += "!!! \uD83E\uDD73"; + if (loveAmount <= 30) formattedAmount += "... \uD83D\uDE22"; + else if (loveAmount < 60) formattedAmount += "! \uD83E\uDDD0"; + else if (loveAmount < 75) formattedAmount += "!!! \uD83E\uDD73"; else formattedAmount = "✨ " + formattedAmount + "!!! \uD83D\uDE0D\uD83D\uDCA5"; EmbedBuilder embedBuilder = new EmbedBuilder(); diff --git a/src/main/java/wtf/beatrice/hidekobot/commands/base/MagicBall.java b/src/main/java/wtf/beatrice/hidekobot/commands/base/MagicBall.java index e28abb5..f1f2f4f 100644 --- a/src/main/java/wtf/beatrice/hidekobot/commands/base/MagicBall.java +++ b/src/main/java/wtf/beatrice/hidekobot/commands/base/MagicBall.java @@ -14,7 +14,8 @@ import java.util.List; public class MagicBall { - private MagicBall() { + private MagicBall() + { throw new IllegalStateException("Utility class"); } @@ -55,7 +56,7 @@ public class MagicBall { // add a question mark at the end, if missing. // this might not always apply but it's fun - if(!question.endsWith("?")) question += "?"; + if (!question.endsWith("?")) question += "?"; String answer = getRandomAnswer(); diff --git a/src/main/java/wtf/beatrice/hidekobot/commands/base/ProfileImage.java b/src/main/java/wtf/beatrice/hidekobot/commands/base/ProfileImage.java index ef90b01..afa79f0 100644 --- a/src/main/java/wtf/beatrice/hidekobot/commands/base/ProfileImage.java +++ b/src/main/java/wtf/beatrice/hidekobot/commands/base/ProfileImage.java @@ -9,7 +9,8 @@ import wtf.beatrice.hidekobot.objects.MessageResponse; public class ProfileImage { - private ProfileImage() { + private ProfileImage() + { throw new IllegalStateException("Utility class"); } @@ -20,9 +21,11 @@ public class ProfileImage // method to find closest value to accepted values int distance = Math.abs(acceptedSizes[0] - resolution); int idx = 0; - for(int c = 1; c < acceptedSizes.length; c++){ + for (int c = 1; c < acceptedSizes.length; c++) + { int cdistance = Math.abs(acceptedSizes[c] - resolution); - if(cdistance < distance){ + if (cdistance < distance) + { idx = c; distance = cdistance; } @@ -40,14 +43,15 @@ public class ProfileImage User.Profile userProfile = user.retrieveProfile().complete(); ImageProxy bannerProxy = userProfile.getBanner(); - if(imageType == ImageType.AVATAR) + if (imageType == ImageType.AVATAR) { resolutionString = resolution + " × " + resolution; imageLink = user.getEffectiveAvatar().getUrl(resolution); - } else { + } else + { int verticalRes = 361 * resolution / 1024; resolutionString = resolution + " × " + verticalRes; - if(bannerProxy != null) + if (bannerProxy != null) imageLink = bannerProxy.getUrl(resolution); } @@ -64,21 +68,22 @@ public class ProfileImage // string builder to create a string that links to all available resolutions StringBuilder links = new StringBuilder(); - for(int pos = 0; pos < acceptedSizes.length; pos++) + for (int pos = 0; pos < acceptedSizes.length; pos++) { int currSize = acceptedSizes[pos]; String currLink; - if(imageType == ImageType.AVATAR) + if (imageType == ImageType.AVATAR) { currLink = user.getEffectiveAvatar().getUrl(currSize); - } else { - if(bannerProxy == null) break; + } else + { + if (bannerProxy == null) break; currLink = bannerProxy.getUrl(currSize); } links.append("**[").append(currSize).append("px](").append(currLink).append(")**"); - if(pos + 1 != acceptedSizes.length) // don't add a separator on the last iteration + if (pos + 1 != acceptedSizes.length) // don't add a separator on the last iteration { links.append(" | "); } @@ -87,15 +92,16 @@ public class ProfileImage embedBuilder.addField("Available resolutions", links.toString(), false); - - if(imageLink != null) + if (imageLink != null) embedBuilder.setImage(imageLink); - if(imageLink == null) { + if (imageLink == null) + { String error = "I couldn't find " + user.getAsMention() + "'s " + imageTypeName + "!"; return new MessageResponse(error, null); - } else { + } else + { return new MessageResponse(null, embedBuilder.build()); } } diff --git a/src/main/java/wtf/beatrice/hidekobot/commands/base/Say.java b/src/main/java/wtf/beatrice/hidekobot/commands/base/Say.java index 339cea7..a758ab5 100644 --- a/src/main/java/wtf/beatrice/hidekobot/commands/base/Say.java +++ b/src/main/java/wtf/beatrice/hidekobot/commands/base/Say.java @@ -5,11 +5,13 @@ import net.dv8tion.jda.api.Permission; public class Say { - private Say() { + private Say() + { throw new IllegalStateException("Utility class"); } - public static Permission getPermission() { + public static Permission getPermission() + { return Permission.MESSAGE_MANAGE; } } diff --git a/src/main/java/wtf/beatrice/hidekobot/commands/base/Trivia.java b/src/main/java/wtf/beatrice/hidekobot/commands/base/Trivia.java index cb66aea..f0b305a 100644 --- a/src/main/java/wtf/beatrice/hidekobot/commands/base/Trivia.java +++ b/src/main/java/wtf/beatrice/hidekobot/commands/base/Trivia.java @@ -36,7 +36,8 @@ import java.util.concurrent.TimeUnit; public class Trivia { - private Trivia() { + private Trivia() + { throw new IllegalStateException("Utility class"); } @@ -52,14 +53,23 @@ public class Trivia // first string is the channelId, the list contain all score records for that channel public static HashMap> channelAndScores = new HashMap<>(); - public static String getTriviaLink(int categoryId) {return TRIVIA_API_LINK + categoryId; } - public static String getCategoriesLink() {return TRIVIA_API_CATEGORIES_LINK; } + public static String getTriviaLink(int categoryId) + { + return TRIVIA_API_LINK + categoryId; + } - public static String getNoDMsError() { + public static String getCategoriesLink() + { + return TRIVIA_API_CATEGORIES_LINK; + } + + public static String getNoDMsError() + { return "\uD83D\uDE22 Sorry! Trivia doesn't work in DMs."; } - public static String getTriviaAlreadyRunningError() { + public static String getTriviaAlreadyRunningError() + { // todo nicer looking return "Trivia is already running here!"; } @@ -67,10 +77,10 @@ public class Trivia public static MessageResponse generateMainScreen() { JSONObject categoriesJson = Trivia.fetchJson(Trivia.getCategoriesLink()); - if(categoriesJson == null) + if (categoriesJson == null) return new MessageResponse("Error fetching trivia!", null); // todo nicer with emojis List categories = Trivia.parseCategories(categoriesJson); - if(categories.isEmpty()) + if (categories.isEmpty()) return new MessageResponse("Error parsing trivia categories!", null); // todo nicer with emojis categories.sort(new TriviaCategoryComparator()); @@ -90,7 +100,7 @@ public class Trivia StringSelectMenu.Builder menuBuilder = StringSelectMenu.create("trivia_categories"); - for(TriviaCategory category : categories) + for (TriviaCategory category : categories) { String name = category.categoryName(); int id = category.categoryId(); @@ -102,20 +112,22 @@ public class Trivia public static JSONObject fetchJson(String link) { - try { + try + { URL url = new URL(link); URLConnection connection = url.openConnection(); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(connection.getInputStream())); String currentChar; StringBuilder jsonStrBuilder = new StringBuilder(); - while((currentChar = bufferedReader.readLine()) != null) + while ((currentChar = bufferedReader.readLine()) != null) { jsonStrBuilder.append(currentChar); } bufferedReader.close(); return new JSONObject(jsonStrBuilder.toString()); - } catch (IOException e) { + } catch (IOException e) + { LOGGER.error("JSON Parsing Exception", e); } @@ -128,7 +140,7 @@ public class Trivia JSONArray results = jsonObject.getJSONArray("results"); - for(Object currentQuestionGeneric : results) + for (Object currentQuestionGeneric : results) { JSONObject questionJson = (JSONObject) currentQuestionGeneric; String question = StringEscapeUtils.unescapeHtml4(questionJson.getString("question")); @@ -137,7 +149,7 @@ public class Trivia List incorrectAnswersList = new ArrayList<>(); JSONArray incorrectAnswers = questionJson.getJSONArray("incorrect_answers"); - for(Object incorrectAnswerGeneric : incorrectAnswers) + for (Object incorrectAnswerGeneric : incorrectAnswers) { String incorrectAnswer = (String) incorrectAnswerGeneric; incorrectAnswersList.add(StringEscapeUtils.unescapeHtml4(incorrectAnswer)); @@ -154,7 +166,7 @@ public class Trivia { List categories = new ArrayList<>(); JSONArray categoriesArray = jsonObject.getJSONArray("trivia_categories"); - for(Object categoryObject : categoriesArray) + for (Object categoryObject : categoriesArray) { JSONObject categoryJson = (JSONObject) categoryObject; @@ -172,14 +184,14 @@ public class Trivia User user = event.getUser(); String channelId = event.getChannel().getId(); - if(trackResponse(user, event.getChannel())) + if (trackResponse(user, event.getChannel())) { LinkedList scores = channelAndScores.get(channelId); - if(scores == null) scores = new LinkedList<>(); + if (scores == null) scores = new LinkedList<>(); TriviaScore currentUserScore = null; - for(TriviaScore score : scores) + for (TriviaScore score : scores) { - if(score.getUser().equals(user)) + if (score.getUser().equals(user)) { currentUserScore = score; scores.remove(score); @@ -187,29 +199,31 @@ public class Trivia } } - if(currentUserScore == null) + if (currentUserScore == null) { currentUserScore = new TriviaScore(user); } - if(answerType.equals(AnswerType.CORRECT)) + if (answerType.equals(AnswerType.CORRECT)) { event.reply(user.getAsMention() + " got it right! \uD83E\uDD73 (**+3**)").queue(); currentUserScore.changeScore(3); - } else { + } else + { event.reply("❌ " + user.getAsMention() + ", that's not the right answer! (**-1**)").queue(); currentUserScore.changeScore(-1); } scores.add(currentUserScore); channelAndScores.put(channelId, scores); - } else { + } else + { event.reply("☹️ " + user.getAsMention() + ", you can't answer twice!") .queue(interaction -> - Cache.getTaskScheduler().schedule(() -> - interaction.deleteOriginal().queue(), 3, TimeUnit.SECONDS)); + Cache.getTaskScheduler().schedule(() -> + interaction.deleteOriginal().queue(), 3, TimeUnit.SECONDS)); } } @@ -220,17 +234,18 @@ public class Trivia List responders = channelAndWhoResponded.get(channelId); - if(responders == null) + if (responders == null) { responders = new ArrayList<>(); } - if(responders.isEmpty() || !responders.contains(userId)) + if (responders.isEmpty() || !responders.contains(userId)) { responders.add(userId); channelAndWhoResponded.put(channelId, responders); return true; // response was successfully tracked - } else { + } else + { return false; // response wasn't tracked because there already was an entry } } @@ -238,7 +253,7 @@ public class Trivia public static void handleMenuSelection(StringSelectInteractionEvent event) { // check if the user interacting is the same one who ran the command - if(!(Cache.getDatabaseSource().isUserTrackedFor(event.getUser().getId(), event.getMessageId()))) + if (!(Cache.getDatabaseSource().isUserTrackedFor(event.getUser().getId(), event.getMessageId()))) { event.reply("❌ You did not run this command!").setEphemeral(true).queue(); return; @@ -263,7 +278,7 @@ public class Trivia Message message = event.getMessage(); MessageChannel channel = message.getChannel(); - if(Trivia.channelsRunningTrivia.contains(channel.getId())) + if (Trivia.channelsRunningTrivia.contains(channel.getId())) { // todo nicer looking // todo: also what if the bot stops (database...?) @@ -271,7 +286,8 @@ public class Trivia Message err = event.reply("Trivia is already running here!").complete().retrieveOriginal().complete(); Cache.getTaskScheduler().schedule(() -> err.delete().queue(), 10, TimeUnit.SECONDS); return; - } else { + } else + { // todo nicer looking event.reply("Starting new Trivia session!").queue(); } @@ -288,7 +304,8 @@ public class Trivia Trivia.channelsRunningTrivia.add(channel.getId()); } - public enum AnswerType { + public enum AnswerType + { CORRECT, WRONG } diff --git a/src/main/java/wtf/beatrice/hidekobot/commands/base/UrbanDictionary.java b/src/main/java/wtf/beatrice/hidekobot/commands/base/UrbanDictionary.java index 41e08c7..0903f87 100644 --- a/src/main/java/wtf/beatrice/hidekobot/commands/base/UrbanDictionary.java +++ b/src/main/java/wtf/beatrice/hidekobot/commands/base/UrbanDictionary.java @@ -25,15 +25,19 @@ import java.util.List; public class UrbanDictionary { - private UrbanDictionary() { + private UrbanDictionary() + { throw new IllegalStateException("Utility class"); } public static LinkedList getCommandLabels() - { return new LinkedList<>(Arrays.asList("urban", "urbandictionary", "ud")); } + { + return new LinkedList<>(Arrays.asList("urban", "urbandictionary", "ud")); + } - public static String getBaseUrl() { + public static String getBaseUrl() + { return "https://www.urbandictionary.com/define.php?term="; } @@ -55,7 +59,8 @@ public class UrbanDictionary .withEmoji(Emoji.fromFormatted("\uD83D\uDDD1️")); } - public static String getNoArgsError() { + public static String getNoArgsError() + { return "\uD83D\uDE22 I need to know what to search for!"; } @@ -63,7 +68,7 @@ public class UrbanDictionary { term = term.replaceAll("[^\\w\\s]", ""); // only keep letters, numbers and spaces term = WordUtils.capitalizeFully(term); // Make Every Word Start With A Capital Letter - if(forUrl) term = term.replaceAll("\\s+", "+"); // replace all whitespaces with + for the url + if (forUrl) term = term.replaceAll("\\s+", "+"); // replace all whitespaces with + for the url if (term.length() > 64) term = term.substring(0, 64); // cut it to length to avoid abuse return term; } @@ -74,10 +79,10 @@ public class UrbanDictionary } public static MessageEmbed buildEmbed(String term, - String url, - User author, - UrbanSearch search, - int page) + String url, + User author, + UrbanSearch search, + int page) { EmbedBuilder embedBuilder = new EmbedBuilder(); @@ -87,7 +92,7 @@ public class UrbanDictionary embedBuilder.addField("\uD83D\uDCD6 Definition", search.getPlaintextMeanings().get(page), false); embedBuilder.addField("\uD83D\uDCAD Example", search.getPlaintextExamples().get(page), false); embedBuilder.addField("\uD83D\uDCCC Submission", - "*Entry " + (page+1) + " | Sent by " + search.getContributorsNames().get(page) + + "*Entry " + (page + 1) + " | Sent by " + search.getContributorsNames().get(page) + " on" + search.getSubmissionDates().get(page) + "*", false); @@ -118,7 +123,8 @@ public class UrbanDictionary DatabaseSource database = Cache.getDatabaseSource(); // check if the user interacting is the same one who ran the command - if (!(database.isUserTrackedFor(event.getUser().getId(), messageId))) { + if (!(database.isUserTrackedFor(event.getUser().getId(), messageId))) + { event.reply("❌ You did not run this command!").setEphemeral(true).queue(); return; } @@ -140,9 +146,9 @@ public class UrbanDictionary serializedExamples, serializedContributors, serializedDates); // move to new page - if(changeType == ChangeType.NEXT) + if (changeType == ChangeType.NEXT) page++; - else if(changeType == ChangeType.PREVIOUS) + else if (changeType == ChangeType.PREVIOUS) page--; term = UrbanDictionary.sanitizeArgs(term, false); @@ -153,17 +159,19 @@ public class UrbanDictionary // get all attached components and check which ones need to be enabled or disabled List components = new ArrayList<>(); - if(page > 0) + if (page > 0) { components.add(UrbanDictionary.getPreviousPageButton().asEnabled()); - } else { + } else + { components.add(UrbanDictionary.getPreviousPageButton().asDisabled()); } - if(page + 1 == search.getPages()) + if (page + 1 == search.getPages()) { components.add(UrbanDictionary.getNextPageButton().asDisabled()); - } else { + } else + { components.add(UrbanDictionary.getNextPageButton().asEnabled()); } @@ -216,10 +224,10 @@ public class UrbanDictionary contributorsNames = new LinkedList<>(); submissionDates = new LinkedList<>(); - for(Element definition : definitions) + for (Element definition : definitions) { Elements meaningSingleton = definition.getElementsByClass("meaning"); - if(meaningSingleton.isEmpty()) + if (meaningSingleton.isEmpty()) { plaintextMeanings.add(" "); } else @@ -231,13 +239,13 @@ public class UrbanDictionary // this is used to fix eg. & being shown literally instead of being parsed text = StringEscapeUtils.unescapeHtml4(text); // discord only allows 1024 characters for embed fields - if(text.length() > 1024) text = text.substring(0, 1020) + "..."; + if (text.length() > 1024) text = text.substring(0, 1020) + "..."; plaintextMeanings.add(text); } Elements exampleSingleton = definition.getElementsByClass("example"); - if(exampleSingleton.isEmpty()) + if (exampleSingleton.isEmpty()) { plaintextExamples.add(" "); } else @@ -249,12 +257,12 @@ public class UrbanDictionary // this is used to fix eg. & being shown literally instead of being parsed text = StringEscapeUtils.unescapeHtml4(text); // discord only allows 1024 characters for embed fields - if(text.length() > 1024) text = text.substring(0, 1020) + "..."; + if (text.length() > 1024) text = text.substring(0, 1020) + "..."; plaintextExamples.add(text); } Elements contributorSingleton = definition.getElementsByClass("contributor"); - if(contributorSingleton.isEmpty()) + if (contributorSingleton.isEmpty()) { contributorsNames.add("Unknown"); } else @@ -282,39 +290,48 @@ public class UrbanDictionary pages = submissionDates.size(); } - public List getPlaintextMeanings() { + public List getPlaintextMeanings() + { return this.plaintextMeanings; } - public List getPlaintextExamples() { + public List getPlaintextExamples() + { return this.plaintextExamples; } - public List getContributorsNames() { + public List getContributorsNames() + { return this.contributorsNames; } - public List getSubmissionDates() { + public List getSubmissionDates() + { return this.submissionDates; } - public String getSerializedMeanings() { + public String getSerializedMeanings() + { return serializedMeanings; } - public String getSerializedExamples() { + public String getSerializedExamples() + { return serializedExamples; } - public String getSerializedContributors() { + public String getSerializedContributors() + { return serializedContributors; } - public String getSerializedDates() { + public String getSerializedDates() + { return serializedDates; } - public int getPages() { + public int getPages() + { return pages; } } diff --git a/src/main/java/wtf/beatrice/hidekobot/commands/base/UserPunishment.java b/src/main/java/wtf/beatrice/hidekobot/commands/base/UserPunishment.java index 89ac1d5..cc64495 100644 --- a/src/main/java/wtf/beatrice/hidekobot/commands/base/UserPunishment.java +++ b/src/main/java/wtf/beatrice/hidekobot/commands/base/UserPunishment.java @@ -27,7 +27,8 @@ import java.util.concurrent.TimeUnit; public class UserPunishment { - private UserPunishment() { + private UserPunishment() + { throw new IllegalStateException("Utility class"); } @@ -42,24 +43,24 @@ public class UserPunishment User targetUser = null; OptionMapping targetUserArg = event.getOption("target"); - if(targetUserArg != null) + if (targetUserArg != null) { targetUser = targetUserArg.getAsUser(); } List mentions = null; - if(targetUser != null) mentions = new ArrayList<>(Collections.singletonList(targetUser)); + if (targetUser != null) mentions = new ArrayList<>(Collections.singletonList(targetUser)); String reason = null; OptionMapping reasonArg = event.getOption("reason"); - if(reasonArg != null) + if (reasonArg != null) { reason = reasonArg.getAsString(); } String timeDiff = null; OptionMapping timeDiffArg = event.getOption("duration"); - if(timeDiffArg != null) + if (timeDiffArg != null) { timeDiff = timeDiffArg.getAsString(); } @@ -71,13 +72,13 @@ public class UserPunishment // we should probably rework the it so that it works better in both scenarios. String[] reasonSplit = null; // generate the arguments array by splitting the string - if(reason != null) reasonSplit = reason.split("\\s+"); + if (reason != null) reasonSplit = reason.split("\\s+"); //prepend timediff at index 0 - if(timeDiff != null) reasonSplit = ArrayUtils.insert(0, reasonSplit, timeDiff); + if (timeDiff != null) reasonSplit = ArrayUtils.insert(0, reasonSplit, timeDiff); // in message-commands, the first arg would contain the user mention. since we have no one mentioned here, // because it's in its own argument, we just prepend an empty string. note that this makes relying on the // first argument BAD, because it is no longer ensured that it contains the user mention. - if(timeDiff != null) reasonSplit = ArrayUtils.insert(0, reasonSplit, ""); + if (timeDiff != null) reasonSplit = ArrayUtils.insert(0, reasonSplit, ""); MessageResponse response = getResponse(event.getUser(), punishmentType, @@ -85,9 +86,9 @@ public class UserPunishment mentions, reasonSplit); - if(response.embed() != null) + if (response.embed() != null) event.getHook().editOriginalEmbeds(response.embed()).queue(); - else if(response.content() != null) + else if (response.content() != null) event.getHook().editOriginal(response.content()).queue(); } @@ -102,9 +103,9 @@ public class UserPunishment mentions, args); - if(response.embed() != null) + if (response.embed() != null) event.getMessage().replyEmbeds(response.embed()).queue(); - else if(response.content() != null) + else if (response.content() != null) event.getMessage().reply(response.content()).queue(); } @@ -117,13 +118,13 @@ public class UserPunishment String punishmentTypeName = punishmentType.name().toLowerCase(); - if(!(channel instanceof TextChannel)) + if (!(channel instanceof TextChannel)) { // todo nicer looking with emojis return new MessageResponse("Sorry! I can't " + punishmentTypeName + " people in DMs.", null); } - if(mentions == null || mentions.isEmpty()) + if (mentions == null || mentions.isEmpty()) { // todo nicer looking with emojis return new MessageResponse("You have to tell me who to " + punishmentTypeName + "!", null); @@ -132,7 +133,8 @@ public class UserPunishment String mentionedId = mentions.get(0).getId(); User mentioned = null; - try { + try + { mentioned = HidekoBot.getAPI().retrieveUserById(mentionedId).complete(); } catch (RuntimeException ignored) { @@ -146,21 +148,21 @@ public class UserPunishment // some commands require an additional parameter before the reason, so in that case, we should start at 2. int startingPoint = punishmentType == PunishmentType.TIMEOUT ? 2 : 1; - if(args != null && args.length > startingPoint) + if (args != null && args.length > startingPoint) { - for(int i = startingPoint; i < args.length; i++) + for (int i = startingPoint; i < args.length; i++) { String arg = args[i]; reasonBuilder.append(arg); - if(i + 1 != arg.length()) + if (i + 1 != arg.length()) reasonBuilder.append(" "); // separate args with a space except on last iteration. } reason = reasonBuilder.toString(); } - if(mentioned == null) + if (mentioned == null) { // todo nicer looking with emojis return new MessageResponse("I can't " + punishmentTypeName + " that user!", null); @@ -172,12 +174,15 @@ public class UserPunishment AuditableRestAction punishmentAction = null; boolean impossible = false; - try { - switch (punishmentType) { + try + { + switch (punishmentType) + { case BAN -> punishmentAction = guild.ban(mentioned, 0, TimeUnit.SECONDS); case KICK -> punishmentAction = guild.kick(mentioned); - case TIMEOUT -> { - if(args != null) + case TIMEOUT -> + { + if (args != null) { String durationStr = args[1]; duration = FormatUtil.parseDuration(durationStr); @@ -185,14 +190,14 @@ public class UserPunishment boolean isDurationValid = true; - if(duration == null) isDurationValid = false; + if (duration == null) isDurationValid = false; else { - if(duration.compareTo(maxTimeoutDuration) > 0) isDurationValid = false; - if(minTimeoutDuration.compareTo(duration) > 0) isDurationValid = false; + if (duration.compareTo(maxTimeoutDuration) > 0) isDurationValid = false; + if (minTimeoutDuration.compareTo(duration) > 0) isDurationValid = false; } - if(duration == null || !isDurationValid) + if (duration == null || !isDurationValid) { // todo nicer looking with emojis return new MessageResponse("Sorry, but the specified duration is invalid!", null); @@ -201,24 +206,26 @@ public class UserPunishment punishmentAction = guild.timeoutFor(mentioned, duration); } } - } catch (RuntimeException ignored) { + } catch (RuntimeException ignored) + { impossible = true; } - if(punishmentAction == null) + if (punishmentAction == null) impossible = true; - if(impossible) + if (impossible) { // todo nicer looking with emojis return new MessageResponse("Sorry, I couldn't " + punishmentTypeName + " " + mentioned.getAsMention() + "!", null); } - if(!reason.isEmpty() && !reasonBuilder.isEmpty()) + if (!reason.isEmpty() && !reasonBuilder.isEmpty()) punishmentAction.reason("[" + author.getAsTag() + "] " + reason); - try { + try + { punishmentAction.complete(); } catch (RuntimeException ignored) { @@ -235,10 +242,10 @@ public class UserPunishment embedBuilder.addField("\uD83D\uDC64 User", mentioned.getAsMention(), false); embedBuilder.addField("✂️ By", author.getAsMention(), false); - if(duration != null) + if (duration != null) embedBuilder.addField("⏱️ Duration", FormatUtil.getNiceDuration(duration), false); - if(reason.isEmpty()) + if (reason.isEmpty()) reason = "*No reason specified*"; embedBuilder.addField("\uD83D\uDCD6 Reason", reason, false); @@ -248,7 +255,8 @@ public class UserPunishment } - public enum PunishmentType { + public enum PunishmentType + { KICK("kicked"), BAN("banned"), TIMEOUT("timed out"), diff --git a/src/main/java/wtf/beatrice/hidekobot/commands/completer/ProfileImageCommandCompleter.java b/src/main/java/wtf/beatrice/hidekobot/commands/completer/ProfileImageCommandCompleter.java index f530eff..34696b7 100644 --- a/src/main/java/wtf/beatrice/hidekobot/commands/completer/ProfileImageCommandCompleter.java +++ b/src/main/java/wtf/beatrice/hidekobot/commands/completer/ProfileImageCommandCompleter.java @@ -13,23 +13,25 @@ import java.util.List; public class ProfileImageCommandCompleter extends SlashArgumentsCompleterImpl { - public ProfileImageCommandCompleter(SlashCommand parentCommand) { + public ProfileImageCommandCompleter(SlashCommand parentCommand) + { super(parentCommand); } @Override - public void runCompletion(@NotNull CommandAutoCompleteInteractionEvent event) { - if(event.getFocusedOption().getName().equals("size")) + public void runCompletion(@NotNull CommandAutoCompleteInteractionEvent event) + { + if (event.getFocusedOption().getName().equals("size")) { List options = new ArrayList<>(); - for(int res : Cache.getSupportedAvatarResolutions()) + for (int res : Cache.getSupportedAvatarResolutions()) { String resString = String.valueOf(res); String userInput = event.getFocusedOption().getValue(); - if(resString.startsWith(userInput)) + if (resString.startsWith(userInput)) options.add(new Command.Choice(resString, res)); } diff --git a/src/main/java/wtf/beatrice/hidekobot/commands/message/AliasCommand.java b/src/main/java/wtf/beatrice/hidekobot/commands/message/AliasCommand.java index 4904dd6..c697f97 100644 --- a/src/main/java/wtf/beatrice/hidekobot/commands/message/AliasCommand.java +++ b/src/main/java/wtf/beatrice/hidekobot/commands/message/AliasCommand.java @@ -17,43 +17,49 @@ public class AliasCommand implements MessageCommand { @Override - public LinkedList getCommandLabels() { + public LinkedList getCommandLabels() + { return new LinkedList<>(Arrays.asList("alias", "aliases")); } @Nullable @Override - public List getPermissions() { + public List getPermissions() + { return null; // anyone can use it } @Override - public boolean passRawArgs() { + public boolean passRawArgs() + { return false; } @NotNull @Override - public CommandCategory getCategory() { + public CommandCategory getCategory() + { return CommandCategory.TOOLS; } @NotNull @Override - public String getDescription() { + public String getDescription() + { return "See other command aliases."; } @Nullable @Override - public String getUsage() { + public String getUsage() + { return ""; } @Override public void runCommand(MessageReceivedEvent event, String label, String[] args) { - if(args.length == 0) + if (args.length == 0) { event.getMessage().reply("\uD83D\uDE20 Hey, you have to specify a command!").queue(); return; @@ -61,14 +67,14 @@ public class AliasCommand implements MessageCommand String commandLabel = args[0].toLowerCase(); MessageCommand command = Cache.getMessageCommandListener().getRegisteredCommand(commandLabel); - if(command == null) + if (command == null) { event.getMessage().reply("Unrecognized command: `" + commandLabel + "`!").queue(); // todo prettier return; } String aliases = Alias.generateNiceAliases(command); - aliases = "Aliases for **" + command.getCommandLabels().get(0) + "**: " + aliases; + aliases = "Aliases for **" + command.getCommandLabels().get(0) + "**: " + aliases; event.getMessage() .reply(aliases) diff --git a/src/main/java/wtf/beatrice/hidekobot/commands/message/AvatarCommand.java b/src/main/java/wtf/beatrice/hidekobot/commands/message/AvatarCommand.java index db28831..0556105 100644 --- a/src/main/java/wtf/beatrice/hidekobot/commands/message/AvatarCommand.java +++ b/src/main/java/wtf/beatrice/hidekobot/commands/message/AvatarCommand.java @@ -16,40 +16,46 @@ import java.util.Collections; import java.util.LinkedList; import java.util.List; -public class AvatarCommand implements MessageCommand +public class AvatarCommand implements MessageCommand { @Override - public LinkedList getCommandLabels() { + public LinkedList getCommandLabels() + { return new LinkedList<>(Collections.singletonList("avatar")); } @Nullable @Override - public List getPermissions() { + public List getPermissions() + { return null; // anyone can use it } @Override - public boolean passRawArgs() { + public boolean passRawArgs() + { return false; } @NotNull @Override - public String getDescription() { + public String getDescription() + { return "Get someone's avatar, or your own. You can additionally specify a resolution."; } @Nullable @Override - public String getUsage() { + public String getUsage() + { return "[mentioned user] [resolution]"; } @NotNull @Override - public CommandCategory getCategory() { + public CommandCategory getCategory() + { return CommandCategory.TOOLS; } @@ -63,23 +69,26 @@ public class AvatarCommand implements MessageCommand // (mentions are handled differently by a specific method) boolean resFound = false; - for (String arg : args) { - try { + for (String arg : args) + { + try + { int givenRes = Integer.parseInt(arg); resolution = ProfileImage.parseResolution(givenRes); resFound = true; break; - } catch (NumberFormatException ignored) { + } catch (NumberFormatException ignored) + { // ignored because we're running a check after this block } } // fallback in case we didn't find any specified resolution - if(!resFound) resolution = ProfileImage.parseResolution(512); + if (!resFound) resolution = ProfileImage.parseResolution(512); // check if someone is mentioned Mentions mentions = event.getMessage().getMentions(); - if(mentions.getMentions().isEmpty()) + if (mentions.getMentions().isEmpty()) { user = event.getAuthor(); } else @@ -89,14 +98,14 @@ public class AvatarCommand implements MessageCommand } // in case of issues, fallback to the sender - if(user == null) user = event.getAuthor(); + if (user == null) user = event.getAuthor(); // send a response MessageResponse response = ProfileImage.buildResponse(resolution, user, ProfileImage.ImageType.AVATAR); - if(response.content() != null) + if (response.content() != null) { event.getMessage().reply(response.content()).queue(); - } else if(response.embed() != null) + } else if (response.embed() != null) { event.getMessage().replyEmbeds(response.embed()).queue(); } diff --git a/src/main/java/wtf/beatrice/hidekobot/commands/message/BanCommand.java b/src/main/java/wtf/beatrice/hidekobot/commands/message/BanCommand.java index d4c540c..42af38e 100644 --- a/src/main/java/wtf/beatrice/hidekobot/commands/message/BanCommand.java +++ b/src/main/java/wtf/beatrice/hidekobot/commands/message/BanCommand.java @@ -17,36 +17,42 @@ public class BanCommand implements MessageCommand { @Override - public LinkedList getCommandLabels() { + public LinkedList getCommandLabels() + { return new LinkedList<>(Collections.singletonList("ban")); } @Nullable @Override - public List getPermissions() { + public List getPermissions() + { return new ArrayList(Collections.singletonList(Permission.BAN_MEMBERS)); } @Override - public boolean passRawArgs() { + public boolean passRawArgs() + { return false; } @NotNull @Override - public CommandCategory getCategory() { + public CommandCategory getCategory() + { return CommandCategory.MODERATION; } @NotNull @Override - public String getDescription() { + public String getDescription() + { return "Ban the mentioned user."; } @Nullable @Override - public String getUsage() { + public String getUsage() + { return " [reason]"; } diff --git a/src/main/java/wtf/beatrice/hidekobot/commands/message/BannerCommand.java b/src/main/java/wtf/beatrice/hidekobot/commands/message/BannerCommand.java index dd0cd9b..c708ff4 100644 --- a/src/main/java/wtf/beatrice/hidekobot/commands/message/BannerCommand.java +++ b/src/main/java/wtf/beatrice/hidekobot/commands/message/BannerCommand.java @@ -20,36 +20,42 @@ public class BannerCommand implements MessageCommand { @Override - public LinkedList getCommandLabels() { + public LinkedList getCommandLabels() + { return new LinkedList<>(Collections.singletonList("banner")); } @Nullable @Override - public List getPermissions() { + public List getPermissions() + { return null; // anyone can use it } @Override - public boolean passRawArgs() { + public boolean passRawArgs() + { return false; } @NotNull @Override - public String getDescription() { + public String getDescription() + { return "Get someone's profile banner, or your own."; } @Nullable @Override - public String getUsage() { + public String getUsage() + { return "[mentioned user] [resolution]"; } @NotNull @Override - public CommandCategory getCategory() { + public CommandCategory getCategory() + { return CommandCategory.TOOLS; } @@ -63,23 +69,26 @@ public class BannerCommand implements MessageCommand // (mentions are handled differently by a specific method) boolean resFound = false; - for (String arg : args) { - try { + for (String arg : args) + { + try + { int givenRes = Integer.parseInt(arg); resolution = ProfileImage.parseResolution(givenRes); resFound = true; break; - } catch (NumberFormatException ignored) { + } catch (NumberFormatException ignored) + { // ignored because we're running a check after this block } } // fallback in case we didn't find any specified resolution - if(!resFound) resolution = ProfileImage.parseResolution(512); + if (!resFound) resolution = ProfileImage.parseResolution(512); // check if someone is mentioned Mentions mentions = event.getMessage().getMentions(); - if(mentions.getMentions().isEmpty()) + if (mentions.getMentions().isEmpty()) { user = event.getAuthor(); } else @@ -89,14 +98,14 @@ public class BannerCommand implements MessageCommand } // in case of issues, fallback to the sender - if(user == null) user = event.getAuthor(); + if (user == null) user = event.getAuthor(); // send a response MessageResponse response = ProfileImage.buildResponse(resolution, user, ProfileImage.ImageType.BANNER); - if(response.content() != null) + if (response.content() != null) { event.getMessage().reply(response.content()).queue(); - } else if(response.embed() != null) + } else if (response.embed() != null) { event.getMessage().replyEmbeds(response.embed()).queue(); } diff --git a/src/main/java/wtf/beatrice/hidekobot/commands/message/BotInfoCommand.java b/src/main/java/wtf/beatrice/hidekobot/commands/message/BotInfoCommand.java index b2db865..a56b1ee 100644 --- a/src/main/java/wtf/beatrice/hidekobot/commands/message/BotInfoCommand.java +++ b/src/main/java/wtf/beatrice/hidekobot/commands/message/BotInfoCommand.java @@ -18,46 +18,54 @@ public class BotInfoCommand implements MessageCommand { @Override - public LinkedList getCommandLabels() { + public LinkedList getCommandLabels() + { return new LinkedList<>(Arrays.asList("botinfo", "info")); } @Nullable @Override - public List getPermissions() { + public List getPermissions() + { return null; // anyone can use it } @Override - public boolean passRawArgs() { + public boolean passRawArgs() + { return false; } @NotNull @Override - public String getDescription() { + public String getDescription() + { return "Get general info about the bot."; } @Nullable @Override - public String getUsage() { + public String getUsage() + { return null; } @NotNull @Override - public CommandCategory getCategory() { + public CommandCategory getCategory() + { return CommandCategory.TOOLS; } @Override - public void runCommand(MessageReceivedEvent event, String label, String[] args) { + public void runCommand(MessageReceivedEvent event, String label, String[] args) + { // get a list of message commands LinkedList messageCommands = Cache.getMessageCommandListener().getRegisteredCommands(); LinkedList commandNames = new LinkedList<>(); - for (MessageCommand command : messageCommands) { + for (MessageCommand command : messageCommands) + { commandNames.add(command.getCommandLabels().get(0)); } diff --git a/src/main/java/wtf/beatrice/hidekobot/commands/message/ClearCommand.java b/src/main/java/wtf/beatrice/hidekobot/commands/message/ClearCommand.java index e5281d3..a5c5349 100644 --- a/src/main/java/wtf/beatrice/hidekobot/commands/message/ClearCommand.java +++ b/src/main/java/wtf/beatrice/hidekobot/commands/message/ClearCommand.java @@ -19,33 +19,41 @@ public class ClearCommand implements MessageCommand { @Override - public LinkedList getCommandLabels() { + public LinkedList getCommandLabels() + { return new LinkedList<>(Collections.singletonList(ClearChat.getLabel())); } @Override - public List getPermissions() { return Collections.singletonList(ClearChat.getPermission()); } + public List getPermissions() + { + return Collections.singletonList(ClearChat.getPermission()); + } @Override - public boolean passRawArgs() { + public boolean passRawArgs() + { return false; } @NotNull @Override - public CommandCategory getCategory() { + public CommandCategory getCategory() + { return CommandCategory.MODERATION; } @NotNull @Override - public String getDescription() { + public String getDescription() + { return "Clear the current channel's chat history."; } @Nullable @Override - public String getUsage() { + public String getUsage() + { return "[amount]"; } @@ -54,7 +62,8 @@ public class ClearCommand implements MessageCommand { // check if user is trying to run command in dms. String error = ClearChat.checkDMs(event.getChannel()); - if (error != null) { + if (error != null) + { event.getMessage().reply(error).queue(); return; } @@ -64,7 +73,8 @@ public class ClearCommand implements MessageCommand if (args.length == 0) toDeleteAmount = 1; else { - try { + try + { toDeleteAmount = Integer.parseInt(args[0]); } catch (NumberFormatException e) { @@ -73,10 +83,11 @@ public class ClearCommand implements MessageCommand } // cap the amount to avoid abuse. - if(toDeleteAmount > ClearChat.getMaxAmount()) toDeleteAmount = 0; + if (toDeleteAmount > ClearChat.getMaxAmount()) toDeleteAmount = 0; error = ClearChat.checkDeleteAmount(toDeleteAmount); - if (error != null) { + if (error != null) + { event.getMessage().reply(error).queue(); return; } diff --git a/src/main/java/wtf/beatrice/hidekobot/commands/message/CoinFlipCommand.java b/src/main/java/wtf/beatrice/hidekobot/commands/message/CoinFlipCommand.java index 26a5bf6..6e2dcb2 100644 --- a/src/main/java/wtf/beatrice/hidekobot/commands/message/CoinFlipCommand.java +++ b/src/main/java/wtf/beatrice/hidekobot/commands/message/CoinFlipCommand.java @@ -16,41 +16,48 @@ public class CoinFlipCommand implements MessageCommand { @Override - public LinkedList getCommandLabels() { + public LinkedList getCommandLabels() + { return new LinkedList<>(Arrays.asList("coinflip", "flip", "flipcoin")); } @Nullable @Override - public List getPermissions() { + public List getPermissions() + { return null; // null because it can be used anywhere } @Override - public boolean passRawArgs() { + public boolean passRawArgs() + { return false; } @NotNull @Override - public String getDescription() { + public String getDescription() + { return "Flip a coin."; } @Nullable @Override - public String getUsage() { + public String getUsage() + { return null; } @NotNull @Override - public CommandCategory getCategory() { + public CommandCategory getCategory() + { return CommandCategory.FUN; } @Override - public void runCommand(MessageReceivedEvent event, String label, String[] args) { + public void runCommand(MessageReceivedEvent event, String label, String[] args) + { // perform coin flip event.getMessage().reply(CoinFlip.genRandom()) @@ -59,6 +66,7 @@ public class CoinFlipCommand implements MessageCommand { // set the command as expiring and restrict it to the user who ran it CoinFlip.trackAndRestrict(message, event.getAuthor()); - }, (error) -> {}); + }, (error) -> { + }); } } diff --git a/src/main/java/wtf/beatrice/hidekobot/commands/message/DiceRollCommand.java b/src/main/java/wtf/beatrice/hidekobot/commands/message/DiceRollCommand.java index 2cc4976..ac32047 100644 --- a/src/main/java/wtf/beatrice/hidekobot/commands/message/DiceRollCommand.java +++ b/src/main/java/wtf/beatrice/hidekobot/commands/message/DiceRollCommand.java @@ -16,18 +16,21 @@ import java.util.List; public class DiceRollCommand implements MessageCommand { @Override - public LinkedList getCommandLabels() { + public LinkedList getCommandLabels() + { return new LinkedList<>(Arrays.asList("diceroll", "droll", "roll")); } @Nullable @Override - public List getPermissions() { + public List getPermissions() + { return null; // anyone can use it } @Override - public boolean passRawArgs() { + public boolean passRawArgs() + { return false; } @@ -47,13 +50,15 @@ public class DiceRollCommand implements MessageCommand @Nullable @Override - public String getUsage() { + public String getUsage() + { return "[dice size] [rolls]"; } @NotNull @Override - public CommandCategory getCategory() { + public CommandCategory getCategory() + { return CommandCategory.FUN; } @@ -63,10 +68,10 @@ public class DiceRollCommand implements MessageCommand MessageResponse response = DiceRoll.buildResponse(event.getAuthor(), args); - if(response.content() != null) + if (response.content() != null) { event.getMessage().reply(response.content()).queue(); - } else if(response.embed() != null) + } else if (response.embed() != null) { event.getMessage().replyEmbeds(response.embed()).queue(); } diff --git a/src/main/java/wtf/beatrice/hidekobot/commands/message/HelloCommand.java b/src/main/java/wtf/beatrice/hidekobot/commands/message/HelloCommand.java index dae4c11..fdd84bf 100644 --- a/src/main/java/wtf/beatrice/hidekobot/commands/message/HelloCommand.java +++ b/src/main/java/wtf/beatrice/hidekobot/commands/message/HelloCommand.java @@ -15,33 +15,41 @@ public class HelloCommand implements MessageCommand { @Override - public LinkedList getCommandLabels() { + public LinkedList getCommandLabels() + { return new LinkedList<>(Arrays.asList("hi", "hello", "heya")); } @Override - public List getPermissions() { return null; } + public List getPermissions() + { + return null; + } @Override - public boolean passRawArgs() { + public boolean passRawArgs() + { return false; } @NotNull @Override - public String getDescription() { + public String getDescription() + { return "Get pinged by the bot."; } @Nullable @Override - public String getUsage() { + public String getUsage() + { return null; } @NotNull @Override - public CommandCategory getCategory() { + public CommandCategory getCategory() + { return CommandCategory.FUN; } diff --git a/src/main/java/wtf/beatrice/hidekobot/commands/message/HelpCommand.java b/src/main/java/wtf/beatrice/hidekobot/commands/message/HelpCommand.java index af4ca5e..70a80ff 100644 --- a/src/main/java/wtf/beatrice/hidekobot/commands/message/HelpCommand.java +++ b/src/main/java/wtf/beatrice/hidekobot/commands/message/HelpCommand.java @@ -18,34 +18,42 @@ public class HelpCommand implements MessageCommand @Override - public LinkedList getCommandLabels() { + public LinkedList getCommandLabels() + { return new LinkedList<>(Collections.singletonList("help")); } @Nullable @Override - public List getPermissions() { return null; } + public List getPermissions() + { + return null; + } @Override - public boolean passRawArgs() { + public boolean passRawArgs() + { return false; } @NotNull @Override - public String getDescription() { + public String getDescription() + { return "Get general help on the bot. Specify a command if you want specific help about that command."; } @Nullable @Override - public String getUsage() { + public String getUsage() + { return "[command]"; } @NotNull @Override - public CommandCategory getCategory() { + public CommandCategory getCategory() + { return CommandCategory.TOOLS; } @@ -54,14 +62,14 @@ public class HelpCommand implements MessageCommand { LinkedHashMap> commandCategories = new LinkedHashMap<>(); - if(args.length == 0) + if (args.length == 0) { - for(CommandCategory category : CommandCategory.values()) + for (CommandCategory category : CommandCategory.values()) { LinkedList commandsOfThisCategory = new LinkedList<>(); for (MessageCommand command : Cache.getMessageCommandListener().getRegisteredCommands()) { - if(command.getCategory().equals(category)) + if (command.getCategory().equals(category)) { commandsOfThisCategory.add(command); } @@ -79,18 +87,18 @@ public class HelpCommand implements MessageCommand "\nYou will find a list of commands organized in categories below.", false); - for(Map.Entry> entry : commandCategories.entrySet()) + for (Map.Entry> entry : commandCategories.entrySet()) { StringBuilder commandsList = new StringBuilder(); CommandCategory category = entry.getKey(); LinkedList commandsOfThisCategory = entry.getValue(); - for(int pos = 0; pos < commandsOfThisCategory.size(); pos++) + for (int pos = 0; pos < commandsOfThisCategory.size(); pos++) { MessageCommand command = commandsOfThisCategory.get(pos); commandsList.append("`").append(command.getCommandLabels().get(0)).append("`"); - if(pos + 1 != commandsOfThisCategory.size()) + if (pos + 1 != commandsOfThisCategory.size()) commandsList.append(", "); // separate with comma except on last run } @@ -102,11 +110,12 @@ public class HelpCommand implements MessageCommand } event.getMessage().replyEmbeds(embedBuilder.build()).queue(); - } else { + } else + { String commandLabel = args[0].toLowerCase(); MessageCommand command = Cache.getMessageCommandListener().getRegisteredCommand(commandLabel); - if(command == null) + if (command == null) { event.getMessage().reply("Unrecognized command: `" + commandLabel + "`!").queue(); // todo prettier return; @@ -115,23 +124,24 @@ public class HelpCommand implements MessageCommand commandLabel = command.getCommandLabels().get(0); String usage = "`" + Cache.getBotPrefix() + " " + commandLabel; String internalUsage = command.getUsage(); - if(internalUsage != null) usage += " " + internalUsage; + if (internalUsage != null) usage += " " + internalUsage; usage += "`"; String aliases = Alias.generateNiceAliases(command); List permissions = command.getPermissions(); StringBuilder permissionsStringBuilder = new StringBuilder(); - if(permissions == null) + if (permissions == null) { permissionsStringBuilder = new StringBuilder("Available to everyone"); - } else { - for(int i = 0; i < permissions.size(); i++) + } else + { + for (int i = 0; i < permissions.size(); i++) { Permission permission = permissions.get(i); permissionsStringBuilder.append("**").append(permission.getName()).append("**"); - if(i + 1 != permissions.size()) + if (i + 1 != permissions.size()) permissionsStringBuilder.append(", "); // separate with comma expect on last iteration } } diff --git a/src/main/java/wtf/beatrice/hidekobot/commands/message/InviteCommand.java b/src/main/java/wtf/beatrice/hidekobot/commands/message/InviteCommand.java index 53bb1f3..d120080 100644 --- a/src/main/java/wtf/beatrice/hidekobot/commands/message/InviteCommand.java +++ b/src/main/java/wtf/beatrice/hidekobot/commands/message/InviteCommand.java @@ -19,36 +19,42 @@ public class InviteCommand implements MessageCommand { @Override - public LinkedList getCommandLabels() { + public LinkedList getCommandLabels() + { return new LinkedList<>(Collections.singletonList("invite")); } @Nullable @Override - public List getPermissions() { + public List getPermissions() + { return null; } @Override - public boolean passRawArgs() { + public boolean passRawArgs() + { return false; } @NotNull @Override - public String getDescription() { + public String getDescription() + { return "Get the bot's invite link."; } @Nullable @Override - public String getUsage() { + public String getUsage() + { return null; } @NotNull @Override - public CommandCategory getCategory() { + public CommandCategory getCategory() + { return CommandCategory.MODERATION; } @@ -61,7 +67,7 @@ public class InviteCommand implements MessageCommand Button inviteButton = Invite.getInviteButton(); // if this is a guild, don't spam the invite in public but DM it - if(event.getChannelType().isGuild()) + if (event.getChannelType().isGuild()) { event.getAuthor().openPrivateChannel().queue(privateChannel -> { @@ -70,7 +76,8 @@ public class InviteCommand implements MessageCommand .queue(); event.getMessage().addReaction(Emoji.fromUnicode("✅")).queue(); }, error -> event.getMessage().addReaction(Emoji.fromUnicode("❌")).queue()); - } else { + } else + { event.getMessage() .replyEmbeds(inviteEmbed) .addActionRow(inviteButton) diff --git a/src/main/java/wtf/beatrice/hidekobot/commands/message/KickCommand.java b/src/main/java/wtf/beatrice/hidekobot/commands/message/KickCommand.java index 473c4fe..a09d809 100644 --- a/src/main/java/wtf/beatrice/hidekobot/commands/message/KickCommand.java +++ b/src/main/java/wtf/beatrice/hidekobot/commands/message/KickCommand.java @@ -17,36 +17,42 @@ public class KickCommand implements MessageCommand { @Override - public LinkedList getCommandLabels() { + public LinkedList getCommandLabels() + { return new LinkedList<>(Collections.singletonList("kick")); } @Nullable @Override - public List getPermissions() { + public List getPermissions() + { return new ArrayList(Collections.singletonList(Permission.KICK_MEMBERS)); } @Override - public boolean passRawArgs() { + public boolean passRawArgs() + { return false; } @NotNull @Override - public CommandCategory getCategory() { + public CommandCategory getCategory() + { return CommandCategory.MODERATION; } @NotNull @Override - public String getDescription() { + public String getDescription() + { return "Kick the mentioned user from the guild."; } @Nullable @Override - public String getUsage() { + public String getUsage() + { return " [reason]"; } diff --git a/src/main/java/wtf/beatrice/hidekobot/commands/message/LoveCalculatorCommand.java b/src/main/java/wtf/beatrice/hidekobot/commands/message/LoveCalculatorCommand.java index de2a09b..8e0bfd1 100644 --- a/src/main/java/wtf/beatrice/hidekobot/commands/message/LoveCalculatorCommand.java +++ b/src/main/java/wtf/beatrice/hidekobot/commands/message/LoveCalculatorCommand.java @@ -29,30 +29,35 @@ public class LoveCalculatorCommand implements MessageCommand @Nullable @Override - public List getPermissions() { + public List getPermissions() + { return null; //anyone can use it } @Override - public boolean passRawArgs() { + public boolean passRawArgs() + { return false; } @NotNull @Override - public String getDescription() { + public String getDescription() + { return "Calculate how much two people love each other. You can mention two people or just one."; } @Nullable @Override - public String getUsage() { + public String getUsage() + { return " [person 2]"; } @NotNull @Override - public CommandCategory getCategory() { + public CommandCategory getCategory() + { return CommandCategory.FUN; } @@ -64,7 +69,7 @@ public class LoveCalculatorCommand implements MessageCommand List mentions = mentionsObj.getMentions(); - if(args.length == 0 || mentions.isEmpty()) + if (args.length == 0 || mentions.isEmpty()) { event.getMessage() .reply("\uD83D\uDE22 I need to know who to check! Please mention them.") @@ -77,10 +82,11 @@ public class LoveCalculatorCommand implements MessageCommand String mentionedUserId = mentions.get(0).getId(); user1 = HidekoBot.getAPI().retrieveUserById(mentionedUserId).complete(); - if(mentions.size() == 1) + if (mentions.size() == 1) { user2 = event.getAuthor(); - } else { + } else + { mentionedUserId = mentions.get(1).getId(); user2 = HidekoBot.getAPI().retrieveUserById(mentionedUserId).complete(); } diff --git a/src/main/java/wtf/beatrice/hidekobot/commands/message/MagicBallCommand.java b/src/main/java/wtf/beatrice/hidekobot/commands/message/MagicBallCommand.java index f1faf18..27fa202 100644 --- a/src/main/java/wtf/beatrice/hidekobot/commands/message/MagicBallCommand.java +++ b/src/main/java/wtf/beatrice/hidekobot/commands/message/MagicBallCommand.java @@ -15,58 +15,64 @@ public class MagicBallCommand implements MessageCommand { @Override - public LinkedList getCommandLabels() { + public LinkedList getCommandLabels() + { return MagicBall.getLabels(); } @Nullable @Override - public List getPermissions() { + public List getPermissions() + { return null; // anyone can use it } @Override - public boolean passRawArgs() { + public boolean passRawArgs() + { return false; } @NotNull @Override - public String getDescription() { + public String getDescription() + { return "Ask a question to the Magic Ball."; } @Nullable @Override - public String getUsage() { + public String getUsage() + { return ""; } @NotNull @Override - public CommandCategory getCategory() { + public CommandCategory getCategory() + { return CommandCategory.FUN; } @Override public void runCommand(MessageReceivedEvent event, String label, String[] args) { - if(args.length == 0) + if (args.length == 0) { event.getMessage().reply("You need to specify a question!").queue(); return; } StringBuilder questionBuilder = new StringBuilder(); - for(int i = 0; i < args.length; i++) + for (int i = 0; i < args.length; i++) { String arg = args[i]; questionBuilder.append(arg); - if(i + 1 != args.length) // don't add a separator on the last iteration + if (i + 1 != args.length) // don't add a separator on the last iteration questionBuilder.append(" "); } - String question = questionBuilder.toString(); + String question = questionBuilder.toString(); event.getChannel().sendMessageEmbeds(MagicBall.generateEmbed(question, event.getAuthor())).queue(); diff --git a/src/main/java/wtf/beatrice/hidekobot/commands/message/SayCommand.java b/src/main/java/wtf/beatrice/hidekobot/commands/message/SayCommand.java index 7c87b89..7bccd12 100644 --- a/src/main/java/wtf/beatrice/hidekobot/commands/message/SayCommand.java +++ b/src/main/java/wtf/beatrice/hidekobot/commands/message/SayCommand.java @@ -18,34 +18,42 @@ public class SayCommand implements MessageCommand @Override - public LinkedList getCommandLabels() { + public LinkedList getCommandLabels() + { return new LinkedList<>(Collections.singletonList("say")); } @Nullable @Override - public List getPermissions() { return Collections.singletonList(Say.getPermission()); } + public List getPermissions() + { + return Collections.singletonList(Say.getPermission()); + } @Override - public boolean passRawArgs() { + public boolean passRawArgs() + { return true; } @NotNull @Override - public String getDescription() { + public String getDescription() + { return "Make the bot say something for you."; } @Nullable @Override - public String getUsage() { + public String getUsage() + { return ""; } @NotNull @Override - public CommandCategory getCategory() { + public CommandCategory getCategory() + { return CommandCategory.TOOLS; } diff --git a/src/main/java/wtf/beatrice/hidekobot/commands/message/TimeoutCommand.java b/src/main/java/wtf/beatrice/hidekobot/commands/message/TimeoutCommand.java index 50aa23a..c7df0fe 100644 --- a/src/main/java/wtf/beatrice/hidekobot/commands/message/TimeoutCommand.java +++ b/src/main/java/wtf/beatrice/hidekobot/commands/message/TimeoutCommand.java @@ -17,36 +17,42 @@ public class TimeoutCommand implements MessageCommand { @Override - public LinkedList getCommandLabels() { + public LinkedList getCommandLabels() + { return new LinkedList<>(Collections.singletonList("timeout")); } @Nullable @Override - public List getPermissions() { + public List getPermissions() + { return new ArrayList(Collections.singletonList(Permission.MODERATE_MEMBERS)); } @Override - public boolean passRawArgs() { + public boolean passRawArgs() + { return false; } @NotNull @Override - public CommandCategory getCategory() { + public CommandCategory getCategory() + { return CommandCategory.MODERATION; } @NotNull @Override - public String getDescription() { + public String getDescription() + { return "Timeout the mentioned user."; } @Nullable @Override - public String getUsage() { + public String getUsage() + { return " [reason]"; } diff --git a/src/main/java/wtf/beatrice/hidekobot/commands/message/TriviaCommand.java b/src/main/java/wtf/beatrice/hidekobot/commands/message/TriviaCommand.java index 56c6b41..50fff25 100644 --- a/src/main/java/wtf/beatrice/hidekobot/commands/message/TriviaCommand.java +++ b/src/main/java/wtf/beatrice/hidekobot/commands/message/TriviaCommand.java @@ -23,36 +23,42 @@ public class TriviaCommand implements MessageCommand { @Override - public LinkedList getCommandLabels() { + public LinkedList getCommandLabels() + { return new LinkedList<>(Collections.singletonList("trivia")); } @Nullable @Override - public List getPermissions() { + public List getPermissions() + { return null; } @Override - public boolean passRawArgs() { + public boolean passRawArgs() + { return false; } @NotNull @Override - public CommandCategory getCategory() { + public CommandCategory getCategory() + { return CommandCategory.FUN; } @NotNull @Override - public String getDescription() { + public String getDescription() + { return "Start a Trivia session and play with others!"; } @Nullable @Override - public String getUsage() { + public String getUsage() + { return null; } @@ -61,13 +67,13 @@ public class TriviaCommand implements MessageCommand { MessageChannel channel = event.getChannel(); - if(!(channel instanceof TextChannel)) + if (!(channel instanceof TextChannel)) { channel.sendMessage(Trivia.getNoDMsError()).queue(); return; } - if(Trivia.channelsRunningTrivia.contains(channel.getId())) + if (Trivia.channelsRunningTrivia.contains(channel.getId())) { // todo: also what if the bot stops (database...?) // todo: also what if the message is already deleted @@ -80,11 +86,12 @@ public class TriviaCommand implements MessageCommand Message recvMessage = event.getMessage(); MessageCreateAction responseAction = null; - if(response.content() != null) responseAction = recvMessage.reply(response.content()); - else if(response.embed() != null) responseAction = recvMessage.replyEmbeds(response.embed()); + if (response.content() != null) responseAction = recvMessage.reply(response.content()); + else if (response.embed() != null) responseAction = recvMessage.replyEmbeds(response.embed()); - if(responseAction != null) { - if(response.components() != null) responseAction = responseAction.addActionRow(response.components()); + if (responseAction != null) + { + if (response.components() != null) responseAction = responseAction.addActionRow(response.components()); responseAction.queue(message -> { Cache.getDatabaseSource().trackRanCommandReply(message, event.getAuthor()); diff --git a/src/main/java/wtf/beatrice/hidekobot/commands/message/UrbanDictionaryCommand.java b/src/main/java/wtf/beatrice/hidekobot/commands/message/UrbanDictionaryCommand.java index 2fd5e32..93169af 100644 --- a/src/main/java/wtf/beatrice/hidekobot/commands/message/UrbanDictionaryCommand.java +++ b/src/main/java/wtf/beatrice/hidekobot/commands/message/UrbanDictionaryCommand.java @@ -21,36 +21,42 @@ public class UrbanDictionaryCommand implements MessageCommand { @Override - public LinkedList getCommandLabels() { + public LinkedList getCommandLabels() + { return UrbanDictionary.getCommandLabels(); } @Nullable @Override - public List getPermissions() { + public List getPermissions() + { return null; //anyone can use it } @Override - public boolean passRawArgs() { + public boolean passRawArgs() + { return false; } @NotNull @Override - public String getDescription() { + public String getDescription() + { return "Look something up in the Urban Dictionary."; } @Nullable @Override - public String getUsage() { + public String getUsage() + { return ""; } @NotNull @Override - public CommandCategory getCategory() { + public CommandCategory getCategory() + { return CommandCategory.FUN; } @@ -58,7 +64,7 @@ public class UrbanDictionaryCommand implements MessageCommand @Override public void runCommand(MessageReceivedEvent event, String label, String[] args) { - if(args.length == 0) + if (args.length == 0) { event.getMessage().reply(UrbanDictionary.getNoArgsError()).queue(); return; @@ -66,11 +72,12 @@ public class UrbanDictionaryCommand implements MessageCommand // sanitize args by only keeping letters and numbers, and adding "+" instead of spaces for HTML parsing StringBuilder termBuilder = new StringBuilder(); - for (int i = 0; i < args.length; i++) { + for (int i = 0; i < args.length; i++) + { String arg = args[i]; termBuilder.append(arg); - if(i + 1 != args.length) // add spaces between args, but not on the last run + if (i + 1 != args.length) // add spaces between args, but not on the last run termBuilder.append(" "); } @@ -79,9 +86,11 @@ public class UrbanDictionaryCommand implements MessageCommand Document doc; - try { + try + { doc = Jsoup.connect(url).get(); - } catch (IOException e) { + } catch (IOException e) + { event.getMessage().reply(UrbanDictionary.getTermNotFoundError()).queue(); return; } @@ -92,7 +101,7 @@ public class UrbanDictionaryCommand implements MessageCommand // disable next page if we only have one result Button nextPageBtnLocal = UrbanDictionary.getNextPageButton(); - if(search.getPages() == 1) nextPageBtnLocal = nextPageBtnLocal.asDisabled(); + if (search.getPages() == 1) nextPageBtnLocal = nextPageBtnLocal.asDisabled(); event.getChannel() .sendMessageEmbeds(embed) diff --git a/src/main/java/wtf/beatrice/hidekobot/commands/slash/AvatarCommand.java b/src/main/java/wtf/beatrice/hidekobot/commands/slash/AvatarCommand.java index 3698278..e1ccef4 100644 --- a/src/main/java/wtf/beatrice/hidekobot/commands/slash/AvatarCommand.java +++ b/src/main/java/wtf/beatrice/hidekobot/commands/slash/AvatarCommand.java @@ -14,7 +14,8 @@ import wtf.beatrice.hidekobot.objects.commands.SlashCommandImpl; public class AvatarCommand extends SlashCommandImpl { @Override - public CommandData getSlashCommandData() { + public CommandData getSlashCommandData() + { return Commands.slash("avatar", "Get someone's profile picture.") .addOption(OptionType.USER, "user", "User you want to grab the avatar of.") .addOption(OptionType.INTEGER, "size", "The size of the returned image.", @@ -32,26 +33,28 @@ public class AvatarCommand extends SlashCommandImpl int resolution; OptionMapping userArg = event.getOption("user"); - if(userArg != null) + if (userArg != null) { user = userArg.getAsUser(); - } else { + } else + { user = event.getUser(); } OptionMapping sizeArg = event.getOption("size"); - if(sizeArg != null) + if (sizeArg != null) { resolution = ProfileImage.parseResolution(sizeArg.getAsInt()); - } else { + } else + { resolution = ProfileImage.parseResolution(512); } MessageResponse response = ProfileImage.buildResponse(resolution, user, ProfileImage.ImageType.AVATAR); - if(response.content() != null) + if (response.content() != null) { event.getHook().editOriginal(response.content()).queue(); - } else if(response.embed() != null) + } else if (response.embed() != null) { event.getHook().editOriginalEmbeds(response.embed()).queue(); } diff --git a/src/main/java/wtf/beatrice/hidekobot/commands/slash/BannerCommand.java b/src/main/java/wtf/beatrice/hidekobot/commands/slash/BannerCommand.java index eb4569a..e9b2d92 100644 --- a/src/main/java/wtf/beatrice/hidekobot/commands/slash/BannerCommand.java +++ b/src/main/java/wtf/beatrice/hidekobot/commands/slash/BannerCommand.java @@ -14,7 +14,8 @@ import wtf.beatrice.hidekobot.objects.commands.SlashCommandImpl; public class BannerCommand extends SlashCommandImpl { @Override - public CommandData getSlashCommandData() { + public CommandData getSlashCommandData() + { return Commands.slash("banner", "Get someone's profile banner.") .addOption(OptionType.USER, "user", "User you want to grab the banner of.") .addOption(OptionType.INTEGER, "size", "The size of the returned image.", @@ -32,26 +33,28 @@ public class BannerCommand extends SlashCommandImpl int resolution; OptionMapping userArg = event.getOption("user"); - if(userArg != null) + if (userArg != null) { user = userArg.getAsUser(); - } else { + } else + { user = event.getUser(); } OptionMapping sizeArg = event.getOption("size"); - if(sizeArg != null) + if (sizeArg != null) { resolution = ProfileImage.parseResolution(sizeArg.getAsInt()); - } else { + } else + { resolution = ProfileImage.parseResolution(512); } MessageResponse response = ProfileImage.buildResponse(resolution, user, ProfileImage.ImageType.BANNER); - if(response.content() != null) + if (response.content() != null) { event.getHook().editOriginal(response.content()).queue(); - } else if(response.embed() != null) + } else if (response.embed() != null) { event.getHook().editOriginalEmbeds(response.embed()).queue(); } diff --git a/src/main/java/wtf/beatrice/hidekobot/commands/slash/BotInfoCommand.java b/src/main/java/wtf/beatrice/hidekobot/commands/slash/BotInfoCommand.java index f9866e8..1a65ef2 100644 --- a/src/main/java/wtf/beatrice/hidekobot/commands/slash/BotInfoCommand.java +++ b/src/main/java/wtf/beatrice/hidekobot/commands/slash/BotInfoCommand.java @@ -16,7 +16,8 @@ import java.util.List; public class BotInfoCommand extends SlashCommandImpl { @Override - public CommandData getSlashCommandData() { + public CommandData getSlashCommandData() + { return Commands.slash("botinfo", "Get info about the bot."); } @@ -29,7 +30,7 @@ public class BotInfoCommand extends SlashCommandImpl // get a list of slash commands List registeredCommands = Cache.getSlashCommandListener().getRegisteredCommands(); LinkedList registeredCommandNames = new LinkedList<>(); - for(SlashCommand command : registeredCommands) + for (SlashCommand command : registeredCommands) { // node: adding slash so people realize that this is specific about slash commands. registeredCommandNames.add("/" + command.getCommandName()); diff --git a/src/main/java/wtf/beatrice/hidekobot/commands/slash/ClearCommand.java b/src/main/java/wtf/beatrice/hidekobot/commands/slash/ClearCommand.java index 73a6013..528f1ae 100644 --- a/src/main/java/wtf/beatrice/hidekobot/commands/slash/ClearCommand.java +++ b/src/main/java/wtf/beatrice/hidekobot/commands/slash/ClearCommand.java @@ -17,7 +17,8 @@ public class ClearCommand extends SlashCommandImpl { @Override - public CommandData getSlashCommandData() { + public CommandData getSlashCommandData() + { return Commands.slash(ClearChat.getLabel(), ClearChat.getDescription()) .addOption(OptionType.INTEGER, "amount", "The amount of messages to delete.") @@ -32,7 +33,7 @@ public class ClearCommand extends SlashCommandImpl // check if user is trying to run command in dms. String error = ClearChat.checkDMs(event.getChannel()); - if(error != null) + if (error != null) { event.getHook().editOriginal(error).queue(); return; @@ -45,10 +46,10 @@ public class ClearCommand extends SlashCommandImpl int toDeleteAmount = amountOption == null ? 1 : amountOption.getAsInt(); // cap the amount to avoid abuse. - if(toDeleteAmount > ClearChat.getMaxAmount()) toDeleteAmount = 0; + if (toDeleteAmount > ClearChat.getMaxAmount()) toDeleteAmount = 0; error = ClearChat.checkDeleteAmount(toDeleteAmount); - if(error != null) + if (error != null) { event.getHook().editOriginal(error).queue(); return; diff --git a/src/main/java/wtf/beatrice/hidekobot/commands/slash/CoinFlipCommand.java b/src/main/java/wtf/beatrice/hidekobot/commands/slash/CoinFlipCommand.java index eb3257a..aef6425 100644 --- a/src/main/java/wtf/beatrice/hidekobot/commands/slash/CoinFlipCommand.java +++ b/src/main/java/wtf/beatrice/hidekobot/commands/slash/CoinFlipCommand.java @@ -29,12 +29,11 @@ public class CoinFlipCommand extends SlashCommandImpl interaction.retrieveOriginal().queue((message) -> { CoinFlip.trackAndRestrict(message, event.getUser()); - }, (error) -> {}); - }, (error) -> {}); + }, (error) -> { + }); + }, (error) -> { + }); } - - - } diff --git a/src/main/java/wtf/beatrice/hidekobot/commands/slash/DiceRollCommand.java b/src/main/java/wtf/beatrice/hidekobot/commands/slash/DiceRollCommand.java index a8f447d..704ab36 100644 --- a/src/main/java/wtf/beatrice/hidekobot/commands/slash/DiceRollCommand.java +++ b/src/main/java/wtf/beatrice/hidekobot/commands/slash/DiceRollCommand.java @@ -30,19 +30,19 @@ public class DiceRollCommand extends SlashCommandImpl OptionMapping textOption = event.getOption("query"); String messageContent = ""; - if(textOption != null) + if (textOption != null) { - messageContent = textOption.getAsString(); + messageContent = textOption.getAsString(); } String[] args = messageContent.split("\\s"); MessageResponse response = DiceRoll.buildResponse(event.getUser(), args); - if(response.content() != null) + if (response.content() != null) { event.getHook().editOriginal(response.content()).queue(); - } else if(response.embed() != null) + } else if (response.embed() != null) { event.getHook().editOriginalEmbeds(response.embed()).queue(); } diff --git a/src/main/java/wtf/beatrice/hidekobot/commands/slash/DieCommand.java b/src/main/java/wtf/beatrice/hidekobot/commands/slash/DieCommand.java index 6bc9fdd..375e9f1 100644 --- a/src/main/java/wtf/beatrice/hidekobot/commands/slash/DieCommand.java +++ b/src/main/java/wtf/beatrice/hidekobot/commands/slash/DieCommand.java @@ -16,7 +16,8 @@ import java.util.concurrent.TimeUnit; public class DieCommand extends SlashCommandImpl { @Override - public CommandData getSlashCommandData() { + public CommandData getSlashCommandData() + { return Commands.slash("die", "Stop the bot's process.") .setDefaultPermissions(DefaultMemberPermissions.DISABLED); } @@ -24,12 +25,14 @@ public class DieCommand extends SlashCommandImpl @Override public void runSlashCommand(@NotNull SlashCommandInteractionEvent event) { - if(Cache.getBotOwnerId() != event.getUser().getIdLong()) + if (Cache.getBotOwnerId() != event.getUser().getIdLong()) { event.reply("Sorry, only the bot owner can run this command!").setEphemeral(true).queue(); - } else { + } else + { event.reply("Going to sleep! Cya ✨").queue(); - try (ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor()) { + try (ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor()) + { executor.schedule(HidekoBot::shutdown, 3, TimeUnit.SECONDS); } } diff --git a/src/main/java/wtf/beatrice/hidekobot/commands/slash/InviteCommand.java b/src/main/java/wtf/beatrice/hidekobot/commands/slash/InviteCommand.java index 9cd2ebb..eb4ac2b 100644 --- a/src/main/java/wtf/beatrice/hidekobot/commands/slash/InviteCommand.java +++ b/src/main/java/wtf/beatrice/hidekobot/commands/slash/InviteCommand.java @@ -30,7 +30,7 @@ public class InviteCommand extends SlashCommandImpl ReplyCallbackAction replyCallbackAction = event.deferReply(); // only make message permanent in DMs - if(event.getChannelType() != ChannelType.PRIVATE) + if (event.getChannelType() != ChannelType.PRIVATE) { replyCallbackAction = replyCallbackAction.setEphemeral(true); } diff --git a/src/main/java/wtf/beatrice/hidekobot/commands/slash/LoveCalculatorCommand.java b/src/main/java/wtf/beatrice/hidekobot/commands/slash/LoveCalculatorCommand.java index de5318b..303118f 100644 --- a/src/main/java/wtf/beatrice/hidekobot/commands/slash/LoveCalculatorCommand.java +++ b/src/main/java/wtf/beatrice/hidekobot/commands/slash/LoveCalculatorCommand.java @@ -18,7 +18,7 @@ public class LoveCalculatorCommand extends SlashCommandImpl { return Commands.slash("lovecalc", - "Calculate how much two people love each other.") + "Calculate how much two people love each other.") .addOption(OptionType.MENTIONABLE, "first", @@ -37,10 +37,11 @@ public class LoveCalculatorCommand extends SlashCommandImpl User firstUser, secondUser; OptionMapping firsUserArg = event.getOption("first"); - if(firsUserArg != null) + if (firsUserArg != null) { firstUser = firsUserArg.getAsUser(); //todo null check? - } else { + } else + { event.reply("\uD83D\uDE22 I need to know who to check! Please mention them.") .setEphemeral(true) .queue(); @@ -48,10 +49,11 @@ public class LoveCalculatorCommand extends SlashCommandImpl } OptionMapping secondUserArg = event.getOption("second"); - if(secondUserArg != null) + if (secondUserArg != null) { secondUser = secondUserArg.getAsUser(); //todo null check? - } else { + } else + { secondUser = event.getUser(); } diff --git a/src/main/java/wtf/beatrice/hidekobot/commands/slash/MagicBallCommand.java b/src/main/java/wtf/beatrice/hidekobot/commands/slash/MagicBallCommand.java index b2d7a8d..5833f59 100644 --- a/src/main/java/wtf/beatrice/hidekobot/commands/slash/MagicBallCommand.java +++ b/src/main/java/wtf/beatrice/hidekobot/commands/slash/MagicBallCommand.java @@ -17,7 +17,7 @@ public class MagicBallCommand extends SlashCommandImpl { return Commands.slash(MagicBall.getLabels().get(0), - "Ask a question to the magic ball.") + "Ask a question to the magic ball.") .addOption(OptionType.STRING, "question", "The question to ask.", true, @@ -30,12 +30,12 @@ public class MagicBallCommand extends SlashCommandImpl // get the asked question OptionMapping textOption = event.getOption("question"); String question = ""; - if(textOption != null) + if (textOption != null) { question = textOption.getAsString(); } - if(textOption == null || question.isEmpty()) + if (textOption == null || question.isEmpty()) { event.reply("\uD83D\uDE20 Hey, you have to ask me a question!") .setEphemeral(true) diff --git a/src/main/java/wtf/beatrice/hidekobot/commands/slash/SayCommand.java b/src/main/java/wtf/beatrice/hidekobot/commands/slash/SayCommand.java index f72da75..7d18fd6 100644 --- a/src/main/java/wtf/beatrice/hidekobot/commands/slash/SayCommand.java +++ b/src/main/java/wtf/beatrice/hidekobot/commands/slash/SayCommand.java @@ -33,12 +33,12 @@ public class SayCommand extends SlashCommandImpl // get the text to send OptionMapping textOption = event.getOption("text"); String messageContent = ""; - if(textOption != null) + if (textOption != null) { - messageContent = textOption.getAsString(); + messageContent = textOption.getAsString(); } - if(textOption == null || messageContent.isEmpty()) + if (textOption == null || messageContent.isEmpty()) { event.reply("\uD83D\uDE20 Hey, you have to tell me what to say!") .setEphemeral(true) diff --git a/src/main/java/wtf/beatrice/hidekobot/commands/slash/TriviaCommand.java b/src/main/java/wtf/beatrice/hidekobot/commands/slash/TriviaCommand.java index 819a50f..8730881 100644 --- a/src/main/java/wtf/beatrice/hidekobot/commands/slash/TriviaCommand.java +++ b/src/main/java/wtf/beatrice/hidekobot/commands/slash/TriviaCommand.java @@ -26,13 +26,13 @@ public class TriviaCommand extends SlashCommandImpl { MessageChannel channel = event.getChannel(); - if(!(channel instanceof TextChannel)) + if (!(channel instanceof TextChannel)) { event.reply(Trivia.getNoDMsError()).queue(); return; } - if(Trivia.channelsRunningTrivia.contains(channel.getId())) + if (Trivia.channelsRunningTrivia.contains(channel.getId())) { event.reply(Trivia.getTriviaAlreadyRunningError()).setEphemeral(true).queue(); return; diff --git a/src/main/java/wtf/beatrice/hidekobot/commands/slash/UrbanDictionaryCommand.java b/src/main/java/wtf/beatrice/hidekobot/commands/slash/UrbanDictionaryCommand.java index 84727d6..b292bba 100644 --- a/src/main/java/wtf/beatrice/hidekobot/commands/slash/UrbanDictionaryCommand.java +++ b/src/main/java/wtf/beatrice/hidekobot/commands/slash/UrbanDictionaryCommand.java @@ -24,7 +24,7 @@ public class UrbanDictionaryCommand extends SlashCommandImpl { return Commands.slash(UrbanDictionary.getCommandLabels().get(0), - "Look up a term on Urban Dictionary.") + "Look up a term on Urban Dictionary.") .addOption(OptionType.STRING, "term", "The term to look up", true); } @@ -36,12 +36,12 @@ public class UrbanDictionaryCommand extends SlashCommandImpl // get the term to look up OptionMapping textOption = event.getOption("term"); String term = ""; - if(textOption != null) + if (textOption != null) { term = textOption.getAsString(); } - if(textOption == null || term.isEmpty()) + if (textOption == null || term.isEmpty()) { event.reply(UrbanDictionary.getNoArgsError()) .setEphemeral(true) @@ -54,9 +54,11 @@ public class UrbanDictionaryCommand extends SlashCommandImpl Document doc; - try { + try + { doc = Jsoup.connect(url).get(); - } catch (IOException e) { + } catch (IOException e) + { event.reply(UrbanDictionary.getTermNotFoundError()) .setEphemeral(true) .queue(); @@ -69,7 +71,7 @@ public class UrbanDictionaryCommand extends SlashCommandImpl // disable next page if we only have one result Button nextPageBtnLocal = UrbanDictionary.getNextPageButton(); - if(search.getPages() == 1) nextPageBtnLocal = nextPageBtnLocal.asDisabled(); + if (search.getPages() == 1) nextPageBtnLocal = nextPageBtnLocal.asDisabled(); ActionRow actionRow = ActionRow.of(UrbanDictionary.getPreviousPageButton().asDisabled(), //disabled by default because we're on page 0 diff --git a/src/main/java/wtf/beatrice/hidekobot/datasources/ConfigurationEntry.java b/src/main/java/wtf/beatrice/hidekobot/datasources/ConfigurationEntry.java index 21cb2c6..b5fc6a0 100644 --- a/src/main/java/wtf/beatrice/hidekobot/datasources/ConfigurationEntry.java +++ b/src/main/java/wtf/beatrice/hidekobot/datasources/ConfigurationEntry.java @@ -14,12 +14,20 @@ public enum ConfigurationEntry private String path; private Object defaultValue; + ConfigurationEntry(String path, Object defaultValue) { this.path = path; this.defaultValue = defaultValue; } - public String getPath() { return path; } - public Object getDefaultValue() { return defaultValue; } + public String getPath() + { + return path; + } + + public Object getDefaultValue() + { + return defaultValue; + } } diff --git a/src/main/java/wtf/beatrice/hidekobot/datasources/ConfigurationSource.java b/src/main/java/wtf/beatrice/hidekobot/datasources/ConfigurationSource.java index 8744807..00dbaa2 100644 --- a/src/main/java/wtf/beatrice/hidekobot/datasources/ConfigurationSource.java +++ b/src/main/java/wtf/beatrice/hidekobot/datasources/ConfigurationSource.java @@ -32,12 +32,12 @@ public class ConfigurationSource * we used to have a config.yml file in the "resources" folder, but that is no longer necessary. */ LinkedHashMap internalConfigContents = new LinkedHashMap<>(); // map holding all file entries - for(ConfigurationEntry entry : ConfigurationEntry.values()) + for (ConfigurationEntry entry : ConfigurationEntry.values()) { internalConfigContents.put(entry.getPath(), entry.getDefaultValue()); } - if(internalConfigContents.isEmpty()) + if (internalConfigContents.isEmpty()) { LOGGER.error("Error reading internal configuration!"); HidekoBot.shutdown(); @@ -46,18 +46,19 @@ public class ConfigurationSource // check if config files exists in filesystem File fsConfigFile = new File(configFilePath); - if(!fsConfigFile.exists()) + if (!fsConfigFile.exists()) { // try to create config file - try { - if(!fsConfigFile.createNewFile()) + try + { + if (!fsConfigFile.createNewFile()) { LOGGER.error("We tried creating a file that already exists!"); HidekoBot.shutdown(); return; } - } - catch (IOException e) { + } catch (IOException e) + { LOGGER.error("Error creating configuration file!", e); HidekoBot.shutdown(); return; @@ -68,11 +69,15 @@ public class ConfigurationSource Yaml fsConfigYaml = new Yaml(new SafeConstructor(options)); LinkedHashMap fsConfigContents = null; // map holding all file entries try (InputStream fsConfigStream = new FileInputStream(fsConfigFile)) - { fsConfigContents = fsConfigYaml.load(fsConfigStream); } - catch (IOException e) { LOGGER.error(e.getMessage()); } + { + fsConfigContents = fsConfigYaml.load(fsConfigStream); + } catch (IOException e) + { + LOGGER.error(e.getMessage()); + } - if(fsConfigContents == null) // if file contents are empty or corrupted... + if (fsConfigContents == null) // if file contents are empty or corrupted... { // "clean" them (this effectively forces a config file reset) fsConfigContents = new LinkedHashMap<>(); @@ -80,10 +85,10 @@ public class ConfigurationSource // check for missing keys boolean missingKeys = false; - for(String key : internalConfigContents.keySet()) + for (String key : internalConfigContents.keySet()) { // if key is missing - if(!fsConfigContents.containsKey(key)) + if (!fsConfigContents.containsKey(key)) { // quit and flag it, as we need to complete the file with the missing ones missingKeys = true; @@ -92,27 +97,29 @@ public class ConfigurationSource } // if keys are missing - if(missingKeys) + if (missingKeys) { // create a new mixed map that will take existing values from the non-missing keys // and fill everything else with the default values LinkedHashMap filledEntries = new LinkedHashMap<>(); - for(Map.Entry entry : internalConfigContents.entrySet()) + for (Map.Entry entry : internalConfigContents.entrySet()) { String key = entry.getKey(); - if(fsConfigContents.containsKey(key)) + if (fsConfigContents.containsKey(key)) { // if the key already exists, copy the original value filledEntries.put(key, fsConfigContents.get(key)); - } else { + } else + { // else, copy the value from the example config file filledEntries.put(key, entry.getValue()); } } - try { + try + { // new writer to actually write the contents to the file PrintWriter missingKeysWriter = new PrintWriter(fsConfigFile); @@ -125,7 +132,8 @@ public class ConfigurationSource // create the yaml object and dump the values to filesystem Yaml yaml = new Yaml(dumperOptions); yaml.dump(filledEntries, missingKeysWriter); - } catch (FileNotFoundException e) { + } catch (FileNotFoundException e) + { LOGGER.error(e.getMessage()); HidekoBot.shutdown(); return; @@ -133,7 +141,8 @@ public class ConfigurationSource // finally, dump all entries to cache. loadConfig(filledEntries); - } else { + } else + { // if no key is missing, just cache all entries and values from filesystem. loadConfig(fsConfigContents); } @@ -144,6 +153,7 @@ public class ConfigurationSource { this.configurationEntries.putAll(configurationEntries); } + public Object getConfigValue(ConfigurationEntry key) { return configurationEntries.get(key.getPath()); diff --git a/src/main/java/wtf/beatrice/hidekobot/datasources/DatabaseSource.java b/src/main/java/wtf/beatrice/hidekobot/datasources/DatabaseSource.java index a800b99..fc52343 100644 --- a/src/main/java/wtf/beatrice/hidekobot/datasources/DatabaseSource.java +++ b/src/main/java/wtf/beatrice/hidekobot/datasources/DatabaseSource.java @@ -12,31 +12,37 @@ import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.List; -public class DatabaseSource { +public class DatabaseSource +{ private static final org.slf4j.Logger LOGGER = LoggerFactory.getLogger(DatabaseSource.class); private static final String JDBC_URL = "jdbc:sqlite:%path%"; private Connection dbConnection = null; private final String dbPath; - public DatabaseSource(String dbPath) { + public DatabaseSource(String dbPath) + { this.dbPath = dbPath; } - private void logException(SQLException e) { + private void logException(SQLException e) + { LOGGER.error("Database Exception", e); } - public boolean connect() { + public boolean connect() + { String url = JDBC_URL.replace("%path%", dbPath); if (!close()) return false; - try { + try + { dbConnection = DriverManager.getConnection(url); LOGGER.info("Database connection established!"); return true; - } catch (SQLException e) { + } catch (SQLException e) + { logException(e); return false; } @@ -44,13 +50,18 @@ public class DatabaseSource { } - public boolean close() { - if (dbConnection != null) { - try { - if (!dbConnection.isClosed()) { + public boolean close() + { + if (dbConnection != null) + { + try + { + if (!dbConnection.isClosed()) + { dbConnection.close(); } - } catch (SQLException e) { + } catch (SQLException e) + { logException(e); return false; } @@ -87,43 +98,47 @@ public class DatabaseSource { */ //todo: javadocs - public boolean initDb() { + public boolean initDb() + { List newTables = new ArrayList<>(); newTables.add(""" - CREATE TABLE IF NOT EXISTS pending_disabled_messages ( - guild_id TEXT NOT NULL, - channel_id TEXT NOT NULL, - message_id TEXT NOT NULL, - expiry_timestamp TEXT NOT NULL); - """); + CREATE TABLE IF NOT EXISTS pending_disabled_messages ( + guild_id TEXT NOT NULL, + channel_id TEXT NOT NULL, + message_id TEXT NOT NULL, + expiry_timestamp TEXT NOT NULL); + """); newTables.add(""" - CREATE TABLE IF NOT EXISTS command_runners ( - guild_id TEXT NOT NULL, - channel_id TEXT NOT NULL, - message_id TEXT NOT NULL, - user_id TEXT NOT NULL, - channel_type TEXT NOT NULL); - """); + CREATE TABLE IF NOT EXISTS command_runners ( + guild_id TEXT NOT NULL, + channel_id TEXT NOT NULL, + message_id TEXT NOT NULL, + user_id TEXT NOT NULL, + channel_type TEXT NOT NULL); + """); newTables.add(""" - CREATE TABLE IF NOT EXISTS urban_dictionary ( - message_id TEXT NOT NULL, - page INTEGER NOT NULL, - meanings TEXT NOT NULL, - examples TEXT NOT NULL, - contributors TEXT NOT NULL, - dates TEXT NOT NULL, - term TEXT NOT NULL - ); - """); + CREATE TABLE IF NOT EXISTS urban_dictionary ( + message_id TEXT NOT NULL, + page INTEGER NOT NULL, + meanings TEXT NOT NULL, + examples TEXT NOT NULL, + contributors TEXT NOT NULL, + dates TEXT NOT NULL, + term TEXT NOT NULL + ); + """); - for (String sql : newTables) { - try (Statement stmt = dbConnection.createStatement()) { + for (String sql : newTables) + { + try (Statement stmt = dbConnection.createStatement()) + { // execute the statement stmt.execute(sql); - } catch (SQLException e) { + } catch (SQLException e) + { logException(e); return false; } @@ -132,14 +147,17 @@ public class DatabaseSource { return true; } - public boolean trackRanCommandReply(Message message, User user) { + public boolean trackRanCommandReply(Message message, User user) + { String userId = user.getId(); String guildId; ChannelType channelType = message.getChannelType(); - if (!(channelType.isGuild())) { + if (!(channelType.isGuild())) + { guildId = userId; - } else { + } else + { guildId = message.getGuild().getId(); } @@ -153,7 +171,8 @@ public class DatabaseSource { (?, ?, ?, ?, ?); """; - try (PreparedStatement preparedStatement = dbConnection.prepareStatement(query)) { + try (PreparedStatement preparedStatement = dbConnection.prepareStatement(query)) + { preparedStatement.setString(1, guildId); preparedStatement.setString(2, channelId); preparedStatement.setString(3, messageId); @@ -163,36 +182,42 @@ public class DatabaseSource { preparedStatement.executeUpdate(); return true; - } catch (SQLException e) { + } catch (SQLException e) + { logException(e); } return false; } - public boolean isUserTrackedFor(String userId, String messageId) { + public boolean isUserTrackedFor(String userId, String messageId) + { String trackedUserId = getTrackedReplyUserId(messageId); if (trackedUserId == null) return false; return userId.equals(trackedUserId); } - public ChannelType getTrackedMessageChannelType(String messageId) { + public ChannelType getTrackedMessageChannelType(String messageId) + { String query = """ SELECT channel_type FROM command_runners WHERE message_id = ?; """; - try (PreparedStatement preparedStatement = dbConnection.prepareStatement(query)) { + try (PreparedStatement preparedStatement = dbConnection.prepareStatement(query)) + { preparedStatement.setString(1, messageId); ResultSet resultSet = preparedStatement.executeQuery(); if (resultSet.isClosed()) return null; - while (resultSet.next()) { + while (resultSet.next()) + { String channelTypeName = resultSet.getString("channel_type"); return ChannelType.valueOf(channelTypeName); } - } catch (SQLException e) { + } catch (SQLException e) + { logException(e); } @@ -200,37 +225,44 @@ public class DatabaseSource { } - public String getTrackedReplyUserId(String messageId) { + public String getTrackedReplyUserId(String messageId) + { String query = """ SELECT user_id FROM command_runners WHERE message_id = ?; """; - try (PreparedStatement preparedStatement = dbConnection.prepareStatement(query)) { + try (PreparedStatement preparedStatement = dbConnection.prepareStatement(query)) + { preparedStatement.setString(1, messageId); ResultSet resultSet = preparedStatement.executeQuery(); if (resultSet.isClosed()) return null; - while (resultSet.next()) { + while (resultSet.next()) + { return resultSet.getString("user_id"); } - } catch (SQLException e) { + } catch (SQLException e) + { logException(e); } return null; } - public boolean queueDisabling(Message message) { + public boolean queueDisabling(Message message) + { String messageId = message.getId(); String channelId = message.getChannel().getId(); String guildId; ChannelType channelType = message.getChannelType(); - if (!(channelType.isGuild())) { + if (!(channelType.isGuild())) + { guildId = "PRIVATE"; - } else { + } else + { guildId = message.getGuild().getId(); } @@ -245,7 +277,8 @@ public class DatabaseSource { (?, ?, ?, ?); """; - try (PreparedStatement preparedStatement = dbConnection.prepareStatement(query)) { + try (PreparedStatement preparedStatement = dbConnection.prepareStatement(query)) + { preparedStatement.setString(1, guildId); preparedStatement.setString(2, channelId); preparedStatement.setString(3, messageId); @@ -254,14 +287,16 @@ public class DatabaseSource { preparedStatement.executeUpdate(); return true; - } catch (SQLException e) { + } catch (SQLException e) + { logException(e); } return false; } - public List getQueuedExpiringMessages() { + public List getQueuedExpiringMessages() + { List messages = new ArrayList<>(); String query = """ @@ -269,44 +304,54 @@ public class DatabaseSource { FROM pending_disabled_messages; """; - try (Statement statement = dbConnection.createStatement()) { + try (Statement statement = dbConnection.createStatement()) + { ResultSet resultSet = statement.executeQuery(query); if (resultSet.isClosed()) return messages; - while (resultSet.next()) { + while (resultSet.next()) + { messages.add(resultSet.getString("message_id")); } - } catch (SQLException e) { + } catch (SQLException e) + { logException(e); } return messages; } - public boolean untrackExpiredMessage(String messageId) { + public boolean untrackExpiredMessage(String messageId) + { String query = "DELETE FROM pending_disabled_messages WHERE message_id = ?;"; - try (PreparedStatement preparedStatement = dbConnection.prepareStatement(query)) { + try (PreparedStatement preparedStatement = dbConnection.prepareStatement(query)) + { preparedStatement.setString(1, messageId); preparedStatement.execute(); - } catch (SQLException e) { + } catch (SQLException e) + { logException(e); return false; } query = "DELETE FROM command_runners WHERE message_id = ?;"; - try (PreparedStatement preparedStatement = dbConnection.prepareStatement(query)) { + try (PreparedStatement preparedStatement = dbConnection.prepareStatement(query)) + { preparedStatement.setString(1, messageId); preparedStatement.execute(); - } catch (SQLException e) { + } catch (SQLException e) + { logException(e); return false; } query = "DELETE FROM urban_dictionary WHERE message_id = ?;"; - try (PreparedStatement preparedStatement = dbConnection.prepareStatement(query)) { + try (PreparedStatement preparedStatement = dbConnection.prepareStatement(query)) + { preparedStatement.setString(1, messageId); preparedStatement.execute(); - } catch (SQLException e) { + } catch (SQLException e) + { logException(e); return false; } @@ -314,66 +359,78 @@ public class DatabaseSource { return true; } - public String getQueuedExpiringMessageExpiryDate(String messageId) { + public String getQueuedExpiringMessageExpiryDate(String messageId) + { String query = """ SELECT expiry_timestamp FROM pending_disabled_messages WHERE message_id = ?; """; - try (PreparedStatement preparedStatement = dbConnection.prepareStatement(query)) { + try (PreparedStatement preparedStatement = dbConnection.prepareStatement(query)) + { preparedStatement.setString(1, messageId); ResultSet resultSet = preparedStatement.executeQuery(); if (resultSet.isClosed()) return null; - while (resultSet.next()) { + while (resultSet.next()) + { return resultSet.getString("expiry_timestamp"); } - } catch (SQLException e) { + } catch (SQLException e) + { logException(e); } return null; } - public String getQueuedExpiringMessageChannel(String messageId) { + public String getQueuedExpiringMessageChannel(String messageId) + { String query = """ SELECT channel_id FROM pending_disabled_messages WHERE message_id = ?; """; - try (PreparedStatement preparedStatement = dbConnection.prepareStatement(query)) { + try (PreparedStatement preparedStatement = dbConnection.prepareStatement(query)) + { preparedStatement.setString(1, messageId); ResultSet resultSet = preparedStatement.executeQuery(); if (resultSet.isClosed()) return null; - while (resultSet.next()) { + while (resultSet.next()) + { return resultSet.getString("channel_id"); } - } catch (SQLException e) { + } catch (SQLException e) + { logException(e); } return null; } - public String getQueuedExpiringMessageGuild(String messageId) { + public String getQueuedExpiringMessageGuild(String messageId) + { String query = """ SELECT guild_id FROM pending_disabled_messages WHERE message_id = ?; """; - try (PreparedStatement preparedStatement = dbConnection.prepareStatement(query)) { + try (PreparedStatement preparedStatement = dbConnection.prepareStatement(query)) + { preparedStatement.setString(1, messageId); ResultSet resultSet = preparedStatement.executeQuery(); if (resultSet.isClosed()) return null; - while (resultSet.next()) { + while (resultSet.next()) + { return resultSet.getString("guild_id"); } - } catch (SQLException e) { + } catch (SQLException e) + { logException(e); } @@ -382,7 +439,8 @@ public class DatabaseSource { public boolean trackUrban(String meanings, String examples, String contributors, String dates, - Message message, String term) { + Message message, String term) + { String query = """ INSERT INTO urban_dictionary @@ -390,7 +448,8 @@ public class DatabaseSource { (?, ?, ?, ?, ?, ?, ?); """; - try (PreparedStatement preparedStatement = dbConnection.prepareStatement(query)) { + try (PreparedStatement preparedStatement = dbConnection.prepareStatement(query)) + { preparedStatement.setString(1, message.getId()); preparedStatement.setInt(2, 0); preparedStatement.setString(3, meanings); @@ -402,167 +461,196 @@ public class DatabaseSource { preparedStatement.executeUpdate(); return true; - } catch (SQLException e) { + } catch (SQLException e) + { logException(e); } return false; } - public int getUrbanPage(String messageId) { + public int getUrbanPage(String messageId) + { String query = """ SELECT page FROM urban_dictionary WHERE message_id = ?; """; - try (PreparedStatement preparedStatement = dbConnection.prepareStatement(query)) { + try (PreparedStatement preparedStatement = dbConnection.prepareStatement(query)) + { preparedStatement.setString(1, messageId); ResultSet resultSet = preparedStatement.executeQuery(); if (resultSet.isClosed()) return 0; - while (resultSet.next()) { + while (resultSet.next()) + { return resultSet.getInt("page"); } - } catch (SQLException e) { + } catch (SQLException e) + { logException(e); } return 0; } - public String getUrbanMeanings(String messageId) { + public String getUrbanMeanings(String messageId) + { String query = """ SELECT meanings FROM urban_dictionary WHERE message_id = ?; """; - try (PreparedStatement preparedStatement = dbConnection.prepareStatement(query)) { + try (PreparedStatement preparedStatement = dbConnection.prepareStatement(query)) + { preparedStatement.setString(1, messageId); ResultSet resultSet = preparedStatement.executeQuery(); if (resultSet.isClosed()) return null; - while (resultSet.next()) { + while (resultSet.next()) + { return resultSet.getString("meanings"); } - } catch (SQLException e) { + } catch (SQLException e) + { logException(e); } return null; } - public String getUrbanExamples(String messageId) { + public String getUrbanExamples(String messageId) + { String query = """ SELECT examples FROM urban_dictionary WHERE message_id = ?; """; - try (PreparedStatement preparedStatement = dbConnection.prepareStatement(query)) { + try (PreparedStatement preparedStatement = dbConnection.prepareStatement(query)) + { preparedStatement.setString(1, messageId); ResultSet resultSet = preparedStatement.executeQuery(); if (resultSet.isClosed()) return null; - while (resultSet.next()) { + while (resultSet.next()) + { return resultSet.getString("examples"); } - } catch (SQLException e) { + } catch (SQLException e) + { logException(e); } return null; } - public String getUrbanContributors(String messageId) { + public String getUrbanContributors(String messageId) + { String query = """ SELECT contributors FROM urban_dictionary WHERE message_id = ?; """; - try (PreparedStatement preparedStatement = dbConnection.prepareStatement(query)) { + try (PreparedStatement preparedStatement = dbConnection.prepareStatement(query)) + { preparedStatement.setString(1, messageId); ResultSet resultSet = preparedStatement.executeQuery(); if (resultSet.isClosed()) return null; - while (resultSet.next()) { + while (resultSet.next()) + { return resultSet.getString("contributors"); } - } catch (SQLException e) { + } catch (SQLException e) + { logException(e); } return null; } - public String getUrbanDates(String messageId) { + public String getUrbanDates(String messageId) + { String query = """ SELECT dates FROM urban_dictionary WHERE message_id = ?; """; - try (PreparedStatement preparedStatement = dbConnection.prepareStatement(query)) { + try (PreparedStatement preparedStatement = dbConnection.prepareStatement(query)) + { preparedStatement.setString(1, messageId); ResultSet resultSet = preparedStatement.executeQuery(); if (resultSet.isClosed()) return null; - while (resultSet.next()) { + while (resultSet.next()) + { return resultSet.getString("dates"); } - } catch (SQLException e) { + } catch (SQLException e) + { logException(e); } return null; } - public String getUrbanTerm(String messageId) { + public String getUrbanTerm(String messageId) + { String query = """ SELECT term FROM urban_dictionary WHERE message_id = ?; """; - try (PreparedStatement preparedStatement = dbConnection.prepareStatement(query)) { + try (PreparedStatement preparedStatement = dbConnection.prepareStatement(query)) + { preparedStatement.setString(1, messageId); ResultSet resultSet = preparedStatement.executeQuery(); if (resultSet.isClosed()) return null; - while (resultSet.next()) { + while (resultSet.next()) + { return resultSet.getString("term"); } - } catch (SQLException e) { + } catch (SQLException e) + { logException(e); } return null; } - public boolean setUrbanPage(String messageId, int page) { + public boolean setUrbanPage(String messageId, int page) + { String query = """ UPDATE urban_dictionary SET page = ? WHERE message_id = ?; """; - try (PreparedStatement preparedStatement = dbConnection.prepareStatement(query)) { + try (PreparedStatement preparedStatement = dbConnection.prepareStatement(query)) + { preparedStatement.setInt(1, page); preparedStatement.setString(2, messageId); preparedStatement.executeUpdate(); return true; - } catch (SQLException e) { + } catch (SQLException e) + { logException(e); } return false; } - public boolean resetExpiryTimestamp(String messageId) { + public boolean resetExpiryTimestamp(String messageId) + { LocalDateTime expiryTime = LocalDateTime.now().plusSeconds(Cache.getExpiryTimeSeconds()); DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(Cache.getExpiryTimestampFormat()); @@ -574,14 +662,16 @@ public class DatabaseSource { WHERE message_id = ?; """; - try (PreparedStatement preparedStatement = dbConnection.prepareStatement(query)) { + try (PreparedStatement preparedStatement = dbConnection.prepareStatement(query)) + { preparedStatement.setString(1, expiryTimeFormatted); preparedStatement.setString(2, messageId); preparedStatement.executeUpdate(); return true; - } catch (SQLException e) { + } catch (SQLException e) + { logException(e); } diff --git a/src/main/java/wtf/beatrice/hidekobot/datasources/PropertiesSource.java b/src/main/java/wtf/beatrice/hidekobot/datasources/PropertiesSource.java index b035b92..3193538 100644 --- a/src/main/java/wtf/beatrice/hidekobot/datasources/PropertiesSource.java +++ b/src/main/java/wtf/beatrice/hidekobot/datasources/PropertiesSource.java @@ -25,8 +25,8 @@ public class PropertiesSource { properties.load(internalPropertiesStream); - } - catch (IOException e) { + } catch (IOException e) + { LOGGER.error(e.getMessage()); HidekoBot.shutdown(); return; @@ -34,5 +34,7 @@ public class PropertiesSource } public String getProperty(String property) - { return properties == null ? "" : properties.getProperty(property); } + { + return properties == null ? "" : properties.getProperty(property); + } } diff --git a/src/main/java/wtf/beatrice/hidekobot/listeners/ButtonInteractionListener.java b/src/main/java/wtf/beatrice/hidekobot/listeners/ButtonInteractionListener.java index 928f826..22c057b 100644 --- a/src/main/java/wtf/beatrice/hidekobot/listeners/ButtonInteractionListener.java +++ b/src/main/java/wtf/beatrice/hidekobot/listeners/ButtonInteractionListener.java @@ -18,7 +18,8 @@ public class ButtonInteractionListener extends ListenerAdapter public void onButtonInteraction(ButtonInteractionEvent event) { - switch (event.getComponentId().toLowerCase()) { + switch (event.getComponentId().toLowerCase()) + { // coinflip case "coinflip_reflip" -> CoinFlip.buttonReFlip(event); diff --git a/src/main/java/wtf/beatrice/hidekobot/listeners/MessageCommandListener.java b/src/main/java/wtf/beatrice/hidekobot/listeners/MessageCommandListener.java index e047046..ea105c4 100644 --- a/src/main/java/wtf/beatrice/hidekobot/listeners/MessageCommandListener.java +++ b/src/main/java/wtf/beatrice/hidekobot/listeners/MessageCommandListener.java @@ -38,14 +38,16 @@ public class MessageCommandListener extends ListenerAdapter public MessageCommand getRegisteredCommand(String label) { - for(Map.Entry, MessageCommand> entry : registeredCommands.entrySet()) + for (Map.Entry, MessageCommand> entry : registeredCommands.entrySet()) { LinkedList aliases = entry.getKey(); - for(String currentAlias : aliases) + for (String currentAlias : aliases) { - if(label.equals(currentAlias)) - { return entry.getValue(); } + if (label.equals(currentAlias)) + { + return entry.getValue(); + } } } @@ -53,19 +55,21 @@ public class MessageCommandListener extends ListenerAdapter } public LinkedList getRegisteredCommands() - { return new LinkedList<>(registeredCommands.values()); } + { + return new LinkedList<>(registeredCommands.values()); + } @Override public void onMessageReceived(@NotNull MessageReceivedEvent event) { // check if a bot is sending this message, and ignore it - if(event.getAuthor().isBot()) return; + if (event.getAuthor().isBot()) return; // warning: we are getting the RAW value of the message content, not the DISPLAY value! String eventMessage = event.getMessage().getContentRaw(); // check if the sent message matches the bot activation regex (prefix, name, ...) - if(!eventMessage.toLowerCase().matches("(?s)" + COMMAND_REGEX + ".*")) + if (!eventMessage.toLowerCase().matches("(?s)" + COMMAND_REGEX + ".*")) return; // generate args from the string @@ -77,7 +81,7 @@ public class MessageCommandListener extends ListenerAdapter // and that element is the whole string passed as a single argument, which would be empty in this case // (or contain text in other cases like "string split ," if the passed text doesn't contain any comma -> // it will be the whole text as a single element. - if(argsString.isEmpty()) + if (argsString.isEmpty()) { event.getMessage() .reply("Hello there! ✨ Type `" + Cache.getBotPrefix() + " help` to get started!") @@ -92,7 +96,7 @@ public class MessageCommandListener extends ListenerAdapter String commandLabel = argsRaw[0]; MessageCommand commandObject = getRegisteredCommand(commandLabel); - if(commandObject == null) + if (commandObject == null) { /* temporarily disabled because when people talk about the bot, it replies with this spammy message. @@ -107,13 +111,13 @@ public class MessageCommandListener extends ListenerAdapter // permissions check List requiredPermissions = commandObject.getPermissions(); - if(requiredPermissions != null && !requiredPermissions.isEmpty()) + if (requiredPermissions != null && !requiredPermissions.isEmpty()) { - if(channelType.isGuild()) //todo: what about forum post + if (channelType.isGuild()) //todo: what about forum post { Member member = event.getMember(); GuildChannel channel = event.getGuildChannel(); //todo: what about forum post - if(member != null && !member.hasPermission(channel, requiredPermissions)) + if (member != null && !member.hasPermission(channel, requiredPermissions)) { event.getMessage() .reply("You do not have permissions to run this command!") @@ -126,15 +130,14 @@ public class MessageCommandListener extends ListenerAdapter } String[] commandArgs; - if(commandObject.passRawArgs()) + if (commandObject.passRawArgs()) { // remove first argument, which is the command label argsString = argsString.replaceAll("^[\\S]+\\s*", ""); // pass all other arguments as a single argument as the first array element commandArgs = new String[]{argsString}; - } - else + } else { // copy all split arguments to the array, except from the command label commandArgs = Arrays.copyOfRange(argsRaw, 1, argsRaw.length); diff --git a/src/main/java/wtf/beatrice/hidekobot/listeners/MessageLogger.java b/src/main/java/wtf/beatrice/hidekobot/listeners/MessageLogger.java index a86b79c..e747150 100644 --- a/src/main/java/wtf/beatrice/hidekobot/listeners/MessageLogger.java +++ b/src/main/java/wtf/beatrice/hidekobot/listeners/MessageLogger.java @@ -25,7 +25,7 @@ public class MessageLogger extends ListenerAdapter String userName = event.getAuthor().getAsTag(); String message = event.getMessage().getContentDisplay(); - if(event.getChannel() instanceof TextChannel channel) + if (event.getChannel() instanceof TextChannel channel) { String guildName = channel.getGuild().getName(); String channelName = event.getChannel().getName(); @@ -33,8 +33,7 @@ public class MessageLogger extends ListenerAdapter toLog = GUILD_MESSAGE_LOG_FORMAT .replace("%guild%", guildName) .replace("%channel%", channelName); - } - else if(event.getChannel() instanceof PrivateChannel) + } else if (event.getChannel() instanceof PrivateChannel) { toLog = DIRECT_MESSAGE_LOG_FORMAT; } @@ -45,9 +44,9 @@ public class MessageLogger extends ListenerAdapter LOGGER.info(toLog); - if(!event.getMessage().getAttachments().isEmpty()) + if (!event.getMessage().getAttachments().isEmpty()) { - for(Message.Attachment atch : event.getMessage().getAttachments()) + for (Message.Attachment atch : event.getMessage().getAttachments()) { LOGGER.info(atch.getUrl()); } diff --git a/src/main/java/wtf/beatrice/hidekobot/listeners/SelectMenuInteractionListener.java b/src/main/java/wtf/beatrice/hidekobot/listeners/SelectMenuInteractionListener.java index 6a2c1f8..2afc5c8 100644 --- a/src/main/java/wtf/beatrice/hidekobot/listeners/SelectMenuInteractionListener.java +++ b/src/main/java/wtf/beatrice/hidekobot/listeners/SelectMenuInteractionListener.java @@ -14,7 +14,8 @@ public class SelectMenuInteractionListener extends ListenerAdapter @Override public void onStringSelectInteraction(StringSelectInteractionEvent event) { - switch (event.getComponentId().toLowerCase()) { + switch (event.getComponentId().toLowerCase()) + { // trivia case "trivia_categories" -> Trivia.handleMenuSelection(event); diff --git a/src/main/java/wtf/beatrice/hidekobot/listeners/SlashCommandCompletionListener.java b/src/main/java/wtf/beatrice/hidekobot/listeners/SlashCommandCompletionListener.java index 85943c5..ee5f97e 100644 --- a/src/main/java/wtf/beatrice/hidekobot/listeners/SlashCommandCompletionListener.java +++ b/src/main/java/wtf/beatrice/hidekobot/listeners/SlashCommandCompletionListener.java @@ -21,16 +21,21 @@ public class SlashCommandCompletionListener extends ListenerAdapter } public SlashArgumentsCompleter getRegisteredCompleter(String label) - { return registeredCompleters.get(label); } + { + return registeredCompleters.get(label); + } public LinkedList getRegisteredCompleters() - { return new LinkedList<>(registeredCompleters.values()); } + { + return new LinkedList<>(registeredCompleters.values()); + } + @Override public void onCommandAutoCompleteInteraction(CommandAutoCompleteInteractionEvent event) { String commandName = event.getName().toLowerCase(); SlashArgumentsCompleter completer = registeredCompleters.get(commandName); - if(completer == null) return; + if (completer == null) return; // not running in a thread because nothing heavy should be done here... completer.runCompletion(event); diff --git a/src/main/java/wtf/beatrice/hidekobot/listeners/SlashCommandListener.java b/src/main/java/wtf/beatrice/hidekobot/listeners/SlashCommandListener.java index fd86e1f..bae8d78 100644 --- a/src/main/java/wtf/beatrice/hidekobot/listeners/SlashCommandListener.java +++ b/src/main/java/wtf/beatrice/hidekobot/listeners/SlashCommandListener.java @@ -21,17 +21,21 @@ public class SlashCommandListener extends ListenerAdapter } public SlashCommand getRegisteredCommand(String label) - { return registeredCommands.get(label); } + { + return registeredCommands.get(label); + } public LinkedList getRegisteredCommands() - { return new LinkedList<>(registeredCommands.values()); } + { + return new LinkedList<>(registeredCommands.values()); + } @Override public void onSlashCommandInteraction(@NotNull SlashCommandInteractionEvent event) { String commandName = event.getName().toLowerCase(); SlashCommand command = registeredCommands.get(commandName); - if(command == null) return; + if (command == null) return; // finally run the command, in a new thread to avoid locking the main one. diff --git a/src/main/java/wtf/beatrice/hidekobot/objects/MessageResponse.java b/src/main/java/wtf/beatrice/hidekobot/objects/MessageResponse.java index 2bc4e00..85f36ef 100644 --- a/src/main/java/wtf/beatrice/hidekobot/objects/MessageResponse.java +++ b/src/main/java/wtf/beatrice/hidekobot/objects/MessageResponse.java @@ -9,10 +9,12 @@ import java.util.Objects; public record MessageResponse(@Nullable String content, @Nullable MessageEmbed embed, - @Nullable ItemComponent... components) { + @Nullable ItemComponent... components) +{ @Override - public boolean equals(Object o) { + public boolean equals(Object o) + { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; MessageResponse response = (MessageResponse) o; @@ -22,14 +24,16 @@ public record MessageResponse(@Nullable String content, } @Override - public int hashCode() { + public int hashCode() + { int result = Objects.hash(content, embed); result = 31 * result + Arrays.hashCode(components); return result; } @Override - public String toString() { + public String toString() + { return "MessageResponse{" + "content=" + content + ", embed=" + embed + diff --git a/src/main/java/wtf/beatrice/hidekobot/objects/commands/CommandCategory.java b/src/main/java/wtf/beatrice/hidekobot/objects/commands/CommandCategory.java index 8867f69..c1a1c3f 100644 --- a/src/main/java/wtf/beatrice/hidekobot/objects/commands/CommandCategory.java +++ b/src/main/java/wtf/beatrice/hidekobot/objects/commands/CommandCategory.java @@ -9,10 +9,14 @@ public enum CommandCategory ; private String emoji; + CommandCategory(String emoji) { this.emoji = emoji; } - public String getEmoji() { return emoji; } + public String getEmoji() + { + return emoji; + } } diff --git a/src/main/java/wtf/beatrice/hidekobot/objects/commands/MessageCommand.java b/src/main/java/wtf/beatrice/hidekobot/objects/commands/MessageCommand.java index 4088447..dae7f8e 100644 --- a/src/main/java/wtf/beatrice/hidekobot/objects/commands/MessageCommand.java +++ b/src/main/java/wtf/beatrice/hidekobot/objects/commands/MessageCommand.java @@ -70,12 +70,10 @@ public interface MessageCommand * * @param event the received message event. It should not be used for parsing message contents data as * the arguments already account for it in a better way. - * * @param label the command label that was used, taken from all available command aliases. - * - * @param args a pre-formatted list of arguments, excluding the bot prefix and the command name. - * This is useful because command logic won't have to change in case the bot prefix is changed, - * removed, or we switch to another method of triggering commands (ping, trigger words, ...). + * @param args a pre-formatted list of arguments, excluding the bot prefix and the command name. + * This is useful because command logic won't have to change in case the bot prefix is changed, + * removed, or we switch to another method of triggering commands (ping, trigger words, ...). */ void runCommand(MessageReceivedEvent event, String label, String[] args); } diff --git a/src/main/java/wtf/beatrice/hidekobot/objects/commands/SlashArgumentsCompleter.java b/src/main/java/wtf/beatrice/hidekobot/objects/commands/SlashArgumentsCompleter.java index b03091a..31f08d2 100644 --- a/src/main/java/wtf/beatrice/hidekobot/objects/commands/SlashArgumentsCompleter.java +++ b/src/main/java/wtf/beatrice/hidekobot/objects/commands/SlashArgumentsCompleter.java @@ -12,6 +12,7 @@ public interface SlashArgumentsCompleter * @return the command object. */ SlashCommand getCommand(); + /** * Run the argument-completion logic by parsing the event and replying accordingly. * diff --git a/src/main/java/wtf/beatrice/hidekobot/objects/commands/SlashArgumentsCompleterImpl.java b/src/main/java/wtf/beatrice/hidekobot/objects/commands/SlashArgumentsCompleterImpl.java index b16715d..b3100a2 100644 --- a/src/main/java/wtf/beatrice/hidekobot/objects/commands/SlashArgumentsCompleterImpl.java +++ b/src/main/java/wtf/beatrice/hidekobot/objects/commands/SlashArgumentsCompleterImpl.java @@ -6,13 +6,16 @@ import org.jetbrains.annotations.NotNull; public class SlashArgumentsCompleterImpl implements SlashArgumentsCompleter { private final SlashCommand parentCommand; + public SlashArgumentsCompleterImpl(SlashCommand parentCommand) { this.parentCommand = parentCommand; } public SlashCommand getCommand() - { return parentCommand; } + { + return parentCommand; + } public void runCompletion(@NotNull CommandAutoCompleteInteractionEvent event) { diff --git a/src/main/java/wtf/beatrice/hidekobot/objects/commands/SlashCommand.java b/src/main/java/wtf/beatrice/hidekobot/objects/commands/SlashCommand.java index dd1e855..7b027fc 100644 --- a/src/main/java/wtf/beatrice/hidekobot/objects/commands/SlashCommand.java +++ b/src/main/java/wtf/beatrice/hidekobot/objects/commands/SlashCommand.java @@ -21,6 +21,7 @@ public interface SlashCommand * @return the command data object. */ CommandData getSlashCommandData(); + /** * Run the command logic by parsing the event and replying accordingly. * diff --git a/src/main/java/wtf/beatrice/hidekobot/objects/commands/SlashCommandImpl.java b/src/main/java/wtf/beatrice/hidekobot/objects/commands/SlashCommandImpl.java index 92bc070..ac1a5ae 100644 --- a/src/main/java/wtf/beatrice/hidekobot/objects/commands/SlashCommandImpl.java +++ b/src/main/java/wtf/beatrice/hidekobot/objects/commands/SlashCommandImpl.java @@ -8,17 +8,20 @@ public class SlashCommandImpl implements SlashCommand { @Override - public String getCommandName() { + public String getCommandName() + { return getSlashCommandData().getName(); } @Override - public CommandData getSlashCommandData() { + public CommandData getSlashCommandData() + { return null; } @Override - public void runSlashCommand(@NotNull SlashCommandInteractionEvent event) { + public void runSlashCommand(@NotNull SlashCommandInteractionEvent event) + { event.reply("Base command implementation").queue(); } } diff --git a/src/main/java/wtf/beatrice/hidekobot/objects/comparators/MessageCommandAliasesComparator.java b/src/main/java/wtf/beatrice/hidekobot/objects/comparators/MessageCommandAliasesComparator.java index 6510b19..7c82955 100644 --- a/src/main/java/wtf/beatrice/hidekobot/objects/comparators/MessageCommandAliasesComparator.java +++ b/src/main/java/wtf/beatrice/hidekobot/objects/comparators/MessageCommandAliasesComparator.java @@ -6,13 +6,15 @@ import java.util.LinkedList; /** * This class gets two linked lists, and compares their first value alphabetically. */ -public class MessageCommandAliasesComparator implements Comparator> { +public class MessageCommandAliasesComparator implements Comparator> +{ @Override - public int compare(LinkedList linkedList, LinkedList t1) { + public int compare(LinkedList linkedList, LinkedList t1) + { - if(linkedList.isEmpty()) return 0; - if(t1.isEmpty()) return 0; + if (linkedList.isEmpty()) return 0; + if (t1.isEmpty()) return 0; return linkedList.get(0).compareTo(t1.get(0)); } diff --git a/src/main/java/wtf/beatrice/hidekobot/objects/comparators/TriviaCategoryComparator.java b/src/main/java/wtf/beatrice/hidekobot/objects/comparators/TriviaCategoryComparator.java index 3e77fea..214ba9b 100644 --- a/src/main/java/wtf/beatrice/hidekobot/objects/comparators/TriviaCategoryComparator.java +++ b/src/main/java/wtf/beatrice/hidekobot/objects/comparators/TriviaCategoryComparator.java @@ -7,10 +7,12 @@ import java.util.Comparator; /** * This class gets two trivia categories, and compares them by their name. */ -public class TriviaCategoryComparator implements Comparator { +public class TriviaCategoryComparator implements Comparator +{ @Override - public int compare(TriviaCategory o1, TriviaCategory o2) { + public int compare(TriviaCategory o1, TriviaCategory o2) + { return CharSequence.compare(o1.categoryName(), o2.categoryName()); } } diff --git a/src/main/java/wtf/beatrice/hidekobot/objects/comparators/TriviaScoreComparator.java b/src/main/java/wtf/beatrice/hidekobot/objects/comparators/TriviaScoreComparator.java index f2f85ef..76fde40 100644 --- a/src/main/java/wtf/beatrice/hidekobot/objects/comparators/TriviaScoreComparator.java +++ b/src/main/java/wtf/beatrice/hidekobot/objects/comparators/TriviaScoreComparator.java @@ -7,10 +7,12 @@ import java.util.Comparator; /** * This class gets two trivia scores, and compares their score. */ -public class TriviaScoreComparator implements Comparator { +public class TriviaScoreComparator implements Comparator +{ @Override - public int compare(TriviaScore o1, TriviaScore o2) { + public int compare(TriviaScore o1, TriviaScore o2) + { return Integer.compare(o2.getScore(), o1.getScore()); // inverted, because higher number should come first } } diff --git a/src/main/java/wtf/beatrice/hidekobot/objects/fun/TriviaCategory.java b/src/main/java/wtf/beatrice/hidekobot/objects/fun/TriviaCategory.java index e44ac72..21d8c30 100644 --- a/src/main/java/wtf/beatrice/hidekobot/objects/fun/TriviaCategory.java +++ b/src/main/java/wtf/beatrice/hidekobot/objects/fun/TriviaCategory.java @@ -1,5 +1,6 @@ package wtf.beatrice.hidekobot.objects.fun; -public record TriviaCategory(String categoryName, int categoryId) { +public record TriviaCategory(String categoryName, int categoryId) +{ } diff --git a/src/main/java/wtf/beatrice/hidekobot/objects/fun/TriviaQuestion.java b/src/main/java/wtf/beatrice/hidekobot/objects/fun/TriviaQuestion.java index 0d7952a..356b112 100644 --- a/src/main/java/wtf/beatrice/hidekobot/objects/fun/TriviaQuestion.java +++ b/src/main/java/wtf/beatrice/hidekobot/objects/fun/TriviaQuestion.java @@ -3,6 +3,7 @@ package wtf.beatrice.hidekobot.objects.fun; import java.util.List; public record TriviaQuestion(String question, String correctAnswer, - List wrongAnswers) { + List wrongAnswers) +{ } diff --git a/src/main/java/wtf/beatrice/hidekobot/objects/fun/TriviaScore.java b/src/main/java/wtf/beatrice/hidekobot/objects/fun/TriviaScore.java index 16f3578..c6fae29 100644 --- a/src/main/java/wtf/beatrice/hidekobot/objects/fun/TriviaScore.java +++ b/src/main/java/wtf/beatrice/hidekobot/objects/fun/TriviaScore.java @@ -18,9 +18,15 @@ public class TriviaScore score += add; } - public int getScore() { return score; } + public int getScore() + { + return score; + } - public User getUser() { return user; } + public User getUser() + { + return user; + } @Override public String toString() diff --git a/src/main/java/wtf/beatrice/hidekobot/runnables/ExpiredMessageTask.java b/src/main/java/wtf/beatrice/hidekobot/runnables/ExpiredMessageTask.java index b1f8948..2882332 100644 --- a/src/main/java/wtf/beatrice/hidekobot/runnables/ExpiredMessageTask.java +++ b/src/main/java/wtf/beatrice/hidekobot/runnables/ExpiredMessageTask.java @@ -10,7 +10,8 @@ import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.List; -public class ExpiredMessageTask implements Runnable { +public class ExpiredMessageTask implements Runnable +{ private final DateTimeFormatter formatter; private static final Logger LOGGER = LoggerFactory.getLogger(ExpiredMessageTask.class); @@ -26,23 +27,24 @@ public class ExpiredMessageTask implements Runnable { @Override - public void run() { + public void run() + { databaseSource = Cache.getDatabaseSource(); - if(databaseSource == null) return; + if (databaseSource == null) return; List expiringMessages = Cache.getDatabaseSource().getQueuedExpiringMessages(); - if(expiringMessages == null || expiringMessages.isEmpty()) return; + if (expiringMessages == null || expiringMessages.isEmpty()) return; LocalDateTime now = LocalDateTime.now(); - for(String messageId : expiringMessages) + for (String messageId : expiringMessages) { - if(Cache.isVerbose()) LOGGER.info("expired check: {}", messageId); + if (Cache.isVerbose()) LOGGER.info("expired check: {}", messageId); String expiryTimestamp = databaseSource.getQueuedExpiringMessageExpiryDate(messageId); - if(expiryTimestamp == null || expiryTimestamp.isEmpty()) // if missing timestamp + if (expiryTimestamp == null || expiryTimestamp.isEmpty()) // if missing timestamp { // count it as already expired databaseSource.untrackExpiredMessage(messageId); @@ -52,9 +54,9 @@ public class ExpiredMessageTask implements Runnable { LocalDateTime expiryDate = LocalDateTime.parse(expiryTimestamp, formatter); - if(now.isAfter(expiryDate)) + if (now.isAfter(expiryDate)) { - if(Cache.isVerbose()) LOGGER.info("expired: {}", messageId); + if (Cache.isVerbose()) LOGGER.info("expired: {}", messageId); CommandUtil.disableExpired(messageId); } } diff --git a/src/main/java/wtf/beatrice/hidekobot/runnables/HeartBeatTask.java b/src/main/java/wtf/beatrice/hidekobot/runnables/HeartBeatTask.java index 58d3e72..2aa0e22 100644 --- a/src/main/java/wtf/beatrice/hidekobot/runnables/HeartBeatTask.java +++ b/src/main/java/wtf/beatrice/hidekobot/runnables/HeartBeatTask.java @@ -16,9 +16,10 @@ public class HeartBeatTask implements Runnable public void run() { String urlString = Cache.getFullHeartBeatLink(); - if(urlString == null || urlString.isEmpty()) return; + if (urlString == null || urlString.isEmpty()) return; - try { + try + { URL heartbeatUrl = new URL(urlString); @@ -28,17 +29,17 @@ public class HeartBeatTask implements Runnable connection.setReadTimeout(5000); int responseCode = connection.getResponseCode(); - if(200 <= responseCode && responseCode < 300) + if (200 <= responseCode && responseCode < 300) { // only log ok response codes when verbosity is enabled - if(Cache.isVerbose()) LOGGER.info("Heartbeat response code: {}", responseCode); - } - else + if (Cache.isVerbose()) LOGGER.info("Heartbeat response code: {}", responseCode); + } else { LOGGER.error("Heartbeat returned problematic response code: {}", responseCode); } - } catch (IOException e) { + } catch (IOException e) + { LOGGER.error("Error while trying to push heartbeat", e); } diff --git a/src/main/java/wtf/beatrice/hidekobot/runnables/RandomOrgSeedTask.java b/src/main/java/wtf/beatrice/hidekobot/runnables/RandomOrgSeedTask.java index 60d1996..035a2c0 100644 --- a/src/main/java/wtf/beatrice/hidekobot/runnables/RandomOrgSeedTask.java +++ b/src/main/java/wtf/beatrice/hidekobot/runnables/RandomOrgSeedTask.java @@ -20,11 +20,11 @@ public class RandomOrgSeedTask implements Runnable @Override public void run() { - if(RandomUtil.isRandomOrgKeyValid()) + if (RandomUtil.isRandomOrgKeyValid()) { - if(Cache.isVerbose()) LOGGER.info("Updating Random seed from random.org..."); + if (Cache.isVerbose()) LOGGER.info("Updating Random seed from random.org..."); RandomUtil.initRandomOrg(); - if(Cache.isVerbose()) LOGGER.info("Random.org seed updated!"); + if (Cache.isVerbose()) LOGGER.info("Random.org seed updated!"); } } -} \ No newline at end of file +} diff --git a/src/main/java/wtf/beatrice/hidekobot/runnables/StatusUpdateTask.java b/src/main/java/wtf/beatrice/hidekobot/runnables/StatusUpdateTask.java index 7f4671a..6c5dce4 100644 --- a/src/main/java/wtf/beatrice/hidekobot/runnables/StatusUpdateTask.java +++ b/src/main/java/wtf/beatrice/hidekobot/runnables/StatusUpdateTask.java @@ -22,7 +22,8 @@ public class StatusUpdateTask implements Runnable ); @Override - public void run() { + public void run() + { int randomPos = RandomUtil.getRandomNumber(0, statuses.size() - 1); String status = statuses.get(randomPos) + " | " + Cache.getBotPrefix() + " help"; HidekoBot.getAPI().getPresence().setActivity(Activity.playing(status)); diff --git a/src/main/java/wtf/beatrice/hidekobot/runnables/TriviaTask.java b/src/main/java/wtf/beatrice/hidekobot/runnables/TriviaTask.java index 82382fb..2a0be8a 100644 --- a/src/main/java/wtf/beatrice/hidekobot/runnables/TriviaTask.java +++ b/src/main/java/wtf/beatrice/hidekobot/runnables/TriviaTask.java @@ -52,12 +52,12 @@ public class TriviaTask implements Runnable public void run() { - if(previousMessage != null) + if (previousMessage != null) { // todo: we shouldn't use this method, since it messes with the database... look at coin reflip CommandUtil.disableExpired(previousMessage.getId()); - String previousCorrectAnswer = questions.get(iteration-1).correctAnswer(); + String previousCorrectAnswer = questions.get(iteration - 1).correctAnswer(); // we need this to be thread-locking to avoid getting out of sync with the rest of the trivia features previousMessage.reply("The correct answer was: **" + previousCorrectAnswer + "**!").complete(); @@ -67,7 +67,7 @@ public class TriviaTask implements Runnable Trivia.channelAndWhoResponded.put(previousMessage.getChannel().getId(), new ArrayList<>()); } - if(iteration >= questions.size()) + if (iteration >= questions.size()) { String scoreboardText = "\uD83D\uDC23 Trivia session is over!"; @@ -77,28 +77,30 @@ public class TriviaTask implements Runnable StringBuilder othersBuilder = new StringBuilder(); LinkedList triviaScores = Trivia.channelAndScores.get(channel.getId()); - if(triviaScores == null) triviaScores = new LinkedList<>(); + if (triviaScores == null) triviaScores = new LinkedList<>(); else triviaScores.sort(new TriviaScoreComparator()); int pos = 0; Integer previousScore = null; - for(TriviaScore triviaScore : triviaScores) + for (TriviaScore triviaScore : triviaScores) { - if(pos > 10) break; // cap at top 10 + if (pos > 10) break; // cap at top 10 String user = triviaScore.getUser().getAsMention(); int score = triviaScore.getScore(); - if(previousScore == null) + if (previousScore == null) { previousScore = score; topScore = score; pos = 1; - } else { - if(score != previousScore) pos++; + } else + { + if (score != previousScore) pos++; } - if(pos == 1) winners.add(user); - else { + if (pos == 1) winners.add(user); + else + { othersBuilder.append("\n").append(pos) .append(" | ").append(user) .append(": ").append(score).append(" points"); @@ -106,14 +108,15 @@ public class TriviaTask implements Runnable } StringBuilder winnersBuilder = new StringBuilder(); - for(int i = 0; i < winners.size(); i++) + for (int i = 0; i < winners.size(); i++) { String winner = winners.get(i); winnersBuilder.append(winner); - if(i + 1 != winners.size()) + if (i + 1 != winners.size()) { winnersBuilder.append(", "); // separate with comma except on last run - } else { + } else + { winnersBuilder.append(": ").append(topScore).append(" points \uD83C\uDF89"); } } @@ -127,10 +130,10 @@ public class TriviaTask implements Runnable EmbedBuilder scoreboardBuilder = new EmbedBuilder(); scoreboardBuilder.setColor(Cache.getBotColor()); scoreboardBuilder.setTitle("\uD83C\uDF1F Trivia Scoreboard"); - if(!winnersString.isEmpty()) scoreboardBuilder.addField(winnersTitle, winnersString, false); + if (!winnersString.isEmpty()) scoreboardBuilder.addField(winnersTitle, winnersString, false); else scoreboardBuilder.addField("\uD83D\uDE22 Sad Trivia", "No one played \uD83D\uDE2D", false); - if(!othersString.isEmpty()) scoreboardBuilder.addField("☁️ Others", othersString, false); + if (!othersString.isEmpty()) scoreboardBuilder.addField("☁️ Others", othersString, false); channel.sendMessage(scoreboardText).addEmbeds(scoreboardBuilder.build()).queue(); @@ -153,7 +156,7 @@ public class TriviaTask implements Runnable answerButtons.add(correctAnswerButton); int i = 0; // we need to add a number because buttons can't have the same id - for(String wrongAnswer : currentTriviaQuestion.wrongAnswers()) + for (String wrongAnswer : currentTriviaQuestion.wrongAnswers()) { i++; Button wrongAnswerButton = Button.primary("trivia_wrong_" + i, wrongAnswer); @@ -166,9 +169,9 @@ public class TriviaTask implements Runnable "\uD83D\uDFE2", "\uD83D\uDFE1", "\uD83D\uDFE4", "\uD83D\uDFE3", "\uD83D\uDFE0"); // add emojis to buttons - for(int emojiPos = 0; emojiPos < buttonEmojis.size(); emojiPos++) + for (int emojiPos = 0; emojiPos < buttonEmojis.size(); emojiPos++) { - if(emojiPos == answerButtons.size()) break; + if (emojiPos == answerButtons.size()) break; String emoji = buttonEmojis.get(emojiPos); Button button = answerButtons.get(emojiPos); @@ -180,7 +183,7 @@ public class TriviaTask implements Runnable embedBuilder.setColor(Cache.getBotColor()); embedBuilder.setTitle("\uD83C\uDFB2 Trivia - " + category.categoryName() + - " (" + (iteration+1) + "/" + questions.size() + ")"); + " (" + (iteration + 1) + "/" + questions.size() + ")"); embedBuilder.addField("❓ Question", currentTriviaQuestion.question(), false); diff --git a/src/main/java/wtf/beatrice/hidekobot/util/CommandUtil.java b/src/main/java/wtf/beatrice/hidekobot/util/CommandUtil.java index ace8534..bb321f2 100644 --- a/src/main/java/wtf/beatrice/hidekobot/util/CommandUtil.java +++ b/src/main/java/wtf/beatrice/hidekobot/util/CommandUtil.java @@ -27,7 +27,8 @@ public class CommandUtil private static final Logger LOGGER = LoggerFactory.getLogger(CommandUtil.class); - private CommandUtil() { + private CommandUtil() + { throw new IllegalStateException("Utility class"); } @@ -40,7 +41,8 @@ public class CommandUtil public static void delete(ButtonInteractionEvent event) { // check if the user interacting is the same one who ran the command - if (!(Cache.getDatabaseSource().isUserTrackedFor(event.getUser().getId(), event.getMessageId()))) { + if (!(Cache.getDatabaseSource().isUserTrackedFor(event.getUser().getId(), event.getMessageId()))) + { event.reply("❌ You did not run this command!").setEphemeral(true).queue(); return; } @@ -63,8 +65,10 @@ public class CommandUtil // populate commands list from registered commands List allCommands = new ArrayList<>(); - for(SlashCommand cmd : Cache.getSlashCommandListener().getRegisteredCommands()) - { allCommands.add(cmd.getSlashCommandData()); } + for (SlashCommand cmd : Cache.getSlashCommandListener().getRegisteredCommands()) + { + allCommands.add(cmd.getSlashCommandData()); + } JDA jdaInstance = HidekoBot.getAPI(); @@ -73,22 +77,22 @@ public class CommandUtil boolean update = false; - if(force) + if (force) { update = true; } else { // for each command that we have already registered... - for(Command currRegCmd : registeredCommands) + for (Command currRegCmd : registeredCommands) { boolean found = false; // iterate through all "recognized" commands - for(CommandData cmdData : allCommands) + for (CommandData cmdData : allCommands) { // if we find the same command... - if(cmdData.getName().equals(currRegCmd.getName())) + if (cmdData.getName().equals(currRegCmd.getName())) { // quit the loop since we found it. found = true; @@ -98,7 +102,7 @@ public class CommandUtil // if no match was found, we need to send an updated command list because // an old command was probably removed. - if(!found) + if (!found) { update = true; @@ -108,18 +112,18 @@ public class CommandUtil } // if an update is not already queued... - if(!update) + if (!update) { // for each "recognized" valid command - for(CommandData currCmdData : allCommands) + for (CommandData currCmdData : allCommands) { boolean found = false; // iterate through all already registered commands. - for(Command cmd : registeredCommands) + for (Command cmd : registeredCommands) { // if this command was already registered... - if(cmd.getName().equals(currCmdData.getName())) + if (cmd.getName().equals(currCmdData.getName())) { // quit the loop since we found a match. found = true; @@ -129,7 +133,7 @@ public class CommandUtil // if no match was found, we need to send an updated command list because // a new command was probably added. - if(!found) + if (!found) { update = true; @@ -142,7 +146,7 @@ public class CommandUtil LOGGER.info("Found {} commands.", registeredCommands.size()); - if(update) + if (update) { // send updated command list. jdaInstance.updateCommands().addCommands(allCommands).queue(); @@ -169,18 +173,18 @@ public class CommandUtil MessageChannel textChannel = null; // this should never happen, but only message channels are supported. - if(!msgChannelType.isMessage()) + if (!msgChannelType.isMessage()) { databaseSource.untrackExpiredMessage(messageId); return; } // if this is a DM - if(!(msgChannelType.isGuild())) + if (!(msgChannelType.isGuild())) { String userId = databaseSource.getTrackedReplyUserId(messageId); User user = userId == null ? null : HidekoBot.getAPI().retrieveUserById(userId).complete(); - if(user == null) + if (user == null) { // if user is not found, consider it expired // (deleted profile, or blocked the bot) @@ -189,12 +193,11 @@ public class CommandUtil } textChannel = user.openPrivateChannel().complete(); - } - else + } else { String guildId = databaseSource.getQueuedExpiringMessageGuild(messageId); Guild guild = guildId == null ? null : HidekoBot.getAPI().getGuildById(guildId); - if(guild == null) + if (guild == null) { // if guild is not found, consider it expired // (server was deleted or bot was kicked) @@ -204,7 +207,7 @@ public class CommandUtil textChannel = guild.getTextChannelById(channelId); } - if(textChannel == null) + if (textChannel == null) { // if channel is not found, count it as expired // (channel was deleted or bot permissions restricted) @@ -215,11 +218,11 @@ public class CommandUtil RestAction retrieveAction = textChannel.retrieveMessageById(messageId); - if(Cache.isVerbose()) LOGGER.info("cleaning up: {}", messageId); + if (Cache.isVerbose()) LOGGER.info("cleaning up: {}", messageId); retrieveAction.queue( message -> { - if(message == null) + if (message == null) { databaseSource.untrackExpiredMessage(messageId); return; diff --git a/src/main/java/wtf/beatrice/hidekobot/util/FormatUtil.java b/src/main/java/wtf/beatrice/hidekobot/util/FormatUtil.java index 1661ac2..e7e3a6d 100644 --- a/src/main/java/wtf/beatrice/hidekobot/util/FormatUtil.java +++ b/src/main/java/wtf/beatrice/hidekobot/util/FormatUtil.java @@ -12,20 +12,21 @@ import java.util.Arrays; public class FormatUtil { - private FormatUtil() { + private FormatUtil() + { throw new IllegalStateException("Utility class"); } // cosmetic string to print on startup. private static final String LOGO = """ - \s - ██╗░░██╗██╗██████╗░███████╗██╗░░██╗░█████╗░ - ██║░░██║██║██╔══██╗██╔════╝██║░██╔╝██╔══██╗ - ███████║██║██║░░██║█████╗░░█████═╝░██║░░██║ - ██╔══██║██║██║░░██║██╔══╝░░██╔═██╗░██║░░██║ - ██║░░██║██║██████╔╝███████╗██║░╚██╗╚█████╔╝ - ╚═╝░░╚═╝╚═╝╚═════╝░╚══════╝╚═╝░░╚═╝░╚════╝░ - \s"""; + \s + ██╗░░██╗██╗██████╗░███████╗██╗░░██╗░█████╗░ + ██║░░██║██║██╔══██╗██╔════╝██║░██╔╝██╔══██╗ + ███████║██║██║░░██║█████╗░░█████═╝░██║░░██║ + ██╔══██║██║██║░░██║██╔══╝░░██╔═██╗░██║░░██║ + ██║░░██║██║██████╔╝███████╗██║░╚██╗╚█████╔╝ + ╚═╝░░╚═╝╚═╝╚═════╝░╚══════╝╚═╝░░╚═╝░╚════╝░ + \s"""; /** @@ -60,21 +61,25 @@ public class FormatUtil * * @return the formatted String */ - public static String getNiceDuration(Duration duration) { + public static String getNiceDuration(Duration duration) + { long days = duration.toDays(); long hours = duration.toHoursPart(); long minutes = duration.toMinutesPart(); long seconds = duration.toSecondsPart(); StringBuilder sb = new StringBuilder(); - if (days > 0) { + if (days > 0) + { sb.append(days).append("d "); sb.append(hours).append("h "); sb.append(minutes).append("m "); - } else if (hours > 0) { + } else if (hours > 0) + { sb.append(hours).append("h "); sb.append(minutes).append("m "); - } else if (minutes > 0) { + } else if (minutes > 0) + { sb.append(minutes).append("m "); } sb.append(seconds).append("s"); @@ -93,7 +98,7 @@ public class FormatUtil public static Duration parseDuration(String duration) { // sanitize a bit to avoid cluttering with garbled strings - if(duration.length() > 16) duration = duration.substring(0, 16); + if (duration.length() > 16) duration = duration.substring(0, 16); duration = duration.replaceAll("[^\\w]", ""); //only keep digits and word characters duration = duration.toLowerCase(); @@ -105,7 +110,7 @@ public class FormatUtil {1,10} is used to limit the size of the input to parse, to avoid stack overflows. no one should be typing more than 10 arguments, or more than 10 digits for a single argument anyway. */ - if(!duration.matches("(\\d{1,10}[a-zA-Z]{1,10}){1,10}")) + if (!duration.matches("(\\d{1,10}[a-zA-Z]{1,10}){1,10}")) return null; String[] durationTimes = duration.split("[a-zA-Z]+"); @@ -116,7 +121,7 @@ public class FormatUtil Duration fullDuration = Duration.ZERO; - for(int i = 0; i < durationTimes.length; i++) + for (int i = 0; i < durationTimes.length; i++) { String durationTimeStr = durationTimes[i]; String durationUnitStr = durationUnits[i]; @@ -124,7 +129,7 @@ public class FormatUtil int durationValue = Integer.parseInt(durationTimeStr); TemporalUnit unit = parseTimeUnit(durationUnitStr); - if(unit != null) + if (unit != null) fullDuration = fullDuration.plus(durationValue, unit); else return null; // if we failed finding the time unit, instantly quit with failed parsing. } diff --git a/src/main/java/wtf/beatrice/hidekobot/util/Logger.java b/src/main/java/wtf/beatrice/hidekobot/util/Logger.java index fcb435e..0afeb36 100644 --- a/src/main/java/wtf/beatrice/hidekobot/util/Logger.java +++ b/src/main/java/wtf/beatrice/hidekobot/util/Logger.java @@ -44,13 +44,14 @@ public class Logger * Logs a message to console, after delaying it. * * @param message the message to log - * @param delay the time to wait before logging, in seconds + * @param delay the time to wait before logging, in seconds */ public void log(String message, int delay) { // create a new scheduled executor with an anonymous runnable... //... after waiting seconds. - try (ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor()) { + try (ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor()) + { executor.schedule(() -> log(message), delay, TimeUnit.SECONDS); } diff --git a/src/main/java/wtf/beatrice/hidekobot/util/RandomUtil.java b/src/main/java/wtf/beatrice/hidekobot/util/RandomUtil.java index e3369a1..6971dd7 100644 --- a/src/main/java/wtf/beatrice/hidekobot/util/RandomUtil.java +++ b/src/main/java/wtf/beatrice/hidekobot/util/RandomUtil.java @@ -10,7 +10,8 @@ import java.util.Random; public class RandomUtil { - private RandomUtil() { + private RandomUtil() + { throw new IllegalStateException("Utility class"); } @@ -27,8 +28,8 @@ public class RandomUtil */ public static int getRandomNumber(int min, int max) { - if(min == max) return min; // dumbass - if(min > max) // swap em + if (min == max) return min; // dumbass + if (min > max) // swap em { min = min - max; max = min + max; @@ -47,7 +48,8 @@ public class RandomUtil } - public static Random getRandom() { + public static Random getRandom() + { return randomInstance; } diff --git a/src/main/java/wtf/beatrice/hidekobot/util/SerializationUtil.java b/src/main/java/wtf/beatrice/hidekobot/util/SerializationUtil.java index 9324485..86d7736 100644 --- a/src/main/java/wtf/beatrice/hidekobot/util/SerializationUtil.java +++ b/src/main/java/wtf/beatrice/hidekobot/util/SerializationUtil.java @@ -10,33 +10,38 @@ import java.util.List; public class SerializationUtil { - private SerializationUtil() { + private SerializationUtil() + { throw new IllegalStateException("Utility class"); } - public static String serializeBase64(List dataList) { + public static String serializeBase64(List dataList) + { try (ByteArrayOutputStream bo = new ByteArrayOutputStream(); - ObjectOutputStream so = new ObjectOutputStream(bo)) { + ObjectOutputStream so = new ObjectOutputStream(bo)) + { so.writeObject(dataList); so.flush(); return Base64.getEncoder().encodeToString(bo.toByteArray()); - } - catch (IOException e) { + } catch (IOException e) + { throw new SerializationException("Error during serialization", e); } } - public static LinkedList deserializeBase64(String dataStr) { + public static LinkedList deserializeBase64(String dataStr) + { byte[] b = Base64.getDecoder().decode(dataStr); ByteArrayInputStream bi = new ByteArrayInputStream(b); ObjectInputStream si; - try { + try + { si = new ObjectInputStream(bi); return LinkedList.class.cast(si.readObject()); - } - catch (IOException | ClassNotFoundException e) { + } catch (IOException | ClassNotFoundException e) + { throw new SerializationException("Error during deserialization", e); } }