/** * util/stats.js * Verfolgt Bot-Statistiken persistent in ./data/stats.json */ import fs from "fs"; import path from "path"; const STATS_FILE = "./data/stats.json"; const defaults = { updatesFound: 0, // Erkannte Updates gesamt updatesPosted: 0, // Erfolgreich gesendete Update-Embeds checksRun: 0, // Durchgeführte Update-Checks apiErrors: 0, // Spiget-API Fehler dmsSent: 0, // DMs an den Owner gesendet startedAt: null, }; function load() { try { return JSON.parse(fs.readFileSync(STATS_FILE, "utf8")); } catch { return { ...defaults }; } } function save(data) { try { fs.mkdirSync(path.dirname(STATS_FILE), { recursive: true }); fs.writeFileSync(STATS_FILE, JSON.stringify(data, null, 2)); } catch (e) { console.error("[Stats] Fehler beim Speichern:", e.message); } } class Stats { constructor() { this._data = load(); if (!this._data.startedAt) { this._data.startedAt = new Date().toISOString(); save(this._data); } } /** Erhöht einen Zähler um 1 und speichert sofort */ increment(key, by = 1) { if (key in this._data) { this._data[key] += by; save(this._data); } } /** Gibt den aktuellen Wert eines Zählers zurück */ get(key) { return this._data[key] ?? 0; } /** Gibt alle Statistiken zurück */ all() { return { ...this._data }; } /** Setzt die Startzeit auf jetzt */ markStart() { this._data.startedAt = new Date().toISOString(); save(this._data); } } export default new Stats();