Fix appeal reminders not properly removing themselves from the database

This commit is contained in:
Teriuihi 2023-07-20 00:18:40 +02:00
parent bb60924a63
commit 745fda134f
5 changed files with 32 additions and 9 deletions

View File

@ -57,7 +57,7 @@ public class ButtonRemindMeConfirm extends DiscordButton {
ReminderScheduler instance = ReminderScheduler.getInstance(event.getJDA()); ReminderScheduler instance = ReminderScheduler.getInstance(event.getJDA());
if (instance == null) { if (instance == null) {
QueriesReminders.removeReminder(reminder.id()); QueriesReminders.removeReminder(reminder);
event.replyEmbeds(Util.genericErrorEmbed("Error", "Unable to start reminder, removing it from the database...")) event.replyEmbeds(Util.genericErrorEmbed("Error", "Unable to start reminder, removing it from the database..."))
.setEphemeral(true).queue(); .setEphemeral(true).queue();
return false; return false;

View File

@ -21,7 +21,7 @@ public class QueriesReminders {
preparedStatement.setLong(3, reminder.userId()); preparedStatement.setLong(3, reminder.userId());
preparedStatement.setLong(4, reminder.guildId()); preparedStatement.setLong(4, reminder.guildId());
preparedStatement.setLong(5, reminder.channelId()); preparedStatement.setLong(5, reminder.channelId());
preparedStatement.setLong(6, 0); preparedStatement.setLong(6, reminder.messageId());
preparedStatement.setInt(7, reminder.shouldRepeat() ? 1 : 0); preparedStatement.setInt(7, reminder.shouldRepeat() ? 1 : 0);
preparedStatement.setLong(8, reminder.creationDate()); preparedStatement.setLong(8, reminder.creationDate());
preparedStatement.setLong(9, reminder.remindDate()); preparedStatement.setLong(9, reminder.remindDate());
@ -64,18 +64,17 @@ public class QueriesReminders {
return -1; return -1;
} }
public static boolean removeReminder(int id) { public static void removeReminder(Reminder reminder) {
String sql = "DELETE FROM new_reminders WHERE id = ?"; String sql = "DELETE FROM new_reminders WHERE message_id = ?";
try { try {
PreparedStatement preparedStatement = Database.getDatabase().getConnection().prepareStatement(sql); 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) { } catch (SQLException e) {
Logger.altitudeLogs.error(e); Logger.altitudeLogs.error(e);
} }
return false;
} }
public static ArrayList<Reminder> getReminders() { public static ArrayList<Reminder> getReminders() {

View File

@ -5,6 +5,8 @@ import net.dv8tion.jda.api.JDA;
import net.dv8tion.jda.api.entities.Guild; import net.dv8tion.jda.api.entities.Guild;
import net.dv8tion.jda.api.entities.channel.Channel; 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, 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) { 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; 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) + "]" +
'}';
}
} }

View File

@ -141,7 +141,7 @@ public class AppealRepost extends ListenerAdapter {
ReminderScheduler instance = ReminderScheduler.getInstance(message.getJDA()); ReminderScheduler instance = ReminderScheduler.getInstance(message.getJDA());
if (instance == null) { if (instance == null) {
QueriesReminders.removeReminder(reminder.id()); QueriesReminders.removeReminder(reminder);
Logger.altitudeLogs.warning("Unable to start reminder, removing it from the database..."); Logger.altitudeLogs.warning("Unable to start reminder, removing it from the database...");
return; return;
} }

View File

@ -58,6 +58,9 @@ public class ReminderScheduler {
public synchronized void addReminder(Reminder reminder) { public synchronized void addReminder(Reminder reminder) {
Logger.altitudeLogs.debug("Adding reminder with messageId: " + reminder.messageId()); 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.add(reminder);
reminders.sort(Comparator.comparingLong(Reminder::remindDate)); reminders.sort(Comparator.comparingLong(Reminder::remindDate));
nextReminder = reminders.get(0); nextReminder = reminders.get(0);
@ -66,12 +69,13 @@ public class ReminderScheduler {
public synchronized void removeReminder(Reminder reminder, boolean removeFromDatabase) { public synchronized void removeReminder(Reminder reminder, boolean removeFromDatabase) {
Logger.altitudeLogs.debug("Removing reminder with messageId: " + reminder.messageId()); Logger.altitudeLogs.debug("Removing reminder with messageId: " + reminder.messageId());
reminders.remove(reminder); reminders.remove(reminder);
reminders.sort(Comparator.comparingLong(Reminder::remindDate));
if (reminders.size() == 0) if (reminders.size() == 0)
nextReminder = null; nextReminder = null;
else else
nextReminder = reminders.get(0); nextReminder = reminders.get(0);
if (removeFromDatabase) if (removeFromDatabase)
QueriesReminders.removeReminder(reminder.id()); QueriesReminders.removeReminder(reminder);
} }
public synchronized void removeReminder(long messageId) { public synchronized void removeReminder(long messageId) {