From 745fda134f3828e0fd05a45210ae49607e57aadb Mon Sep 17 00:00:00 2001 From: Teriuihi Date: Thu, 20 Jul 2023 00:18:40 +0200 Subject: [PATCH] Fix appeal reminders not properly removing themselves from the database --- .../ButtonRemindMeConfirm.java | 2 +- .../QueriesReminders/QueriesReminders.java | 11 +++++----- .../queries/QueriesReminders/Reminder.java | 20 +++++++++++++++++++ .../com/alttd/listeners/AppealRepost.java | 2 +- .../alttd/schedulers/ReminderScheduler.java | 6 +++++- 5 files changed, 32 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/alttd/buttonManager/buttons/remindMeConfirm/ButtonRemindMeConfirm.java b/src/main/java/com/alttd/buttonManager/buttons/remindMeConfirm/ButtonRemindMeConfirm.java index f8ac61c..6dfb438 100644 --- a/src/main/java/com/alttd/buttonManager/buttons/remindMeConfirm/ButtonRemindMeConfirm.java +++ b/src/main/java/com/alttd/buttonManager/buttons/remindMeConfirm/ButtonRemindMeConfirm.java @@ -57,7 +57,7 @@ public class ButtonRemindMeConfirm extends DiscordButton { ReminderScheduler instance = ReminderScheduler.getInstance(event.getJDA()); if (instance == null) { - QueriesReminders.removeReminder(reminder.id()); + QueriesReminders.removeReminder(reminder); event.replyEmbeds(Util.genericErrorEmbed("Error", "Unable to start reminder, removing it from the database...")) .setEphemeral(true).queue(); return false; diff --git a/src/main/java/com/alttd/database/queries/QueriesReminders/QueriesReminders.java b/src/main/java/com/alttd/database/queries/QueriesReminders/QueriesReminders.java index 28fad19..65aa392 100644 --- a/src/main/java/com/alttd/database/queries/QueriesReminders/QueriesReminders.java +++ b/src/main/java/com/alttd/database/queries/QueriesReminders/QueriesReminders.java @@ -21,7 +21,7 @@ public class QueriesReminders { preparedStatement.setLong(3, reminder.userId()); preparedStatement.setLong(4, reminder.guildId()); preparedStatement.setLong(5, reminder.channelId()); - preparedStatement.setLong(6, 0); + preparedStatement.setLong(6, reminder.messageId()); preparedStatement.setInt(7, reminder.shouldRepeat() ? 1 : 0); preparedStatement.setLong(8, reminder.creationDate()); preparedStatement.setLong(9, reminder.remindDate()); @@ -64,18 +64,17 @@ public class QueriesReminders { return -1; } - public static boolean removeReminder(int id) { - String sql = "DELETE FROM new_reminders WHERE id = ?"; + public static void removeReminder(Reminder reminder) { + String sql = "DELETE FROM new_reminders WHERE message_id = ?"; try { PreparedStatement preparedStatement = Database.getDatabase().getConnection().prepareStatement(sql); - preparedStatement.setInt(1, id); + preparedStatement.setLong(1, reminder.messageId()); - return preparedStatement.executeUpdate() == 1; + preparedStatement.executeUpdate(); } catch (SQLException e) { Logger.altitudeLogs.error(e); } - return false; } public static ArrayList getReminders() { diff --git a/src/main/java/com/alttd/database/queries/QueriesReminders/Reminder.java b/src/main/java/com/alttd/database/queries/QueriesReminders/Reminder.java index eb6c00b..f388d06 100644 --- a/src/main/java/com/alttd/database/queries/QueriesReminders/Reminder.java +++ b/src/main/java/com/alttd/database/queries/QueriesReminders/Reminder.java @@ -5,6 +5,8 @@ import net.dv8tion.jda.api.JDA; import net.dv8tion.jda.api.entities.Guild; import net.dv8tion.jda.api.entities.channel.Channel; +import java.util.Arrays; + public record Reminder (int id, String title, String description, long userId, long guildId, long channelId, long messageId, boolean shouldRepeat, long creationDate, long remindDate, ReminderType reminderType, byte[] data) { @@ -49,4 +51,22 @@ public record Reminder (int id, String title, String description, long userId, l return guildById; } + + @Override + public String toString() { + return "Reminder{" + + "\nid=[" + id + "]" + + "\ntitle=[" + title + "]" + + "\ndescription=[" + description + "]" + + "\nuserId=[" + userId + "]" + + "\nguildId=[" + guildId + "]" + + "\nchannelId=[" + channelId + "]" + + "\nmessageId=[" + messageId + "]" + + "\nshouldRepeat=[" + shouldRepeat + "]" + + "\ncreationDate=[" + creationDate + "]" + + "\nremindDate=[" + remindDate + "]" + + "\nreminderType=[" + reminderType + "]" + + "\ndata=[" + Arrays.toString(data) + "]" + + '}'; + } } diff --git a/src/main/java/com/alttd/listeners/AppealRepost.java b/src/main/java/com/alttd/listeners/AppealRepost.java index c848374..e9d5ef6 100644 --- a/src/main/java/com/alttd/listeners/AppealRepost.java +++ b/src/main/java/com/alttd/listeners/AppealRepost.java @@ -141,7 +141,7 @@ public class AppealRepost extends ListenerAdapter { ReminderScheduler instance = ReminderScheduler.getInstance(message.getJDA()); if (instance == null) { - QueriesReminders.removeReminder(reminder.id()); + QueriesReminders.removeReminder(reminder); Logger.altitudeLogs.warning("Unable to start reminder, removing it from the database..."); return; } diff --git a/src/main/java/com/alttd/schedulers/ReminderScheduler.java b/src/main/java/com/alttd/schedulers/ReminderScheduler.java index e3ee23c..22af5b4 100644 --- a/src/main/java/com/alttd/schedulers/ReminderScheduler.java +++ b/src/main/java/com/alttd/schedulers/ReminderScheduler.java @@ -58,6 +58,9 @@ public class ReminderScheduler { public synchronized void addReminder(Reminder reminder) { Logger.altitudeLogs.debug("Adding reminder with messageId: " + reminder.messageId()); + if (reminder.messageId() == 0) { + Logger.altitudeLogs.debug("Found reminder with messageId 0, dumping reminder\n" + reminder); + } reminders.add(reminder); reminders.sort(Comparator.comparingLong(Reminder::remindDate)); nextReminder = reminders.get(0); @@ -66,12 +69,13 @@ public class ReminderScheduler { public synchronized void removeReminder(Reminder reminder, boolean removeFromDatabase) { Logger.altitudeLogs.debug("Removing reminder with messageId: " + reminder.messageId()); reminders.remove(reminder); + reminders.sort(Comparator.comparingLong(Reminder::remindDate)); if (reminders.size() == 0) nextReminder = null; else nextReminder = reminders.get(0); if (removeFromDatabase) - QueriesReminders.removeReminder(reminder.id()); + QueriesReminders.removeReminder(reminder); } public synchronized void removeReminder(long messageId) {