diff --git a/bot/src/classes/LavalinkManager.ts b/bot/src/classes/LavalinkManager.ts index fc30d59..c7c32e1 100644 --- a/bot/src/classes/LavalinkManager.ts +++ b/bot/src/classes/LavalinkManager.ts @@ -95,8 +95,13 @@ export class LavalinkManager { player = player ?? this.getPlayer(guildId); if (!player) return; const { isUrl, text, flags } = parseLink(query.trim()); - let searchText = isUrl ? text : (await Spotify.getSearchUrl(text)) ?? (await YoutubeMusic.getSearchUrl(text)) ?? `ytsearch:${text}`; - if (flags.has('y')) searchText = (await YoutubeMusic.getSearchUrl(text)) ?? `ytsearch:${text}`; + // 기본: 유튜브뮤직(YoutubeMusic.getSearchUrl) 우선 → 결과가 없거나 애매(커버/방송/무관)하면 + // getSearchUrl이 null을 주고, 공식 오디오를 잘 잡는 `ytsearch:... Topic`로 폴백한다. + // ('-p' 플래그를 붙이면 스포티파이 우선 검색) + let searchText: string; + if (isUrl) searchText = text; + else if (flags.has('p')) searchText = (await Spotify.getSearchUrl(text)) ?? (await YoutubeMusic.getSearchUrl(text)) ?? `ytsearch:${text}`; + else searchText = (await YoutubeMusic.getSearchUrl(text)) ?? `ytsearch:${text}`; if (searchText.startsWith("ytsearch") && !flags.has('o')) searchText += " Topic"; const result = await node.rest.resolve(searchText); if (!result || result.loadType === LoadType.EMPTY || result.loadType === LoadType.ERROR) {