Guide

Enterprise

Automod

Automated content policing for your server. Configuration lives entirely under /settings → 🛡️ Automod. Every rule is independently toggleable and has its own sub-screen; a master toggle at the top of the menu enables or disables all rules at once.

Automod is Enterprise-only. Discord Administrators bypass every Automod rule by default, so you can safely enable it without locking yourself out while you configure things.

Rules

🚫

Banned Phrases

Two independent admin-curated phrase lists.

Under /settings → 🛡️ Automod → 🚫 Banned Phrases you maintain two separate lists:

  • Exact Phrases — case-insensitive, word-boundary anchored. Inline * wildcards still work — bad*word catches badword, bad123word.
  • Wildcard Phrases — every entry matches anywhere inside a word; whitespace in the entry fuzzes to any non-alphanumeric run, so gift card catches gift card, giftcard, gift-card, gift_card, gift.card, MyGiftCard, agiftcardy. Single-word entries like scam catch scam, scammer, iamascammer.

Both lists share the same workflow: case-insensitive matching, zero-width character stripping, an Add modal that accepts comma- or newline-separated batch entries, a Remove-by-select dropdown, and caps of 250 entries per list / 120 characters per entry.

🔎

Regex Filter

Admin-supplied regular expressions, matched case-insensitively.

Under /settings → 🛡️ Automod → 🔎 Regex Filter, maintain a list of Python-style regular expressions — each is validated when you add it, so a malformed pattern is rejected rather than saved. Every message and edit is tested against all patterns; the first match deletes the message (same enforcement path as Banned Phrases: delete + optional ladder + notice + audit). Use it for structured spam the phrase lists can't express, e.g. (?i)free\s*nitro. The matched pattern is your own regex, shown in the audit for tuning. Capped at 25 patterns.

🧪

Preset Packs

One-click curated harmful-content word lists.

Rather than building a slur / profanity list by hand, toggle Voltcord's maintained packs under /settings → 🛡️ Automod → 🧪 Preset Packs Profanity, Slurs, and NSFW. Any combination can be on at once; matching is substring / wildcard and case-insensitive, so evasions are still caught. A hit takes the same action as Banned Phrases, and the audit shows which pack tripped (not the raw term).

♻️

Duplicate Filter

Stops copy-paste repetition from the same member.

Catches a member posting the same or near-identical message repeatedly. Configure N repeats in Y seconds (default 3 in 30 s), exact or fuzzy matching (fuzzy uses a configurable similarity threshold, default 0.90), and whether the window is per-channel or server-wide, under /settings → 🛡️ Automod → ♻️ Duplicate Filter. Whitespace / case / zero-width differences are normalised so trivial tweaks still count. Tracked in memory (resets on bot restart).

🔠

Text Quality

Caps, emoji spam, and zalgo / glitch text.

One rule with three independently-togglable sub-detectors under /settings → 🛡️ Automod → 🔠 Text Quality Caps (flag messages above a percentage of capitals once past a minimum length, default 70% over 10 chars), Emoji (more than a max count, default 10), and Zalgo (combining-character density above a ratio, default 0.30). Cheapest-first; the first to trip wins, and the audit names the detector and the measured value.

🗂️

Attachment Filter

Block files and stickers by type, size, or sticker ID.

Fires when a message carries attachments or stickers. Under /settings → 🛡️ Automod → 🗂️ Attachment Filter, pick a mode — blocklist (block these) or allowlist (allow only these) — then enable any of six MIME categories (Executables / Archives / Images / Video / Audio / Documents), add custom MIME types, set an optional per-file size cap, and list blocked sticker IDs. First violation wins (size → MIME → sticker); the audit names the offending file or sticker and why.

🔗

Links

URL filter with three modes.

Pick block_all (deny any link), allowlist (only listed domains pass), or blocklist (listed domains are blocked, others pass). Matching is subdomain-aware — example.com also matches sub.example.com — and schemes are optional, so bare domains are still caught. The list is capped at 250 entries.

📨

Invites

Discord-invite filter with two modes.

Pick block_all to deny every Discord invite, or allowlist to let specific servers through. Allow-list entries accept both numeric guild IDs (15–20 digits) and vanity codes — Voltcord resolves an invite to its guild ID at scan time and caches the lookup for 5 minutes. Cap: 100 entries.

🔁

Mass Mentions

Per-message mention ceiling with timeout on hit.

Set a per-message mention cap (default 5, range 2–50) and choose which of Users / Roles / @everyone + @here count toward it. On a hit, the offending message is deleted and the author receives a configurable timeout (default 5 min, range 30 s – 7 d). Edits are scanned too.

⏱️

Spam Rate Limit

Messages-per-rolling-window cap.

Configure N messages in Y seconds per user per channel (default 5 messages per 5 s; max-messages 2–50; window 1–60 s). Exceeding the cap deletes the triggering message and applies a configurable timeout (default 5 min, range 30 s – 7 d). Unlike the other message rules, edits do not count — only newly-posted messages.

🔞

Account Age Gate

Quarantine brand-new Discord accounts on join.

When a joining member's Discord account is younger than the configured threshold (default 7 days, range 1–365), Voltcord assigns an admin-configured quarantine role. No kick, no ban, no block — the member joins, gets the role, and you control what the quarantine role can see and say through normal Discord channel permissions. New joins are scanned automatically; to catch members who joined before you enabled the gate, run /automod rescan accountage, which quarantines any existing members still under the threshold.

🔤

Username Filter

Screen usernames and nicknames against banned patterns.

Checks a member's username, global name, and nickname against an admin pattern list — both on join and whenever they change their name or nick. A match takes a configurable action under /settings → 🛡️ Automod → 🔤 Username Filter: Rename (default — resets the nickname to a configurable string such as Filtered User), Kick, or Quarantine (assign a role). Matching is substring-aware, so a banned word buried in a longer name is still caught. The bot skips the server owner and anyone it can't outrank.

🖼️

Avatar Block

Block known-bad avatars by their Discord image key.

Maintains a block list of avatar keys — Discord's own per-image identifier, so no image is downloaded — under /settings → 🛡️ Automod → 🖼️ Avatar Block. On join, and whenever a member changes avatar, a match takes a configurable action: Kick (default), Ban, or Quarantine. Copy a key from a raid audit entry to add it. The server owner and members above the bot are skipped.

Membership Gate

Per-channel minimum server-membership time.

Mark specific channels (text / news / voice / forum) as gated, each with its own threshold in whole hours (1–720 = 30 days). When a member posts in a gated channel before they've been in the server long enough, the message is removed and (optionally) a transient in-channel notice explains why. Threads inherit their parent channel's gate automatically. Use this to keep fresh accounts out of announcements, trading, or verified-only channels. Capped at 25 gated channels (Discord select-option limit).

📎

File-Only Channels

Require an attachment in designated channels.

Mark channels where every message must carry at least one real attachment or sticker — text-only messages (including pasted GIF / image links) are removed. Captions are fine: any message with an attachment is valid however long the text. Configure the channel list and optional bypass roles under /settings → 🛡️ Automod → 📎 File-Only Channels; threads inherit their parent channel's rule. Action: delete + optional in-channel notice + audit.

Verification Gate

Button-click challenge before newcomers can speak.

Post a public panel message (title, description, and an ✅ I'm not a bot button) in a channel you pick; new members click the button to receive an admin-configured verified role. Enforcement is passive — you configure Discord channel permissions so @everyone can't speak where the verified role can, and Voltcord only manages the role. The settings wizard walks you through the required pieces (channel perms → role pick → channel pick → post the panel → toggle on) and refuses to enable the rule until everything is in place. The panel's button is a persistent view, so clicks survive bot restarts.

🚨

Raid Detection + Patterns + Auto Mode

Join-velocity + coordination detectors with optional auto-engaged lockdown.

Set a velocity threshold (default 10 joins, range 2–100) and a window (default 30 s, range 5–600 s). When more joins land within the window, Voltcord posts a 🚨 Raid Detected audit embed listing the burst plus up to 5 flagged joiners (mention · account age · join-lag) and persists the event so later anti-raid tooling can act on the same burst.

Pattern Detection (opt-in) layers coordination-based detectors on top of the velocity check, watching the join stream over a separate longer window (default 5 min). Toggle it on under 🚨 Raid Detection → 🛡️ Patterns and enable any combination of three independent detectors:

  • Username similarity — flags clusters of joiners whose usernames are pairwise similar above a configurable threshold (default 0.85, range 0.60–0.95). Catches farms like RaidUser01..RaidUser20.
  • Account-age cluster — flags clusters of joiners whose Discord accounts were created within the same window (default 60 min) AND in the recent past (default last 7 days). Catches account farms that were mass-created shortly before a raid.
  • Avatar collision — flags clusters of joiners sharing the same avatar hash. Cheap and effective: sock puppets that don't customise their avatars get caught (Discord's default avatars count too).

Detectors run cheapest-first (avatar → account-age → username), and the first to trip wins so a single coordinated burst writes one event row with a 🚨 Coordinated Join Pattern Detected audit. Cluster size required to trip is configurable per detector (default 5+, range 3–50).

Auto Raid Mode (opt-in) layers automatic enforcement on top of both velocity AND pattern detection. Toggle it on under 🚨 Raid Detection → 🛡️ Auto Mode and pick a duration (1–1440 min, default 30). On every detection trip — velocity OR pattern — Voltcord engages any combination of three actions you've enabled, then auto-lifts when the duration expires:

  • Slowmode — applies a configurable delay (default 30 s, max 6 hours) to every text channel the bot can edit. Only raises per-channel — never reduces a stricter setting an admin already had in place.
  • Verification level — raises the server verification level to a configured target (default high). Only raises if the current level is below the target.
  • Invite pause — flips Discord's server-wide Pause Invites flag. Only flips it on if invites aren't already paused.

Each engage and lift posts its own audit embed (🚨 Raid Mode Engaged / ✅ Raid Mode Lifted) summarising exactly what changed and what was restored. Re-trips during an active raid mode do not extend the duration — admins know exactly when lockdown ends from the engage time.

Bulk Cleanup Tooling closes the loop. Use /automod raid review (server-administrator only) to open a paginated list of recent events, or click the 🔍 Review button on any 🚨 Raid Detected / 🚨 Coordinated Join Pattern Detected audit embed to drill straight into a single event. The review UI shows every flagged member's current state (in server / banned / left) and offers four bulk actions, with a recommended action highlighted in green based on the detector:

  • Ban All — permanent ban on every flagged member still in the server. Skips already-banned members.
  • Kick All — kicks every flagged member still present.
  • Quarantine All — assigns a configured quarantine role (set under /settings → 🛡️ Automod → Raid Detection; can be different from the Account-Age Gate quarantine role).
  • Timeout All — applies a Discord timeout for a configurable duration (default 1 hour, max 28 days).

Every destructive action shows an ephemeral confirmation listing exactly who'll be hit and who'll be skipped, then posts a final audit embed summarising the result. There's also a Mark Resolved (no action) button for cases where a mod has already handled the situation outside the bot.

One-click false-positive cleanup. If the bulk action turns out to be wrong, click ↩️ Reverse Last Action on the same review screen — Voltcord undoes the action against every member it actioned (ban → unban, quarantine → remove role, timeout → clear) and posts an audit embed recording the reversal. The original action stays in the event's history; the reversal is appended on top, so the full audit trail of who-acted-and-who-undid-it survives. Kicks aren't reversible (the kicked member already left), so the button is hidden in that case.

No action is taken on members automatically — Auto Raid Mode tightens the *server*, not its members. Member action only happens when an admin clicks a bulk action button.

How actions work

Message rules

On a hit, Banned Phrases / Regex Filter / Preset Packs / Duplicate Filter / Text Quality / Attachment Filter / Links / Invites / Mass Mentions / Spam Rate Limit / Membership Gate / File-Only Channels all take the same action path:

  1. Delete the offending message.
  2. For Mass Mentions and Spam Rate Limit only: apply a configurable member timeout.
  3. If the rule's In-Channel Notice toggle is on, post a short plain-text notice in the same channel that auto-deletes after 10 seconds. On by default.
  4. Write an audit embed to the Automod slot of your Audit Logs.

Join-time rules

Account Age Gate, Username Filter, Avatar Block, Verification Gate, and Raid Detection act on the joining member rather than a message — assign a quarantine role, rename / kick / quarantine on a banned username or blocked avatar, assign a verified role after button click, or post a raid audit alert (and, if Auto Raid Mode is enabled, automatically engage slowmode / raise verification / pause invites for a configurable window). The Username Filter also re-checks whenever a member changes their name or nickname after joining. There is no in-channel notice for these (the member has no relevant channel at join time), and message-rule behaviour is unaffected.

Voltcord never DMs affected users

Feedback is always via the transient in-channel notice or the audit log — never a direct message. This is a project-wide rule across every Voltcord module.

Exemptions

Server administrators are always exempt from every Automod rule — admins can speak past a misfiring rule without a settings round-trip. On top of that, you can configure a list of additional roles whose holders bypass every message-driven rule, plus a list of channels where every message-driven rule is silently skipped (threads inherit their parent channel's exemption), under /settings → 🛡️ Automod → 🛡️ Exemptions. Both pickers are multi-selects with toggle semantics — picking an entry that isn't yet on the list adds it; picking one already on the list removes it — and the screen has paired Clear roles / Clear channels buttons to reset each list independently. Exemption applies to every message rule (Banned Phrases, Links, Invites, Mass Mentions, Spam, Membership Gate); join-time rules don't use it because Discord delivers new members with only @everyone at join time.

Severity Ladder

Repeat offenders should get progressively firmer responses, not the same delete-and-warn every time. Configure a per-server escalation ladder under /settings → 🛡️ Automod → 🪜 Severity Ladder and opt rules in one by one. Each step is one of warn (delete + transient notice only), timeout:<seconds>, kick, or ban; up to 5 steps; counts past the last step keep firing the last step. Offenses age out over a configurable window (default 24 hours, max 30 days) so a single moment of carelessness doesn't haunt a member forever. Eleven message-driven rules can opt in: Banned Phrases, Regex Filter, Preset Packs, Duplicate Filter, Text Quality, Attachment Filter, Links, Invites, Mass Mentions, Spam, and Membership Gate. When the ladder is enabled for Mass Mentions or Spam, the rule's built-in fixed timeout is replaced by the ladder step. Per-rule audit embeds grow a **Severity Ladder:** line whenever the ladder fires; kick and ban steps additionally post a dedicated 🪜 Severity Ladder escalation audit. Join-time rules (account age, raid detection) don't use the ladder — they aren't per-member message events.

Scope Filters

Sometimes a rule should only fire in certain channels, or only for newcomers. Each of the ten message-driven content rules (Banned Phrases, Regex Filter, Preset Packs, Duplicate Filter, Text Quality, Attachment Filter, Links, Invites, Mass Mentions, Spam) gets an optional scope block under /settings → 🛡️ Automod → <Rule> → 🎯 Scope with three filters: 📌 Channels (restrict the rule to specific channels — threads inherit their parent), 🆕 Account age below (1–365 days), and ⏱️ Member age below (1–8760 hours). A 🔗 Match: AND / OR toggle controls how the active filters combine — AND (every active filter must match, the default) or OR (any one matches). When nothing is active, scope is a no-op. Per-rule audit embeds gain a **Scope:** line (filters joined by for AND or OR).

Custom Notice Copy

Out of the box, every removal posts a generic notice like "your message was removed because it contained a banned phrase." Under /settings → 🛡️ Automod → <Rule> → ✏️ Notice you can override that text for any of the six notice-bearing rules (Banned Phrases, Links, Invites, Mass Mentions, Spam, Membership Gate). Up to 500 characters; {user} and {author} substitute to the author mention. The notice still auto-deletes after 10 seconds and the audit log records the event regardless. Overrides on the dynamic rules now resolve live values: Mass Mentions and Spam expose {count} (how many), {threshold} (the limit), and {duration} (the timeout); Membership Gate exposes {duration} (how long they've been a member) and {threshold} (the required time). Each rule's notice screen lists the variables it offers.

🧨 Anti-Nuke

Watches the server audit log for the signature of a compromised or rogue staff account: mass channel / role deletions, mass bans or kicks, administrator-permission grants, webhook floods, and bot additions. Each is a configurable threshold (e.g. 3 channel deletes in 30 s, 1 bot add in 60 s) under /settings → 🛡️ Automod → 🚨 Raid Detection → 🧨 Anti-Nuke. When an actor crosses a threshold, Voltcord neutralises them with your chosen response — strip all their roles (default, optionally adding a quarantine role), ban, or kick. The server owner and a trusted-user allow-list are always exempt. It's best-effort: an account that outranks the bot can't be stopped automatically, so those trips post a loud "NOT stopped — act now" alert instead. Keep Voltcord's role high for it to work.

🚨 Panic / Emergency Controls

When something's already on fire, the /automod panic commands give one-button server-wide control: panic engage (freeze posting + slowmode + raise verification + pause invites), panic slowmode (server-wide slowmode only), and panic raidmode on|off (engage your configured raid actions by hand). Each auto-lifts after a duration, and panic lift restores everything immediately. Only one emergency state runs at a time, and every engage / lift is audited.

📩 Appeals

Members can contest an Automod action. With Appeals enabled (/settings → 🛡️ Automod → 📩 Appeals — set a channel and post the panel), an actioned member appeals via a 📩 Submit Appeal button on the removal notice, the persistent appeals panel, or /appeal. Appeals collect in /automod appeals, where staff Approve or Deny with an optional note — approving auto-reverses any reversible enforcement (a ladder ban is unbanned, a timeout cleared; kicks can't be undone). A per-member cooldown stops appeal spam.

🚩 False-Positive Reporting

Turn on 🚩 False Positives (/settings → 🛡️ Automod → 🚩 False Positives) and every content-removal audit gains a 🚩 Report False Positive button that Manage-Messages mods can click. Reports collect in /automod falsepositives — a paginated queue with a most-flagged-rules summary and ✅ Resolve / 🗑️ Dismiss — so you can spot an over-eager rule and tune it.

📣 Staff Alerts

For events that need a human now — anti-nuke trips, raid mode engaging, panic lockdowns — 📣 Staff Alerts (/settings → 🛡️ Automod → 🚨 Raid Detection → 🧨 Anti-Nuke → 📣 Staff Alerts) posts the alert to a dedicated staff channel and optionally pings a staff role. It never DMs, and skips silently if no channel is set.

🔌 External Scanning

Bad content doesn't only arrive as plain message text. 🔌 External Scanning (/settings → 🛡️ Automod → 🔌 External Scanning) extends the content matchers to two extra surfaces: Webhook & bot embeds (scans the title / description / fields / footer of embeds posted by webhooks and other bots — never Voltcord itself) and Attachment filenames. You opt in per surface and per rule (Banned Phrases, Regex, and Preset Packs for embeds; Banned Phrases and Regex for filenames). A webhook-embed hit deletes the message and audits with no in-channel notice; a filename hit behaves like a normal content removal.

Audit destination

Every Automod action writes to the Automod slot of the Audit Logs module. Route it to the same channel as your other audit categories, or give it a dedicated channel under /settings → 📋 Audit Logs → Automod. Leave the slot blank to silently skip posting. For finer routing, /settings → 🛡️ Automod → 📡 Alert Destinations sends each of four categories to its own channel — Content filters, Member gating, Anti-raid, and Appeals — falling back to the Automod slot for anything left unset.