/** * 검색창에 붙여넣은 값이 봇이 바로 불러올 수 있는 음악 주소인지 판단한다. * (유튜브·유튜브 뮤직·스포티파이 — 곡/재생목록/앨범 모두 봇의 resolveQuery 가 처리) */ const MUSIC_HOSTS = [ "youtube.com", "www.youtube.com", "m.youtube.com", "music.youtube.com", "youtu.be", "open.spotify.com", ]; export function isMusicUrl(value: string): boolean { const v = value.trim(); if (!/^https?:\/\//i.test(v)) return false; try { return MUSIC_HOSTS.includes(new URL(v).hostname.toLowerCase()); } catch { return false; } } /** 재생목록·앨범처럼 여러 곡을 담은 주소인지(안내 문구용) */ export function isCollectionUrl(value: string): boolean { try { const u = new URL(value.trim()); return ( u.searchParams.has("list") || /\/(playlist|album|artist)\//.test(u.pathname) || u.pathname === "/playlist" ); } catch { return false; } }