You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
2b-rs/src/providers/music/player_events.rs

31 lines
945 B
Rust

use serenity::async_trait;
use std::sync::Arc;
use serenity::prelude::Mutex;
use songbird::{Call, Event, EventContext, EventHandler, TrackEvent};
use super::player::MusicPlayer;
pub fn register_player_events(player: Arc<Mutex<MusicPlayer>>, handler: &mut Call) {
handler.add_global_event(Event::Track(TrackEvent::End), TrackEndHandler { player });
}
struct TrackEndHandler {
player: Arc<Mutex<MusicPlayer>>,
}
#[async_trait]
impl EventHandler for TrackEndHandler {
#[tracing::instrument(level = "debug", skip_all)]
async fn act(&self, _ctx: &EventContext<'_>) -> Option<Event> {
let mut player = self.player.lock().await;
if let Err(e) = player.play_next().await {
tracing::error!("Failed to play next song: {:?}", e);
}
if let Err(e) = player.update_now_playing().await {
tracing::error!("Failed to update now playing embed: {:?}", e);
}
None
}
}