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.
This commit is contained in:
saopig1 committed 2026-06-16 14:48:01 +08:00
1 parent 9bfe831022
commit 6e10764d28
3 files changed
+16 -1

No files matched your search

+6
View File
@@ -747,6 +747,12 @@ export class BotInstance extends EventEmitter {
}
async startFm(provider: MusicProvider = this.neteaseProvider): Promise<string> {
// 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}`;
}
+3
View File
@@ -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 {
+7 -1
View File
@@ -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 });
}