Add skip command

This commit is contained in:
hodasemi 2018-09-16 10:25:57 +02:00
parent 2cd55ca5b9
commit b739039f7f
2 changed files with 67 additions and 1 deletions

View file

@ -131,7 +131,8 @@ fn main() {
), ),
) )
.cmd("stop", Stop::new(media_data.clone())) .cmd("stop", Stop::new(media_data.clone()))
.cmd("list", List::new(media_data.clone())), .cmd("list", List::new(media_data.clone()))
.cmd("skip", Skip::new(media_data.clone())),
); );
let _ = client let _ = client

View file

@ -481,3 +481,68 @@ impl serenity::framework::standard::Command for Stop {
Ok(()) Ok(())
} }
} }
pub struct Skip {
media: Arc<MediaData>,
}
impl Skip {
pub fn new(media_data: Arc<MediaData>) -> Skip {
Skip { media: media_data }
}
}
impl serenity::framework::standard::Command for Skip {
#[allow(unreachable_code, unused_mut)]
fn execute(
&self,
ctx: &mut serenity::client::Context,
msg: &serenity::model::channel::Message,
_: serenity::framework::standard::Args,
) -> ::std::result::Result<(), serenity::framework::standard::CommandError> {
let mut manager_lock = ctx
.data
.lock()
.get::<super::VoiceManager>()
.cloned()
.unwrap();
let mut manager = manager_lock.lock();
let guild_id = match guild_id(msg.channel_id) {
Some(id) => id,
None => {
println!("error getting guild id");
super::check_msg(msg.channel_id.say("error getting guild id"));
return Ok(());
}
};
if let Some(handler) = handler(guild_id, &mut manager) {
let playlist_mutex = self.media.playlist_mut();
let mut playlist = playlist_mutex.borrow_mut();
let song_mutex = self.media.song_mut();
let mut song = song_mutex.borrow_mut();
if playlist.is_empty() {
super::check_msg(
msg.channel_id
.say("playlist is empty, no next song available"),
);
return Ok(());
} else {
let first = playlist.remove(0);
*song = Some(handler.play_returning(first.source));
super::check_msg(msg.channel_id.say(format!("Playing song: {}", first.name)));
}
}
Ok(())
}
}