Persistenz: state.json ins Sounds-Volume verschoben (Migration vom alten Pfad). totalPlays bleibt über Deployments erhalten

This commit is contained in:
vibe-bot 2025-08-09 00:31:46 +02:00
parent f6a5be444e
commit bf9d6d60e3

View file

@ -44,25 +44,40 @@ if (!DISCORD_TOKEN) {
fs.mkdirSync(SOUNDS_DIR, { recursive: true });
// Persistente Lautstärke pro Guild speichern
// Persistente Lautstärke und Play-Zähler speichern
type PersistedState = { volumes: Record<string, number>; plays: Record<string, number>; totalPlays: number };
const STATE_FILE = path.join(path.resolve(SOUNDS_DIR, '..'), 'state.json');
// Neuer, persistenter Speicherort direkt im Sounds-Volume
const STATE_FILE_NEW = path.join(SOUNDS_DIR, 'state.json');
// Alter Speicherort (eine Ebene über SOUNDS_DIR). Wird für Migration gelesen, falls vorhanden.
const STATE_FILE_OLD = path.join(path.resolve(SOUNDS_DIR, '..'), 'state.json');
function readPersistedState(): PersistedState {
try {
if (fs.existsSync(STATE_FILE)) {
const raw = fs.readFileSync(STATE_FILE, 'utf8');
// 1) Bevorzugt neuen Speicherort lesen
if (fs.existsSync(STATE_FILE_NEW)) {
const raw = fs.readFileSync(STATE_FILE_NEW, 'utf8');
const parsed = JSON.parse(raw);
return { volumes: parsed.volumes ?? {}, plays: parsed.plays ?? {}, totalPlays: parsed.totalPlays ?? 0 } as PersistedState;
}
// 2) Fallback: alten Speicherort lesen und sofort nach NEW migrieren
if (fs.existsSync(STATE_FILE_OLD)) {
const raw = fs.readFileSync(STATE_FILE_OLD, 'utf8');
const parsed = JSON.parse(raw);
const migrated: PersistedState = { volumes: parsed.volumes ?? {}, plays: parsed.plays ?? {}, totalPlays: parsed.totalPlays ?? 0 };
try {
fs.mkdirSync(path.dirname(STATE_FILE_NEW), { recursive: true });
fs.writeFileSync(STATE_FILE_NEW, JSON.stringify(migrated, null, 2), 'utf8');
} catch {}
return migrated;
}
} catch {}
return { volumes: {}, plays: {}, totalPlays: 0 };
}
function writePersistedState(state: PersistedState): void {
try {
fs.mkdirSync(path.dirname(STATE_FILE), { recursive: true });
fs.writeFileSync(STATE_FILE, JSON.stringify(state, null, 2), 'utf8');
fs.mkdirSync(path.dirname(STATE_FILE_NEW), { recursive: true });
fs.writeFileSync(STATE_FILE_NEW, JSON.stringify(state, null, 2), 'utf8');
} catch (e) {
console.warn('Persisted state konnte nicht geschrieben werden:', e);
}