Flows

Build Discord automations step by step

A flow starts from a command or event, follows connected nodes, and can interact with members, data and external services.

Flows need Tier 2.


01

How a flow works

Flows run several steps: messages, buttons, forms, roles and conditions. You build them in the editor.

  1. 01

    Trigger

    The trigger (chat command or schedule) is configured in the Trigger section below the canvas. Drag from the handle on the right to pick the first step.

  2. 02

    Canvas editor

    Drag to pan · wheel to zoom · Shift + drag to select · Delete removes

  3. 03

    Publish

    Publish this version? Members will run it from now on.

02

Trigger

Flows run several steps: messages, buttons, forms, roles and conditions. You build them in the editor.

Chat command

Members type the command with the prefix. The flow answers in the channel it was called from.

Schedule

The flow runs on a schedule, with no member involved. Steps that need a member are not available.

Member joins

Runs when someone joins the server. Pick the channel where the flow should post.

Member leaves

Runs when someone leaves the server. The person is gone, so roles, DMs and warnings are not available.

Level up

Runs when a member reaches a new level. Optionally only from a minimum level.

Reaction added

Runs when a member reacts with this emoji. Leave message and channel empty to match every message.

Keyword in chat

Runs when a message contains this keyword. Leave the channel empty to watch every channel.

Button panel

The bot posts a fixed message with buttons into the channel. Each button starts the flow at the step you choose.

03

Nodes and what they do

Choose a node from the editor palette, connect it to the next step, then publish when the path is complete.

Message

reply Reply

Replies to the command or interaction that started the flow.

Details
  • Text
  • Only visible to the member
send_message Send message

Posts a message in the selected channel and can branch through buttons.

Details
  • Text
  • Channel
  • Buttons
send_dm Send DM

Sends a direct message to the member who started the flow.

Details
  • Text
send_card Send card

Posts a formatted Discord card with optional title, colour, footer and image.

Details
  • Text
  • Form title
  • Color (#RRGGBB)
  • Footer
  • Image (https URL)
  • Channel
add_reaction Add reaction

Adds an emoji reaction to the Discord message that started the flow.

Details
  • Emoji
create_thread Create thread

Creates a thread for the flow message and can post opening text.

Details
  • Thread name
  • Text
log Write to mod log

Writes a message to the server’s configured moderation log.

Details
  • Text

Input

form Open form

Runs only from a Discord interaction and opens a modal whose submitted fields are available to later steps.

Details
  • Form title
  • Fields
select_menu Select menu

Shows a select menu; each option sends the flow to its own branch.

Details
  • Text
  • Options
  • Placeholder
wait_for_message Wait for a message

Waits for a member message, with a separate branch when time runs out.

Details
  • Wait at most (minutes)
  • If false

Flow control

condition Condition

Checks a rule and continues through its yes or no branch.

Details
  • Condition
  • If true
  • If false
set_var Set variable

Stores a value in a variable for the current run.

Details
  • Variable name
  • Value
random Random

Picks a random number or list value and stores it in a variable.

Details
  • Variable name
  • Recipients
  • Choices
delay Wait

Pauses the run before continuing with the next step.

Details
  • Minutes
end End flow

Stops the flow immediately, optionally with a reason for the run log.

Details
  • Reason
run_flow Run another flow

Starts an independent fire-and-forget child run; target admission and cooldown are checked again.

Details
  • Flow
ai_generate Generate text (AI)

Generates text from a prompt for use in later steps.

Details
  • Prompt
  • Maximum length (characters)

Data

store_record Save record

Saves mapped values as a record in a selected collection.

Details
  • Collection
  • Field mapping
find_record Find record

Looks up a collection record and branches depending on whether it exists.

Details
  • Collection
  • Field
  • Value
  • If false
update_record Update record

Updates a record of the triggering member and can branch when none is found.

Details
  • Collection
  • Field mapping
  • If false
delete_record Delete record

Removes the triggering member’s records from a selected collection.

Details
  • Collection
send_mail Send e-mail

Uses a verified mail provider. A single recipient needs a stored recipient record; collection and broadcast recipients must be confirmed and unsubscribe-safe.

Details
  • Wallet entry
  • Recipients
  • To
  • Subject
  • Message
http_request Call API

Calls only a configured provider and relative path, never an arbitrary URL; at most three requests, with a delay after each.

Details
  • Wallet entry
  • Method
  • Path
  • Request body (JSON)

Member

add_role Add role

Gives the triggering member the selected Discord role.

Details
  • Role
remove_role Remove role

Removes the selected Discord role from the triggering member.

Details
  • Role
add_coins Give coins

Adds coins to the triggering member’s balance.

Details
  • Amount
spend_coins Charge coins

Charges coins from the triggering member and branches if funds are insufficient.

Details
  • Amount
  • If false
add_xp Give XP

Adds experience points to the triggering member.

Details
  • Amount
warn Warn member

Creates a moderation warning for the triggering member.

Details
  • Reason
timeout Time out member

Temporarily times out the triggering member for the chosen duration.

Details
  • Minutes
  • Reason
04

Copyable Maid Script examples

Use these ready-to-copy Maid Script examples for common automations.

The diagram is only a visual guide. Each script compiles safely into a linear flow.

Button panel → Open form → Save record → Send e-mail → Reply
  1. Button panelThe bot posts a fixed message with buttons into the channel. Each button starts the flow at the step you choose.
  2. formOpen form
  3. store_recordSave record
  4. send_mailSend e-mail
  5. replyReply
Maid Script Scheduled reminder
send "Community reminder"
delay 60m
send "Please check the update."
end
Maid Script Member-join greeting
set greeting = "Welcome, {user.name}!"
send "{var.greeting}"
card "Start with the server rules."
end
05

Condition

If true · If false

  • Member has role
  • Member does not have role
  • Member has one of these roles
  • Member is an admin
  • Member is a server booster
  • Account is at least this many days old
  • Member joined at least this many days ago
  • Level is at least
  • Coins are at least
  • Value equals
  • Value contains
  • Value starts with
  • Value ends with
  • Value is empty
  • Number is at least
  • Number is at most
  • Member already has a record
  • Record count is at least
  • Runs in this channel
  • Weekday is
  • Time is between
  • Random chance

Placeholders

Placeholders: {user.name}, {user.mention}, {user.id}, {server.name}, {server.members}, {channel.name}, {channel.mention}, {args}, {args.1} to {args.9}, {now.date}, {now.time}, plus {form.<key>} and {record.<key>} during a run.

{user.name}{server.name}{channel.mention} {args.1}{form.email}{record.id} {var.name}{ai.text}{http.status}

Send e-mail · Call API

  • Send e-mailThis is the only place {links.confirm} and {links.unsubscribe} may be used.
  • Call APIAt most 3 API calls per flow. On every path, add a Wait step of at least 1 minute between two calls.
  • Open formWait point: the flow pauses here until the member responds
  • Maid ScriptOnly reply, send, card, set, random, delay and end are available. There is no JavaScript, loops, HTTP access or file access.
06

Maid Script

Maid Script compiles to a safe, linear flow. It never executes arbitrary code.

Applying replaces the entire draft and resets the canvas layout, labels and regions.

Only reply, send, card, set, random, delay and end are available. There is no JavaScript, loops, HTTP access or file access.

Maid Script Welcome via command or panel
set greeting = "Welcome"
random mood from "calm" "curious" "happy"
reply "{var.greeting}, {user.name}!"
card "Mood: {var.mood}"
end