BMO Wiki

Member guard πŸͺͺ

Quietly watches the door: spots suspicious new accounts, cleans up bad nicknames, and says goodbye when people leave.

What is member guard?

Member guard is three background protections bundled together. Once configured, none of them need daily attention β€” they run automatically on every join, nickname change, and leave:

Everything lives on the dashboard: open your server and go to Member guard (under Safety). There are no day-to-day commands to learn for this module β€” it is configured once and then works on its own.

Alt & raid detection

Ban evaders come back on fresh accounts. Raids arrive as a wave of accounts created last week. Both look different from a normal new member β€” and that difference is what the risk score measures.

How the risk score works

When someone joins, BMO runs three checks and adds up points. Nothing happens unless the total reaches your alert score (default 70) β€” below that, the join is completely silent.

CheckPointsTriggers when…You can adjust
Young account +45 The Discord account was created within the last 14 days (default). The age cutoff, 1–90 days.
Low activity +20 They've sent at most 3 messages (default) in your server over the past 7 days. Brand-new joiners are always 0. The message cutoff, 0–200.
Join burst +35 They're one of 6 or more joins (default) within a 2-minute window β€” the classic raid pattern. The join count (2–40) and the window (20–1800 seconds).

The maximum possible score is 100 (all three checks fire). Some everyday examples with the default alert score of 70:

The low-activity check counts messages in your server only, using BMO's own activity tracking. Its real job is telling returning members apart from strangers: someone who rejoins with recent chat history skips those 20 points.

What happens when the score is reached

BMO alerts your staff β€” it never bans, kicks, or times anyone out on its own. Specifically:

  1. An alert embed is posted to your staff alert channel. It shows the member, their score versus your threshold, account age, message count, the exact reasons that added points, and their avatar. If you haven't set a dedicated channel, the embed goes to your audit/security log channel instead.
  2. If you've set a ping role (e.g. @Mods), that role is mentioned with the alert so it doesn't scroll by unnoticed. Optional.
  3. If you've set a flag role, BMO gives it to the member β€” useful as a "needs review" marker, or paired with channel permissions to keep flagged accounts out of sensitive channels until a human clears them. Also optional.
The flag role only works if BMO has Manage Roles and its own role sits above the flag role in Server Settings β†’ Roles. If either is missing, the alert still posts but the role is silently skipped. Because the module only alerts humans, it's safe to turn on with defaults and watch for a week. If it's too chatty or too quiet, adjust β€” nothing bad happens to innocent members in the meantime.

Presets: Relaxed, Balanced, Strict

The Member guard page on the dashboard includes a live "How the risk score works" guide with three one-click presets that fill in the numbers for you. Presets only fill the form β€” click Save settings afterwards to keep them.

PresetAlert scoreYoung accountLow activityJoin burstIn practice
Relaxed 85 ≀ 7 days ≀ 3 msgs 8 joins / 120s Alerts only when all three checks fire β€” essentially raid-only. Good for big servers that get lots of legitimate new accounts.
Balanced 70 ≀ 14 days ≀ 3 msgs 6 joins / 120s The defaults. A typical new member (65) stays silent; young accounts arriving during a burst trigger alerts.
Strict 55 ≀ 21 days ≀ 5 msgs 5 joins / 90s Every young account that hasn't spoken here (65) triggers an alert, as does any burst of quiet accounts (55). Expect regular pings β€” best for small or invite-only servers.

Tuning it yourself

Two rules of thumb cover most tuning:

Example: you run a partnered server that gets steady traffic from Disboard. New accounts joining alone are normal for you, but you still want raid coverage. Pick Relaxed, or set the alert score to 80+ manually β€” now only join bursts of fresh accounts reach your staff channel.

Opposite example: a private community where every join comes from a friend's invite. Pick Strict β€” a burst of week-old accounts is never normal there, and you'd rather review a few false alarms than miss one alt.

Nickname sanitizer

Some names are designed to be a problem: invisible characters that hoist a name to the top of the member list or make it impossible to type when moderating, and names containing slurs or terms you simply don't want on screen. The sanitizer fixes these automatically so moderators don't play whack-a-mole.

It runs when someone joins, when they change their nickname, and when they change their Discord username or display name (checked in every server BMO shares with them). Each pass:

  1. Strips zero-width and invisible characters (zero-width spaces and joiners, other formatting and control characters) and collapses stray whitespace.
  2. Removes every term on your blocklist, matched case-insensitively anywhere in the name.
  3. Tidies the leftovers β€” trailing spaces, dots, underscores, and hyphens are trimmed.
  4. If nothing readable is left, the member is renamed to your fallback name (default Member, up to 32 characters, configurable).

If the cleaned-up result is identical to the member's real username, BMO clears the nickname instead of setting a redundant one. Every change is logged as a before/after embed to your nickname log channel (or your audit/security log channel if you haven't set one).

The blocklist is a simple text box on the dashboard β€” one word or phrase per line (commas work too).

Blocklist terms match anywhere inside a name. Short terms can hit innocent names β€” a blocklisted "ass" would mangle "Cassandra". Prefer longer, specific terms and check the sanitizer log for surprises after adding new ones. The sanitizer never touches bots or the server owner, and β€” like all role-based actions β€” it can only rename members whose top role is below BMO's role. It also needs the Manage Nicknames permission.

Goodbye messages

When a member leaves, BMO posts a goodbye embed in your goodbye channel: which roles they held, and a footer noting they were your nth member. It's the bookend to your welcome message β€” and a lightweight way for staff to notice departures without reading audit logs.

The wording is fully editable through BMO's embed templates (dashboard β†’ embed templates β†’ goodbye). The title, description, and footer can use tokens that are filled in per member: {user_tag}, {user_mention}, {user_id}, {guild_name}, {role_list} (up to 25 roles), and {join_position}. The default reads "goodbye, <name>…" with their role list and a "they were our 1234th member" footer.

Settings reference

Everything below is on the dashboard under Member guard (Safety section), except the goodbye channel which lives with the welcome settings.

SettingWhat it doesDefault
Check new joins for alts & raidsMaster switch for the risk score.Off
Alert score neededTotal points required before staff are alerted (10–100).70
Staff alert channelWhere the risk embed is posted. Empty = your audit/security log channel.β€”
Ping this role on alertRole mentioned with each alert. Optional.β€”
Give flagged members this role"Needs review" role added on alert. Optional.β€”
Young account daysAccount age that earns +45 points (1–90 days).14
Low activity messages7-day message count at or below which +20 points apply (0–200).3
Raid join countJoins inside the window that earn +35 points (2–40).6
Raid detection windowHow close together those joins must be (20–1800 seconds).120
Clean bad nicknames automaticallyMaster switch for the nickname sanitizer.Off
Log nickname changes hereChannel for before/after logs. Empty = audit/security log.β€”
Fallback nicknameName used when sanitizing leaves nothing readable.Member
Blocked wordsTerms removed from names, one per line, case-insensitive.β€”
Goodbye messages + channelToggle and channel for leave embeds β€” on the Welcome & intros page.Off

Troubleshooting