Auto Moderation
Automatically detect and handle rule violations including spam, inappropriate content, and bad behavior. Keep your server safe 24/7.
Overview
Natsumi's auto moderation system works in the background to protect your server. When violations are detected, the bot can automatically warn, timeout, or delete messages without moderator intervention.
Spam Detection Detect mass messages, repeated content, and emoji spam
Word Filters Block slurs, profanity, and custom banned words
Link Control Manage Discord invites and external links
Mention Control Limit mass mentions and prevent ping abuse
How rules work
Auto moderation is configured entirely on the dashboard, under Automod and Advanced Automod. There is no automod slash command.
Every rule is built from three parts:
- A trigger. What Natsumi watches for, such as a message matching a word list, a member joining with a suspicious username, or someone posting the same message five times in a row.
- Conditions. Optional filters that narrow when the rule applies, such as only for accounts younger than a week, or never for moderators.
- Actions. What happens when the rule fires, from deleting the message to banning the author.
Rules are evaluated in order, and a single rule can carry several actions, so one match can delete the message, warn the member and post to a log channel at once.
Triggers
Message content
| Trigger | Fires when |
|---|---|
new_message | Any new message is posted |
edited_message | An existing message is edited |
word_denylist | A message contains a word from a list you define |
word_allowlist | A message contains anything outside an allowed list |
message_regex | A message matches a regular expression |
message_not_regex | A message fails to match a regular expression |
all_caps | A message is mostly capital letters |
message_length | A message is longer than a limit |
message_mentions | A message contains more than a set number of mentions |
message_attachments | A message carries more than a set number of attachments |
message_has_attachments | A message carries any attachment |
message_no_attachments | A message carries no attachment |
Links and invites
| Trigger | Fires when |
|---|---|
any_link | A message contains any link |
server_invites | A message contains a Discord invite |
website_denylist | A message links to a blocked domain |
website_allowlist | A message links anywhere outside an allowed domain list |
Spam and flooding
| Trigger | Fires when |
|---|---|
spam_messages | A member sends messages faster than a threshold |
consecutive_identical_messages | The same message is repeated |
user_mentions_spam | One member spams mentions |
user_links_spam | One member spams links |
user_attachments_spam | One member spams attachments |
channel_messages | A channel exceeds a message rate |
channel_mentions_spam | A channel is flooded with mentions |
channel_links_spam | A channel is flooded with links |
channel_attachments_spam | A channel is flooded with attachments |
Members and names
| Trigger | Fires when |
|---|---|
new_member | A member joins the server |
join_username_word_denylist | A joining member's name contains a blocked word |
join_username_word_allowlist | A joining member's name falls outside an allowed list |
join_username_regex | A joining member's name matches a pattern |
join_username_not_regex | A joining member's name fails to match a pattern |
join_username_invite | A joining member's name contains an invite link |
nickname_word_denylist | A nickname contains a blocked word |
nickname_word_allowlist | A nickname falls outside an allowed list |
nickname_regex | A nickname matches a pattern |
nickname_not_regex | A nickname fails to match a pattern |
Other
| Trigger | Fires when |
|---|---|
discord_automod | Discord's own AutoMod flags a message |
violations_in_duration | A member accumulates violations within a time window |
Conditions
Conditions narrow a rule without changing what it watches for.
| Condition | Applies the rule only when |
|---|---|
account_age_below | The account is newer than a given age |
account_age_above | The account is older than a given age |
member_duration_below | The member joined recently |
member_duration_above | The member has been in the server a while |
require_roles | The member holds one of the listed roles |
ignored_roles | The member holds none of the listed roles |
ignore_bots | The author is not a bot |
only_bots | The author is a bot |
ignore_channels | The message is outside the listed channels |
ignore_categories | The message is outside the listed categories |
ignore_threads | The message is not in a thread |
active_in_channels | The message is in one of the listed channels |
active_in_categories | The message is in one of the listed categories |
active_in_threads | The message is in a thread |
ignore_forwards | The message is not a forwarded message |
only_forwards | The message is a forwarded message |
Actions
| Action | Effect |
|---|---|
delete_message | Delete the offending message |
delete_multiple_messages | Delete several of the member's recent messages |
warn_user | Issue a warning, recorded in their history |
timeout_user | Time the member out for a set duration |
kick_user | Remove the member from the server |
ban_user | Ban the member |
give_role | Add a role, useful for quarantine roles |
remove_role | Remove a role |
set_nickname | Replace an offending nickname |
send_message | Post a message in the channel |
send_alert | Post to a staff or log channel |
enable_slowmode | Turn on slowmode in the affected channel |
add_violation | Add to the member's violation counter |
reset_violations | Clear the member's violation counter |
Escalation
add_violation and violations_in_duration are what make escalation work. Have your first rule add a violation when it fires, then add a second rule that triggers on violations_in_duration and applies a heavier action once a member accumulates enough of them inside your chosen window.
That keeps a single mistake cheap while making a pattern of them expensive, and it means the escalation thresholds are yours to set rather than fixed.
Best Practices
Start with Basic Filters
Enable anti-spam and anti-invite first, then add more rules as needed based on your server's specific issues.
Use Ignore Rules
Exclude moderator roles and bot channels from automod to prevent false positives.
Start a New Rule in Alert-Only Mode
Give a new rule send_alert as its only action at first. It will report what it would have caught without touching anyone's messages, which makes an overly broad word list or regex obvious before it affects real members.
Use Escalation
Start with warnings and use escalation to automatically increase punishment for repeat offenders.
Monitor the Log Channel
Set up automod logging to a private channel so moderators can review actions and adjust rules.
Avoid Over-Moderation
Too many strict rules can frustrate legitimate users. Balance protection with usability.
