From 7d2ab86518281918838998ccdf408b493bdddc00 Mon Sep 17 00:00:00 2001 From: RedPanda4552 Date: Thu, 15 Jan 2026 10:59:35 -0500 Subject: [PATCH 1/2] Use FIFO to ensure message ordering --- src/main/java/net/pcsx2/hifumi/Scheduler.java | 8 ++++++++ .../java/net/pcsx2/hifumi/event/MessageEventListener.java | 8 ++++---- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/main/java/net/pcsx2/hifumi/Scheduler.java b/src/main/java/net/pcsx2/hifumi/Scheduler.java index 921506d..3adb9fd 100644 --- a/src/main/java/net/pcsx2/hifumi/Scheduler.java +++ b/src/main/java/net/pcsx2/hifumi/Scheduler.java @@ -25,7 +25,9 @@ import java.util.HashMap; import java.util.Set; +import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; +import java.util.concurrent.Future; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.ThreadFactory; @@ -36,11 +38,17 @@ public class Scheduler { private ScheduledExecutorService threadPool; + private ExecutorService messageEventFIFO; private HashMap runnables = new HashMap(); private HashMap> statuses = new HashMap>(); public Scheduler() { this.threadPool = Executors.newScheduledThreadPool(6, new SchedulerThreadFactory("pool")); + this.messageEventFIFO = Executors.newSingleThreadExecutor(new SchedulerThreadFactory("msg-evt-fifo")); + } + + public void addToMessageEventFIFO(Runnable runnable) { + this.messageEventFIFO.submit(runnable); } /** diff --git a/src/main/java/net/pcsx2/hifumi/event/MessageEventListener.java b/src/main/java/net/pcsx2/hifumi/event/MessageEventListener.java index 2456759..3a86ab2 100644 --- a/src/main/java/net/pcsx2/hifumi/event/MessageEventListener.java +++ b/src/main/java/net/pcsx2/hifumi/event/MessageEventListener.java @@ -32,7 +32,7 @@ public class MessageEventListener extends ListenerAdapter { @Override public void onMessageReceived(MessageReceivedEvent event) { - HifumiBot.getSelf().getScheduler().runOnce(() -> { + HifumiBot.getSelf().getScheduler().addToMessageEventFIFO(() -> { // Store the time of this event handler firing Instant now = Instant.now(); @@ -133,7 +133,7 @@ public void onMessageReceived(MessageReceivedEvent event) { @Override public void onMessageDelete(MessageDeleteEvent event) { - HifumiBot.getSelf().getScheduler().runOnce(() -> { + HifumiBot.getSelf().getScheduler().addToMessageEventFIFO(() -> { Database.insertMessageDeleteEvent(event); MessageObject deletedMessage = Database.getLatestMessage(event.getMessageId()); @@ -148,7 +148,7 @@ public void onMessageDelete(MessageDeleteEvent event) { @Override public void onMessageBulkDelete(MessageBulkDeleteEvent event) { - HifumiBot.getSelf().getScheduler().runOnce(() -> { + HifumiBot.getSelf().getScheduler().addToMessageEventFIFO(() -> { Database.insertMessageBulkDeleteEvent(event); for (String messageId : event.getMessageIds()) { @@ -166,7 +166,7 @@ public void onMessageBulkDelete(MessageBulkDeleteEvent event) { @Override public void onMessageUpdate(MessageUpdateEvent event) { - HifumiBot.getSelf().getScheduler().runOnce(() -> { + HifumiBot.getSelf().getScheduler().addToMessageEventFIFO(() -> { MessageObject beforeEditMessage = Database.getLatestMessage(event.getMessageId()); if (!HifumiBot.getSelf().getPermissionManager().hasPermission(PermissionLevel.ADMIN, event.getMember())) { From eafa16f6e124ce4d5af22fb7f52a13955f630c65 Mon Sep 17 00:00:00 2001 From: RedPanda4552 Date: Thu, 15 Jan 2026 11:09:29 -0500 Subject: [PATCH 2/2] Version bump --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 6f64f77..b8c76ba 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 net.pcsx2 HifumiBot - 4.8.4 + 4.9.0 21 21