'use strict'; class BotMemory { constructor(store) { this._store = store; this.known = new Map(); this._greetCD = new Map(); } async load() { try { const d = await this._store.read('memory.json'); if (d && d.players) { for (const [k, v] of Object.entries(d.players)) this.known.set(k, v); } } catch (_) {} } async save() { try { const obj = { players: {} }; for (const [k, v] of this.known) obj.players[k] = v; await this._store.write('memory.json', obj); } catch (_) {} } see(name) { if (this.known.has(name)) { this.known.get(name).lastSeen = Date.now(); } else { this.known.set(name, { firstSeen: Date.now(), greetCount: 0, lastSeen: Date.now(), actions: [] }); } } isKnown(name) { return this.known.has(name); } canGreet(name) { const l = this._greetCD.get(name) || 0; if (Date.now() - l < 30000) return false; this._greetCD.set(name, Date.now()); return true; } markGreeted(name) { const p = this.known.get(name); if (p) p.greetCount++; } recordAction(name, action) { const p = this.known.get(name); if (p) { p.actions = p.actions || []; p.actions.push({ a: action, t: Date.now() }); if (p.actions.length > 20) p.actions.shift(); } } knownCount() { return this.known.size; } rememberInteraction(name, type) { const p = this.known.get(name); if (!p) return; p.interactions = p.interactions || []; p.interactions.push({ type, time: Date.now() }); if (p.interactions.length > 50) p.interactions.shift(); } getPlayerProfile(name) { return this.known.get(name) || null; } } module.exports = { BotMemory };