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:
- Alt & raid detection β every new join is scored for risk. Staff get an alert embed only when the score crosses your threshold, so quiet days stay quiet.
- Nickname sanitizer β strips invisible characters and blocklisted words from display names, on join and whenever a name changes.
- Goodbye messages β a farewell embed when a member leaves, with their roles and how long-standing a member they were.
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.
| Check | Points | Triggers 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:
- A regular new member β fresh account, hasn't spoken yet β scores 45 + 20 = 65. No alert. This is deliberate: most genuinely new people look like this.
- The same account joining during a raid burst scores 45 + 20 + 35 = 100. Alert.
- A three-year-old account that joins during a burst scores 20 + 35 = 55. No alert at the default β older accounts get the benefit of the doubt.
- A member who left and rejoined, and was chatting here last week, usually scores 0β45 β their message history in your server counts in their favour.
What happens when the score is reached
BMO alerts your staff β it never bans, kicks, or times anyone out on its own. Specifically:
- 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.
- 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.
- 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.
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.
| Preset | Alert score | Young account | Low activity | Join burst | In 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:
- The alert score is the main dial. Lower it for more alerts, raise it for fewer. The interesting boundary is 65 β the score of a normal brand-new member. Set the threshold at 66β70 and those people stay silent; set it at 65 or below and every fresh, quiet account pings your staff. Above 80, single joins essentially never alert and only raid combinations do.
- The other numbers change how easily each check fires, not how many points it gives. Raising "young account" from 14 to 30 days catches accounts made a month ago; dropping the raid count from 6 to 4 flags smaller waves. The points themselves (45 / 20 / 35) are fixed.
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:
- Strips zero-width and invisible characters (zero-width spaces and joiners, other formatting and control characters) and collapses stray whitespace.
- Removes every term on your blocklist, matched case-insensitively anywhere in the name.
- Tidies the leftovers β trailing spaces, dots, underscores, and hyphens are trimmed.
- 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.
- Where to set it up: the goodbye toggle and channel live on the Welcome & intros page of the dashboard, next to the welcome settings.
- Banned members don't get a goodbye. BMO checks the audit log when someone disappears; if they were just banned, the farewell is skipped so your goodbye channel doesn't wave at people you removed. (This check needs the View Audit Log permission β without it, bans get goodbyes too.)
- Bots leaving never trigger a goodbye.
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.
| Setting | What it does | Default |
|---|---|---|
| Check new joins for alts & raids | Master switch for the risk score. | Off |
| Alert score needed | Total points required before staff are alerted (10β100). | 70 |
| Staff alert channel | Where the risk embed is posted. Empty = your audit/security log channel. | β |
| Ping this role on alert | Role mentioned with each alert. Optional. | β |
| Give flagged members this role | "Needs review" role added on alert. Optional. | β |
| Young account days | Account age that earns +45 points (1β90 days). | 14 |
| Low activity messages | 7-day message count at or below which +20 points apply (0β200). | 3 |
| Raid join count | Joins inside the window that earn +35 points (2β40). | 6 |
| Raid detection window | How close together those joins must be (20β1800 seconds). | 120 |
| Clean bad nicknames automatically | Master switch for the nickname sanitizer. | Off |
| Log nickname changes here | Channel for before/after logs. Empty = audit/security log. | β |
| Fallback nickname | Name used when sanitizing leaves nothing readable. | Member |
| Blocked words | Terms removed from names, one per line, case-insensitive. | β |
| Goodbye messages + channel | Toggle and channel for leave embeds β on the Welcome & intros page. | Off |
Troubleshooting
- No alerts ever appear. Check the module is switched on, and that you have either a staff alert channel or an audit/security log channel set β with no channel to post to, alerts are dropped. Also remember a lone new member scores 65 by default, which is below 70 on purpose.
- Alerts post, but the flag role isn't applied. Move BMO's role above the flag role and make sure it has Manage Roles.
- Nicknames aren't being cleaned. The sanitizer skips the server owner and anyone whose top role is at or above BMO's β and it needs Manage Nicknames.
- No goodbye messages. Check the goodbye toggle and channel on the Welcome & intros page. Remember that banned members are skipped intentionally.