Action Nodes
Side-effect nodes that send messages, manage tickets, modify members, and more.
Action nodes perform work in Discord or your library. Each has one flow input, one flow output, and data inputs for the values it needs. Actions only execute when reached by a flow wire.
Value nodes (literals, fetchers, transforms) are documented implicitly through the node library in the editor. This page covers actions — the nodes that cause side effects.
Messages
| Node | What it does |
|---|---|
| Send Template / Send Template to DMs | Post a built template, or edit a user-made template message in place |
| Reply to Interaction | Fill the command's original response and return a response handle |
| Follow Up | Send another command response from an interaction or response handle |
| Fetch Interaction Response | Get the original response or a follow-up as a response handle |
| Edit Interaction Response / Delete Interaction Response | Update or remove a response through its handle |
| React / Remove Reaction | Add or remove a reaction |
| Delete / Edit / Pin / Unpin | Manage an existing message |
For template sends, wire a channel (or user), template, and optional variables dictionary — see Templates in automations. To edit an existing template message, wire it into Send Template's Edit Message input instead of posting a new one.
Interaction responses
Use interaction response nodes with the Command Executed trigger's Interaction output. A slash run goes through Discord's interaction response API, so they can safely manage the original response even when it is ephemeral. A prefix run fills the same socket and the same nodes work on plain messages instead: the original response is a reply to the message that ran the command, follow-ups are further messages in that channel, and ephemeral is ignored.
- Reply to Interaction fills the original, deferred response. It returns a Response handle for later nodes.
- Follow Up accepts either the original Interaction or a Response handle. When both are connected, Response is used. It returns the new response so you can continue its lifecycle.
- Fetch Interaction Response reads the original response when Message ID is blank; give it a follow-up's ID to obtain that response instead.
- Wire a handle from Reply, Follow Up, or Fetch Interaction Response into Edit Interaction Response or Delete Interaction Response.
The handle exposes safe fields such as its kind, Message ID, visibility, whether it uses Components V2, content, channel, and creation time. Discord's response credential stays private to the automation runtime.
Reply to Interaction, Follow Up, and Edit Interaction Response take the same rich payload as template sends: a required Template and an optional Dictionary, covering traditional templates, Components V2, variables, and continuation buttons. Use Make Template or Compose Template to build the payload — plain text and single embeds are templates too.
Discord cannot convert a Components V2 response back to a traditional message. When editing one, use another Components V2 template.
Editing or replacing a response also replaces its component routes. A follow-up creates routes for its own components, and deleting a response removes its routes. This keeps buttons and select menus on response templates working without leaving stale interactions behind.
The trigger's Ephemeral reply setting fixes the original response's visibility before the graph starts. A follow-up can choose its own visibility, but it cannot change an existing response. On a slash run, every response handle expires 15 minutes after the command begins.
On a prefix run, ephemeral is ignored and the responses are ordinary
messages, so they never expire. Branch on the interaction's Kind field
(command or message) when a graph needs to tell the two apart.
Tickets
| Node | What it does |
|---|---|
| Create Ticket | Opens a new ticket channel |
| Close / Transfer / Claim / Unclaim | Manage ticket lifecycle |
| Request Close | Ask the member to confirm closing |
| Add Note / Add User / Remove User | Staff actions on a ticket |
Members
| Node | What it does |
|---|---|
| Add Role / Remove Role | Change member roles |
| Kick / Ban / Timeout | Moderation actions |
| Set Nickname | Update a member's nickname |
Channels
| Node | What it does |
|---|---|
| Rename / Delete / Clone | Manage a channel |
| Create Text/Voice/Category/Thread | Create new channels |
| Set Topic / Set Slowmode / Set NSFW / Set Category | Channel settings |
| Create Invite Link | Generate an invite |
Library
| Node | What it does |
|---|---|
| Create Folder | Add a library folder |
| Rename/Move/Delete File | Manage library files |
| Rename/Move/Delete Folder | Manage library folders |
HTTP & verification
| Node | What it does |
|---|---|
| API Request | Call an external HTTP endpoint |
| Force Verify / Force Unverify | Override a member's server verification state and run verification automations |
| Roblox Verify Prompt / Roblox Verify Prompt (DM) | Prompt a member to verify their Roblox account |
API Request can use ${env.secret_name} in its URL, headers, or body to inject
an approved server secret at runtime. Do not paste
credentials directly into an automation graph.
Value nodes in the editor
The node library sidebar groups nodes by domain — the same way as the editor:
| Category | Examples |
|---|---|
| Values | Text, Number, Boolean, Color, Duration, Emoji, UUID |
| Messages | Fetch Message, Link to Message |
| Members | Fetch Member, Has Role, Mention User |
| Channels | Channel, Fetch Channels, Mention Channel |
| Roles | Role, Fetch Roles, Mention Role |
| Server | Server Name, Member Count, Boost Tier |
| Tickets | Ticket Panel, Fetch Tickets |
| Templates | Compose Template, Make Button, Build V2 Template, Extract Template, Break Regular Template |
| Library | Library File, Fetch Files/Folders |
| Text / Numbers / Logic / Compare | Format, Add, And/Or, Equals, Less Than |
| Arrays / Dictionaries | Make Array, Get Entry, Merge |
| Time | Now, Format Time, Make Duration |
| Storage | Get/Set Stored Value |
| HTTP | Make JSON Body, HTTP Method |
Data wires only connect assignable types. If two sockets cannot connect, the types are incompatible.
Related
How is this guide?