Ein Embed je Hof, das sich selbst aktualisiert
Der Fuhrpark stand bisher nur als Gesamtzahl im Karten-Embed. Jetzt bekommt jeder Hof eine eigene Nachricht im selben Kanal, die bei jedem Durchlauf bearbeitet statt neu gepostet wird: Land, Fahrzeuge mit Wert und Betriebsstunden, was in die Werkstatt muss, was gewaschen gehoert und was geladen ist. Die Fahrzeuge kommen aus vehicles.xml, blockweise gelesen — Verschleiss und Schmutz stehen in Kindelementen und gehoeren sonst dem falschen Fahrzeug. Gemietete Missionsfahrzeuge bleiben draussen, sie verfaelschen Anzahl und Wert. Faellt die Datei einmal aus, bleiben die Embeds stehen, statt dass ein Hof verschwindet und gleich darauf doppelt gepostet wird. Damit tauchen auch Hoefe auf, die noch kein Land gekauft haben: die Liste der Hoefe kommt aus Parzellen und Fuhrpark zusammen. Dazu raus, was nur den Kanal vollgeschrieben hat: die Meldung zum Monatswechsel und die zum Landkauf. Der Monat wird still weitergestellt — er steht ohnehin im Embed. Damit faellt der Ereignis-Kanal weg und mit ihm die gespeicherte Besitzliste. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -1023,7 +1023,6 @@ db.exec(`
|
||||
CREATE TABLE IF NOT EXISTS ls_state (
|
||||
server_id INTEGER PRIMARY KEY,
|
||||
message_id TEXT,
|
||||
besitz TEXT,
|
||||
geprueft TEXT NOT NULL DEFAULT (datetime('now'))
|
||||
);
|
||||
`);
|
||||
@@ -1032,10 +1031,6 @@ const lsMessageStmt = db.prepare(`
|
||||
INSERT INTO ls_state (server_id, message_id) VALUES (?, ?)
|
||||
ON CONFLICT(server_id) DO UPDATE SET message_id = excluded.message_id
|
||||
`);
|
||||
const lsBesitzStmt = db.prepare(`
|
||||
INSERT INTO ls_state (server_id, besitz, geprueft) VALUES (?, ?, datetime('now'))
|
||||
ON CONFLICT(server_id) DO UPDATE SET besitz = excluded.besitz, geprueft = datetime('now')
|
||||
`);
|
||||
// Letzte gesehene Tageszeit — daran erkennt das Modul den Tageswechsel
|
||||
{
|
||||
const cols = db.prepare('PRAGMA table_info(ls_state)').all().map((c) => c.name);
|
||||
@@ -1046,18 +1041,31 @@ const lsTagStmt = db.prepare(`
|
||||
ON CONFLICT(server_id) DO UPDATE SET tageszeit = excluded.tageszeit
|
||||
`);
|
||||
export const setLsTageszeit = (serverId, ms) => lsTagStmt.run(serverId, ms);
|
||||
|
||||
// Eine gepflegte Nachricht je Hof: { "1": "messageId", "2": … }
|
||||
{
|
||||
const cols = db.prepare('PRAGMA table_info(ls_state)').all().map((c) => c.name);
|
||||
if (!cols.includes('hof_messages')) db.exec(`ALTER TABLE ls_state ADD COLUMN hof_messages TEXT NOT NULL DEFAULT '{}'`);
|
||||
}
|
||||
const lsHofStmt = db.prepare(`
|
||||
INSERT INTO ls_state (server_id, hof_messages) VALUES (?, ?)
|
||||
ON CONFLICT(server_id) DO UPDATE SET hof_messages = excluded.hof_messages
|
||||
`);
|
||||
export const setLsHofMessages = (serverId, map) => lsHofStmt.run(serverId, JSON.stringify(map));
|
||||
const lsVergessenStmt = db.prepare('DELETE FROM ls_state WHERE server_id = ?');
|
||||
export const lsState = (serverId) => {
|
||||
const r = lsStateStmt.get(serverId);
|
||||
if (!r) return null;
|
||||
// Kaputtes JSON darf den Durchlauf nicht anhalten — dann gilt eben
|
||||
// "noch nichts bekannt" und beim nächsten Mal steht wieder etwas drin.
|
||||
let besitz = null;
|
||||
try { besitz = r.besitz ? JSON.parse(r.besitz) : null; } catch { besitz = null; }
|
||||
return { ...r, besitz };
|
||||
let hofMessages = {};
|
||||
try {
|
||||
const roh = JSON.parse(r.hof_messages || '{}');
|
||||
if (roh && typeof roh === 'object' && !Array.isArray(roh)) hofMessages = roh;
|
||||
} catch { /* kaputt gespeichert — dann werden die Embeds neu gepostet */ }
|
||||
return { ...r, hofMessages };
|
||||
};
|
||||
export const setLsMessage = (serverId, messageId) => lsMessageStmt.run(serverId, messageId);
|
||||
export const setLsBesitz = (serverId, besitz) => lsBesitzStmt.run(serverId, JSON.stringify(besitz));
|
||||
export const forgetLsState = (serverId) => lsVergessenStmt.run(serverId).changes > 0;
|
||||
// Erreichbarkeit stundenweise zusammengefasst — für den Uptime-Balken.
|
||||
// Die Rohdaten (alle 2 min) wären über eine Woche rund 5000 Zeilen pro Server;
|
||||
|
||||
Reference in New Issue
Block a user