Playtester werden jetzt beworben, nicht angeklickt
Der Knopf unter dem Playtester-Aufruf hat jeden aufgenommen, der ihn gedrueckt hat — ohne Frage, ohne Pruefung. Fuer ein Programm, dessen Teilnehmer Zugang und Alpha-Keys bekommen, ist das die falsche Tuer. Statt einen zweiten Pruef-Ablauf danebenzustellen, laeuft die Aufnahme jetzt ueber die Bewerbungs-Formulare, die es laengst gibt: Modal ausfuellen, Review-Embed im Staff-Kanal, ✅ oder ❌, Rolle und Antwort-DM bei Zusage. Das ist dieselbe Maschinerie, nur ein anderer Aufhaenger — und damit auch nur eine Stelle, an der spaeter etwas kaputtgehen kann. Ein Formular laesst sich als Playtester-Formular markieren ("Annahme traegt als Playtester ein"). Wer dort angenommen wird, landet zusaetzlich in der Playtester-Liste, damit die Schluessel-Verteilung ihn kennt. Nur eines kann es sein — sonst wuesste /playtester-setup nicht, welches es posten soll. /playtester-setup postet jetzt den Knopf dieses Formulars. Fehlt das Formular, fehlen Fragen oder fehlt der Review-Kanal, sagt der Befehl das, statt einen Aufruf zu posten, der ins Leere fuehrt. Der alte Knopf in bereits geposteten Nachrichten nimmt niemanden mehr auf: er verweist auf den Aufruf. Austreten bleibt Selbstbedienung — dafuer braucht es keine Freigabe. Im Panel steht im Playtester-Bereich, ueber welches Formular die Aufnahme laeuft, ob es schon gepostet ist, und ein Weg dorthin. Ohne markiertes Formular steht dort, dass gerade niemand hereinkommt — das ist sonst der Grund, warum sich tagelang niemand bewirbt. Geprueft: Routen, SQL gegen das Schema, und im Browser beide Zustaende des Hinweises sowie der neue Schalter — beim Wechsel zwischen zwei Formularen folgt er dem richtigen. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -340,24 +340,38 @@ db.exec(`
|
||||
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
||||
);
|
||||
`);
|
||||
// Migration: Annahme kann zusaetzlich ins Playtester-Programm eintragen
|
||||
{
|
||||
const cols = db.prepare('PRAGMA table_info(app_forms)').all().map((c) => c.name);
|
||||
if (!cols.includes('playtester')) {
|
||||
db.exec('ALTER TABLE app_forms ADD COLUMN playtester INTEGER NOT NULL DEFAULT 0');
|
||||
}
|
||||
}
|
||||
const insertAppForm = db.prepare(`
|
||||
INSERT INTO app_forms (title, description, review_channel_id, approve_role_id, post_channel_id, questions)
|
||||
VALUES (@title, @description, @review_channel_id, @approve_role_id, @post_channel_id, @questions)
|
||||
INSERT INTO app_forms (title, description, review_channel_id, approve_role_id, post_channel_id, questions, playtester)
|
||||
VALUES (@title, @description, @review_channel_id, @approve_role_id, @post_channel_id, @questions, @playtester)
|
||||
`);
|
||||
const updateAppFormStmt = db.prepare(`
|
||||
UPDATE app_forms SET title = @title, description = @description, review_channel_id = @review_channel_id,
|
||||
approve_role_id = @approve_role_id, post_channel_id = @post_channel_id, questions = @questions
|
||||
approve_role_id = @approve_role_id, post_channel_id = @post_channel_id, questions = @questions,
|
||||
playtester = @playtester
|
||||
WHERE id = @id
|
||||
`);
|
||||
const setAppFormMessageStmt = db.prepare('UPDATE app_forms SET message_id = ? WHERE id = ?');
|
||||
const getAppFormStmt = db.prepare('SELECT * FROM app_forms WHERE id = ?');
|
||||
const listAppFormsStmt = db.prepare('SELECT * FROM app_forms ORDER BY id');
|
||||
const deleteAppFormStmt = db.prepare('DELETE FROM app_forms WHERE id = ?');
|
||||
// Nur eines kann das Playtester-Formular sein — sonst weiss /playtester-setup
|
||||
// nicht, welches es posten soll
|
||||
const clearPlaytesterFormStmt = db.prepare('UPDATE app_forms SET playtester = 0 WHERE id != ?');
|
||||
const playtesterFormStmt = db.prepare('SELECT * FROM app_forms WHERE playtester = 1 LIMIT 1');
|
||||
export const createAppForm = (f) => insertAppForm.run(f).lastInsertRowid;
|
||||
export const updateAppForm = (f) => updateAppFormStmt.run(f).changes > 0;
|
||||
export const setAppFormMessage = (id, messageId) => setAppFormMessageStmt.run(messageId, id);
|
||||
export const getAppForm = (id) => getAppFormStmt.get(id) ?? null;
|
||||
export const listAppForms = () => listAppFormsStmt.all();
|
||||
export const playtesterForm = () => playtesterFormStmt.get() ?? null;
|
||||
export const clearOtherPlaytesterForms = (id) => clearPlaytesterFormStmt.run(id);
|
||||
export const deleteAppForm = (id) => deleteAppFormStmt.run(id).changes > 0;
|
||||
|
||||
const insertApplication = db.prepare(`
|
||||
|
||||
Reference in New Issue
Block a user