feat: add JSON config module with load/save/defaults

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
saopig1andClaude Opus 4.6 committed 2026-03-30 00:16:59 +08:00
1 parent 101d593c0e
commit f152450931
3 files changed
+104 -1

No files matched your search

+48
View File
@@ -0,0 +1,48 @@
import { readFileSync, writeFileSync, mkdirSync } from "node:fs";
import { dirname } from "node:path";
export interface BotConfig {
webPort: number;
locale: string;
theme: string;
commandPrefix: string;
commandAliases: Record<string, string>;
neteaseApiPort: number;
qqMusicApiPort: number;
adminPassword: string;
adminGroups: number[];
autoReturnDelay: number;
autoPauseOnEmpty: boolean;
}
export function getDefaultConfig(): BotConfig {
return {
webPort: 3000,
locale: "zh",
theme: "dark",
commandPrefix: "!",
commandAliases: { p: "play", s: "skip", n: "next" },
neteaseApiPort: 3001,
qqMusicApiPort: 3002,
adminPassword: "",
adminGroups: [],
autoReturnDelay: 300,
autoPauseOnEmpty: true,
};
}
export function loadConfig(path: string): BotConfig {
const defaults = getDefaultConfig();
try {
const raw = readFileSync(path, "utf-8");
const partial = JSON.parse(raw) as Partial<BotConfig>;
return { ...defaults, ...partial };
} catch {
return defaults;
}
}
export function saveConfig(path: string, config: BotConfig): void {
mkdirSync(dirname(path), { recursive: true });
writeFileSync(path, JSON.stringify(config, null, 2), "utf-8");
}