@@ -532,31 +532,46 @@ struct TrackErrorHandler {
532532 icon_url : String ,
533533}
534534
535- #[ serenity:: async_trait]
536- impl songbird:: EventHandler for TrackErrorHandler {
537- async fn act ( & self , ctx : & songbird:: EventContext < ' _ > ) -> Option < songbird:: Event > {
538- if let songbird:: EventContext :: Track ( [ ( state, _) ] ) = ctx
539- && let songbird:: tracks:: PlayMode :: Errored ( error) = state. playing . clone ( )
535+ impl TrackErrorHandler {
536+ async fn log_if_error ( & self , ctx : & songbird:: EventContext < ' _ > ) {
537+ let songbird:: EventContext :: Track ( [ ( state, _) ] ) = ctx else {
538+ return ;
539+ } ;
540+
541+ let songbird:: tracks:: PlayMode :: Errored ( error) = state. playing . clone ( ) else {
542+ return ;
543+ } ;
544+
545+ if let songbird:: error:: PlayError :: Create ( create_error) = & error
546+ && let songbird:: input:: AudioStreamError :: Unsupported = * * create_error
540547 {
541- let mut extra_fields_iter = self . extra_fields . iter ( ) . cloned ( ) ;
542- let author_name = Some ( self . author_name . as_str ( ) ) ;
543- let icon_url = Some ( self . icon_url . as_str ( ) ) ;
544-
545- let result = handle_unexpected (
546- & self . ctx ,
547- "TrackError" ,
548- error. into ( ) ,
549- extra_fields_iter. by_ref ( ) ,
550- author_name,
551- icon_url,
552- )
553- . await ;
548+ return ;
549+ }
554550
555- if let Err ( err_err) = result {
556- tracing:: error!( "Songbird unhandled track error: {err_err}" ) ;
557- }
551+ let mut extra_fields_iter = self . extra_fields . iter ( ) . cloned ( ) ;
552+ let author_name = Some ( self . author_name . as_str ( ) ) ;
553+ let icon_url = Some ( self . icon_url . as_str ( ) ) ;
554+
555+ let result = handle_unexpected (
556+ & self . ctx ,
557+ "TrackError" ,
558+ error. into ( ) ,
559+ extra_fields_iter. by_ref ( ) ,
560+ author_name,
561+ icon_url,
562+ )
563+ . await ;
564+
565+ if let Err ( err_err) = result {
566+ tracing:: error!( "Songbird unhandled track error: {err_err}" ) ;
558567 }
568+ }
569+ }
559570
571+ #[ serenity:: async_trait]
572+ impl songbird:: EventHandler for TrackErrorHandler {
573+ async fn act ( & self , ctx : & songbird:: EventContext < ' _ > ) -> Option < songbird:: Event > {
574+ self . log_if_error ( ctx) . await ;
560575 Some ( songbird:: Event :: Cancel )
561576 }
562577}
0 commit comments