This bot uses slash commands only. Start with
/setup; you do not need to memorize command IDs, role IDs, or internal database names.What it can do
- Match a member’s Custom Status text or profile name and manage a role.
- Match Discord’s identity guild and visible Server Tag data and manage a role.
- Keep a shared role safe when both a Vanity rule and a Server Tag rule use it.
- Send Petto-style audit cards to a staff log channel.
- Send a separate thank-you message to the member when a rule starts matching.
- Edit the thank-you embeds with a visual editor and preview them before sending.
- Customize the bot’s server nickname, avatar, banner, and bio.
- Reconcile members manually with bounded sync commands.
First-time setup
1. Invite and position the bot
Give the bot these Discord permissions in every server where it should work:- Manage Roles;
- View Channels;
- Send Messages;
- Embed Links;
- Read Message History.
2. Enable Gateway intents
In the Discord Developer Portal, open the bot application and enable:- Server Members Intent;
- Presence Intent.
Custom Status rules. Without it, the bot cannot receive a member’s status text when it changes.
3. Open the guided setup
Run:- Action logs: choose the staff channel with
/logs setup. - Matching rules: create a Custom Status, profile-name, or Server Tag rule.
- Bot profile: customize the bot in this server.
- Thank-you messages: choose the channel, embed, and mention behavior.
/config view at any point to see which parts are ready. Every completed form is saved immediately. There is no separate hidden Save button.
Vanity rules
Vanity means a rule based on a value from a member’s Discord profile. The easiest and most useful source is Custom Status, which is the text a member writes in their profile status. It is not a Server Tag and it is not the member’s username.Sources
Create a rule
The visual setup is recommended. For the full command, use:name: a unique internal name, such ascinnamochi;word: the text or pattern to match;source: what Discord value to read;comparison: exact, contains, starts with, ends with, or regular expression;role: the role Discord should manage;action: add or remove the role.
cinnamochi:
contains and add_role. The options case_fold, trim_space, and collapse_space are enabled by default so normal capitalization and extra spaces do not break a match.
Test and synchronize
Test one member without changing any roles:/vanity sync without a user to perform a bounded manual server sync. It does not start an unlimited scan and it does not automatically scan the server on every restart.
Other rule commands:
remove soft-deletes the rule for auditability. It does not delete historical audit records.
Server Tag rules
Server Tag rules read Discord identity data from a member’sprimary_guild object. They are separate from Custom Status rules.
Conditions
Example that adds
@Partner when the member’s identity guild is a specific server:
/guildtag sync is an explicit, bounded recovery command. It does not run an automatic full-server scan after every restart.
Shared roles
Vanity and Server Tag rules may safely use the same role. The bot stores a grant per rule and only removes a role when all active add-role sources have disappeared and the bot previously recorded that it owned the role. If a member already had the role manually, the bot leaves it alone. Example:@Rep stays. It is removed only after both sources stop matching and the bot owns that role assignment.
Thank-you messages
Thank-you messages are separate from staff logs. Configure them independently:channel: where the member notification is sent;embed:defaultor the name of a saved embed;ping:userto mention the member, ornonefor no mention.
vanity_notify and guildtag_notify.
The bot sends the thank-you message when a rule starts matching. It also sends it when the member already has the role, so a role that was granted by another source or already existed does not suppress the notification. It does not repeat the message for every presence update, member event, or identical sync.
View the current configuration by running the notify command without options:
Staff action logs
Logs are for staff and are not the same as member notifications. Set the current channel as the audit channel:vanity_add;vanity_remove;tag_add;tag_remove;error.
/logs never selects the member thank-you embed.
Embeds
For a new custom embed, create it and open the visual editor:/embed edit name:vanity_notify or /embed edit name:guildtag_notify after configuring its notification.
The visual editor lets you set title, description, message content, color, author, footer, thumbnail, image, timestamp, fields, and link buttons. Each submitted section saves immediately and the preview refreshes after the change.
Useful commands:
Variables
Use these variables in titles, descriptions, content, fields, authors, footers, and link labels:custom_status Vanity rule, {vanity.value} is the member’s current Custom Status text. In a Guild Tag notification, {tag} is the visible tag text, not the identity guild ID.
Bot profile per server
These commands change only the bot’s profile in the current server:reset returns that server to the global bot profile. A failed Discord update keeps the previous saved profile.
Complete command map
Troubleshooting
The bot does not add the role
Check these in order:- The bot has Manage Roles.
- The bot’s role is above the target role.
- The correct source was selected.
Custom Statusis not the username. - The text matches the chosen comparison.
- Presence Intent is enabled for Custom Status rules.
- Run
/vanity test user:@Memberor/guildtag test user:@Member. - Run the corresponding
/synccommand after fixing the setting.
The notification does not arrive
Run/vanity notify or /guildtag notify and confirm that a channel is configured. Then use /embed preview name:vanity_notify or /embed preview name:guildtag_notify.
Notifications are transition-based. If the rule has already been evaluated as matching and you are testing the same unchanged member again, no duplicate thank-you message is expected. Change the source value, or create a new rule, to test a new match.
If the member already has the configured role, the notification still appears when the rule becomes a new match. The role being present does not suppress the thank-you message; only an already-recorded, unchanged match prevents a duplicate.
The Server Tag value looks empty or is delayed
Discord may omit or delayprimary_guild data. This is a Discord event/API limitation, not a reason to start an unlimited scan. Use /identity status to inspect the returned data and /guildtag sync for bounded manual recovery.
/embed create or /embed edit looks empty
That is the visual editor’s empty starting state. Press Description, Title, or Message content, submit the modal, and the preview will update. Use /embed variables for the exact tokens accepted by the renderer.
Resetting configuration
/config reset removes this server’s saved rules, notification settings, embeds, profile overrides, and log configuration. It does not automatically change Discord roles. Use it only when you intentionally want to start this server’s configuration again.