Files
d4rkbot/src/bot/commands/warns.js
T
D4rkst3randClaude Fable 5 f7b261c648 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>
2026-07-30 00:40:08 +02:00

46 lines
1.9 KiB
JavaScript

// /warns — Verwarnungs-Historie eines Members einsehen / Eintrag löschen (Moderatoren)
import { SlashCommandBuilder, PermissionFlagsBits, MessageFlags, EmbedBuilder } from 'discord.js';
import { warnsOf, deleteWarn } from '../../db.js';
import { brandColor } from '../../runtime-settings.js';
export const data = new SlashCommandBuilder()
.setName('warns')
.setDescription('Verwarnungen eines Members anzeigen (oder eine löschen)')
.setDefaultMemberPermissions(PermissionFlagsBits.ModerateMembers)
.addUserOption((o) => o.setName('member').setDescription('Wessen Verwarnungen?').setRequired(true))
.addIntegerOption((o) => o.setName('loeschen').setDescription('Optional: Verwarnungs-ID entfernen'));
export async function execute(interaction) {
const user = interaction.options.getUser('member');
const removeId = interaction.options.getInteger('loeschen');
if (removeId) {
const removed = deleteWarn(removeId);
await interaction.reply({
content: removed ? `🗑️ Verwarnung #${removeId} entfernt.` : `❌ Verwarnung #${removeId} nicht gefunden.`,
flags: MessageFlags.Ephemeral,
});
return;
}
const warns = warnsOf(user.id);
if (warns.length === 0) {
await interaction.reply({ content: `✅ **${user.username}** hat keine Verwarnungen.`, flags: MessageFlags.Ephemeral });
return;
}
const lines = warns
.slice(-15)
.map((w) => `\`#${w.id}\` ${w.created_at.slice(0, 10)}${w.reason} *(${w.moderator ?? '—'})*`);
await interaction.reply({
embeds: [
new EmbedBuilder()
.setColor(brandColor())
.setTitle(`⚠️ Verwarnungen: ${user.username} (${warns.length})`)
.setDescription(lines.join('\n'))
.setFooter({ text: 'Löschen: /warns member:<user> loeschen:<ID>' }),
],
flags: MessageFlags.Ephemeral,
});
}