diff --git a/src/messages/music/equalizer.rs b/src/messages/music/equalizer.rs index 175d536..9fc6bae 100644 --- a/src/messages/music/equalizer.rs +++ b/src/messages/music/equalizer.rs @@ -1,3 +1,4 @@ +use crate::commands::music::is_dj; use crate::providers::music::player::MusicPlayer; use crate::utils::error::BotResult; use bot_serenityutils::core::EXTRA_LONG_TIMEOUT; @@ -12,6 +13,7 @@ use std::sync::Arc; use tokio::sync::Mutex; use typemap_rev::TypeMapKey; +static DELETE_BUTTON: &str = "🗑️"; static NEXT_BAND_BUTTON: &str = "➡️"; static PREVIOUS_BAND_BUTTON: &str = "⬅️"; static ADD_BUTTON: &str = "➕"; @@ -57,6 +59,8 @@ pub async fn create_equalizer_message( Ok(page) }) })) + .add_control(-1, DELETE_BUTTON, |c, m, r| Box::pin(delete_menu(c, m, r))) + .add_help(DELETE_BUTTON, "Deletes this message.") .add_control(0, PREVIOUS_BAND_BUTTON, |c, m, r| { Box::pin(previous_band(c, m, r)) }) @@ -126,7 +130,17 @@ async fn create_equalizer_embed<'a>( } /// Selects the previous band -async fn next_band(ctx: &Context, menu: &mut Menu<'_>, _: Reaction) -> SerenityUtilsResult<()> { +async fn next_band( + ctx: &Context, + menu: &mut Menu<'_>, + reaction: Reaction, +) -> SerenityUtilsResult<()> { + let guild_id = reaction.guild_id.unwrap(); + let user = reaction.user(&ctx).await?; + + if !is_dj(ctx, guild_id, &user).await? { + return Ok(()); + } let selected_band = menu.data.get::().unwrap(); if selected_band.load(Ordering::SeqCst) >= 14 { selected_band.store(0, Ordering::SeqCst); @@ -139,7 +153,17 @@ async fn next_band(ctx: &Context, menu: &mut Menu<'_>, _: Reaction) -> SerenityU } /// Selects the previous band -async fn previous_band(ctx: &Context, menu: &mut Menu<'_>, _: Reaction) -> SerenityUtilsResult<()> { +async fn previous_band( + ctx: &Context, + menu: &mut Menu<'_>, + reaction: Reaction, +) -> SerenityUtilsResult<()> { + let guild_id = reaction.guild_id.unwrap(); + let user = reaction.user(&ctx).await?; + + if !is_dj(ctx, guild_id, &user).await? { + return Ok(()); + } let selected_band = menu.data.get::().unwrap(); if selected_band.load(Ordering::SeqCst) <= 0 { selected_band.store(14, Ordering::SeqCst); @@ -152,7 +176,17 @@ async fn previous_band(ctx: &Context, menu: &mut Menu<'_>, _: Reaction) -> Seren } /// Adds to the selected band -async fn add_to_band(ctx: &Context, menu: &mut Menu<'_>, _: Reaction) -> SerenityUtilsResult<()> { +async fn add_to_band( + ctx: &Context, + menu: &mut Menu<'_>, + reaction: Reaction, +) -> SerenityUtilsResult<()> { + let guild_id = reaction.guild_id.unwrap(); + let user = reaction.user(&ctx).await?; + + if !is_dj(ctx, guild_id, &user).await? { + return Ok(()); + } { let selected_band = menu .data @@ -178,8 +212,14 @@ async fn add_to_band(ctx: &Context, menu: &mut Menu<'_>, _: Reaction) -> Serenit async fn subtract_from_band( ctx: &Context, menu: &mut Menu<'_>, - _: Reaction, + reaction: Reaction, ) -> SerenityUtilsResult<()> { + let guild_id = reaction.guild_id.unwrap(); + let user = reaction.user(&ctx).await?; + + if !is_dj(ctx, guild_id, &user).await? { + return Ok(()); + } { let selected_band = menu .data @@ -200,3 +240,23 @@ async fn subtract_from_band( Ok(()) } + +/// Deletes the menu +async fn delete_menu( + ctx: &Context, + menu: &mut Menu<'_>, + reaction: Reaction, +) -> SerenityUtilsResult<()> { + let guild_id = reaction.guild_id.unwrap(); + let user = reaction.user(&ctx).await?; + + if !is_dj(ctx, guild_id, &user).await? { + return Ok(()); + } + let handle = menu.message.read().await; + ctx.http + .delete_message(handle.channel_id, handle.message_id) + .await?; + + Ok(()) +}