From 6e10764d287e446b01ca53d8b1a6920892ea2dec Mon Sep 17 00:00:00 2001 From: saopig1 <4x7sw862st@gmail.com> Date: Tue, 16 Jun 2026 14:48:01 +0800 Subject: [PATCH] fix(qq-fm): guard FM start when offline + reset radar page on re-login [#88 review] - startFm() now refuses with 'Bot is not connected to TeamSpeak' before mutating the queue, so POST /api/player/:id/fm can no longer wipe the queue and flip the bot into FM mode while disconnected (the !fm chat command already had this guard). - The /fm route's success detection also treats 'not connected' as a failure so the toast type is correct. - QQMusicProvider.setCookie() resets radarPage to 1 so a re-login with a different account no longer inherits the previous account's radar pagination cursor. --- src/bot/instance.ts | 6 ++++++ src/music/qq.ts | 3 +++ src/web/api/player.ts | 8 +++++++- 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/bot/instance.ts b/src/bot/instance.ts index d2cc77e..0472fc1 100755 --- a/src/bot/instance.ts +++ b/src/bot/instance.ts @@ -747,6 +747,12 @@ export class BotInstance extends EventEmitter { } async startFm(provider: MusicProvider = this.neteaseProvider): Promise { + // Match the !fm chat-command guard: refuse before mutating the queue when + // offline, so the web /fm route can't wipe the queue + flip into FM mode + // while nothing can actually play. + if (!this.connected) { + return "Bot is not connected to TeamSpeak"; + } if (!provider.getPersonalFm) { return `Personal FM is not available for ${provider.platform}`; } diff --git a/src/music/qq.ts b/src/music/qq.ts index 29ff01e..312ca8b 100644 --- a/src/music/qq.ts +++ b/src/music/qq.ts @@ -462,6 +462,9 @@ export class QQMusicProvider implements MusicProvider { setCookie(cookie: string): void { this.cookie = cookie; + // Reset radar pagination so a re-login (different account) starts from the + // first page rather than inheriting the previous account's cursor. + this.radarPage = 1; } getCookie(): string { diff --git a/src/web/api/player.ts b/src/web/api/player.ts index e4fa8e8..b1711fe 100644 --- a/src/web/api/player.ts +++ b/src/web/api/player.ts @@ -97,7 +97,13 @@ export function createPlayerRouter( : "netease" ); const message = await bot.startFm(provider); - res.json({ ok: !message.startsWith("No FM songs") && !message.includes("not available"), message }); + res.json({ + ok: + !message.startsWith("No FM songs") && + !message.includes("not available") && + !message.includes("not connected"), + message, + }); } catch (err) { res.status(500).json({ error: (err as Error).message }); }