Skip to content

Commit 089a24c

Browse files
authored
Change order of how closest track resolves
1 parent be1e8bf commit 089a24c

File tree

1 file changed

+9
-4
lines changed

1 file changed

+9
-4
lines changed

src/structures/Utils.ts

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)