Branding-Tab: Name/Farben/Bot-Status/Avatar/Banner + Button-Farben für Rollen-Menüs
- Alle Embeds nutzen jetzt brandName/brandColor/brandColor2/brandFooter aus den Settings (Codemod über 20 Module) — Farbe & Name serverweit per Klick änderbar - Bot-Status (Presence): Typ (Spielt/Schaut/Hört/Status) + Text, sofort angewendet; Server-Monitor nutzt die Presence nur noch, wenn kein eigener Status gesetzt ist - Avatar-/Banner-Upload direkt aufs Bot-Profil (Base64, 8-MB-Limit, Discord-Rate-Limit sauber gemeldet) - Env-Verlagerung: GITEA_API_TOKEN (write-only Setting) und DISCORD_GUILD_ID jetzt auch über den Brand-Tab pflegbar — weniger Redeploys - Rollen-Menüs: Button-Farbe pro Eintrag wählbar (Grau/Blau/Grün/Rot) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
+9
-14
@@ -1,13 +1,8 @@
|
||||
// Moderation & Kontakt: Modmail (DM ↔ Staff-Thread), Willkommens-Embed, Mod-Log
|
||||
import { ChannelType, EmbedBuilder, Events } from 'discord.js';
|
||||
import { saveModmail, modmailByUser, modmailByThread, saveStickyRoles, stickyRolesOf } from '../db.js';
|
||||
import {
|
||||
modmailChannelId, welcomeChannelId, modlogChannelId, publicUrl,
|
||||
autoroleId, stickyRolesEnabled,
|
||||
} from '../runtime-settings.js';
|
||||
import { modmailChannelId, welcomeChannelId, modlogChannelId, publicUrl, autoroleId, stickyRolesEnabled, brandColor, brandColor2, brandFooter } from '../runtime-settings.js';
|
||||
|
||||
const BRAND_YELLOW = 0xf5c518;
|
||||
const BRAND_ORANGE = 0xff4d00;
|
||||
|
||||
/* ── Modmail ───────────────────────────────────────── */
|
||||
|
||||
@@ -36,12 +31,12 @@ async function ensureModmailThread(client, user) {
|
||||
await thread.send({
|
||||
embeds: [
|
||||
new EmbedBuilder()
|
||||
.setColor(BRAND_YELLOW)
|
||||
.setColor(brandColor())
|
||||
.setDescription(
|
||||
`Neue Modmail-Konversation mit **${user.username}** (<@${user.id}>).\n` +
|
||||
'Antworten in diesem Thread gehen als DM an den User.'
|
||||
)
|
||||
.setFooter({ text: 'D4RKST3R // MODMAIL' }),
|
||||
.setFooter({ text: brandFooter('MODMAIL') }),
|
||||
],
|
||||
});
|
||||
return thread;
|
||||
@@ -89,7 +84,7 @@ async function handleMemberAdd(member) {
|
||||
if (!channel?.isTextBased()) return;
|
||||
|
||||
const embed = new EmbedBuilder()
|
||||
.setColor(BRAND_YELLOW)
|
||||
.setColor(brandColor())
|
||||
.setTitle(`👋 Willkommen, ${member.displayName}!`)
|
||||
.setThumbnail(member.user.displayAvatarURL({ size: 128 }))
|
||||
.setDescription(
|
||||
@@ -98,7 +93,7 @@ async function handleMemberAdd(member) {
|
||||
'🧪 Playtester werden? Schau nach dem Bewerbungs-Post!\n' +
|
||||
'🐛 Bug gefunden? Einfach `/bug` benutzen.'
|
||||
)
|
||||
.setFooter({ text: 'D4RKST3R // COMMUNITY' })
|
||||
.setFooter({ text: brandFooter('COMMUNITY') })
|
||||
.setTimestamp();
|
||||
|
||||
await channel.send({ content: `<@${member.id}>`, embeds: [embed] });
|
||||
@@ -183,7 +178,7 @@ export function registerModTools(client) {
|
||||
if (roleIds.length > 0) saveStickyRoles(member.id, roleIds);
|
||||
|
||||
await logToModlog(client, new EmbedBuilder()
|
||||
.setColor(BRAND_ORANGE)
|
||||
.setColor(brandColor2())
|
||||
.setTitle('📤 Member gegangen')
|
||||
.setDescription(`**${member.user?.username ?? member.id}**${roleIds.length ? ` — Rollen gesichert (${roleIds.length})` : ''}`)
|
||||
.setTimestamp());
|
||||
@@ -211,7 +206,7 @@ export function registerModTools(client) {
|
||||
if (changes.length === 0) return;
|
||||
|
||||
await logToModlog(client, new EmbedBuilder()
|
||||
.setColor(BRAND_YELLOW)
|
||||
.setColor(brandColor())
|
||||
.setTitle('👤 Member geändert')
|
||||
.setDescription(`**${newMember.user?.username ?? newMember.id}**`)
|
||||
.addFields(changes)
|
||||
@@ -227,7 +222,7 @@ export function registerModTools(client) {
|
||||
if (!message.guildId || message.author?.bot) return;
|
||||
if (message.channelId === modlogChannelId()) return;
|
||||
await logToModlog(client, new EmbedBuilder()
|
||||
.setColor(BRAND_ORANGE)
|
||||
.setColor(brandColor2())
|
||||
.setTitle('🗑️ Nachricht gelöscht')
|
||||
.addFields(
|
||||
{ name: 'User', value: message.author ? `${message.author.username}` : 'unbekannt', inline: true },
|
||||
@@ -245,7 +240,7 @@ export function registerModTools(client) {
|
||||
if (!newMessage.guildId || newMessage.author?.bot) return;
|
||||
if (oldMessage.content === newMessage.content) return; // z. B. nur Embed-Update
|
||||
await logToModlog(client, new EmbedBuilder()
|
||||
.setColor(BRAND_YELLOW)
|
||||
.setColor(brandColor())
|
||||
.setTitle('✏️ Nachricht bearbeitet')
|
||||
.addFields(
|
||||
{ name: 'User', value: newMessage.author?.username ?? 'unbekannt', inline: true },
|
||||
|
||||
Reference in New Issue
Block a user