From bb3635137ce51f4dfd8ae983e94180e74068ab72 Mon Sep 17 00:00:00 2001 From: ChomeNS <95471003+ChomeNS@users.noreply.github.com> Date: Wed, 16 Apr 2025 19:55:33 +0700 Subject: [PATCH] feat: re-add ChronoUnit cloop unit that should actually work this time --- build-number.txt | 2 +- .../chomens_bot/commands/CloopCommand.java | 12 ++++++++---- .../chomens_bot/data/cloop/CommandLoop.java | 4 ++-- .../chomens_bot/plugins/CloopPlugin.java | 19 ++++++++++++++++--- .../chomens_bot/util/TimeUnitUtilities.java | 17 +++++++++++++++++ 5 files changed, 44 insertions(+), 10 deletions(-) create mode 100644 src/main/java/me/chayapak1/chomens_bot/util/TimeUnitUtilities.java diff --git a/build-number.txt b/build-number.txt index c0de1c53..b8597a26 100644 --- a/build-number.txt +++ b/build-number.txt @@ -1 +1 @@ -2760 \ No newline at end of file +2762 \ No newline at end of file diff --git a/src/main/java/me/chayapak1/chomens_bot/commands/CloopCommand.java b/src/main/java/me/chayapak1/chomens_bot/commands/CloopCommand.java index 5e5d5c4d..ec1cba84 100644 --- a/src/main/java/me/chayapak1/chomens_bot/commands/CloopCommand.java +++ b/src/main/java/me/chayapak1/chomens_bot/commands/CloopCommand.java @@ -10,16 +10,16 @@ import net.kyori.adventure.text.Component; import net.kyori.adventure.text.JoinConfiguration; import net.kyori.adventure.text.format.NamedTextColor; +import java.time.temporal.ChronoUnit; import java.util.ArrayList; import java.util.List; -import java.util.concurrent.TimeUnit; public class CloopCommand extends Command { public CloopCommand () { super( "cloop", "Loops commands", - new String[] { "add ", "remove ", "clear", "list" }, + new String[] { "add ", "remove ", "clear", "list" }, new String[] { "commandloop" }, TrustLevel.TRUSTED ); @@ -36,11 +36,15 @@ public class CloopCommand extends Command { long interval = context.getLong(true); if (interval < 1) interval = 1; - final TimeUnit unit = context.getEnum(TimeUnit.class); + final ChronoUnit unit = context.getEnum(ChronoUnit.class); final String command = context.getString(true, true); - bot.cloop.add(unit, interval, command); + try { + bot.cloop.add(unit, interval, command); + } catch (final ArithmeticException e) { + throw new CommandException(Component.text(e.toString())); + } return Component.translatable( "Added %s with interval %s %s to the cloops", diff --git a/src/main/java/me/chayapak1/chomens_bot/data/cloop/CommandLoop.java b/src/main/java/me/chayapak1/chomens_bot/data/cloop/CommandLoop.java index 7ac68c0d..cd8a93fa 100644 --- a/src/main/java/me/chayapak1/chomens_bot/data/cloop/CommandLoop.java +++ b/src/main/java/me/chayapak1/chomens_bot/data/cloop/CommandLoop.java @@ -1,10 +1,10 @@ package me.chayapak1.chomens_bot.data.cloop; -import java.util.concurrent.TimeUnit; +import java.time.temporal.ChronoUnit; public record CommandLoop( String command, long interval, - TimeUnit unit + ChronoUnit unit ) { } diff --git a/src/main/java/me/chayapak1/chomens_bot/plugins/CloopPlugin.java b/src/main/java/me/chayapak1/chomens_bot/plugins/CloopPlugin.java index ca55b735..d6115fc3 100644 --- a/src/main/java/me/chayapak1/chomens_bot/plugins/CloopPlugin.java +++ b/src/main/java/me/chayapak1/chomens_bot/plugins/CloopPlugin.java @@ -2,7 +2,10 @@ package me.chayapak1.chomens_bot.plugins; import me.chayapak1.chomens_bot.Bot; import me.chayapak1.chomens_bot.data.cloop.CommandLoop; +import me.chayapak1.chomens_bot.util.TimeUnitUtilities; +import org.apache.commons.lang3.tuple.Pair; +import java.time.temporal.ChronoUnit; import java.util.ArrayList; import java.util.List; import java.util.concurrent.ScheduledFuture; @@ -18,11 +21,21 @@ public class CloopPlugin { this.bot = bot; } - public void add (final TimeUnit unit, final long interval, final String command) { - final Runnable loopTask = () -> bot.core.run(command); + public void add (final ChronoUnit unit, final long interval, final String command) { + final Pair converted = TimeUnitUtilities.fromChronoUnit(interval, unit); + + final long convertedInterval = converted.getLeft(); + final TimeUnit timeUnit = converted.getRight(); loops.add(new CommandLoop(command, interval, unit)); - loopTasks.add(bot.executor.scheduleAtFixedRate(loopTask, 0, interval, unit)); + loopTasks.add( + bot.executor.scheduleAtFixedRate( + () -> bot.core.run(command), + 0, + convertedInterval, + timeUnit + ) + ); } public CommandLoop remove (final int index) { diff --git a/src/main/java/me/chayapak1/chomens_bot/util/TimeUnitUtilities.java b/src/main/java/me/chayapak1/chomens_bot/util/TimeUnitUtilities.java new file mode 100644 index 00000000..0c9f5486 --- /dev/null +++ b/src/main/java/me/chayapak1/chomens_bot/util/TimeUnitUtilities.java @@ -0,0 +1,17 @@ +package me.chayapak1.chomens_bot.util; + +import org.apache.commons.lang3.tuple.Pair; + +import java.time.Duration; +import java.time.temporal.ChronoUnit; +import java.util.concurrent.TimeUnit; + +public class TimeUnitUtilities { + // some weird function used in cloop + public static Pair fromChronoUnit (final long interval, final ChronoUnit chronoUnit) { + final Duration duration = chronoUnit.getDuration(); + + if (duration.getSeconds() >= 1) return Pair.of(interval * duration.toSeconds(), TimeUnit.SECONDS); + else return Pair.of(interval * duration.toNanos(), TimeUnit.NANOSECONDS); + } +}