Texte: 27 Bot-Nachrichten im Panel bearbeitbar
Bisher standen Begrüßung, Level-Ansage, Ticket-Texte und alle Bestätigungs-Nachrichten fest im Code. Wer den Ton ändern wollte, musste die Quelldateien anfassen und neu deployen — für alle außer mir also gar nicht. src/templates.js hält jetzt alle nach außen gehenden Texte an einer Stelle: Standardtext, Platzhalter mit Erklärung und die Zuordnung zum Modul. Der neue Setup-Tab „Texte" zeigt sie als Karten mit Textfeld; die Bausteine darunter fügen sich per Klick an der Cursor-Position ein. Der Standard bleibt im Code, die Datenbank speichert nur echte Abweichungen. Ein leeres Feld heißt deshalb „wieder Standard" — und angepasste Vorlagen sind an einer Marke erkennbar. Vorlagen zu ausgeschalteten Modulen sind als solche gekennzeichnet, damit niemand einen Text feilt, den gerade nichts sendet. Unbekannte Platzhalter bleiben stehen statt still zu verschwinden, damit ein Tippfehler in der Nachricht sichtbar wird. Die Route heißt /api/texts, nicht /api/templates — letzteres sind seit je die gespeicherten Composer-Nachrichten. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
+11
-6
@@ -9,6 +9,7 @@ import {
|
||||
createApplication, getApplication, openApplicationOf, setApplicationStatus,
|
||||
} from '../db.js';
|
||||
import { brandColor, brandColor2, brandFooter } from '../runtime-settings.js';
|
||||
import { renderTemplate } from '../templates.js';
|
||||
|
||||
export const MAX_QUESTIONS = 5; // Discord-Modal-Limit
|
||||
|
||||
@@ -143,7 +144,11 @@ export async function handleApplyModal(interaction) {
|
||||
}
|
||||
|
||||
await interaction.reply({
|
||||
content: '✅ Bewerbung eingereicht — danke! Du bekommst eine DM, sobald sie geprüft wurde.',
|
||||
content: renderTemplate('application.submitted', {
|
||||
user: interaction.member?.displayName ?? interaction.user.username,
|
||||
mention: `<@${interaction.user.id}>`,
|
||||
form: form.title,
|
||||
}),
|
||||
flags: MessageFlags.Ephemeral,
|
||||
});
|
||||
}
|
||||
@@ -169,11 +174,11 @@ export async function handleReviewButton(interaction) {
|
||||
}
|
||||
// DM an den Bewerber
|
||||
const user = await interaction.client.users.fetch(application.user_id).catch(() => null);
|
||||
await user?.send(
|
||||
approved
|
||||
? `✅ Deine Bewerbung **„${form?.title ?? ''}"** wurde angenommen — willkommen! 🎉`
|
||||
: `❌ Deine Bewerbung **„${form?.title ?? ''}"** wurde leider abgelehnt.`
|
||||
).catch(() => {});
|
||||
await user?.send(renderTemplate(approved ? 'application.approved' : 'application.denied', {
|
||||
user: user.username,
|
||||
mention: `<@${application.user_id}>`,
|
||||
form: form?.title ?? '',
|
||||
})).catch(() => {});
|
||||
|
||||
// Review-Embed abschließen
|
||||
const original = EmbedBuilder.from(interaction.message.embeds[0])
|
||||
|
||||
Reference in New Issue
Block a user