import { NextResponse } from "next/server"; import { Logger } from "@/lib/Logger"; import { botRpc, errorResponse, readJsonBody, requireSession, requireString } from "@/lib/api"; interface PlayBody { serverId?: unknown; track?: unknown; } export async function POST(request: Request) { try { const sessionResult = await requireSession(); if (!sessionResult.ok) return sessionResult.response; const userId = sessionResult.session.user.id; const bodyResult = await readJsonBody(request); if (!bodyResult.ok) return bodyResult.response; const serverIdResult = requireString(bodyResult.data.serverId, "serverId"); if (!serverIdResult.ok) return serverIdResult.response; const track = bodyResult.data.track; if (!track || typeof track !== "object") return errorResponse("track 정보가 필요합니다."); const { status, body } = await botRpc({ channel: "player:play", payload: { action: "player_play", serverId: serverIdResult.value, userId, track, }, // 음성채널 접속 + 곡(재생목록) 해석까지 기다려야 해서 기본 3초로는 부족하다. timeoutMs: 15000, }); return NextResponse.json(body, { status }); } catch (error) { Logger.error(`player/play API error: ${error instanceof Error ? error.message : String(error)}`); return errorResponse("서버 오류가 발생했습니다.", 500); } }