Welcome & intros 👋
Greet new members with a custom embed, nudge them to post an intro, and quietly say goodbye when they leave — all editable from the dashboard with a live preview.
How the pieces fit
BMO's onboarding is a small pipeline, and every stage is optional:
- Welcome embed — a pretty, fully customizable embed posted when someone joins.
- Intro flow — a short ping asking the newcomer to post an introduction, plus reminders for people who chat but never introduce themselves.
- Goodbye messages — a farewell embed when someone leaves.
- Inactivity kick — an on-demand cleanup for members who went silent, with safe lists.
- Members funnel — the dashboard's Members page shows each person's journey: joined → posted intro → first message.
You can run just the welcome embed, just the intro flow, or both together — if both are on, BMO coordinates them so the intro ping always lands first.
The welcome embed
When someone joins, BMO posts "Welcome, @name!" followed by an embed in your welcome channel. Out of the box the embed shows:
- An author line with your server icon: "We now have 1,234 members!" (live member count).
- A description with a clickable link to your rules channel, a boost nudge, and an "invite your friends" line — each prefixed by one of three emoji slots you can swap.
- The newcomer's avatar as the thumbnail, and a footer plugging your rep command.
Easiest setup: dashboard → your server → Setup → Welcome and Goodbye. Pick the welcome channel and rules channel with dropdowns, set the three emoji, and edit the text right there. Prefer Discord? Use the command:
| Command | What it does |
|---|---|
/welcomeset | With no options, shows your current welcome settings. |
/welcomeset welcome_channel:#welcome | Where welcome embeds are posted. |
/welcomeset rules_channel:#rules | The channel the "read our Rules" link points to. Without it, the embed says "Please read our rules." with no link. |
/welcomeset emoji_1: emoji_2: emoji_3: | The three emoji slots. Slot 1 decorates the rules line; slots 2 and 3 decorate the next two lines. |
!welcome add #channel | Shortcut that only sets the welcome channel. |
<:name:id> or give the raw emoji ID. It must be an emoji BMO can see (from your
server or another server the bot is in), otherwise that slot renders blank.
Customize the text: templates & tokens
The welcome embed's author line, description, footer, and color are templates you can rewrite. The Setup → Welcome and Goodbye page has an embed editor with a live preview — as you type, you see exactly what the embed will look like in Discord before you save. Drop these tokens anywhere in the text and BMO fills them in on the fly:
| Token | Becomes |
|---|---|
{user_mention} | @-mention of the new member |
{user_tag} | Their username (e.g. cooluser) |
{user_id} | Their Discord ID |
{guild_name} | Your server's name |
{guild_member_count} | Current member count |
{rules_line} | The whole ready-made rules line: emoji 1 + a clickable Rules link |
{rules_channel} | A plain #rules channel mention |
{rep_command} | Your server's rep command (defaults to /aw) |
{emoji_1} {emoji_2} {emoji_3} | The three welcome emoji slots |
Goodbye messages
When a member leaves, BMO can post a farewell embed — by default it's titled "goodbye, name...", lists the roles they had, and notes they were your Nth member. It's a nice pulse check on who you're losing and what roles they held.
Turn it on in Setup → Welcome and Goodbye: flip Goodbye messages
enabled and pick a goodbye channel. The goodbye text is a template too, edited on the same
page with the same live preview. Its tokens: {user_tag}, {user_mention},
{user_id}, {guild_name}, {role_list} (the roles they had) and
{join_position} (they were your Nth member).
The intro flow
Many communities ask newcomers to introduce themselves before really joining the conversation. BMO automates the whole loop: it greets the newcomer with a ping pointing at your intro channel, notices when they post there, and reminds the ones who forgot — without ever nagging twice.
The flow uses two channels:
- The intro welcome channel — a chat channel (often your general or welcome chat) where BMO posts "Welcome, @name — please post your intro in #introductions 💗".
- The intro channel — where members actually post their introductions. Any message a member sends there counts as their intro. Done.
Set it up on Setup → Intro & onboarding (channel pickers for both channels, plus every knob below), or with one command:
!introsetup #welcome-chat #introductions [@member-role ...]
The emoji in the ping is configurable with /introemoji — give it a custom emoji or
ID, or run it bare to see the current one.
Waiting for Discord onboarding
BMO deliberately does not ping the moment someone joins. It waits until the person can actually see your channels:
- Membership screening — if your server makes newcomers accept rules first, BMO waits until they've done that.
- Onboarding roles (optional) — if Discord's onboarding grants a role when someone finishes it, list that role in the setup. BMO then holds the welcome and intro ping until the member has one of those roles. Someone who never finishes onboarding is quietly skipped — no ghost pings for people who can't even see the channel.
- A grace delay — set with
!intromingrace seconds(0–3600). If you haven't set it and have no onboarding roles, BMO waits 60 seconds by default so Discord's onboarding screens can finish; with onboarding roles configured the default is 0, since the role itself is the signal.
If you run the classic welcome embed too, it waits for the same gate — and when both messages go to the same channel, the intro ping is posted first and the welcome embed follows a few seconds later, so the order always reads naturally.
Already-established servers: the backfill
Right after setup, BMO scans your intro channel's entire history and marks everyone who
already posted an intro, so long-time members are never treated as newcomers. This runs once
automatically and can take a few minutes on a big channel; the reminder tools politely refuse to run
until it's finished. Re-run it anytime with !introbackfill (full history) or
!introbackfill 5000 (newest 5,000 messages).
Intro reminders
Two kinds of nudges, both designed to be impossible to spam with:
Automatic (once, ever). If someone who never posted an intro gets chatty — 5 messages within 5 minutes anywhere in the server — BMO posts one friendly "Quick Reminder" in the intro welcome channel. Each member can only ever receive this once, no matter what.
Manual (you drive). Run /needsintro to get a private, paged list
of members who joined a while ago but still have no intro. Each page shows 10 people with a
Remind Page button — press it and BMO queues reminders for that page. Queued
reminders are then dripped out in small batches instead of flooding your chat:
| Setting | Default | What it controls |
|---|---|---|
| Needs-intro list cutoff | 2 hours | How long after joining someone appears on the /needsintro list — brand-new joins are left alone. |
| Reminders per batch | 2 | How many reminders are sent at once. |
| Batch interval | 5 minutes | How long BMO waits between batches. |
All three live on Setup → Intro & onboarding under Reminders. There's also a built-in 10-minute per-person cooldown, so pressing Remind Page twice won't double-ping anyone, and anyone who posts their intro while queued is silently skipped.
The prefix version!needsintro sends the list to your DMs so you
can review it away from the server; the slash version shows it only to you in-channel.
Inactivity kick & safe lists
For servers that prune lurkers: BMO tracks each member's last activity (any message, or joining a voice channel) and can kick people who've been silent past a threshold. Nothing happens automatically — kicks only run when an administrator explicitly confirms them.
| Command | What it does | Needs |
|---|---|---|
!status | Shows how many members are past the threshold, with a preview of the first 10. | Manage Server |
!inactivekick | Lists candidates and asks for confirmation — kicks happen only after you press Confirm Kick. | Administrator |
!safelist add @user / !safelist add @role | Protects a member or a whole role from inactivity kicks. remove undoes it, !safelist list shows everything. | Administrator |
The inactivity threshold (in days) and the safe lists are also editable on Setup → Intro & onboarding.
The threshold defaults to 2 days, which is aggressive for most communities — raise it before your first!inactivekick, and check !status
to preview who's on the list. Server boosters are always exempt automatically,
on top of anything you safelist.
The Members funnel
Everything above feeds the dashboard's Members page, which shows every member's journey through your server as a funnel: when they joined, when they posted their intro, their first message and first voice join, plus last activity, boost date, how they were invited, and whether they've since left. It's the quickest way to see where newcomers stall — lots of joins but few intros means your intro ping or channel placement needs work; lots of intros but few first messages means the conversation isn't pulling people in.
Funnel totals and trends also appear on the Analytics page, and you can get a quick in-Discord
version with !activity 7 (1–30 days): a message chart plus joins, leaves, top channels,
top members, and trending keywords.
Command quick reference
| Command | What it does | Needs |
|---|---|---|
/welcomeset | View or set welcome channel, rules channel, and the three emoji slots | Manage Server |
!welcome add #channel | Set the welcome channel only | Manage Server |
!introsetup #chat #intros [@role …] | Turn on the intro flow (and start the history backfill) | Manage Server |
/introemoji | View or set the emoji used in the intro ping | Manage Server |
!intromingrace seconds | Delay between joining and the intro ping (0–3600) | Manage Server |
!introbackfill [count] | Re-scan the intro channel's history | Manage Server |
/needsintro | Paged list of members without an intro, with a Remind Page button | Manage Server |
!status | Preview inactivity-kick candidates | Manage Server |
!inactivekick | Kick inactive members, with confirmation buttons | Administrator |
!safelist add/remove/list | Manage inactivity-kick exemptions | Administrator |
!activity [days] | Activity summary with chart, joins/leaves, top channels & members | Manage Server |