Skip to content

Modules

Workflows

Draw automations on a canvas: triggers, checks, actions and flow steps, a node reference, variables and six templates.

Workflows are the Module Maker drawn as a picture. You put a trigger on the canvas, wire it to checks and actions, and the bot follows the wires every time the trigger happens. A check splits the path in two, every action can go one way when it works and another when it does not, and you can watch a test run light up the path step by step before anything goes live.

Where it is

Dashboard, pick your server, then Workflows under Tools. Your old custom modules stay on the Module maker page and keep running exactly as before; workflows are separate.

Build one#

  1. 1
    Start. Press New workflow, or pick a template (they are listed below). A template opens as a draft with the channels and roles it still needs marked in red.
  2. 2
    Add steps. Drag a step from the left onto the canvas, or click it to drop it next to the step you have selected, already wired to its first free output. The search box (press /) finds a step by name.
  3. 3
    Wire it. Drag from an output dot on the right of a step to the input dot on the left of another. A wire that would make a loop, or lead into a trigger, is refused. Click a wire and press Delete to remove it.
  4. 4
    Set it up. Click a step to open its settings on the right. Any text box with a { } button takes variables. Messages can use a saved embed from the Embed Builder.
  5. 5
    Check it. The badge at the top says Valid, or how many things need fixing. Broken steps have a red ring, and an output that must lead somewhere has a red dot. Click the badge for the list; click a line to jump to the step.
  6. 6
    Test it. Test run fires the trigger once with you as the member and animates the path. It is a dry run unless you switch that off and pick a test channel: then messages and replies post in that channel and roles change on you for real.
  7. 7
    Publish. Save keeps a draft. Publish makes it live and keeps a version you can bring back from Workflow settings. Editing a live workflow changes the draft only, until you publish again. A button or menu trigger posts its message in the channel when you publish.

Keyboard#

KeysDoes
Ctrl+SSave the draft
Ctrl+Z, Ctrl+Shift+Z (or Ctrl+Y)Undo, redo
Delete or BackspaceDelete the selected steps or wires
Ctrl+D, Ctrl+C then Ctrl+VDuplicate, copy and paste steps
FFit everything on screen
/Search the steps
EscDeselect and close panels
?Show the shortcuts

Node reference#

Triggers (When)#

Every workflow starts with exactly one. It decides when the workflow runs and what the steps after it know: the member, the channel, the message, the button they clicked.

StepWhat it doesSettingsOutputs
Button clickedWhen a member clicks one of this workflow's buttonsPost the buttons in; Message above the buttons; ButtonsOne per button
Select menu chosenWhen a member picks from this workflow's menuPost the menu in; Message above the menu; Menu placeholder (optional); Options; How many they can pick (optional)Then
Message sentWhen a member sends a messageOnly in these channels (optional); Only when it contains (optional)Then
Member joinsWhen someone joins the serverNothing to setThen
Member leavesWhen someone leaves the serverNothing to setThen
Reaction addedWhen a member reacts to a messageEmoji; Only on this message (id) (optional); Only in this channel (optional)Then
Role addedWhen a member is given a roleOnly these roles (optional)Then
Role removedWhen a role is taken off a memberOnly these roles (optional)Then
Slash commandWhen a member uses /server customCommand name (/server custom <name>)Then
ScheduledOn a scheduleWhen; Channel it runs in (optional)Then
Voice channel joinedWhen a member joins a voice channelOnly these voice channels (optional)Then
Voice channel leftWhen a member leaves voiceOnly these voice channels (optional)Then
Voice channel movedWhen a member moves between voice channelsOnly these destination channels (optional)Then
Form submittedWhen a member sends one of your FormsFormThen

Conditions#

A check has two outputs, the first when it holds and the second when it does not. Wire either one, or both.

StepWhat it doesSettingsOutputs
Role filterBranches on whether the member has matching rolesRoles; Match (optional)Has role, Missing
Channel filterOnly continues when it happened in one of these channelsChannelsIn channel, Elsewhere
User filterBranches on whether the member is one of these peopleMembersMatch, No match
Permission checkBranches on whether the member holds a permissionPermissionAllowed, Denied
Text contains or matchesBranches on a piece of textText to check; How (optional); Looks for; Case sensitive (optional)Match, No match
CooldownLets it through once per time windowSeconds; Per (optional)Ready, Cooling down
Random chanceRolls the diceChance (%)Hit, Miss
Compare variableCompares two valuesValue; Is; Than (optional)True, False
Account ageBranches on how old their Discord account isAt least (days)Old enough, Too new

Actions#

Every action has a Success and a Failure output. If the bot is missing a permission (Manage Roles, a role above its own, Timeout Members, sending in that channel) or Discord says no, the run goes down Failure instead of stopping.

StepWhat it doesSettingsOutputs
Send channel messageSends a message to a channelChannel (blank: where it happened) (optional); MessageSuccess, Failure
Send direct messageDMs the memberMessageSuccess, Failure
ReplyReplies to the click, the command or the messageMessage; Only they can see it (optional)Success, Failure
Show formOpens a form for the memberForm title; QuestionsSubmitted, Failure
Add roleGives the member rolesRoles (optional); Or the roles picked in form question (optional)Success, Failure
Remove roleTakes roles off the memberRoles (optional); Or the roles picked in form question (optional)Success, Failure
Set nicknameChanges the member's nicknameNickname (blank resets it) (optional)Success, Failure
TimeoutTimes the member outMinutes; Reason (optional)Success, Failure
Kick memberKicks the member from the serverReason (optional)Success, Failure
Ban memberBans the member from the serverReason (optional); Delete recent messages (optional)Success, Failure
Move in voiceMoves the member to a voice channelMove toSuccess, Failure
Disconnect from voiceDisconnects the member from voiceNothing to setSuccess, Failure
Add reactionAdds an emoji to the message that triggered the workflowEmojiSuccess, Failure
Delete trigger messageDeletes the message that started the workflowNothing to setSuccess, Failure
Create text channelCreates a text channel in the serverChannel name; Topic (optional)Success, Failure
Create threadOpens a threadThread name; Channel (blank: where it happened) (optional); Private thread (adds the member) (optional)Success, Failure
Server currencyAdds or removes server currencyDo; AmountSuccess, Failure
Give XPGives the member server XPXPSuccess, Failure
Open a ticketOpens a ticket for the memberTicket typeSuccess, Failure
Set variableStores a value for laterKept per; Name; Do; Value (optional)Success, Failure
Call webhookPosts JSON to an HTTPS addressHTTPS address; Extra JSON (optional) (optional)Success, Failure

Flow#

Steps that shape the run rather than do something in Discord.

StepWhat it doesSettingsOutputs
DelayWaits before continuingWaitThen
Wait for replyWaits for the member to say something in the channelGive up afterReplied, Timed out
BranchRuns up to three paths, one after the otherNothing to setPath 1, Path 2, Path 3
MergeJoins paths; what comes after runs onceNothing to setThen
StopEnds the run hereNothing to setNone

A form can only open as the first answer to a click, a menu pick or a slash command, within 3 seconds, so keep Show form right after the trigger or a check. A menu question in a form can list roles, and Add role or Remove role can take the roles picked in that question. Branch runs its paths one after the other; Merge lets what comes after it run once however many paths reach it.

Variables#

Type them in any text, or insert them with the { } button next to the box.

VariableIsExample
{member}Member nameDom
{member.mention}Member mention@Dom
{member.id}Member id1234
{member.username}Member usernamedom
{server}Server nameDispresso
{server.members}Member count812
{channel}Channel namegeneral
{channel.mention}Channel mention#general
{message}Message text (after Message sent)hello
{reply}Their reply (after Wait for reply)yes
{button.label}Button clicked (after Button clicked)Join
{select.labels}Options chosen (after Select menu chosen)Server 1, Server 3
{select.values}Values chosen (after Select menu chosen)s1, s3
{role}Role given or taken (after Role added or Role removed)@Member
{emoji}Reaction emoji (after Reaction added)👍
{voice.before}Previous voice channel (after Voice channel left or Voice channel moved)Lobby
{voice.after}New voice channel (after Voice channel joined or Voice channel moved)Gaming
{form.<field>}A form answer (after Show form or Form submitted){form.age}
{var.<name>}Server variable{var.giveaway_count}
{user.var.<name>}Member variable{user.var.points}
{date}Today (UTC)2026-09-29
{time}Time now (UTC)18:04

Set variable keeps a value per member ({user.var.name}) or for the whole server ({var.name}), set, added to or taken from. A variable nobody has set yet reads 0. Compare variable checks one against a number or a word.

Templates#

TemplateWhat it doesYou fill in
Server selectionA button opens a menu of your servers. Picking gives the roles; clicking again with a role takes them off.The channel for the button; The server roles, on the check, the menu and Remove role
Role menu with a confirmationA menu of roles. Members pick, get the roles and a private confirmation of exactly what they got.The channel for the menu; One option per role (the value is the role)
Verification gate with a formA Verify button checks the account is not brand new, asks two questions and hands over the member role.The channel for the Verify button; The role verified members get
Staff application to a ticketAn Apply button, once a day per member, asks three questions and opens a ticket with the answers inside.The channel for the Apply button; The ticket type applications open
Giveaway entryAn Enter button that lets each member in once and keeps a running count of entries.The channel for the Enter button
Welcome flowGreets every new member, gives established accounts the member role and flags brand new accounts to staff.The welcome channel; The member role; The staff channel for new-account flags
Keyword auto-responderWatches selected channels for a word or phrase, then replies without pinging the author.The channels to watch; The phrase to match; The reply
Question of the dayPosts one conversation prompt every day at the time you choose.The time and channel; The daily question
Reaction roleGives a role when somebody reacts to one specific message with the emoji you choose.The emoji and message id; The role to give
Suggestion boxA button opens a short form, posts the suggestion, and adds voting reactions.The panel channel; The suggestion channel

Plans#

The editor, test runs and run history are free on every server. The plan sets how many workflows run at once and how big they are.

FreeServer BoostServer Elite
Published workflows31550
Steps per workflow1540100
Longest delay5 minutes1 day7 days
Longest wait for a reply5 minutes1 hour1 day
Steps one run can take40120300
Runs per minute, per workflow30120300

A server with a live Custom Bot Instance gets the Server Elite limits.

Safety rails#

RailWhat happens
LoopsA wire that closes a loop is refused in the editor and at publish. To go round again, use a second trigger.
PermissionsThe bot checks before it acts and never does what it is not allowed to; that step takes Failure.
Runaway runsA run stops at its plan's step limit. A member can fire one workflow 8 times in 10 seconds at most, and two workflows that give each other's roles stop after 3 rounds.
WebhooksCall webhook posts JSON to a public https address only, never a local or private one, at most 20 calls a minute per server, 5 seconds to answer.
MentionsMessages never ping @everyone, @here or a role, even if the text says to.
Run historyThe last 50 runs of each workflow, with every step it took, what it did and why a step failed. Open one to see its path on the canvas.

Share a workflow#

Workflow settings has Export (a JSON file) and Duplicate. Import on the Workflows page takes an exported file from any server; channels, roles and members that are not in your server are left empty for you to pick, so nothing points somewhere it should not.