|
|
|
@ -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::<SelectedBand>().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::<SelectedBand>().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(())
|
|
|
|
|
}
|
|
|
|
|