feat: Server aus dem Panel uebernehmen -- und nur die auch wieder loeschen
Im d4rk_gameserver-Panel bekommt jeder Server einen Schalter "Im Discord anzeigen". Das Panel schreibt dafuer NICHTS hierher: es setzt nur ein Haekchen, und das reist in dem Statusbericht mit, den der Monitor ohnehin alle 30 Sekunden abholt. Der Bot legt den Eintrag dann selbst an. Der umgekehrte Weg -- Panel ruft unsere API -- braeuchte dort ein Zeichen mit Schreibrecht. So bleibt es bei einem, das nur lesen kann. ZWEI FALLEN, beide beim Bauen aufgefallen: Der Abgleich lief zu spaet. In monitorTick stand `if (servers.length === 0) return` VOR dem Panel-Abruf; beim allerersten Server haette der Schalter also nichts getan, und zwar stillschweigend. Der Abruf steht jetzt davor. Loeschen braucht einen Besitzvermerk. Ohne den nimmt ein Haekchen im Panel den handgepflegten ATM10 mit -- die einzige verfuegbare Grundlage waere der Name, und beim ersten Server, der in beiden Werkzeugen gleich heisst, waere der Eintrag samt Bild, Links und Zugangs-Code weg. Neue Spalte `panel_name`, leer heisst "von Hand". Die UPDATE-Anweisung fasst sie nicht an, damit ein Bearbeiten im Webinterface die Herkunft behaelt. Und der Abgleich ueberschreibt nichts: angelegt und geloescht wird, mehr nicht. tools/panel-abgleich-pruefen.mjs prueft das auf einer EIGENEN Datenbank in /tmp und bricht ab, wenn sie es nicht ist -- eine Probe, die loeschen kann, darf nicht dort loeschen, wo es zaehlt. Alles gruen. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -934,6 +934,18 @@ db.exec(`
|
||||
// Wer darf drauf: 'auto' nimmt, was die Abfrage sagt. Nur die wenigsten
|
||||
// Spiele melden das — und eine Whitelist meldet gar keins.
|
||||
if (!cols.includes('zugang')) db.exec(`ALTER TABLE gameservers ADD COLUMN zugang TEXT NOT NULL DEFAULT 'auto'`);
|
||||
// Migration v4: Wer hat diesen Eintrag angelegt?
|
||||
//
|
||||
// Leer = ein Mensch, über das Webinterface. Steht ein Name drin, kommt der
|
||||
// Eintrag aus dem d4rk_gameserver-Panel und wird von dort auch wieder
|
||||
// weggeräumt.
|
||||
//
|
||||
// DIESE SPALTE IST DIE GANZE SICHERUNG DAGEGEN, dass ein Häkchen im Panel
|
||||
// einen von Hand gepflegten Server löscht. Ohne sie müsste der Abgleich
|
||||
// raten, und die einzige verfügbare Grundlage wäre der Name — bei dem
|
||||
// ersten Server, der in beiden Werkzeugen gleich heißt, wäre der
|
||||
// handgepflegte Eintrag samt Bild, Links und Zugangs-Code weg.
|
||||
if (!cols.includes('panel_name')) db.exec(`ALTER TABLE gameservers ADD COLUMN panel_name TEXT NOT NULL DEFAULT ''`);
|
||||
}
|
||||
// Die Auswahl im Panel bot mal Spiel-IDs an, die es bei gamedig gar nicht gibt.
|
||||
// Wer eine davon gewählt hat, hatte einen Server, der dauerhaft offline stand,
|
||||
@@ -947,8 +959,8 @@ db.exec(`
|
||||
for (const [alt, neu] of Object.entries(echteIds)) um.run(neu, alt);
|
||||
}
|
||||
const insertGameserver = db.prepare(`
|
||||
INSERT INTO gameservers (name, type, query_url, address, host, port, connect_url, image_url, token, mods_url, links, zugang)
|
||||
VALUES (@name, @type, @query_url, @address, @host, @port, @connect_url, @image_url, @token, @mods_url, @links, @zugang)
|
||||
INSERT INTO gameservers (name, type, query_url, address, host, port, connect_url, image_url, token, mods_url, links, zugang, panel_name)
|
||||
VALUES (@name, @type, @query_url, @address, @host, @port, @connect_url, @image_url, @token, @mods_url, @links, @zugang, @panel_name)
|
||||
`);
|
||||
const updateGameserverStmt = db.prepare(`
|
||||
UPDATE gameservers SET name = @name, type = @type, query_url = @query_url, address = @address,
|
||||
@@ -966,6 +978,11 @@ const deleteGameserverStmt = db.prepare('DELETE FROM gameservers WHERE id = ?');
|
||||
const gameserverFelder = {
|
||||
name: '', type: 'fivem', query_url: '', address: '', host: '', port: null,
|
||||
connect_url: '', image_url: '', token: '', mods_url: '', links: '[]', zugang: 'auto',
|
||||
// Leer = von Hand angelegt. Die UPDATE-Anweisung oben fasst die Spalte
|
||||
// absichtlich NICHT an: wer einen Panel-Server im Webinterface bearbeitet,
|
||||
// soll ihm damit nicht die Herkunft nehmen. (Ein überzähliger benannter
|
||||
// Parameter stört better-sqlite3 nicht -- nachgemessen.)
|
||||
panel_name: '',
|
||||
};
|
||||
// Links dürfen als Liste hereinkommen — so gibt getGameserver sie ja auch
|
||||
// heraus. better-sqlite3 kann kein Array binden und würde sonst werfen.
|
||||
|
||||
Reference in New Issue
Block a user