BMO Wiki

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:

You don't need to re-run setup when you add channels later — BMO automatically applies the jail lock to every newly created channel while jail is enabled. BMO's role must sit above the 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:

  1. 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).
  2. It adds the jailed role, 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.
  3. The snapshot, reason, moderator, and timestamp are stored persistently — they survive bot restarts.
  4. 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

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:

CommandWhat it does
/setadmin add @roleLets everyone with that role use the jail and ban commands.
/setadmin remove @roleTakes that role off the allowed list.
/setadmin listShows the currently allowed roles.
Only server administrators can run /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:

CommandWhat it does
/warn @user reasonRecords a warning and replies with the member's new total. You can't warn bots or yourself.
/warnings @userShows how many warnings a member has, with details of the five most recent.
BMO keeps the most recent 50 warnings per member — older ones roll off the end. Warnings are informational: BMO doesn't auto-punish at a threshold, that call stays with you.

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.

If a name matches more than one member, BMO refuses rather than guessing — use a mention or the numeric user ID to be exact.

Finding intros: /find

On servers with an introductions channel, moderators constantly ask "did this person ever do an intro?" /find answers that in seconds.

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):

CommandWhat it does
/purge previewLists candidates and a breakdown by tier. Nobody is kicked.
/purge executeKicks matching members — but defaults to a dry run that only shows what would happen. Pass dry_run: False to actually kick.
/purge whitelist-add @roleProtects everyone with that role from ever being purged.
/purge whitelist-remove @roleRemoves that protection.

Candidates are grouped into three tiers so you can start with the safest cut:

TierMeaning
👻 GhostJoined and never engaged at all — no messages, no intro. The safest tier to remove.
💤 DormantNever completed an intro and went inactive without engaging.
🌙 LurkerWas 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.

Server boosters are always excluded, no configuration needed — the tool will never kick someone actively boosting your server. Whitelisted roles are excluded too, and BMO skips anyone ranked above its own role. A purge kick is a normal kick — the member can rejoin with a fresh invite. Still, always run /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.

Nuking permanently deletes every message in the channel — there is no undo. Pinned messages, webhooks, and channel-following links are lost with the old channel too. Any saved channel IDs (in other bots or settings) will point at the old, deleted channel.

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.

CommandWhat it does
/banonrole @roleSets the trigger role. Anyone who receives it is auto-banned.
/log #channelSets where auto-ban events (and failures) are logged.
/securitystatusHealth check: shows the configured role and log channel, and whether BMO can actually ban (permission + role position).
Be careful what you pick — any assignment of the trigger role causes a ban, including a mod clicking the wrong role by mistake. If the ban can't go through (missing Ban Members permission, or BMO's role isn't above the trigger role), BMO posts a failure notice to the log channel instead, so check /securitystatus after setup.

Quick reference

CommandWho can use itWhat it does
/jailsetupAdmin or /setadmin roleCreates the jailed role + jail channel and locks all channels.
/jail @user reasonAdmin or /setadmin roleJails a member; roles backed up and stripped.
/unjail @user reasonAdmin or /setadmin roleReleases a member and restores their saved roles.
/jailreAdmin or /setadmin roleRe-applies jail permissions everywhere; rebuilds missing pieces.
/setadmin add|remove|listAdministratorManages which roles may use the jail/ban commands.
/ban user reasonAdmin or /setadmin roleBans by mention, ID, or name; posts the ban notice embed.
/warn @user reasonManage MessagesRecords a warning (last 50 kept per member).
/warnings @userManage MessagesShows a member's warning history.
/findset #channelManage ServerSets the intro channel that /find searches.
/find @user [limit]Manage MessagesFinds a member's intro posts, best matches first.
/purge preview / executeAdministratorReviews and removes inactive members (dry run by default).
/purge whitelist-add / -removeAdministratorProtects roles from the purge.
/nuke [channel]AdministratorDeletes and recreates a text/voice channel, wiping its messages.
/banonrole @roleManage ServerSets the auto-ban trigger role.
/log #channelManage ServerSets the security log channel.
/securitystatusManage ServerShows security config and permission health.
Most of these also work as classic ! prefix commands (!jail, !ban, !nuke, …) if you prefer typing over slash menus.