@@ -603,12 +603,17 @@ async function getClosestTrack(data: UnresolvedTrack, player: Player): Promise<T
603603 query, source : sourceName !== "twitch" && sourceName !== "flowery-tts" ? sourceName : player . LavalinkManager . options ?. playerOptions ?. defaultSearchPlatform ,
604604 } , data . requester ) . then ( ( res : SearchResult ) => {
605605 let trackToUse = null ;
606- // try to find via isrc (most reliable)
607- if ( data . info . isrc && ! trackToUse ) trackToUse = res . tracks . find ( track => track . info ?. isrc === data . info ?. isrc ) ;
608606 // try to find via author name OR title
609- if ( data . info . author && ! trackToUse ) trackToUse = res . tracks . find ( track => [ data . info ?. author || "" , `${ data . info ?. author } - Topic` ] . some ( name => new RegExp ( `^${ escapeRegExp ( name ) } $` , "i" ) . test ( track . info ?. author ) ) || new RegExp ( `^${ escapeRegExp ( data . info ?. title ) } $` , "i" ) . test ( track . info ?. title ) ) ;
607+ if ( ( data . info ?. title || data . info ?. author ) && ! trackToUse ) trackToUse = res . tracks . find ( track =>
608+ // find via author name (i ... case insensitve)
609+ [ data . info ?. author || "" , `${ data . info ?. author } - Topic` ] . some ( name => new RegExp ( `^${ escapeRegExp ( name ) } $` , "i" ) . test ( track . info ?. author ) ) ||
610+ // find via title (i ... case insensitve)
611+ new RegExp ( `^${ escapeRegExp ( data . info ?. title ) } $` , "i" ) . test ( track . info ?. title )
612+ ) ;
613+ // try to find via isrc (isrc's are not fully unique, finding via author / track title is more reliable, but this is a good alternative approach if everything else fails, and it's more accurate than findig via duration)
614+ if ( data . info ?. isrc && ! trackToUse ) trackToUse = res . tracks . find ( track => track . info ?. isrc === data . info ?. isrc ) ;
610615 // try to find via duration
611- if ( data . info . duration && ! trackToUse ) trackToUse = res . tracks . find ( track => ( track . info ?. duration >= ( data . info ?. duration - 1500 ) ) && ( track ?. info . duration <= ( data . info ?. duration + 1500 ) ) ) ;
616+ if ( data . info ? .duration && ! trackToUse ) trackToUse = res . tracks . find ( track => ( track . info ?. duration >= ( data . info ?. duration - 1500 ) ) && ( track ?. info . duration <= ( data . info ?. duration + 1500 ) ) ) ;
612617 // apply unresolved data and return the track
613618 return applyUnresolvedData ( trackToUse || res . tracks [ 0 ] , data , player . LavalinkManager . utils ) ;
614619 } ) ;
0 commit comments