diff --git a/src/commands/moderation.rs b/src/commands/moderation.rs index 514367c..feb07ff 100644 --- a/src/commands/moderation.rs +++ b/src/commands/moderation.rs @@ -246,23 +246,7 @@ pub async fn mute( let discord = ctx.discord(); let cache = &discord.cache; - if let Some(pending_unmute) = data.pending_unmutes.get(&id.0) { - trace!("Cancelling pending unmute for {}", id.0); - pending_unmute.abort(); - } - let unmute_time = if !mute_duration.is_zero() { - data.pending_unmutes.insert( - id.0, - queue_unmute_member( - discord.clone(), - data.database.clone(), - guild_id, - id, - mute.role, - mute_duration.num_seconds() as u64, - ), - ); Some((now + mute_duration).timestamp() as u64) } else { None @@ -303,6 +287,11 @@ pub async fn mute( ) .await?; + if let Some(pending_unmute) = data.pending_unmutes.get(&id.0) { + trace!("Cancelling pending unmute for {}", id.0); + pending_unmute.abort(); + } + if unmute_time.is_none() { data.database .update::( @@ -312,6 +301,18 @@ pub async fn mute( None, ) .await?; + } else { + data.pending_unmutes.insert( + id.0, + queue_unmute_member( + discord.clone(), + data.database.clone(), + guild_id, + id, + mute.role, + mute_duration.num_seconds() as u64, + ), + ); } Ok(()) } diff --git a/src/events/ready.rs b/src/events/ready.rs index b3a6ad8..cd8c30f 100644 --- a/src/events/ready.rs +++ b/src/events/ready.rs @@ -1,5 +1,4 @@ use chrono::Utc; -use tracing::trace; use super::*; use crate::db::model::Muted; @@ -24,34 +23,24 @@ pub async fn load_muted_members(ctx: &serenity::Context, _: &serenity::Ready) { .await .unwrap(); - let http_ref = &ctx.http; - while cursor.advance().await.unwrap() { let current: Muted = cursor.deserialize_current().unwrap(); let Some(expires) = current.expires else { continue }; let guild_id = current.guild_id.unwrap().parse::().unwrap(); - let member_id = current.user_id.unwrap().parse::().unwrap(); + let user_id = current.user_id.unwrap().parse::().unwrap(); - if let Ok(guild) = http_ref.get_guild(guild_id).await { - if let Ok(member) = guild.member(http_ref, member_id).await { - let amount_left = std::cmp::max(expires as i64 - Utc::now().timestamp(), 0); + let amount_left = std::cmp::max(expires as i64 - Utc::now().timestamp(), 0); - data.pending_unmutes.insert( - member.user.id.0, - queue_unmute_member( - ctx.clone(), - data.database.clone(), - member.guild_id, - member.user.id, - mute_role_id, - amount_left as u64, // i64 as u64 is handled properly here - ), - ); - } else { - trace!("Failed to find member {} in guild {}", member_id, guild_id); - } - } else { - trace!("Guild {} unavailable", guild_id); - } + data.pending_unmutes.insert( + user_id, + queue_unmute_member( + ctx.clone(), + data.database.clone(), + serenity::GuildId(guild_id), + serenity::UserId(user_id), + mute_role_id, + amount_left as u64, // i64 as u64 is handled properly here + ), + ); } }