Table of contents
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
Moderation
Zuständig für Auto-Mod, Anti-Nuke, manuelle Moderation, Reports, Message-Log — und den Server-Audit-Logger.
Auto-Mod
Jede Nachricht wird gegen die konfigurierten Filter geprüft — in dieser festen Reihenfolge (nicht
konfigurierbar), der erste Treffer wendet seine Aktion an: warn · delete · timeout · nothing.
| Reihenfolge | Check | Was er macht | Default-Aktion |
|---|---|---|---|
| 1 | antiPhishing | Fake-Nitro/Steam-Links + externer Bedrohungsfeed (siehe unten) | timeout 60 Min + delete |
| 2 | antiAd | Discord-Invites blockieren; optional alle URLs (mit Allow-List) | warn + delete |
| 3 | antiFlood | Zu viele User-/Rollen-Mentions in einer Nachricht | warn + delete |
| 4 | antiCaps | Mehr als N% Großbuchstaben (ab Mindestlänge) | delete |
| 5 | wordFilter | Konfigurierte Wörter (exact / substring) | aus (leer) |
| 6 | antiRepeat | Gleiche Nachricht N-mal hintereinander | warn + delete |
| 7 | antiSpam | N+ Nachrichten in Y Sekunden | warn + delete |
antiPhishing steht bewusst ganz vorne — ein Phishing-Treffer soll nie von einem schwächeren Check (z.B. antiCaps) überdeckt werden.
Whitelisting: Rollen in whitelistRoleIds und Channels in whitelistChannelIds sind komplett ausgenommen — von ALLEN Checks.
Eskalation: Erreicht ein User einen escalation-Threshold an aktiven Warns, wird die zugehörige Aktion
automatisch ausgelöst (höchster passender Threshold gewinnt, siehe Konfigurationsbeispiel unten).
Anti-Phishing — Schutz vor Fake-Nitro-Links & Scam-Seiten
Erkennt z.B. gefälschte "Kostenloses Discord Nitro"-Links (Muster: dlscord-nitro.com,
steam-community-gg.tk). Zwei unabhängige Erkennungswege, beide gleichzeitig aktiv:
a) Eingebaute Heuristik (useBuiltinHeuristics, rein lokal):
- Marken-Impersonation — erkennt
discord/nitro/steamals eigenständigen Namensteil einer Domain, aber NICHT die echten Domains (discord.com,steamcommunity.comusw. sind immer sicher). Ein Link wiesteamworks.devlöst NICHT aus, obwohl "steam" vorkommt — nur bei klar abgegrenztem Namensteil. - Verdächtige TLD + Köder-Wort —
.tk/.ml/.ga/.cf/.gq/.zip/.movlösen NUR aus, wenn die Nachricht zusätzlich ein Köder-Wort enthält (free,gratis,nitro,gift,geschenk,airdrop,claim,giveaway) — ein normaler.tk-Link allein wird nicht blockiert.
b) URLhaus-Bedrohungsfeed (useUrlhaus) — externe, stündlich aktualisierte Liste bekannter
Malware-/Phishing-URLs von abuse.ch (kostenlos, kein API-Key). Aktuell ca. 15.000
Einträge, lokal gecacht (cache/urlhaus-urls.txt) — der Check pro Nachricht ist dadurch ein reiner
Speicher-Abgleich, kein Netzwerk-Aufruf während des Chattens. Erkennt bekannte, bereits gemeldete bösartige
URLs weltweit — nicht nur Marken-Fakes, sondern jede Art von gemeldeter Malware-/Phishing-Seite.
c) Eigene Sperrliste (customBlocklist) — feste Domains, die IMMER blockiert werden (inkl. Subdomains).
Beispiel: Kostenloses Nitro: dlscord-glft.tk 🎁 → Marken-Impersonation greift sofort (erkennt "dlscord").
Eine URL ohne erkennbaren Markennamen, die aber schon in der URLhaus-Datenbank gemeldet ist, wird trotzdem
erkannt — auch wenn Check (a) nichts findet.
Message-Log — Inhalt gelöschter/bearbeiteter Nachrichten
Discords eigenes Audit-Log (siehe Server-Audit-Logger unten) zeigt nie den Nachrichteninhalt und erfasst nur Löschungen durch Moderatoren an fremden Nachrichten — löscht ein User seine eigene Nachricht selbst, taucht das dort gar nicht auf. Bearbeitungen werden von Discord überhaupt nicht protokolliert.
Message-Log schließt diese Lücke: postet bei jeder Löschung/Bearbeitung (egal wer sie ausgelöst hat) eine
Nachricht mit dem echten Inhalt in channels.mod-log:
- Löschung: Autor, Kanal, kompletter Text, Anhänge
- Bearbeitung: Autor, Kanal, Link zur Nachricht, Text vorher und nachher
- Massenlöschung: Kanal, Anzahl, bis zu 10 Beispiel-Nachrichten mit Inhalt
Grenze: War eine Nachricht schon vor dem letzten Bot-Neustart da oder ist sie älter als die letzten ~200 Nachrichten im Kanal, kennt der Bot ihren Inhalt nicht — dann wird bewusst nichts gepostet (Discord hat den Inhalt dem Bot nie mitgeteilt, das ist keine Einschränkung von GrumpyCore).
Anti-Nuke
Erkennt koordinierte oder versehentliche Server-Zerstörung in Echtzeit. Fest im Code, nicht über YAML
konfigurierbar — läuft automatisch mit, sobald addons.mod: true.
Auslöser (10-Sekunden-Fenster):
- Massenhafte Channel-Löschungen (3)
- Massenhafte Bans (5)
- Massenhafte Rollen-Löschungen (3)
Reaktion:
- Dem Verursacher werden sofort alle Rollen entzogen (ein einziger API-Call, kein Rate-Limit-Risiko)
- Im
alert-Channel erscheint eine Benachrichtigung (optional mitalert-ping-Rollen-Ping) - 60-Sekunden-Cooldown verhindert doppeltes Neutralisieren desselben Verursachers
- Der Server-Owner ist von der Rollen-Entfernung ausgenommen
/mod nuke — Channel komplett zurücksetzen
/mod clear und /mod purge können keine Nachrichten löschen, die älter als 14 Tage sind — eine feste
Grenze von Discords eigener API. /mod nuke umgeht das: der Channel wird geklont (identischer Name,
Rechte, Position) und der alte danach komplett gelöscht — betrifft wirklich jede Nachricht, egal wie alt.
Danach postet der Bot ein Embed im frischen Channel ("☢️ CHANNEL NUKED").
Nicht rückgängig zu machen. Braucht extra Manage Channels (nicht nur Manage Messages wie
clear/purge), damit ein normaler Nachrichten-Mod das nicht versehentlich auslöst.
/mod nuke
Punishment-System
Jede Mod-Aktion bekommt eine eindeutige P-#-ID und wird in der Datenbank gespeichert.
active steuert, ob der Eintrag zur Eskalation zählt bzw. noch läuft — Default-Aktiv-Status: warn/mute/ban
→ aktiv; kick/note/softban/unmute/unban/unwarn → inaktiv.
- History anzeigen:
/mod history @user(bis zu 25 Einträge, 🟢 aktiv / ⚫ inaktiv, Moderator, Zeitstempel, ggf. Ablaufzeit) - Einzelne Warn deaktivieren:
/mod unwarn <id> - Timeout aufheben:
/mod unmute @user - Volle Befehlsliste: Mod-Commands
Punishment-Typen:
- Note (
/mod note) — Staff-Notiz ohne Strafe, taucht in/mod historyauf - Softban (
/mod softban) — Kick + Lösch-Cleanup (Ban+Unban) ohne permanenten Ban - Tempban (
/mod tempban) — normaler Ban mit Ablaufzeit, wird automatisch vom Auto-Unban-Runner (60s-Takt) aufgehoben
Verlauf durchsuchen & exportieren:
| Command | Filter | Beschreibung |
|---|---|---|
/mod modlog-search |
user/moderator/type (warn/kick/ban/softban/mute/note)/days (1–3650), alle optional |
Zeigt bis zu 25 Treffer als Embed, Footer nennt Trefferzahl vs. Gesamtzahl |
/mod modlog-export |
user/type/days, alle optional (kein moderator-Filter) |
CSV-Anhang (id,type,userId,moderatorId,reason,active,createdAt,expiresAt) |
modlog-export ist gegen CSV-Formel-Injection abgesichert (=, +, -, @, Tab, CR am Zeilenanfang im
Grund-Feld werden mit führendem ' entschärft).
Report-System
/report user:@Jemand reason:"Grund hier"
- Cooldown: 60 Sek zwischen Reports pro Melder
- Limit: 10 Reports pro Tag pro Melder
- Selbst-Report und Bot-Report nicht möglich
- Staff sieht den Report im konfigurierten Ziel-Kanal mit Buttons: Deny / Warn / Timeout / Kick / Ban
- Klick-Berechtigung:
Moderate Membersoder Rolle ausroles.support(Basis), für Timeout/Kick/Ban zusätzlich die jeweils passende Discord-Permission
Konfiguration (configs/modules/mod.yml)
enabled: true
reportChannelId: "0" # Fallback-Zielkanal für /report
whitelistRoleIds: [] # Rollen, die Auto-Mod komplett umgehen
whitelistChannelIds: [] # Kanäle, die Auto-Mod komplett umgehen
escalation:
- threshold: 3 # ab 3 aktiven Warns
action: mute
durationMinutes: 60
- threshold: 5
action: kick
- threshold: 7
action: ban
autoMod:
antiPhishing:
enabled: true
useBuiltinHeuristics: true # Marken-Impersonation + TLD-Heuristik
useUrlhaus: true # externer Bedrohungsfeed (abuse.ch)
customBlocklist: [] # eigene, fest gesperrte Domains
action: timeout
timeoutMinutes: 60
deleteMessages: true
antiAd:
enabled: true
blockInvites: true
blockAllLinks: false
allowedDomains: []
action: warn
deleteMessages: true
antiFlood:
enabled: true
maxMentions: 5
action: warn
timeoutMinutes: 10
deleteMessages: true
antiCaps:
enabled: true
threshold: 0.7 # 70% Großbuchstaben-Anteil
minLength: 10
action: delete
deleteMessages: true
wordFilter:
enabled: false
words: []
substring: false
action: warn
deleteMessages: true
antiRepeat:
enabled: true
repeats: 3
windowSeconds: 60
action: warn
deleteMessages: true
antiSpam:
enabled: true
messages: 5
windowSeconds: 5
action: warn
timeoutMinutes: 5
deleteMessages: true
report:
enabled: true
cooldownSeconds: 60
dailyLimit: 10
messageLog:
enabled: true
logEdits: true
logDeletes: true
ignoreBots: true # Bot-eigene Nachrichten nicht protokollieren
nuke:
gifUrl: "" # optionales Bild/GIF für die Nuke-Nachricht, leer = nur Text
Fehlt nach einem Bot-Update ein neuer Schlüssel in einer bestehenden mod.yml, wird er beim nächsten Neustart
automatisch mit seinem Default ergänzt — bestehende Einstellungen bleiben dabei unangetastet.
Server-Audit-Logger
Loggt automatisch eine breite Palette an Server-Events in den mod-log-Channel — strukturierte Embeds mit
Kategorie-Badge, Executor (Von:), Target und Details. Deckt sich NICHT mit Message-Log oben (das zeigt
Inhalt, das Audit-Log nicht).
| Kategorie | Events |
|---|---|
| Channels | CHANNEL_CREATE · CHANNEL_DELETE · CHANNEL_UPDATE |
| Roles | ROLE_CREATE · ROLE_DELETE · ROLE_UPDATE |
| Members | ROLE_ADD · ROLE_REMOVE · MEMBER_UPDATE · MEMBER_KICK · MEMBER_BAN · MEMBER_UNBAN |
| Sonstige | INVITE_CREATE/DELETE · WEBHOOK_CREATE/DELETE · EMOJI_CREATE/DELETE |
Channel via channels.mod-log in configs/config.yml setzen — kein zusätzliches Setup.
Berechtigungen im Überblick
| Command / Aktion | Benötigte Discord-Permission |
|---|---|
/mod (Basis) |
Moderate Members |
/mod kick |
+ Kick Members |
/mod ban/tempban/softban/unban |
+ Ban Members |
/mod clear/purge |
+ Manage Messages |
/mod slowmode |
+ Manage Channels |
/mod nuke |
+ Manage Channels |
/mod reload |
Manage Guild |
/report |
keine (außer Selbst-/Bot-/Mod-Ausschluss) |
Volle Befehlsliste: Mod-Commands
GrumpyCore Wiki
⚙️ Setup
🔧 Core-Module
🆕 Neue Module
🔔 Benachrichtigungen & Utility
💬 Commands
👥 Staff
GrumpyCore Wiki (English)
⚙️ Setup
🔧 Core Modules
🆕 New Modules
🔔 Notifications & Utility
💬 Commands
👥 Staff