Block/allow DM reminders

Only affects slash commands but this is sort of a non-issue post September
This commit is contained in:
jude
2022-07-29 19:22:15 +01:00
parent 2781f2923e
commit 7b6e967a5d
10 changed files with 102 additions and 111 deletions

View File

@ -233,6 +233,10 @@ impl<'a> MultiReminderBuilder<'a> {
if let Some(guild_id) = self.guild_id {
if guild_id.member(&self.ctx.discord(), user).await.is_err() {
Err(ReminderError::InvalidTag)
} else if self.set_by.map_or(true, |i| i != user_data.id)
&& !user_data.allowed_dm
{
Err(ReminderError::UserBlockedDm)
} else {
Ok(user_data.dm_channel)
}

View File

@ -7,6 +7,7 @@ pub enum ReminderError {
PastTime,
ShortInterval,
InvalidTag,
UserBlockedDm,
DiscordError(String),
}
@ -30,6 +31,9 @@ impl ToString for ReminderError {
ReminderError::InvalidTag => {
"Couldn't find a location by your tag. Your tag must be either a channel or a user (not a role)".to_string()
}
ReminderError::UserBlockedDm => {
"User has DM reminders disabled".to_string()
}
ReminderError::DiscordError(s) => format!("A Discord error occurred: **{}**", s),
}
}

View File

@ -10,6 +10,7 @@ pub struct UserData {
pub user: u64,
pub dm_channel: u32,
pub timezone: String,
pub allowed_dm: bool,
}
impl UserData {
@ -46,7 +47,7 @@ SELECT timezone FROM users WHERE user = ?
match sqlx::query_as_unchecked!(
Self,
"
SELECT id, user, dm_channel, IF(timezone IS NULL, ?, timezone) AS timezone FROM users WHERE user = ?
SELECT id, user, dm_channel, IF(timezone IS NULL, ?, timezone) AS timezone, allowed_dm FROM users WHERE user = ?
",
*LOCAL_TIMEZONE,
user_id.0
@ -83,7 +84,7 @@ INSERT INTO users (name, user, dm_channel, timezone) VALUES ('', ?, (SELECT id F
Ok(sqlx::query_as_unchecked!(
Self,
"
SELECT id, user, dm_channel, timezone FROM users WHERE user = ?
SELECT id, user, dm_channel, timezone, allowed_dm FROM users WHERE user = ?
",
user_id.0
)
@ -102,9 +103,10 @@ SELECT id, user, dm_channel, timezone FROM users WHERE user = ?
pub async fn commit_changes(&self, pool: &MySqlPool) {
sqlx::query!(
"
UPDATE users SET timezone = ? WHERE id = ?
UPDATE users SET timezone = ?, allowed_dm = ? WHERE id = ?
",
self.timezone,
self.allowed_dm,
self.id
)
.execute(pool)