Change reminder sending behaviour to keep reminders but flag them as sent

This commit is contained in:
jude
2023-07-31 18:39:27 +01:00
parent db1a53a797
commit 902b7e1b4a
7 changed files with 67 additions and 22 deletions

View File

@ -302,6 +302,7 @@ INNER JOIN
ON
reminders.channel_id = channels.id
WHERE
reminders.`status` = 'pending' AND
reminders.`id` IN (
SELECT
MIN(id)
@ -358,7 +359,7 @@ WHERE
&& self.interval_days == Some(0)
&& self.interval_months == Some(0)
{
self.force_delete(pool).await;
self.set_sent(pool).await;
}
let now = Utc::now();
@ -408,9 +409,9 @@ WHERE
None::<&'static str>,
)
.await;
self.force_delete(pool).await;
self.set_failed(pool, "Failed to update 4 times and so is being deleted").await;
} else if self.expires.map_or(false, |expires| updated_reminder_time > expires) {
self.force_delete(pool).await;
self.set_sent(pool).await;
} else {
sqlx::query!(
"UPDATE reminders SET `utc_time` = ? WHERE `id` = ?",
@ -422,7 +423,7 @@ WHERE
.expect(&format!("Could not update time on Reminder {}", self.id));
}
} else {
self.force_delete(pool).await;
self.set_sent(pool).await;
}
}
@ -468,13 +469,28 @@ WHERE
}
}
async fn force_delete(&self, pool: impl Executor<'_, Database = Database> + Copy) {
sqlx::query!("DELETE FROM reminders WHERE `id` = ?", self.id)
async fn set_sent(&self, pool: impl Executor<'_, Database = Database> + Copy) {
sqlx::query!("UPDATE reminders SET `status` = 'sent' WHERE `id` = ?", self.id)
.execute(pool)
.await
.expect(&format!("Could not delete Reminder {}", self.id));
}
async fn set_failed(
&self,
pool: impl Executor<'_, Database = Database> + Copy,
message: &'static str,
) {
sqlx::query!(
"UPDATE reminders SET `status` = 'failed', `status_message` = ? WHERE `id` = ?",
message,
self.id
)
.execute(pool)
.await
.expect(&format!("Could not delete Reminder {}", self.id));
}
async fn pin_message<M: Into<u64>>(&self, message_id: M, http: impl AsRef<Http>) {
let _ = http.as_ref().pin_message(self.channel_id, message_id.into(), None).await;
}
@ -649,7 +665,11 @@ WHERE
None::<&'static str>,
)
.await;
self.force_delete(pool).await;
self.set_failed(
pool,
"Could not be sent as channel does not exist",
)
.await;
}
10004 => {
self.log_error(
@ -658,7 +678,8 @@ WHERE
None::<&'static str>,
)
.await;
self.force_delete(pool).await;
self.set_failed(pool, "Could not be sent as guild does not exist")
.await;
}
50001 => {
self.log_error(
@ -667,7 +688,11 @@ WHERE
None::<&'static str>,
)
.await;
self.force_delete(pool).await;
self.set_failed(
pool,
"Could not be sent as permissions are invalid",
)
.await;
}
50007 => {
self.log_error(
@ -676,7 +701,8 @@ WHERE
None::<&'static str>,
)
.await;
self.force_delete(pool).await;
self.set_failed(pool, "Could not be sent as user has DMs disabled")
.await;
}
_ => {
self.log_error(