RMusicBot/src/player/commands/list.rs

62 lines
1.6 KiB
Rust
Raw Normal View History

2018-11-14 14:29:58 +00:00
use serenity;
use std::sync::Arc;
use super::super::prelude::*;
pub struct List {
media: Arc<MediaData>,
}
impl List {
pub fn new(media_data: Arc<MediaData>) -> List {
List { media: media_data }
}
}
impl serenity::framework::standard::Command for List {
#[allow(unreachable_code, unused_mut)]
fn execute(
&self,
2018-11-23 12:18:07 +00:00
ctx: &mut serenity::client::Context,
2018-11-14 14:29:58 +00:00
msg: &serenity::model::channel::Message,
_: serenity::framework::standard::Args,
) -> ::std::result::Result<(), serenity::framework::standard::CommandError> {
2018-11-23 12:18:07 +00:00
if !channel_contains_author(ctx, msg) {
println!(
"user {} is not in the same voice channel as the bot",
msg.author.name
);
return Ok(());
}
2018-11-14 14:29:58 +00:00
let mut output = String::new();
{
let playlist_mutex = self.media.playlist_mut();
let playlist = playlist_mutex.borrow();
output += &format!(
"{} {} queued\n",
playlist.len(),
if playlist.len() == 1 { "song" } else { "songs" }
);
let max_output = 5;
2018-11-17 18:59:10 +00:00
2018-11-14 14:29:58 +00:00
for (i, song) in playlist.iter().enumerate() {
2018-11-17 18:59:10 +00:00
if i < max_output {
output += &format!("\t{}.\t{}\n", i + 1, song.name.clone());
} else {
output += &format!("\t... and {} more", playlist.len() - max_output);
break;
2018-11-17 18:59:10 +00:00
}
2018-11-14 14:29:58 +00:00
}
}
print_error!(msg.channel_id.say(output));
Ok(())
}
}