How to Use Automations
Build trigger-based workflows in the Majestic dashboard for welcomes, moderation, alerts, scheduled posts, roles, channels, and community events.
How to Use Automations
Automations let Majestic react to server activity for you. Every automation follows the same shape: a trigger starts it, one or more conditions decide whether it applies, and a list of actions does the work — sending a message, adding a role, timing out a member, posting a poll, creating a thread, or running on a schedule.
Use automations whenever you want a workflow to happen the same way every time. Good examples include welcoming new members, routing support threads, rewarding level ups, announcing streams, cleaning up suspicious messages, or posting weekly reminders.
The Shape of an Automation
Every rule reads left to right: something happens, Majestic checks whether it matches, and then it acts. Keeping that pipeline in mind makes the builder much easier to follow.
View HTML
<div style="display:flex;align-items:stretch;gap:0.6rem;flex-wrap:wrap;">
<div class="inner-card inner-card-static" style="flex:1;min-width:120px;text-align:center;">
<div style="font-size:1.4rem;">⚡</div>
<div style="font-family:var(--font-input);font-weight:600;">Trigger</div>
<div style="color:var(--text-muted-color);font-size:0.85rem;">Member Join</div>
</div>
<div style="align-self:center;color:var(--text-muted-color);font-size:1.2rem;">→</div>
<div class="inner-card inner-card-static" style="flex:1;min-width:120px;text-align:center;">
<div style="font-size:1.4rem;">🔎</div>
<div style="font-family:var(--font-input);font-weight:600;">Conditions</div>
<div style="color:var(--text-muted-color);font-size:0.85rem;">Account < 7 days</div>
</div>
<div style="align-self:center;color:var(--text-muted-color);font-size:1.2rem;">→</div>
<div class="inner-card inner-card-static" style="flex:1;min-width:120px;text-align:center;">
<div style="font-size:1.4rem;">✅</div>
<div style="font-family:var(--font-input);font-weight:600;">Actions</div>
<div style="color:var(--text-muted-color);font-size:0.85rem;">Notify staff</div>
</div>
</div>The Automation Builder
Open your server dashboard, go to Automations, then choose Create Automation. The builder is arranged in the order the rule runs:
- Name the automation so other admins can understand it later.
- Pick a trigger such as Message, Member Join, Voice, Level Up, Twitch Live, YouTube Upload, AutoMod Action, or Scheduled.
- Add branches. A branch is a path with its own conditions and actions.
- Choose whether a branch must match all conditions or any condition.
- Add actions for the branch.
- Optionally configure Else actions that run when no branch matches.
- Set a cooldown if the automation should not run too often.
- Save the automation.
Once saved, each rule shows up in your list as a compact card with its trigger, a short summary, and an enable toggle:
View HTML
<div class="inner-card inner-card-flush">
<div class="inner-card-header" style="display:flex;align-items:center;gap:0.75rem;">
<div style="width:2.25rem;height:2.25rem;border-radius:0.6rem;display:flex;align-items:center;justify-content:center;background:var(--primary-color);color:#fff;font-size:1.1rem;">👋</div>
<div style="flex:1;">
<div style="font-family:var(--font-input);font-weight:600;">Welcome New Members</div>
<div style="color:var(--text-muted-color);font-size:0.85rem;">On Member Join · 2 branches · 3 actions</div>
</div>
<label style="position:relative;display:inline-block;width:44px;height:24px;">
<input type="checkbox" checked style="opacity:0;width:0;height:0;">
<span style="position:absolute;inset:0;border-radius:999px;background:var(--primary-color);transition:.2s;"></span>
<span style="position:absolute;top:3px;left:23px;width:18px;height:18px;border-radius:50%;background:#fff;transition:.2s;"></span>
</label>
</div>
</div>Keep each automation focused. A small rule with a clear name is easier to debug than one rule that tries to handle every situation.
Triggers
The trigger decides when Majestic checks the rule. The builder groups triggers by area:
- Messages: new messages, edits, deletes, reactions, pins, bulk deletes, and poll votes.
- Members: joins, leaves, profile updates, birthdays, level ups, boosts, avatar changes, username changes, and presence changes.
- Voice: voice joins, leaves, moves, voice channel status changes, and stage starts or ends.
- Server structure & integrations: channels, threads, roles, events, AutoMod, audit log, emojis, stickers, soundboard sounds, Twitch, YouTube, and scheduled runs.
Pick the most specific trigger that matches your workflow. For example, use Level Up for level rewards instead of Message with a level condition, and use Scheduled for reminders that are based on time instead of member activity.
Conditions
Conditions narrow down when a branch runs. Depending on the trigger, you can filter by fields such as:
- Author, user, role, channel, message content, attachments, links, mentions, or message length.
- Voice action, voice channel, video, streaming, mute, deaf, or member count.
- Update type for member, channel, role, or scheduled event changes.
- AutoMod rule, triggered keyword, audit action, event name, thread name, poll answer, invite code, or stream details.
- Global server context such as day of week, hour of day, month, member count, boost count, and boost tier.
Each branch has a match mode. All requires every condition to be true; Any runs the branch as soon as one condition matches.
View HTML
<div class="inner-tile" style="display:flex;align-items:center;gap:0.75rem;flex-wrap:wrap;">
<span style="font-family:var(--font-input);font-weight:600;">Match:</span>
<div style="display:inline-flex;border-radius:999px;overflow:hidden;border:1px solid var(--input-border);">
<span style="padding:0.35rem 0.9rem;background:var(--primary-color);color:#fff;font-family:var(--font-input);font-size:0.85rem;">All</span>
<span style="padding:0.35rem 0.9rem;color:var(--text-muted-color);font-family:var(--font-input);font-size:0.85rem;">Any</span>
</div>
<span style="color:var(--text-muted-color);font-size:0.85rem;">Every condition below must be true.</span>
</div>Actions
Actions are what Majestic does after a branch matches. Available actions change based on the trigger, because some actions require a member, message, channel, thread, role, voice channel, or scheduled event context.
Common actions include:
- Send Message, Send View, Send DM, Reply to Message, Send Poll, or Send Webhook.
- Add Role, Remove Role, Toggle Role, Set Nickname, Warn Member, Timeout Member, Kick Member, Ban Member, or Softban Member.
- Delete Message, Edit Message, Pin Message, Add Reaction, Clear Reactions, Create Thread, or Publish Message.
- Create, rename, lock, unlock, or delete channels.
- Create, rename, or delete roles.
- Move, disconnect, mute, unmute, deafen, or undeafen voice members.
- Archive, unarchive, lock, unlock, add users to, or remove users from threads.
- Enable or disable another automation.
- Set, increment, or decrement variables.
- Delay before the next action runs.
For scheduled automations, actions that need a message or member context are not available. Choose an explicit target channel when sending a scheduled message, view, poll, or invite.
Variables
Many text fields support variables. Click a variable in the builder to copy it, then paste it into a message, view, DM, webhook payload, nickname, warning reason, or other text action.
Useful variables include:
{user},{username},{displayname},{user_id},{account_age}, and{server_age}for member workflows.{server},{server_id},{member_count},{boost_count}, and{boost_tier}for server context.{channel},{channel_name},{channel_mention},{message_url}, and{message_content}for message workflows.{level}and{old_level}for level rewards.{twitch_name},{twitch_game},{twitch_url},{stream_title},{video_title},{video_url}, and{youtube_name}for social alerts.{date},{time},{timestamp}, and{unix}for scheduled posts.
At send time Majestic swaps each variable for a live value. A message written with {user} and {member_count} arrives looking like this:
View HTML
<div class="inner-card inner-card-row" style="display:flex;gap:0.75rem;align-items:flex-start;">
<div style="width:2.5rem;height:2.5rem;border-radius:50%;flex-shrink:0;background:linear-gradient(135deg,var(--primary-color),#8a2be2);"></div>
<div>
<div style="font-family:var(--font-input);font-weight:600;">Majestic <span style="font-size:0.7rem;background:var(--primary-color);color:#fff;border-radius:0.3rem;padding:0.05rem 0.3rem;vertical-align:middle;">APP</span></div>
<div style="margin-top:0.15rem;">Welcome <span style="color:var(--primary-color);">@NewFriend</span> to <strong>Majestic HQ</strong>. You are member <strong>#1,204</strong>. 🎉</div>
</div>
</div>Example 1: Welcome New Members
Goal: greet new members and give staff enough context to spot suspicious accounts.
- Trigger: Member Join.
- Branch: New account watch.
- Conditions: Account age is less than 7 days.
- Actions: Send Message to a staff channel with
{user},{username}, and{account_age}. Add Role such as Needs Review. - Else actions: Send Message to the welcome channel with a friendly greeting.
Example welcome text:
Welcome {user} to {server}. You are member #{member_count}.
Example 2: Filter Risky Messages
Goal: slow down messages that look disruptive without punishing normal users.
- Trigger: Message.
- Branch: Mass mention.
- Conditions: Message mentions are greater than your allowed limit, or message contains a blocked phrase.
- Actions: Delete Message, Timeout Member for a short duration, and Send Message to a mod log channel.
- Cooldown: 10 to 30 seconds, so a noisy channel does not flood staff logs.
Use this as a supplement to Discord AutoMod. AutoMod can block content first, and an AutoMod Action trigger can then log the event or notify moderators with more context.
Example 3: Reward Level Ups
Goal: give members visible milestones as they participate.
- Trigger: Level Up.
- Branch: Level 10 reward.
- Conditions: New Level is greater than or equal to 10.
- Actions: Add Role for the milestone and Send Message in the level channel.
Example message:
GG {user}, you reached level {level} in {server}.
Create separate branches for different milestones such as level 10, level 25, and level 50. Put the highest level branch first when multiple branches could match, so the biggest reward wins:
View HTML
<div style="display:flex;flex-direction:column;gap:0.5rem;">
<div class="inner-card inner-card-row" style="display:flex;align-items:center;gap:0.6rem;">
<span style="font-size:0.7rem;background:var(--success-background);color:var(--success-color);border-radius:0.3rem;padding:0.1rem 0.4rem;font-family:var(--font-input);">1st</span>
<span style="font-family:var(--font-input);font-weight:600;">Level 50</span>
<span style="color:var(--text-muted-color);font-size:0.85rem;">→ Add role “Legend”</span>
</div>
<div class="inner-card inner-card-row" style="display:flex;align-items:center;gap:0.6rem;">
<span style="font-size:0.7rem;background:var(--input-background);color:var(--text-muted-color);border-radius:0.3rem;padding:0.1rem 0.4rem;font-family:var(--font-input);">2nd</span>
<span style="font-family:var(--font-input);font-weight:600;">Level 25</span>
<span style="color:var(--text-muted-color);font-size:0.85rem;">→ Add role “Veteran”</span>
</div>
<div class="inner-card inner-card-row" style="display:flex;align-items:center;gap:0.6rem;">
<span style="font-size:0.7rem;background:var(--input-background);color:var(--text-muted-color);border-radius:0.3rem;padding:0.1rem 0.4rem;font-family:var(--font-input);">3rd</span>
<span style="font-family:var(--font-input);font-weight:600;">Level 10</span>
<span style="color:var(--text-muted-color);font-size:0.85rem;">→ Add role “Regular”</span>
</div>
</div>Example 4: Voice Room Helper
Goal: adjust a voice channel when people join or leave.
- Trigger: Voice.
- Branch: Gaming room active.
- Conditions: Voice Action is Joined Channel and Voice Channel is your gaming room.
- Actions: Set Voice Status, Set User Limit, or Send Message to a text channel.
For temporary voice or event channels, use a cooldown so the status does not change repeatedly while members move in and out.
Example 5: Stream and Upload Alerts
Goal: announce creator activity with consistent formatting.
- Trigger: Twitch Live or YouTube Upload.
- Branch: Specific creator.
- Conditions: Streamer Name or Channel Name matches the creator.
- Actions: Send View or Send Message to your announcements channel.
Example Twitch text:
{twitch_name} is live playing {twitch_game}: {twitch_url}
Example YouTube text:
New upload from {youtube_name}: {video_title} {video_url}
Example 6: Scheduled Community Posts
Goal: post recurring reminders without needing a staff member online.
- Trigger: Scheduled.
- Frequency: Once, every N minutes, hourly, daily, weekly, or monthly.
- Actions: Send Message, Send View, Send Poll, Create Invite, Create Channel, Create Role, enable or disable another automation, or update variables.
Good scheduled automations include:
- Weekly event reminders.
- Daily question prompts.
- Monthly server rule refreshers.
- Scheduled polls for game night, movie night, or meeting times.
- Temporary campaign start and stop rules using Enable Automation and Disable Automation.
Scheduled times are entered in your browser local time and stored by Majestic in UTC.
Example 7: Support Thread Routing
Goal: organize support requests without staff manually creating threads.
- Trigger: Message.
- Conditions: Channel is your support intake channel and Message Content contains a keyword such as billing, bug, appeal, or report.
- Actions: Create Thread and Send Message in the thread with next steps.
Use branches to route different keywords. For example, one branch can create a bug report thread while another creates an appeal thread.
Example 8: Branches and Else Actions
Branches let one automation handle related cases in priority order. Majestic checks each branch from top to bottom and runs the first one that matches; if none match, the Else actions run.
View HTML
<div style="display:flex;flex-direction:column;gap:0.5rem;">
<div class="inner-card inner-card-static" style="border-left:3px solid var(--danger-color);">
<div style="font-family:var(--font-input);font-weight:600;">Branch 1 · Account < 1 day</div>
<div style="color:var(--text-muted-color);font-size:0.85rem;">Add “Needs Review” · ping staff</div>
</div>
<div class="inner-card inner-card-static" style="border-left:3px solid var(--warning-color);">
<div style="font-family:var(--font-input);font-weight:600;">Branch 2 · Account < 30 days</div>
<div style="color:var(--text-muted-color);font-size:0.85rem;">Send a softer staff notice</div>
</div>
<div class="inner-card inner-card-static" style="border-left:3px solid var(--success-color);">
<div style="font-family:var(--font-input);font-weight:600;">Else</div>
<div style="color:var(--text-muted-color);font-size:0.85rem;">Send the normal welcome message</div>
</div>
</div>Else actions should be safe defaults. Avoid moderation actions in Else unless you truly want them to run when no branch matches.
Practical Tips
- Start with one trigger, one branch, and one action. Test it, then add complexity.
- Use a cooldown for message, reaction, voice, presence, and integration triggers that can fire often.
- Prefer Send View for polished announcements and Send Message for quick logs or simple notices.
- Use Delay when actions need to happen in sequence, such as sending a notice before locking a channel.
- Keep mod-log actions separate from public actions when possible.
- Use variables instead of hardcoded names, so messages stay accurate after renames.
- Review role and channel permissions before enabling actions that can moderate members or change server structure.
Troubleshooting
If an automation does not save, check that every branch has the required conditions and actions. Scheduled automations can run without conditions, but other triggers need at least one condition per branch.
If a scheduled message does not validate, make sure actions like Send Message, Send View, Send Poll, and Create Invite have a target channel selected.
If a moderation action does not run, verify that Majestic has the required Discord permissions and that the bot role is above the target member or role.
If a text action looks wrong, check the available variables for the selected trigger. Variables are scoped, so a message variable such as {message_url} will not be available on every trigger.