show added message separately
this avoids sending a message for each component of the album
This commit is contained in:
@@ -94,7 +94,15 @@ async fn song(ctx: &Context, msg: &Message, args: Args) -> CommandResult {
|
|||||||
.ok_or_else(|| anyhow!("No song matching search found"))?;
|
.ok_or_else(|| anyhow!("No song matching search found"))?;
|
||||||
|
|
||||||
log::info!("Found song {song:?}");
|
log::info!("Found song {song:?}");
|
||||||
queue_song(ctx, msg, song, music_client).await?;
|
queue_song(ctx, msg, &song, music_client).await?;
|
||||||
|
|
||||||
|
let message = format!(
|
||||||
|
"Added **{} - {}** to the queue",
|
||||||
|
song.title,
|
||||||
|
song.artist.as_deref().unwrap_or_default(),
|
||||||
|
);
|
||||||
|
msg.reply(&ctx.http, &MessageBuilder::new().push(&message).build())
|
||||||
|
.await?;
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
@@ -121,10 +129,20 @@ async fn album(ctx: &Context, msg: &Message, args: Args) -> CommandResult {
|
|||||||
.first()
|
.first()
|
||||||
.ok_or_else(|| anyhow!("No albums matching search found"))?;
|
.ok_or_else(|| anyhow!("No albums matching search found"))?;
|
||||||
|
|
||||||
for song in album.songs(music_client).await? {
|
let songs = album.songs(music_client).await?;
|
||||||
queue_song(ctx, msg, song, music_client).await?;
|
for song in songs.iter() {
|
||||||
|
queue_song(ctx, msg, &song, music_client).await?;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let message = format!(
|
||||||
|
"Added album **{} - {}** ({} songs) to the queue",
|
||||||
|
album.name,
|
||||||
|
album.artist.as_deref().unwrap_or_default(),
|
||||||
|
songs.len(),
|
||||||
|
);
|
||||||
|
msg.reply(&ctx.http, &MessageBuilder::new().push(&message).build())
|
||||||
|
.await?;
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -144,22 +162,35 @@ async fn random(ctx: &Context, msg: &Message) -> CommandResult {
|
|||||||
.first()
|
.first()
|
||||||
.map(ToOwned::to_owned)
|
.map(ToOwned::to_owned)
|
||||||
.ok_or_else(|| anyhow!("No song matching search found"))?;
|
.ok_or_else(|| anyhow!("No song matching search found"))?;
|
||||||
queue_song(ctx, msg, song, music_client).await?;
|
queue_song(ctx, msg, &song, music_client).await?;
|
||||||
|
|
||||||
|
let message = format!(
|
||||||
|
"Added **{} - {}** to the queue",
|
||||||
|
song.title,
|
||||||
|
song.artist.as_deref().unwrap_or_default(),
|
||||||
|
);
|
||||||
|
msg.reply(&ctx.http, &MessageBuilder::new().push(&message).build())
|
||||||
|
.await?;
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
#[command]
|
#[command]
|
||||||
#[only_in(guilds)]
|
#[only_in(guilds)]
|
||||||
/// Skip current song
|
/// Skip song(s)
|
||||||
async fn skip(ctx: &Context, msg: &Message) -> CommandResult {
|
async fn skip(ctx: &Context, msg: &Message, args: Args) -> CommandResult {
|
||||||
let call = get_call(ctx, msg).await?;
|
let call = get_call(ctx, msg).await?;
|
||||||
let handler = call.lock().await;
|
let handler = call.lock().await;
|
||||||
|
let n = args.rest().parse().unwrap_or(1);
|
||||||
|
|
||||||
let queue = handler.queue();
|
let queue = handler.queue();
|
||||||
|
for _ in 0..(n - 1) {
|
||||||
|
queue.dequeue(1).ok_or_else(|| anyhow!("Song not found"))?;
|
||||||
|
}
|
||||||
queue.skip()?;
|
queue.skip()?;
|
||||||
|
|
||||||
msg.reply(&ctx.http, "Song skipped").await?;
|
msg.reply(&ctx.http, &format!("{n} song(s) skipped"))
|
||||||
|
.await?;
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
@@ -251,12 +282,22 @@ async fn queue(ctx: &Context, msg: &Message) -> CommandResult {
|
|||||||
"No songs queued".into()
|
"No songs queued".into()
|
||||||
} else {
|
} else {
|
||||||
let mut text = String::new();
|
let mut text = String::new();
|
||||||
text.push_str("Next songs in queue:\n");
|
let mut queue = current_queue.iter().enumerate();
|
||||||
for (i, track) in current_queue.iter().enumerate() {
|
|
||||||
|
let (_, track) = queue.next().unwrap();
|
||||||
|
let song = get_song(track).await?;
|
||||||
|
text.push_str(&format!(
|
||||||
|
"**Currently playing**: {} - {}\n\n",
|
||||||
|
song.title,
|
||||||
|
song.artist.as_deref().unwrap_or_default()
|
||||||
|
));
|
||||||
|
|
||||||
|
text.push_str("**Next songs in queue**:\n");
|
||||||
|
for (i, track) in queue {
|
||||||
let song = get_song(track).await?;
|
let song = get_song(track).await?;
|
||||||
let song_text = format!(
|
let song_text = format!(
|
||||||
"**{}.** {} - {}",
|
"**{}.** {} - {}",
|
||||||
i+1,
|
i,
|
||||||
song.title,
|
song.title,
|
||||||
song.artist.as_deref().unwrap_or_default()
|
song.artist.as_deref().unwrap_or_default()
|
||||||
);
|
);
|
||||||
@@ -277,11 +318,11 @@ async fn remove(ctx: &Context, msg: &Message, mut args: Args) -> CommandResult {
|
|||||||
let call = get_call(ctx, msg).await?;
|
let call = get_call(ctx, msg).await?;
|
||||||
let handler = call.lock().await;
|
let handler = call.lock().await;
|
||||||
|
|
||||||
let index = args.single()?;
|
let index: usize = args.single()?;
|
||||||
|
|
||||||
let queue = handler.queue();
|
let queue = handler.queue();
|
||||||
let track = queue
|
let track = queue
|
||||||
.dequeue(index)
|
.dequeue(index - 1)
|
||||||
.ok_or_else(|| anyhow!("Song not found"))?;
|
.ok_or_else(|| anyhow!("Song not found"))?;
|
||||||
let song = get_song(&track).await?;
|
let song = get_song(&track).await?;
|
||||||
let text = format!("Removed track: {}", song.title);
|
let text = format!("Removed track: {}", song.title);
|
||||||
@@ -298,34 +339,19 @@ impl TypeMapKey for SongHandler {
|
|||||||
type Value = Song;
|
type Value = Song;
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn queue_song(ctx: &Context, msg: &Message, song: Song, client: &sunk::Client) -> Result<()> {
|
async fn queue_song(
|
||||||
|
ctx: &Context,
|
||||||
|
msg: &Message,
|
||||||
|
song: &Song,
|
||||||
|
client: &sunk::Client,
|
||||||
|
) -> Result<()> {
|
||||||
let call = get_call(ctx, msg).await?;
|
let call = get_call(ctx, msg).await?;
|
||||||
let mut handler = call.lock().await;
|
let mut handler = call.lock().await;
|
||||||
|
|
||||||
let song_info = format!(
|
let track = load_song(song, client).await?;
|
||||||
"{} - {} ",
|
|
||||||
song.artist.as_deref().unwrap_or_default(),
|
|
||||||
song.title,
|
|
||||||
);
|
|
||||||
|
|
||||||
let track = load_song(&song, client).await?;
|
|
||||||
let track_handle = handler.enqueue(track).await;
|
let track_handle = handler.enqueue(track).await;
|
||||||
{
|
let mut type_map = track_handle.typemap().write().await;
|
||||||
let mut type_map = track_handle.typemap().write().await;
|
type_map.insert::<SongHandler>(song.clone());
|
||||||
type_map.insert::<SongHandler>(song)
|
|
||||||
}
|
|
||||||
|
|
||||||
msg.reply(
|
|
||||||
&ctx.http,
|
|
||||||
&MessageBuilder::new()
|
|
||||||
.push("Added ")
|
|
||||||
.push_bold_safe(song_info)
|
|
||||||
.push("to the queue")
|
|
||||||
// .push("\n")
|
|
||||||
// .push(song.cover_art_url(client, 256)?)
|
|
||||||
.build(),
|
|
||||||
)
|
|
||||||
.await?;
|
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user