Configuration
All welcome settings live under thewelcome key in config.json.
config.json
Template variables
Every message template supports the following placeholders. The bot replaces them at send time.| Variable | Alias | Resolves to |
|---|---|---|
{user} | — | Discord mention (<@id>) |
{username} | — | Plain username, no mention |
{server} | {guild} | Server name |
{memberCount} | {count} | Current member count |
Example template
Multiple message variants
Instead of a singlemessage, you can supply a variants array. The bot picks one at random for each join event.
config.json
If both
variants and message are set, variants takes priority. The message field is used as a fallback when variants is empty or not set.Per-channel welcome messages
You can send different messages to multiple channels on the same join event using thechannels array. Each entry targets a specific channel and supports its own message or variants.
config.json
channelId always fires. Extra entries in channels with a different channelId fire as additional messages.
Dynamic mode
Whendynamic.enabled is true, the bot replaces your static template with a context-aware message built from:
- Time of day — morning, afternoon, evening, or night greeting (based on
timezone) - Activity snapshot — counts messages in the
activityWindowMinutesrolling window (default: 45 minutes) to pick an activity level:quiet,light,steady,busy, orhype - Active channels — the top channels by recent message count are mentioned in the greeting
- Milestone detection — a special line appears when the member count hits a notable number
Activity window
The bot records every non-bot message from guild text channels into an in-memory activity map. When a new member joins, it counts messages from the pastactivityWindowMinutes minutes to build the activity snapshot.
Channels listed in excludeChannels are not counted toward the activity window.
Milestone detection
Two rules trigger a milestone line:- The member count matches one of the notable milestones: 10, 25, 50, 100, 250, 500, 1000
- The member count is divisible by
milestoneInterval(default:25)
milestoneInterval to 0 to disable the divisibility check and only use the notable milestones list.
Highlight channels
ThehighlightChannels array lists channel IDs that should be suggested in the greeting CTA. These are merged with the top active channels from the activity snapshot (active channels take priority, highlights fill the rest).
config.json
Onboarding panels
The welcome system supports a full onboarding flow triggered by the/welcome setup command. It posts interactive panels to configured channels.
Rules agreement panel
SetrulesChannel to a channel ID and verifiedRole to a role ID. When you run /welcome setup, the bot posts a message with an Accept Rules button. Members who click it receive the verified role.
After accepting, if introChannel is set, the bot sends a prompt in that channel:
config.json
DM sequence
EnabledmSequence to send a series of DM messages to the user immediately after they accept the rules. Each steps entry is sent as a separate DM in order.
config.json
If the member has DMs disabled, delivery of the DM sequence stops at the first failed step. This is not fatal — the rules acceptance and role assignment still complete successfully.
Role menu on join
EnableroleMenu to post a dropdown in the welcome channel that lets members self-assign roles. Options support a label, a role ID, and an optional description.
config.json
roleId are filtered out automatically.
Returning members
If a member rejoins (Discord sets theDidRejoin flag), the bot ignores your configured template and sends a fixed message instead:
Commands
/welcome setup
/welcome setup
Posts the rules agreement panel and role menu to the configured channels. Requires moderator or administrator permission.
- If
rulesChannelis set, posts the Accept Rules button panel there. - If
roleMenu.enabledistrueandwelcome.channelIdis set, posts the role dropdown in the welcome channel.