refactor: remove unnecessary mutex

This commit is contained in:
oSumAtrIX 2022-08-21 22:12:45 +02:00
parent 3e18d304a3
commit 3f1d6af569
No known key found for this signature in database
GPG Key ID: A9B3094ACDB604B4
4 changed files with 22 additions and 27 deletions

View File

@ -18,7 +18,7 @@ pub async fn unmute(
let data = &ctx.data().read().await; let data = &ctx.data().read().await;
let configuration = &data.configuration; let configuration = &data.configuration;
if let Some(pending_unmute) = data.pending_unmutes.lock().await.get(&member.user.id.0) { if let Some(pending_unmute) = data.pending_unmutes.get(&member.user.id.0) {
trace!("Cancelling pending unmute for {}", member.user.id.0); trace!("Cancelling pending unmute for {}", member.user.id.0);
pending_unmute.abort(); pending_unmute.abort();
} }
@ -82,7 +82,7 @@ pub async fn mute(
let unmute_time = now + mute_duration; let unmute_time = now + mute_duration;
let data = ctx.data().read().await; let data = &mut *ctx.data().write().await;
let configuration = &data.configuration; let configuration = &data.configuration;
let embed_color = configuration.general.embed_color; let embed_color = configuration.general.embed_color;
let mute = &configuration.general.mute; let mute = &configuration.general.mute;
@ -149,29 +149,25 @@ pub async fn mute(
} }
}; };
let mut pending_unmute = data.pending_unmutes.lock().await; if let Some(pending_unmute) = data.pending_unmutes.get(&member.user.id.0) {
if let Some(pending_unmute) = pending_unmute.get(&member.user.id.0) {
trace!("Cancelling pending unmute for {}", member.user.id.0); trace!("Cancelling pending unmute for {}", member.user.id.0);
pending_unmute.abort(); pending_unmute.abort();
} }
let r = queue_unmute_member( data.pending_unmutes.insert(
ctx.discord(), member.user.id.0,
&data.database, queue_unmute_member(
&member, ctx.discord(),
mute_role_id, &data.database,
mute_duration.num_seconds() as u64, &member,
mute_role_id,
mute_duration.num_seconds() as u64,
),
); );
pending_unmute.insert(member.user.id.0, r);
respond_mute_command( respond_mute_command(
&ctx, &ctx,
ModerationKind::Mute( ModerationKind::Mute(reason, format!("<t:{}:F>", unmute_time.timestamp()), result),
reason,
format!("<t:{}:F>", unmute_time.timestamp()),
result,
),
&member.user, &member.user,
embed_color, embed_color,
) )

View File

@ -8,12 +8,11 @@ use crate::utils::moderation::queue_unmute_member;
pub async fn load_muted_members(ctx: &serenity::Context, _: &serenity::Ready) { pub async fn load_muted_members(ctx: &serenity::Context, _: &serenity::Ready) {
let data = get_data_lock(ctx).await; let data = get_data_lock(ctx).await;
let data = data.read().await; let data = &mut *data.write().await;
let database = &data.database;
let mute_role_id = data.configuration.general.mute.role; let mute_role_id = data.configuration.general.mute.role;
let mut pending_unmutes = data.pending_unmutes.lock().await;
let mut cursor = database let mut cursor = data
.database
.find::<Muted>( .find::<Muted>(
"muted", "muted",
Muted { Muted {
@ -37,11 +36,11 @@ pub async fn load_muted_members(ctx: &serenity::Context, _: &serenity::Ready) {
let amount_left = let amount_left =
std::cmp::max(current.expires.unwrap() as i64 - Utc::now().timestamp(), 0); std::cmp::max(current.expires.unwrap() as i64 - Utc::now().timestamp(), 0);
pending_unmutes.insert( data.pending_unmutes.insert(
member.user.id.0, member.user.id.0,
queue_unmute_member( queue_unmute_member(
ctx, ctx,
database, &data.database,
&member, &member,
mute_role_id, mute_role_id,
amount_left as u64, // i64 as u64 is handled properly here amount_left as u64, // i64 as u64 is handled properly here

View File

@ -5,7 +5,7 @@ use std::sync::Arc;
use commands::{configuration, moderation}; use commands::{configuration, moderation};
use db::database::Database; use db::database::Database;
use events::Handler; use events::Handler;
use poise::serenity_prelude::{self as serenity, Mutex, RwLock, UserId}; use poise::serenity_prelude::{self as serenity, RwLock, UserId};
use tokio::task::JoinHandle; use tokio::task::JoinHandle;
use tracing::{error, trace}; use tracing::{error, trace};
use utils::bot::load_configuration; use utils::bot::load_configuration;
@ -29,7 +29,7 @@ impl serenity::TypeMapKey for Data {
pub struct Data { pub struct Data {
configuration: Configuration, configuration: Configuration,
database: Database, database: Database,
pending_unmutes: Mutex<HashMap<u64, JoinHandle<Option<Error>>>>, pending_unmutes: HashMap<u64, JoinHandle<Option<Error>>>,
} }
#[tokio::main] #[tokio::main]
@ -71,7 +71,7 @@ async fn main() {
) )
.await .await
.unwrap(), .unwrap(),
pending_unmutes: Mutex::new(HashMap::new()), pending_unmutes: HashMap::new(),
})); }));
let handler = Arc::new(Handler::new( let handler = Arc::new(Handler::new(

View File

@ -10,7 +10,7 @@ pub enum ModerationKind {
Unmute(Option<Error>), // Error Unmute(Option<Error>), // Error
} }
pub fn queue_unmute_member( pub fn queue_unmute_member<'a>(
ctx: &serenity::Context, ctx: &serenity::Context,
database: &Database, database: &Database,
member: &Member, member: &Member,