From 3dd65b15cf79c68c7270da5b9a6563e858aeb8ff Mon Sep 17 00:00:00 2001 From: ChomeNS <95471003+ChomeNS@users.noreply.github.com> Date: Mon, 12 Jun 2023 18:43:10 +0700 Subject: [PATCH] use ExecutorService s instead of threads.,., --- .../chomens_bot/commands/GrepLogCommand.java | 8 ++-- .../chomens_bot/plugins/ConsolePlugin.java | 5 +- .../chomens_bot/plugins/GrepLogPlugin.java | 22 +++++---- .../plugins/MusicPlayerPlugin.java | 43 ++++------------- .../chomens_bot/song/SongLoaderException.java | 8 +--- ...derThread.java => SongLoaderRunnable.java} | 46 ++++++++++--------- 6 files changed, 54 insertions(+), 78 deletions(-) rename src/main/java/land/chipmunk/chayapak/chomens_bot/song/{SongLoaderThread.java => SongLoaderRunnable.java} (62%) diff --git a/src/main/java/land/chipmunk/chayapak/chomens_bot/commands/GrepLogCommand.java b/src/main/java/land/chipmunk/chayapak/chomens_bot/commands/GrepLogCommand.java index d9b17fa..f70fd88 100644 --- a/src/main/java/land/chipmunk/chayapak/chomens_bot/commands/GrepLogCommand.java +++ b/src/main/java/land/chipmunk/chayapak/chomens_bot/commands/GrepLogCommand.java @@ -50,15 +50,13 @@ public class GrepLogCommand implements Command { boolean regex = false; if (_args[0].equals("stop")) { - if (bot.grepLog().thread() == null) return Component.text("No query is running").color(NamedTextColor.RED); - - bot.grepLog().thread().interrupt(); - bot.grepLog().thread(null); + bot.grepLog().future().cancel(true); + bot.grepLog().future(null); return Component.text("Log query stopped"); } - if (bot.grepLog().thread() != null) return Component.text("Another query is already running").color(NamedTextColor.RED); + if (bot.grepLog().future() != null) return Component.text("Another query is already running").color(NamedTextColor.RED); // this is a mess if (_args[0].equals("-ignorecase")) { diff --git a/src/main/java/land/chipmunk/chayapak/chomens_bot/plugins/ConsolePlugin.java b/src/main/java/land/chipmunk/chayapak/chomens_bot/plugins/ConsolePlugin.java index be3f182..ee392ad 100644 --- a/src/main/java/land/chipmunk/chayapak/chomens_bot/plugins/ConsolePlugin.java +++ b/src/main/java/land/chipmunk/chayapak/chomens_bot/plugins/ConsolePlugin.java @@ -2,6 +2,7 @@ package land.chipmunk.chayapak.chomens_bot.plugins; import land.chipmunk.chayapak.chomens_bot.Bot; import land.chipmunk.chayapak.chomens_bot.Configuration; +import land.chipmunk.chayapak.chomens_bot.Main; import land.chipmunk.chayapak.chomens_bot.command.ConsoleCommandContext; import land.chipmunk.chayapak.chomens_bot.util.ColorUtilities; import lombok.Getter; @@ -46,7 +47,7 @@ public class ConsolePlugin { final String prompt = "> "; - new Thread(() -> { + Main.executorService.submit(() -> { while (true) { String line = null; try { @@ -57,7 +58,7 @@ public class ConsolePlugin { handleLine(line); } - }).start(); + }); for (Listener listener : listeners) { listener.ready(); } } diff --git a/src/main/java/land/chipmunk/chayapak/chomens_bot/plugins/GrepLogPlugin.java b/src/main/java/land/chipmunk/chayapak/chomens_bot/plugins/GrepLogPlugin.java index 97ee6fd..d1a7fe3 100644 --- a/src/main/java/land/chipmunk/chayapak/chomens_bot/plugins/GrepLogPlugin.java +++ b/src/main/java/land/chipmunk/chayapak/chomens_bot/plugins/GrepLogPlugin.java @@ -1,8 +1,8 @@ package land.chipmunk.chayapak.chomens_bot.plugins; import land.chipmunk.chayapak.chomens_bot.Bot; -import land.chipmunk.chayapak.chomens_bot.util.LoggerUtilities; import land.chipmunk.chayapak.chomens_bot.util.ColorUtilities; +import land.chipmunk.chayapak.chomens_bot.util.LoggerUtilities; import lombok.Getter; import lombok.Setter; import net.dv8tion.jda.api.entities.TextChannel; @@ -13,25 +13,26 @@ import java.io.*; import java.nio.charset.StandardCharsets; import java.util.Arrays; import java.util.Comparator; +import java.util.concurrent.Future; import java.util.regex.Pattern; import java.util.zip.GZIPInputStream; public class GrepLogPlugin { private final Bot bot; - @Getter @Setter private GrepLogThread thread = null; + @Getter @Setter private Future future = null; public GrepLogPlugin (Bot bot) { this.bot = bot; } public void query (String query, boolean regex, boolean ignoreCase) { - thread = new GrepLogThread(query, regex, ignoreCase); - thread.start(); + final Runnable runnable = new GrepLogRunnable(query, regex, ignoreCase); + future = bot.executorService().submit(runnable); } // should i move this to another file or keep it here - public class GrepLogThread extends Thread { + public class GrepLogRunnable implements Runnable { private String query; private final boolean regex; private final boolean ignoreCase; @@ -43,7 +44,7 @@ public class GrepLogPlugin { private int matches = 0; private final StringBuilder results = new StringBuilder(); - public GrepLogThread(String query, boolean regex, boolean ignoreCase) { + public GrepLogRunnable(String query, boolean regex, boolean ignoreCase) { this.regex = regex; this.ignoreCase = ignoreCase; @@ -160,19 +161,20 @@ public class GrepLogPlugin { } private void finish () { - thread = null; - if (results.toString().split("\n").length < 100) { // ig lazy fix for removing \n lol bot.chat().tellraw( Component.empty() - .append(Component.text("Log query output:")) + .append(Component.text("Log query output for \"")) + .append(Component.text(query)) + .append(Component.text("\":")) .append(Component.newline()) .append(Component.text(results.toString())) ); } else if (bot.config().discord().enabled()) { bot.chat().tellraw( Component.translatable( - "Log query finished, found %s matches. Results were sent in Discord", + "Log query for \"%s\" finished, found %s matches. Results were sent in Discord", + Component.text(query).color(ColorUtilities.getColorByString(bot.config().colorPalette().string())), Component.text(matches).color(ColorUtilities.getColorByString(bot.config().colorPalette().number())) ) ); diff --git a/src/main/java/land/chipmunk/chayapak/chomens_bot/plugins/MusicPlayerPlugin.java b/src/main/java/land/chipmunk/chayapak/chomens_bot/plugins/MusicPlayerPlugin.java index c700e9c..25f9874 100644 --- a/src/main/java/land/chipmunk/chayapak/chomens_bot/plugins/MusicPlayerPlugin.java +++ b/src/main/java/land/chipmunk/chayapak/chomens_bot/plugins/MusicPlayerPlugin.java @@ -34,7 +34,7 @@ public class MusicPlayerPlugin extends Bot.Listener { @Getter @Setter private Song currentSong; @Getter @Setter private List songQueue = new ArrayList<>(); - @Getter @Setter private SongLoaderThread loaderThread; + @Getter @Setter private SongLoaderRunnable loaderThread; @Getter @Setter private Loop loop = Loop.OFF; // sus nightcore stuff,..,.,. @@ -54,13 +54,9 @@ public class MusicPlayerPlugin extends Bot.Listener { } public void loadSong (Path location) { - if (loaderThread != null) { - bot.chat().tellraw(Component.translatable("Already loading a song", NamedTextColor.RED)); - return; - } - try { - final SongLoaderThread _loaderThread = new SongLoaderThread(location, bot); + final SongLoaderRunnable runnable = new SongLoaderRunnable(location, bot); + bot.chat().tellraw( Component .translatable( @@ -69,8 +65,8 @@ public class MusicPlayerPlugin extends Bot.Listener { ) .color(ColorUtilities.getColorByString(bot.config().colorPalette().defaultColor())) ); - _loaderThread.start(); - loaderThread = _loaderThread; + + bot.executorService().submit(runnable); } catch (SongLoaderException e) { e.printStackTrace(); bot.chat().tellraw(Component.translatable("Failed to load song: %s", e.message()).color(NamedTextColor.RED)); @@ -79,13 +75,9 @@ public class MusicPlayerPlugin extends Bot.Listener { } public void loadSong (URL location) { - if (loaderThread != null) { - bot.chat().tellraw(Component.translatable("Already loading a song", NamedTextColor.RED)); - return; - } - try { - final SongLoaderThread _loaderThread = new SongLoaderThread(location, bot); + final SongLoaderRunnable runnable = new SongLoaderRunnable(location, bot); + bot.chat().tellraw( Component .translatable( @@ -94,8 +86,8 @@ public class MusicPlayerPlugin extends Bot.Listener { ) .color(ColorUtilities.getColorByString(bot.config().colorPalette().defaultColor())) ); - _loaderThread.start(); - loaderThread = _loaderThread; + + bot.executorService().submit(runnable); } catch (SongLoaderException e) { bot.chat().tellraw(Component.translatable("Failed to load song: %s", e.message()).color(NamedTextColor.RED)); loaderThread = null; @@ -106,23 +98,8 @@ public class MusicPlayerPlugin extends Bot.Listener { bot.tick().addListener(new TickPlugin.Listener() { @Override public void onTick() { - if (loaderThread != null && !loaderThread.isAlive()) { - if (loaderThread.exception != null) { - bot.chat().tellraw(Component.translatable("Failed to load song: %s", loaderThread.exception.message()).color(NamedTextColor.RED)); - } else { - songQueue.add(loaderThread.song); - bot.chat().tellraw( - Component.translatable( - "Added %s to the song queue", - Component.empty().append(loaderThread.song.name).color(ColorUtilities.getColorByString(bot.config().colorPalette().secondary())) - ).color(ColorUtilities.getColorByString(bot.config().colorPalette().defaultColor())) - ); - } - loaderThread = null; - } - if (currentSong == null) { - if (songQueue.size() == 0) return; + if (songQueue.size() == 0) return; // this line addBossBar(); diff --git a/src/main/java/land/chipmunk/chayapak/chomens_bot/song/SongLoaderException.java b/src/main/java/land/chipmunk/chayapak/chomens_bot/song/SongLoaderException.java index c25f6aa..8d9a150 100644 --- a/src/main/java/land/chipmunk/chayapak/chomens_bot/song/SongLoaderException.java +++ b/src/main/java/land/chipmunk/chayapak/chomens_bot/song/SongLoaderException.java @@ -1,8 +1,7 @@ package land.chipmunk.chayapak.chomens_bot.song; -import net.kyori.adventure.text.Component; import lombok.Getter; -import land.chipmunk.chayapak.chomens_bot.util.ComponentUtilities; +import net.kyori.adventure.text.Component; // Author: _ChipMC_ or hhhzzzsss? public class SongLoaderException extends Exception { @@ -17,9 +16,4 @@ public class SongLoaderException extends Exception { super(null, cause); this.message = message; } - - @Override - public String getMessage () { - return ComponentUtilities.stringify(message); - } } diff --git a/src/main/java/land/chipmunk/chayapak/chomens_bot/song/SongLoaderThread.java b/src/main/java/land/chipmunk/chayapak/chomens_bot/song/SongLoaderRunnable.java similarity index 62% rename from src/main/java/land/chipmunk/chayapak/chomens_bot/song/SongLoaderThread.java rename to src/main/java/land/chipmunk/chayapak/chomens_bot/song/SongLoaderRunnable.java index ff983e7..838c98e 100644 --- a/src/main/java/land/chipmunk/chayapak/chomens_bot/song/SongLoaderThread.java +++ b/src/main/java/land/chipmunk/chayapak/chomens_bot/song/SongLoaderRunnable.java @@ -2,16 +2,20 @@ package land.chipmunk.chayapak.chomens_bot.song; import land.chipmunk.chayapak.chomens_bot.Bot; import land.chipmunk.chayapak.chomens_bot.plugins.MusicPlayerPlugin; +import land.chipmunk.chayapak.chomens_bot.util.ColorUtilities; import land.chipmunk.chayapak.chomens_bot.util.DownloadUtilities; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; + import java.io.File; import java.net.URL; import java.nio.file.Path; import java.nio.file.Files; import java.nio.file.Paths; -// Author: _ChipMC_ or hhhzzzsss? -public class SongLoaderThread extends Thread { +// Author: _ChipMC_ or hhhzzzsss? also i modified it to use runnable +// because thread = bad !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +public class SongLoaderRunnable implements Runnable { public String fileName; private File songPath; @@ -23,7 +27,7 @@ public class SongLoaderThread extends Thread { private final boolean isUrl; - public SongLoaderThread (URL location, Bot bot) throws SongLoaderException { + public SongLoaderRunnable(URL location, Bot bot) throws SongLoaderException { this.bot = bot; isUrl = true; songUrl = location; @@ -31,7 +35,7 @@ public class SongLoaderThread extends Thread { fileName = location.getFile(); } - public SongLoaderThread (Path location, Bot bot) throws SongLoaderException { + public SongLoaderRunnable(Path location, Bot bot) throws SongLoaderException { this.bot = bot; isUrl = false; songPath = location.toFile(); @@ -52,26 +56,12 @@ public class SongLoaderThread extends Thread { } } catch (Exception e) { e.printStackTrace(); - exception = new SongLoaderException(Component.text(e.getMessage()), e); + + showFailedMessage(); + return; } - try { - if (name.endsWith(".mid") || name.endsWith(".midi")) { - song = MidiConverter.getSongFromBytes(bytes, name, bot); - return; - } - - if (name.endsWith(".nbs")) { - song = NBSConverter.getSongFromBytes(bytes, name, bot); - return; - } - } catch (Exception e) { - e.printStackTrace(); - - exception = new SongLoaderException(Component.translatable("Invalid format")); - } - try { song = MidiConverter.getSongFromBytes(bytes, name, bot); } catch (Exception e) { @@ -88,9 +78,23 @@ public class SongLoaderThread extends Thread { if (song == null) { exception = new SongLoaderException(Component.translatable("Invalid format")); + + showFailedMessage(); + } else { + bot.music().songQueue().add(song); + bot.chat().tellraw( + Component.translatable( + "Added %s to the song queue", + Component.empty().append(song.name).color(ColorUtilities.getColorByString(bot.config().colorPalette().secondary())) + ).color(ColorUtilities.getColorByString(bot.config().colorPalette().defaultColor())) + ); } } + private void showFailedMessage () { + bot.chat().tellraw(Component.translatable("Failed to load song: %s", exception.message()).color(NamedTextColor.RED)); + } + private File getSongFile (String name) { return new File(MusicPlayerPlugin.SONG_DIR, name); }