Rustendo/src/music/music_events.rs
moonleay ba0f1fb959
feat: added skip command, reworked embed messages
fix: fixed issue with queue not working properly
2024-03-10 19:36:02 +01:00

52 lines
1.9 KiB
Rust

use crate::music::{music_manager, music_queue};
use serenity::all::{ChannelId, GuildId, Http};
use serenity::async_trait;
use songbird::input::Compose;
use songbird::{Event, EventContext, EventHandler};
use std::sync::Arc;
pub struct TrackEndNotifier {
pub guild_id: GuildId,
pub channel_id: ChannelId,
pub http: Arc<Http>,
pub cmdctx: Arc<serenity::client::Context>,
}
#[async_trait]
impl EventHandler for TrackEndNotifier {
async fn act(&self, ctx: &EventContext<'_>) -> Option<Event> {
// TODO: Does this need to be unsafe?
if let EventContext::Track(..) = ctx {
println!("The track ended!");
let music_queue = crate::get_queue(&self.guild_id).await;
let q = &music_queue.queue;
if q.is_empty() {
// No more songs in queue, exit the vc
let stopped = match music_manager::leave(&self.cmdctx, &self.guild_id).await {
Ok(stopped) => stopped,
Err(e) => {
println!("Cannot stop: {:?}", e);
return None;
}
};
if stopped {
music_queue::delete_queue(&self.guild_id).await;
println!("Stopped playing successfully.");
} else {
println!("Failed to stop playing.");
}
return None;
}
let head = music_queue::get_head(&self.guild_id).await;
if head.is_none() {
println!("Cannot get head of queue");
return None;
}
let mut head = head.unwrap();
println!("Now playing: {}", head.aux_metadata().await.unwrap().title.unwrap());
music_manager::play_song(&self.cmdctx, &self.guild_id, &head).await;
}
None
}
}