// Rangliste per Kommandozeile verwalten. // Aufruf: node server/admin.js [argument] // (oder ueber npm: npm run lb -- [argument]) // // Befehle: // list zeigt beide Ranglisten (Allzeit + Heute) // delete "" loescht ALLE Eintraege eines Spielers (Name exakt, Gross/Klein egal) // clear-today loescht nur die heutigen Eintraege // clear-all loescht die komplette Rangliste import { readLeaderboard, buildBoards, deletePlayer, clearAll, clearToday } from './leaderboardStore.js'; import { getMode, setMode } from './modeStore.js'; const [, , cmd, ...rest] = process.argv; const arg = rest.join(' ').trim(); function printBoards() { const { allTime, today } = buildBoards(readLeaderboard()); const fmt = (list) => list.length ? list.map((e, i) => ` ${String(i + 1).padStart(2)}. ${e.name} β€” ${e.score}`).join('\n') : ' (leer)'; console.log('\nπŸ† Allzeit (Top 5)\n' + fmt(allTime)); console.log('\nπŸ“… Heute (Top 10)\n' + fmt(today) + '\n'); } switch (cmd) { case 'list': printBoards(); break; case 'delete': { if (!arg) { console.error('Bitte einen Namen angeben: node server/admin.js delete "Name"'); process.exit(1); } const n = deletePlayer(arg); console.log(n > 0 ? `βœ… ${n} Eintrag/Eintraege von "${arg}" geloescht.` : `Keine Eintraege fΓΌr "${arg}" gefunden.`); break; } case 'clear-today': { const n = clearToday(); console.log(`βœ… ${n} heutige Eintrag/Eintraege geloescht.`); break; } case 'clear-all': { const n = clearAll(); console.log(`βœ… Rangliste geleert (${n} Eintraege entfernt).`); break; } case 'mode': { const sub = (rest[0] || '').toLowerCase(); if (sub === 'public') { setMode('public'); console.log('βœ… Modus: PUBLIC β€” das Spiel ist unter "/" erreichbar.'); } else if (sub === 'private') { const slug = rest[1] || getMode().path; const m = setMode('private', slug); console.log(`βœ… Modus: PRIVATE β€” "/" zeigt "nicht erlaubt".`); console.log(` Spiel jetzt nur unter: /${m.path}`); } else { const m = getMode(); console.log(`Aktueller Modus: ${m.mode.toUpperCase()}` + (m.mode === 'private' ? ` (Spiel unter /${m.path})` : '')); console.log('Umschalten: node server/admin.js mode public | node server/admin.js mode private [pfad]'); } break; } default: console.log(`fΓΌsse.sexy β€” Verwaltung: Rangliste: node server/admin.js list beide Ranglisten anzeigen node server/admin.js delete "" einen bestimmten Spieler loeschen node server/admin.js clear-today nur die heutige Rangliste leeren node server/admin.js clear-all komplette Rangliste leeren Betriebsmodus (Spiel oeffentlich / privat): node server/admin.js mode aktuellen Modus anzeigen node server/admin.js mode public Spiel oeffentlich unter "/" node server/admin.js mode private [pfad] "/" gesperrt, Spiel unter "/" (Default: play) `); if (cmd) process.exit(1); }