Moderation & jail 🔨
Day-to-day tools for keeping your server tidy: jail troublemakers without losing their roles, warn, ban, find intros, clear out inactive members, and reset a channel in one command.
The jail system
Sometimes a ban is too much. Jail is the middle ground: one command moves a member into a private "timeout room" where they can only see and talk in a single channel — every other text and voice channel disappears for them. Their roles are backed up automatically, so when you unjail them everything comes back exactly as it was. It's ideal for cooling someone down, questioning a suspected troll, or holding a member while the mod team decides what to do.
Setting it up
Dashboard: open your server's Jail settings page — it walks you through
enabling jail and shows the current role and channel. Command: run /jailsetup once.
Either way, BMO does all of this for you:
- Creates a role named
jailed(or reuses one that already exists). - Creates a text channel named
⋆jail(or reuses an existing one). Only jailed members can see it — it's hidden from everyone else. - Walks through every channel in your server and locks it: jailed members can't view, send messages, react, or create threads in text channels, and can't connect, speak, or stream in voice channels. In the jail channel itself they can read, type, and react.
jailed role and above the
roles of the members you want to jail (Server Settings → Roles), and the bot needs permission to manage
roles and channels. If setup fails, that's almost always why.
Jailing someone
Dashboard: Members page → find the member → Manage → Jail.
Command: /jail @user reason — the reason is required, and it's saved with the record.
What happens under the hood:
- BMO takes a snapshot of the member's roles first (skipping @everyone and managed roles like bot or booster roles, which Discord doesn't allow moving by hand).
- It adds the
jailedrole, then removes their other roles. This step matters: in Discord's permission math, any role that allows viewing a channel overrides the jail role's deny — so a jailed member who kept their roles could still see and talk everywhere. Stripping the roles closes that loophole. - The snapshot, reason, moderator, and timestamp are stored persistently — they survive bot restarts.
- A notice embed is posted in the jail channel so the member knows why they're there, and the action is written to your audit log and moderation history.
Unjailing is the mirror image: /unjail @user reason (or Members → Manage on the dashboard)
removes the jailed role, restores every saved role, posts a release notice in
the jail channel, and clears the stored record.
Leaving doesn't work
A jailed member can't escape by leaving and rejoining. When they leave, BMO keeps their jail record
(including the pre-jail role snapshot). When they come back, the jailed role is
re-applied automatically and a notice is posted in the jail channel. Their saved roles
are still restored the moment you unjail them — nothing is lost either way.
Guard rails
- You can never jail or ban the server owner or an administrator.
- You can't moderate anyone with an equal or higher role than your own (the owner is exempt).
- BMO refuses to act on members above its own top role — Discord wouldn't let it anyway.
Repairing permissions: /jailre
If channel permissions got edited by hand, or the jail role or channel was deleted, run
/jailre. It re-applies the jail lock to every channel, and rebuilds the role and channel
from scratch if they've gone missing. Think of it as "fix jail" — safe to run any time.
Who can use these commands: /setadmin
By default, only members with the Administrator permission can use
/jail, /unjail, /ban, /jailsetup, and /jailre.
To let your moderator team use them without full admin, an administrator can add their role to the allowed list:
| Command | What it does |
|---|---|
/setadmin add @role | Lets everyone with that role use the jail and ban commands. |
/setadmin remove @role | Takes that role off the allowed list. |
/setadmin list | Shows the currently allowed roles. |
/setadmin itself. If a moderator sees
"You are not allowed to use this command", this list is what they're missing.
Warnings
Warnings are your paper trail. Instead of trying to remember who did what, log it — each warning stores who issued it, when, and why, and the history shows up on the dashboard.
Dashboard: Members page → Manage → Warn, and the member's warning history is visible right there. Commands:
| Command | What it does |
|---|---|
/warn @user reason | Records a warning and replies with the member's new total. You can't warn bots or yourself. |
/warnings @user | Shows how many warnings a member has, with details of the five most recent. |
Banning with /ban
You can always use Discord's built-in ban, but BMO's /ban adds three things: it enforces a
required reason (saved in the audit log), it applies the same guard rails as jail
(no banning owners, admins, or people ranked above you), and it posts a ban notice embed
in the channel — a small public send-off so members can see moderation is happening.
- The target can be a mention, user ID, username, or display name. Using an ID works even if the person has already left the server — handy for banning someone who rage-quit first.
- BMO does not delete the banned member's messages, so the evidence stays visible.
- The notice's text and emoji are customizable: the default reads like "it seems that @user has been magically banned from the server", and you can edit the template (with placeholders for the user and a custom emoji) from the dashboard's embed template settings.
Finding intros: /find
On servers with an introductions channel, moderators constantly ask "did this person ever do an intro?"
/find answers that in seconds.
- First, point BMO at your intro channel once with
/findset #introductions. - Then
/find @usersearches that channel's recent history (200 messages by default, up to 1000 with thelimitoption) for anything the member posted. - Results are ranked smartly: posts that look like real intros — mentioning name, age, location, likes, dislikes — sort first, and you can flip through them with arrow buttons. Each result links straight to the original message.
- If nothing is found, BMO offers a one-click "Remind them" button that politely pings the member to do their intro.
Purging inactive members
Over time, servers fill with accounts that joined and never said a word. The purge tool finds them, sorts them by how inactive they are, and can kick them in bulk — with several layers of safety so you never remove someone by accident.
Dashboard: the Purge page shows the same candidate list with filters — the easiest way to review before acting. Commands (administrator only):
| Command | What it does |
|---|---|
/purge preview | Lists candidates and a breakdown by tier. Nobody is kicked. |
/purge execute | Kicks matching members — but defaults to a dry run that only shows what would happen. Pass dry_run: False to actually kick. |
/purge whitelist-add @role | Protects everyone with that role from ever being purged. |
/purge whitelist-remove @role | Removes that protection. |
Candidates are grouped into three tiers so you can start with the safest cut:
| Tier | Meaning |
|---|---|
| 👻 Ghost | Joined and never engaged at all — no messages, no intro. The safest tier to remove. |
| 💤 Dormant | Never completed an intro and went inactive without engaging. |
| 🌙 Lurker | Was active at some point but hasn't been seen in a long time. |
Both commands share the same filters: joined_before_days (only people who joined at least
this long ago — default 14, so newcomers get a grace period), inactive_days (default 30),
an optional no_intro_only switch, and a tier picker.
/purge preview and a dry run first; there's no bulk undo.
Nuking a channel: /nuke
When a channel is flooded with spam or you just want a clean slate, /nuke deletes the channel
and instantly recreates an identical copy: same name, category, position, permission overwrites, topic,
slowmode, and NSFW flag (bitrate and user limit for voice channels). All messages are gone; everything
else is preserved. The new channel gets a note saying who nuked it and when.
- Run it inside the channel you want to reset, or pass a channel:
/nuke channel: #general. - Administrator only, and BMO needs the Manage Channels permission.
- Works on text and voice channels only — forums, stages, and categories can't be nuked.
Auto-ban trigger role
This is a simple tripwire: pick a role, and the moment that role is added to anyone, BMO bans them instantly and logs it. Two common uses: a "banned" role your mods can hand out for a one-click ban, or a honeypot role that catches compromised admin accounts or rogue bots mass-assigning roles.
| Command | What it does |
|---|---|
/banonrole @role | Sets the trigger role. Anyone who receives it is auto-banned. |
/log #channel | Sets where auto-ban events (and failures) are logged. |
/securitystatus | Health check: shows the configured role and log channel, and whether BMO can actually ban (permission + role position). |
/securitystatus after setup.
Quick reference
| Command | Who can use it | What it does |
|---|---|---|
/jailsetup | Admin or /setadmin role | Creates the jailed role + jail channel and locks all channels. |
/jail @user reason | Admin or /setadmin role | Jails a member; roles backed up and stripped. |
/unjail @user reason | Admin or /setadmin role | Releases a member and restores their saved roles. |
/jailre | Admin or /setadmin role | Re-applies jail permissions everywhere; rebuilds missing pieces. |
/setadmin add|remove|list | Administrator | Manages which roles may use the jail/ban commands. |
/ban user reason | Admin or /setadmin role | Bans by mention, ID, or name; posts the ban notice embed. |
/warn @user reason | Manage Messages | Records a warning (last 50 kept per member). |
/warnings @user | Manage Messages | Shows a member's warning history. |
/findset #channel | Manage Server | Sets the intro channel that /find searches. |
/find @user [limit] | Manage Messages | Finds a member's intro posts, best matches first. |
/purge preview / execute | Administrator | Reviews and removes inactive members (dry run by default). |
/purge whitelist-add / -remove | Administrator | Protects roles from the purge. |
/nuke [channel] | Administrator | Deletes and recreates a text/voice channel, wiping its messages. |
/banonrole @role | Manage Server | Sets the auto-ban trigger role. |
/log #channel | Manage Server | Sets the security log channel. |
/securitystatus | Manage Server | Shows security config and permission health. |
! prefix commands
(!jail, !ban, !nuke, …) if you prefer typing over slash menus.