Moderation
Full moderation suite with persistent audit logs, temp-bans, temp-roles, per-event mod log routing, Discord-native auto-mod, and the enterprise Auto Moderation engine — 180+ individually configurable protection rules.
All moderation commands require the moderation feature to be active on your plan. It is on by default during the Basic trial.
Moderation is grouped into four slash commands. The Permission action column is the capability name used by the permission system — that is what actually decides who may run a command, and it is what you grant or deny per role on the dashboard.
/mod — member actions
| Command | Permission action | Description |
|---|---|---|
/mod warn <user> <reason> [duration] [silent] [note] [evidence] [category] | warn | Warn a member and open a case. Give a duration to make it a temporary warning that stops counting toward escalation when it expires. |
/mod warnings <user> | warnings | A member's warnings (expired ones shown struck through) plus where they stand on the escalation ladder. |
/mod kick <user> <reason> [silent] [dm_message] [note] [evidence] | kick | Kick a member from the server. They can rejoin via invite. |
/mod ban <user> <reason> [delete_messages] [silent] [dm_message] [note] [evidence] | ban | Ban a user from the server, optionally purging their recent messages. |
/mod unban <user_id> <reason> | unban | Lift a ban so the user can rejoin. |
/mod tempban <user> <duration> <reason> [delete_messages] [silent] [note] [evidence] | tempban | Temporarily ban a user — auto-unbanned when the duration expires. Survives bot restarts. |
/mod timeout add <user> <duration> <reason> [silent] [note] [evidence] | timeout | Timeout a member for any duration up to Discord's 28-day maximum — type it, e.g. 45m or 1h30m. |
/mod timeout remove <user> <reason> | timeout | Remove an active timeout before it expires. |
/mod temprole add <user> <role> <duration> <reason> [silent] [note] | temprole | Temporarily add a role — auto-removed on expiry. |
/mod temprole remove <user> <role> <duration> <reason> [silent] [note] | temprole | Temporarily remove a role — auto-restored on expiry. |
/mod purge <amount> [user] [filter] [contains] [has_attachments] [include_pinned] | purge | Bulk-delete messages in this channel, with optional filters. |
/mod nick <user> [nickname] [reason] | nickname | Change or reset a member's nickname. Omit nickname to reset it. |
/voice — voice actions
| Command | Permission action | Description |
|---|---|---|
/voice mute <user> [reason] | voice_mute | Server-mute a member in voice channels. |
/voice unmute <user> [reason] | voice_unmute | Remove a member's voice server-mute. |
/voice deafen <user> [reason] | voice_deafen | Server-deafen a member in voice channels. |
/voice undeafen <user> [reason] | voice_undeafen | Remove a member's voice server-deafen. |
/voice move <user> <channel> [reason] | voice_move | Move a member to another voice channel. |
/voice disconnect <user> [reason] | voice_disconnect | Disconnect a member from their voice channel. |
/channel — channel actions
| Command | Permission action | Description |
|---|---|---|
/channel lock [channel] [reason] | lock | Prevent @everyone from sending messages in a channel. |
/channel unlock [channel] [reason] | unlock | Restore @everyone sending permissions in a locked channel. |
/channel slowmode <seconds> [channel] | slowmode | Set the slowmode delay for a channel (0 to disable). |
/channel lockdown lock [reason] [category] | lockdown | Lock all text channels at once — or just one category. |
/channel lockdown unlock [reason] [category] | lockdown | Unlock all text channels locked by a previous lockdown. |
/massmod — bulk actions
| Command | Permission action | Description |
|---|---|---|
/massmod ban <reason> [delete_messages] | massmod | Ban up to 10 members via a user picker. |
/massmod kick <reason> [role] | massmod | Kick members — pick specific users, or everyone with a role. |
/massmod timeout <duration> <reason> [role] | massmod | Timeout members — pick specific users, or everyone with a role. |
/massmod role <action> <role> [reason] | massmod | Add or remove a role from up to 10 members via a user picker. |
massmod is its own permission action
Granting or denying ban does not affect /massmod ban — bulk actions are gated by the single massmod action, so you can hand out day-to-day moderation without handing out bulk tooling. Grant massmod deliberately.
warn, warnings, kick, ban, unban, timeout, untimeout, purge, slowmode, lock, unlock, mute, unmute, deafen, undeafen, disconnect and nick keep their short, flat names — run them with your server prefix (default !) or by @mentioning the bot. Same permissions and mod-log behaviour as the slash versions, so !ban stays the fast path even though the slash command is now /mod ban. See Text Commands.
!mute now means voice-mute
!mute and !unmute previously ran timeout / untimeout. They now run the voice server-mute, matching /voice mute. To time a member out from chat, use !timeout / !untimeout (or /mod timeout add).
/punish — jail, blacklist and other member actions
Actions Discord has no verb of its own for. Every one opens a case, DMs the member (with your appeal link) and can be reversed later.
| Command | Permission action | Description |
|---|---|---|
/punish softban <user> <reason> | softban | Ban and immediately unban — removes the member and purges their recent messages, without leaving a standing ban. |
/punish tempkick <user> <duration> <reason> | tempkick | Kick, then remove them again on every rejoin until the duration expires. |
/punish jail <user> <reason> [duration] | jail | Strip every role Azra can manage and assign the jail role. The removed roles are stored and restored on release. With a duration the release is automatic. |
/punish unjail <user> | unjail | Release from jail and put the stored roles back. |
/punish quarantine <user> <reason> | jail | Add the quarantine role and leave their other roles alone — the lighter form of jail. |
/punish unquarantine <user> | unjail | Remove the quarantine role. |
/punish blacklist <user> <reason> | blacklist | Bar a user permanently — every time they join they are removed again, by kick or by ban (your choice in settings). |
/punish unblacklist <user> | unblacklist | Lift a blacklist (and the ban it left behind, if it used ban mode). |
/punish lock <user> <reason> | lock_user | Stop one member talking, reacting or speaking anywhere, without touching their roles. Useful where a timeout is too blunt and a jail too heavy. |
/punish unlock <user> | unlock_user | Lift a user lock. |
/case — the moderation record
| Command | Permission action | Description |
|---|---|---|
/case view <number> | case_view | One case in full — reason, moderator, duration, evidence, whether the DM landed, and every internal note. |
/case history <user> | case_view | A member's whole moderation record. |
/case list [user] [active] | case_view | The server's recent cases, optionally only the punishments still in force. |
/case note <number> <note> | case_note | Add an internal note. Staff only — never shown to the member. |
/case reason <number> <reason> | case_edit | Correct a stated reason. The edit is itself recorded on the case. |
/case undo <number> [reason] | case_undo | Reverse a punishment — unban, unjail, remove a timeout, lift a blacklist. The reversal gets its own case. |
/case escalation <user> | escalation_preview | Preview the next automatic punishment for a member before you warn them again. |
Options every action shares
These are properties of the moderation system, not of individual commands — so every action supports them, and any action added later gets them automatically.
| Option | What it does |
|---|---|
reason | The reason recorded on the case and sent to the member. Type to search your saved reasons — or ignore the suggestions and write your own. |
silent | Take the action with no DM and no public response. It is still logged and still filed as a case. |
dm_message | Replace the default DM wording for this one action. |
evidence | Attach a screenshot or file. It is stored on the case, shown in the log and linked in the member's DM. |
note | An internal note filed with the case. Staff only — the member never sees it. |
category | Which moderation category this counts under (spam, toxicity, advertising…). Categories can have their own warning counters and their own escalation ladders. |
duration | On any temporary action. Written by hand, so you are never boxed into preset lengths. |
Context Menu Quick Actions
Right-click any user in your server — Apps menu — for one-click mod actions:
Duration Format
Tempban and temprole use a flexible human-readable duration format:
30s → 30 seconds |
15m → 15 minutes |
2h → 2 hours |
3d → 3 days |
1w → 1 weekCombine:
2h30m · 1d12h · 3d6h30m
Scheduled punishments (tempban expiry, temprole expiry) are persisted to the database and recovered automatically when the bot restarts.
Every moderation action — yours, the escalation ladder's, and Auto-Moderation's — files one numbered case.
A case is the whole record of an action: who did it, to whom, why, the DM that was sent, the evidence attached, when it expires, whether it was reversed, and every internal note staff added afterwards. Case numbers are per-server and sequential, so “see case #42” means the same thing to everyone on your team.
What a case carries
| Field | Notes |
|---|---|
| Case number | Per-server and sequential. Quoted in the member's DM so an appeal can reference it. |
| Action & category | What was done, and which counter it belongs to. |
| Moderator | Attribution — also written into Discord's own audit log, so it survives even if you never set up a log channel. |
| Reason | Correctable later with /case reason; the correction is recorded. |
| Evidence | Attachments kept with the case and linked in the log and the member's DM. |
| Internal notes | Appended by any staff member. Never shown to the member. |
| Expiry | On temporary actions. Azra performs the reversal itself and closes the case. |
| Source | manual, escalation, automod or dashboard — so you can tell at a glance what the bot did on its own. |
| Reversal | Who reversed it, when and why. The reversal is filed as its own case. |
Appeals
Every punishment DM carries an Appeal this decision button alongside the member's case number. You set where it goes in Dashboard → Punishments & Cases → Settings, and there are two destinations because a punished member is not always still in your server:
| Destination | Used for |
|---|---|
| In this server — a channel you pick | Warnings, timeouts, jail, quarantine, user locks, role punishments. The member is still here, so the button drops them straight into your ticket panel or appeals channel. |
| Outside Discord — an https link | Kicks, bans, softbans, tempkicks and blacklists. They have been removed, so a channel here would open onto something they can no longer read. Point this at a form, a second Discord server, a website — anything reachable from outside. |
Set either, or both. If you only set the link, it is used everywhere; if you only pick a channel, removed members simply get no button rather than a dead one.
Warnings add up, and a ladder decides what happens at each rung. Fully customisable — or leave it alone and use the built-in one.
The default ladder
Every server starts here, with nothing to configure:
| Warnings | Punishment |
|---|---|
| 1 | DM warning |
| 2 | Timeout (1 hour) |
| 3 | Kick |
| 5 | Ban |
The moment you edit it, it becomes your ladder — Azra's future changes to the built-in one stop affecting your server.
Building your own
From Dashboard → Punishments & Cases → Escalation you can create as many ladders as you need, each with unlimited levels, and:
- Different ladders for different categories — a spam ladder that times members out, a toxicity ladder that bans.
- Different ladders for different roles — a stricter one for unverified members, a gentler one for boosters.
- Different ladders for specific channels or whole categories — stricter rules in support channels than in off-topic.
- Drag-and-drop reordering of levels, plus duplicate, import and export so a ladder you like can be reused across servers.
- Priority, for when you deliberately want one ladder to beat another.
When more than one ladder could apply, the most specific wins: a category-matched ladder beats a general one, a role-scoped ladder beats a server-wide one, and your own priority setting breaks any remaining tie.
What a level can do
Each rung sets a warning threshold and a punishment, and can carry its own DM to the member, its own public response in the channel, and its own note for staff in the log.
| Punishment | Notes |
|---|---|
| Warning · Temporary Warning | Records a warning; a temporary one stops counting when it expires. |
| Send DM | Message the member and nothing else — the gentlest rung. |
| Voice Mute · Timeout | Timeouts take a duration, up to Discord's 28-day maximum. |
| Quarantine · Jail · Temporary Jail | Use the shared roles configured on the Auto Moderation page. |
| Lock User | Stops them talking anywhere without touching their roles. |
| Require Verification | Sends them back through the captcha gate. |
| Assign Role · Remove Role | Any role Azra can manage. Optionally temporary. |
| Kick · Temporary Ban · Permanent Ban | The top rungs. |
| Notify Staff · Log Only · Custom Action | Record or alert without punishing. Custom Action posts an instruction for a human to carry out. |
How the counting works
- A rung fires once. Warning 4 does not re-run the rung at 3 — and a member who jumps from 1 to 4 warnings still gets the rung at 3 rather than skipping it.
- Warnings can expire after a number of days you choose. An expired warning stays in the member's history but stops counting.
- The counter can reset after a configurable quiet period.
- Counters can be per-category, so three spam warnings never push someone over a toxicity ladder.
- Automatic downgrade (off by default) reverses a still-standing escalation punishment once expiries drop the count back below its rung.
- Roles can be exempt from automatic escalation entirely, and escalation can be switched off per category or server-wide.
/case escalation <user> and the dashboard's preview box, you can see the consequences of a ladder before it has any.
/case undo, and attributed to Azra rather than to whoever filed the warning that tipped it.
Every action is posted to Discord as a rich embed via a webhook styled with your Branding. Mod logging now lives on the central Logging page alongside every other module's logs.
Open Dashboard → Logging, enable logging, and pick a default channel (or a dedicated channel per event). You no longer paste webhook URLs — pick a channel and the bot creates and manages the webhook for you. Moderation events you can route individually:
| Event | Triggered By |
|---|---|
| Warn | /mod warn command |
| Kick | /mod kick, /massmod kick, quick kick context menu |
| Ban | /mod ban, /mod tempban, /massmod ban, quick ban, anti-nuke bans |
| Unban | /mod unban, expired tempban auto-unban |
| Timeout | /mod timeout add, /massmod timeout, quick timeout |
| Other actions | Lock, unlock, slowmode, purge, lockdown, nickname, voice actions, temp-role changes |
| Automod | Every automod violation (caps, links, words, AI, mentions) |
| Anti-Spam | Anti-spam triggers |
Ban to #bans, Warn to #warnings and Automod to #automod — or hit Quick Setup to have the bot build a private logging category and wire it all up in one click. See the Logging docs.
Powered by Discord's built-in AutoMod. When you enable a filter, Azra creates the matching AutoModeration rule in your server — so it keeps working even when Azra is briefly offline, applies to edited messages too, and blocks offending messages the instant they're posted.
Azra • … in Server Settings → AutoMod — leave those to Azra; your own AutoMod rules are never touched.
Word Presets
One-click Profanity, Sexual Content and Slurs filters backed by Discord's own continuously-updated, multi-language lists.
Blocked Words
Your server's custom words (and Azra's shipped default list) are pushed into Discord keyword rules — add anything specific to your community below.
Link Filter
Block messages containing links, with an Allowed Domains whitelist for the sites you want to permit.
Invite Filter
Block Discord server invites — discord.gg/…, discord.com/invite/… and common variants. Discord normalises many obfuscation attempts automatically.
Mention Spam
Block messages that ping more than your configured limit, plus optional raid protection for coordinated mention raids.
📢 Caps & AI (Azra)
The caps-percentage filter and optional OpenAI moderation run inside Azra — Discord's AutoMod has no equivalent for these two.
What runs where
Everything Discord's AutoMod can enforce is handled natively; the two checks it can't do stay inside Azra.
| Filter | Default | Enforced by |
|---|---|---|
| Profanity / Sexual Content / Slurs presets | Off | Discord AutoMod (keyword presets) |
| Blocked words (custom + default list) | Server default list | Discord AutoMod (keyword rules) |
| Block links + allowed domains | Off | Discord AutoMod (keyword rule) |
| Block Discord invites | Off | Discord AutoMod (keyword rule) |
| Max mentions (default 5) + raid protection | Off | Discord AutoMod (mention spam) |
| Caps threshold (70%) / min length (10) | Off | Azra (custom) |
| AI moderation | Off | Azra (OpenAI — requires an API key) |
Automod (and Anti-Spam) to on the Logging page, as a branded webhook.
An enterprise-grade layer that sits on top of the native filters above. It adds every protection Discord's AutoMod can't express — anti-raid, anti-nuke, voice/thread/reaction abuse, username & profile scanning, attachment and image checks, and much more — with 180+ rules across 22 categories, each individually configurable.
Every rule, individually configurable
Each rule exposes the same complete control set:
| Control | What it does |
|---|---|
| Enable / Disable | Turn any single rule on or off. |
| Mode | Enforce (detect + punish + log), Test (detect + log, tagged TEST, but never punish — a dry run against live traffic), Simulate (count silently, no log, no punishment — to size a threshold before going live), or Log only. |
| Punishments | Pick any combination — they run in a safe order (content removal → member action → notification): Ignore, Log only, Delete, Block, Warn, Temp-warn, Timeout, Quarantine role, Jail, Remove dangerous roles, Require re-verification, Kick, Soft ban, Ban, Lock channel, Lock server, DM user, Notify staff, Custom webhook. |
| Thresholds | Per-rule counts, windows, percentages, limits and word/pattern lists. |
| Exceptions | Exempt roles, users, channels, categories, threads, bots, webhooks, admins and moderators — or restrict a rule to only certain channels/roles. Plus account-age and membership-age gates. |
| Cooldown | Don't re-punish the same member for the same rule within N seconds. |
| Escalation | Repeat offenders get harsher punishment tiers automatically (e.g. warn on the 1st hit, timeout on the 3rd within 30 days, ban on the 5th). |
| Schedule | Make a rule active only on chosen days / time windows. |
| Custom message | The DM / block reason the offender sees. |
| Statistics | Per-rule detection & punishment counts over the last 30 days, shown on the page. |
The rule catalogue
Rules are grouped into 22 categories. Filters marked Native are pushed onto Discord's own AutoMod where possible (and always run inside Azra too); the rest are enforced by Azra.
Keyword Filters Native
Bad words, profanity, slurs, hate speech, threats, scam/phishing/crypto terms, advertising, invites, URLs, domain & IP blocklists, email/phone, custom/wildcard/regex patterns, required phrases and whitelists.
Spam Detection Native
Message, duplicate, rapid, character, emoji, sticker, GIF, attachment, image, video, link, invite, mention, role-mention, @everyone/@here, thread, poll, embed and reaction spam.
Text Abuse
Excessive caps, invisible characters, Unicode/homoglyph abuse, Zalgo text, repeated characters, excessive punctuation, line-break, markdown and code-block spam.
Link Protection
Discord & external invites, scam, phishing, malware, URL shorteners, IP grabbers, trackers, adult, torrent, crypto-scam, fake-login and fake-Nitro links.
Image Moderation Optional
NSFW detection, QR & scam-QR decoding, OCR text scanning, offensive/advertisement/AI-scam imagery. Needs an OpenAI key or the optional QR/OCR packages.
Attachment Protection
Executables, scripts, dangerous / password-protected archives, oversized files and an allow-list mode for unsupported types.
Anti Raid
Join-flood, invite-join, alt / new / recently-created account, bot-raid, username-pattern, avatarless and scripted-cadence detection — with optional server lockdown.
Anti Nuke
Mass bans/kicks/timeouts, role & channel & category create/delete/update, webhook, emoji, sticker, invite, integration and bot-invite floods, and server-setting changes.
Username / Nickname
Offensive, fake-staff, fake-bot, scam, advertising, Unicode-abuse and invisible-character names — with optional auto-rename.
Profile Protection Optional
Offensive / NSFW / scam avatars and banners (needs image classification).
Voice Protection
Join/leave/switch, camera, screen-share, soundboard, mute and deaf toggle spam.
Threads · Reactions · Invites · Polls
Thread create/rename/archive spam, reaction flooding, invite-creation policy (external / permanent / temporary / vanity) and poll spam.
Webhooks · Bots · Roles · Channels
Unauthorized webhook management, dangerous/suspicious bot adds, dangerous-permission & Administrator role grants, mass role assignment, and channel rename/topic/overwrite abuse.
Emoji/Sticker & Server
Mass emoji/sticker creation and unauthorized updates; server name, icon, banner, vanity, community, verification and safety-setting changes.
Shared settings
A few settings are shared by every rule that uses them, set once at the top of the page: the Quarantine and Jail roles, the Staff role pinged by Notify staff, an optional alert webhook for the Custom webhook action, and the default DM message.
Automod / Anti-Nuke / Anti-Spam to on the Logging page.
Uses Discord's native Spam filter, which automatically detects and blocks spammy, repeated and mass-posted content on Discord's side — no thresholds to tune.
Turn it on from Dashboard → Moderation → Anti-Spam — a single switch. When enabled, Azra adds Discord's Spam-content AutoMod rule to your server (it needs the Manage Server permission, same as Auto-Moderation). Blocked spam is recorded to your logs like any other moderation action.
Take action on multiple users at once — ideal for raid cleanup after an attack.
role to kick everyone holding that role.role.Every target is confirmed before anything runs, and each action is logged individually to your mod log.
massmod permission action
Bulk actions are gated separately from single-target ones — granting ban does not grant /massmod ban. Ban and kick are irreversible: check the confirmation list before you approve it.