From 7994e97631f7325269bf58a9a4b4dbc93082be3d Mon Sep 17 00:00:00 2001 From: tkrmagid Date: Thu, 17 Sep 2026 14:40:42 +0900 Subject: [PATCH] =?UTF-8?q?experiment:=204=EB=B2=88=20=EC=B6=94=EA=B0=80?= =?UTF-8?q?=20=EA=B2=80=EC=A6=9D=20=E2=80=94=20Lavalink=20=EC=A7=81?= =?UTF-8?q?=EA=B2=B0=20=EC=A0=84=EB=A9=B4=20=EB=B6=88=EA=B0=80=20=ED=99=95?= =?UTF-8?q?=EC=9D=B8=20+=20=EB=A6=AC=EC=A1=B8=EB=B2=84=20=EA=B3=A0?= =?UTF-8?q?=EC=86=8D=ED=99=94=20=ED=9B=84=EB=B3=B4=20=EB=B0=9C=EA=B2=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit POTOKEN_INJECT 플래그 추가(기본 true). 격리 테스트 Lavalink(.9:2334)를 별도로 띄워 클라이언트/OAuth/poToken 조합을 바꿔가며 직결 재생을 검증했다. 프로덕션 무영향. [직결 재생 — 전부 실패] - ANDROID_VR 우선 + OAuth + poToken : 실패 - ANDROID_VR 단독 + OAuth off : 실패 - ANDROID_VR 단독 + OAuth/poToken off: 실패 Lavalink 측 실패 사유(클라이언트별): ANDROID_VR "This video requires login" / TVHTML5 "page needs to be reloaded" WEB "No supported audio streams available"(응답이 sabr=1 + serverAbrStreamingUrl 뿐) WEB_EMBEDDED "player configuration error" / MWEB 403 → youtube-source 1.18.2(최신)는 SABR 미지원. 어떤 조합으로도 직결 불가 → ytresolver 필수. [리졸버 고속화 — 유효한 개선 발견] yt-dlp 클라이언트별 실측(동일 영상 5개, --get-url): 현재 default,web_safari,tv : 5/5 성공, 평균 2.95s, itag 251 default 단독 : 5/5 성공, 평균 2.00s, itag 251 ← 약 1.0s 단축 android_vr 단독 : 1.6s로 가장 빠르나 오디오 전용 포맷 없음(항상 itag 18) → Lavalink loadtracks 실패, 사용 불가 검증: default 단독 URL을 Lavalink가 loadType=track 로 정상 로드, 실제 재생까지 성공(자가 테스트 position 증가 확인). --- bot/src/classes/LavalinkManager.ts | 5 +++++ docker-compose.exp.yml | 8 ++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/bot/src/classes/LavalinkManager.ts b/bot/src/classes/LavalinkManager.ts index 22d5b35..af71070 100644 --- a/bot/src/classes/LavalinkManager.ts +++ b/bot/src/classes/LavalinkManager.ts @@ -43,6 +43,11 @@ export class LavalinkManager { * BotGuard 생성의 메모리 스파이크를 봇 본체와 격리하기 위해 독립 ESM 스크립트를 자식 프로세스로 실행한다. */ private refreshPoToken(): void { + // [실험] poToken 주입을 끄고 비교하기 위한 플래그. 미설정 시 기존 동작(주입). + if (process.env.POTOKEN_INJECT?.trim()?.toLocaleLowerCase() === "false") { + Logger.warn(`[LavalinkManager] [실험] POTOKEN_INJECT=false — poToken 주입 생략`); + return; + } const script = join(__dirname, "..", "..", "scripts", "potoken-refresh.mjs"); const child = spawn(process.execPath, [script], { env: { diff --git a/docker-compose.exp.yml b/docker-compose.exp.yml index 842a5ef..947b8cd 100644 --- a/docker-compose.exp.yml +++ b/docker-compose.exp.yml @@ -3,14 +3,18 @@ services: build: ./bot container_name: music-exp restart: "no" + network_mode: host env_file: - ./bot/.env environment: - REDIS=false + - LAVALINK_HOST=192.168.10.6 + - LAVALINK_PORT=2333 - SELFTEST_GUILD_ID=1352269198297923648 - SELFTEST_VOICE_CHANNEL_ID=1352269198914621465 - SELFTEST_TEXT_CHANNEL_ID=1421342055774289980 - - SELFTEST_QUERY=아이유 좋은 날 - - YTRESOLVER_ENABLED=false + - SELFTEST_QUERY=IVE Attitude + - YTRESOLVER_ENABLED=true + - YTRESOLVER_URL=http://192.168.10.5:8780 volumes: - ./testdb:/db