diff --git a/src/music/api-server.ts b/src/music/api-server.ts index 8a1f5cc..f517ea5 100644 --- a/src/music/api-server.ts +++ b/src/music/api-server.ts @@ -40,14 +40,22 @@ export function createApiServerManager( // Start NetEase Cloud Music API try { - const ncmModule = await import("NeteaseCloudMusicApi") as any; - const serverObj = ncmModule.server ?? ncmModule.default?.server; - const app = await serverObj.serveNcmApi({ port: options.neteasePort }); - neteaseServer = app; - logger.info( - { port: options.neteasePort }, - "NetEase Cloud Music API started" - ); + const portFree = await isPortFree(options.neteasePort); + if (!portFree) { + logger.info( + { port: options.neteasePort }, + "NetEase API port already in use — reusing existing instance" + ); + } else { + const ncmModule = await import("NeteaseCloudMusicApi") as any; + const serverObj = ncmModule.server ?? ncmModule.default?.server; + const app = await serverObj.serveNcmApi({ port: options.neteasePort }); + neteaseServer = app; + logger.info( + { port: options.neteasePort }, + "NetEase Cloud Music API started" + ); + } } catch (err) { logger.error({ err }, "Failed to start NetEase Cloud Music API"); } diff --git a/web/src/views/Settings.vue b/web/src/views/Settings.vue index f6759a1..475bffd 100644 --- a/web/src/views/Settings.vue +++ b/web/src/views/Settings.vue @@ -1001,6 +1001,12 @@ onUnmounted(() => { align-items: center; } +.create-bot { + margin-top: 20px; + padding-top: 16px; + border-top: 1px solid var(--border-color); +} + .form-group { margin-bottom: 12px; label {