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());
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;

View File

@ -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<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.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) + "]" +
'}';
}
}

View File

@ -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;
}

View File

@ -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) {