Node reference
Every one of the 136 nodes in the builder, generated from the live catalog. Dots are typed pins; a * marks a required input.
Discord
Message sent
TriggerFires when a message is sent in a watched channel.
discord.message
Outputs
- Contentstring
- Authormember
- Channelchannel
- Messagemessage
- Mentioned memberslist<member>
- Pinged role idslist<string>
Member joined
TriggerFires when someone joins the server.
discord.member-join
Outputs
- Membermember
Reaction added
TriggerFires when a member reacts to a message (build reaction roles with this).
discord.reaction-add
Outputs
- Membermember
- Emojistring
- Message IDstring
- Channelchannel
Reaction removed
TriggerFires when a member removes a reaction (pair with “Reaction added†to take a role back).
discord.reaction-remove
Outputs
- Membermember
- Emojistring
- Message IDstring
- Channelchannel
Member left
TriggerFires when someone leaves or is removed from the server.
discord.member-leave
Outputs
- Membermember
- Days in servernumber
Member banned
TriggerFires when a user is banned from the server (build a mod log with this).
discord.member-banned
Outputs
- Useruser
- Reasonstring
Member unbanned
TriggerFires when a ban is lifted.
discord.member-unbanned
Outputs
- Useruser
Message edited
TriggerFires when a message is edited (before + after content for an edit log).
discord.message-edit
Outputs
- Beforestring
- Afterstring
- Authormember
- Channelchannel
- Messagemessage
Message deleted
TriggerFires when a message is deleted (content + author for a delete log).
discord.message-delete
Outputs
- Contentstring
- Authormember
- Channelchannel
Roles changed
TriggerFires when a member's roles change (one trigger per role added/removed).
discord.role-change
Outputs
- Membermember
- Added rolestring
- Removed rolestring
Nickname changed
TriggerFires when a member's nickname changes (before + after).
discord.nickname-change
Outputs
- Membermember
- Beforestring
- Afterstring
Channel created
TriggerFires when a channel is created.
discord.channel-created
Outputs
- Channelchannel
- Namestring
Channel deleted
TriggerFires when a channel is deleted.
discord.channel-deleted
Outputs
- Namestring
- Channel IDstring
Voice state changed
TriggerFires when a member joins, leaves, or moves voice channels (build join-to-create with this).
discord.voice-update
Outputs
- Membermember
- From channelchannel
- To channelchannel
- Actionstring
Has role?
ConditionTrue when the member has the given role.
discord.has-role
Inputs
- Member*member
- Role*role
Outputs
- Matchedboolean
Send message
ActionSends a message to a channel.
discord.send-message
Inputs
- Channel*channel
- Content*string
Outputs
- Sent messagemessage
Needs Discord permission: SendMessages
Reply to message
ActionReplies directly to a message (e.g. the one that triggered the flow).
discord.reply
Inputs
- Message*message
- Content*string
Outputs
- Replymessage
Needs Discord permission: SendMessages
Send embed
ActionSends a rich embed to a channel.
discord.send-embed
Inputs
- Channel*channel
- Titlestring
- Descriptionstring
- Colorstring
Outputs
- Sent messagemessage
Needs Discord permission: SendMessages, EmbedLinks
Send DM
ActionSends a direct message to a user (best-effort — DMs may be closed).
discord.send-dm
Inputs
- User*user
- Content*string
Add reaction
ActionReacts to a message with an emoji.
discord.add-reaction
Inputs
- Message*message
- Emoji*string
Needs Discord permission: AddReactions
Delete message
ActionDeletes a message.
discord.delete-message
Inputs
- Message*message
Needs Discord permission: ManageMessages
Pin message
ActionPins a message in its channel.
discord.pin-message
Inputs
- Message*message
Needs Discord permission: ManageMessages
Create thread
ActionOpens a new thread in a channel.
discord.create-thread
Inputs
- Channel*channel
- Name*string
Outputs
- Threadchannel
Needs Discord permission: CreatePublicThreads
Add role
ActionGives a member a role.
discord.add-role
Inputs
- Member*member
- Role*role
Needs Discord permission: ManageRoles
Remove role
ActionTakes a role away from a member.
discord.remove-role
Inputs
- Member*member
- Role*role
Needs Discord permission: ManageRoles
Timeout member
ActionTimes a member out for a number of minutes.
discord.timeout-member
Inputs
- Member*member
- Minutes*number
- Reasonstring
Needs Discord permission: ModerateMembers
Kick member
ActionRemoves a member from the server.
discord.kick-member
Inputs
- Member*member
- Reasonstring
Needs Discord permission: KickMembers
Ban member
ActionBans a user from the server.
discord.ban-member
Inputs
- User*user
- Reasonstring
Needs Discord permission: BanMembers
Edit message
ActionEdits a message the bot sent earlier.
discord.edit-message
Inputs
- Message*message
- New contentstring
- Message (builder)any
Clear reactions
ActionRemoves all reactions from a message.
discord.clear-reactions
Inputs
- Message*message
Needs Discord permission: ManageMessages
Publish (crosspost)
ActionPublishes a message in an announcement channel to following servers.
discord.crosspost
Inputs
- Message*message
Needs Discord permission: ManageMessages
Purge messages
ActionBulk-deletes recent messages in a channel (up to 100, newer than 14 days).
discord.purge
Inputs
- Channel*channel
- How many*number
Outputs
- Deletednumber
Needs Discord permission: ManageMessages
Set slowmode
ActionSets a channel’s slowmode (seconds between messages; 0 to clear).
discord.set-slowmode
Inputs
- Channel*channel
- Seconds*number
Needs Discord permission: ManageChannels
Rename channel
ActionRenames a channel (great for live counters).
discord.set-channel-name
Inputs
- Channel*channel
- Name*string
Needs Discord permission: ManageChannels
Create channel
ActionCreates a new channel, optionally under a category.
discord.create-channel
Inputs
- Name*string
- Type*string
- Category IDstring
- Private (staff-only)boolean
- Staff rolerole
- Allow duplicatesboolean
Outputs
- Channelchannel
Needs Discord permission: ManageChannels
Set nickname
ActionChanges a member’s nickname.
discord.set-nickname
Inputs
- Member*member
- Nickname*string
Needs Discord permission: ManageNicknames
Move to voice
ActionMoves a member into a voice channel.
discord.move-voice
Inputs
- Member*member
- Voice channel*channel
Needs Discord permission: MoveMembers
Disconnect from voice
ActionKicks a member out of voice.
discord.disconnect-voice
Inputs
- Member*member
Needs Discord permission: MoveMembers
Toggle role
ActionAdds the role if the member lacks it, removes it if they have it.
discord.toggle-role
Inputs
- Member*member
- Role*role
Outputs
- Added?boolean
Needs Discord permission: ManageRoles
Bot latency
ValueThe bot's current round-trip latency in milliseconds (build a ping command).
discord.bot-latency
Outputs
- Latency (ms)number
Member count
ValueHow many members are in the server.
discord.member-count
Outputs
- Membersnumber
Reaction count
ValueHow many people reacted to a message with an emoji (build a starboard).
discord.reaction-count
Inputs
- Message*message
- Emoji*string
Outputs
- Countnumber
Who reacted
ValueThe users who reacted to a message with an emoji (loop over them).
discord.reactors
Inputs
- Message*message
- Emoji*string
Outputs
- Userslist<user>
Get a message
ValueLoads a message by channel + id (so a later flow can edit or read it).
discord.fetch-message
Inputs
- Channel*channel
- Message ID*string
Outputs
- Messagemessage
- Contentstring
Lock / unlock channel
ActionAllows or denies sending messages for a role (or @everyone) in a channel — lockdowns and ticket privacy.
discord.lock-channel
Inputs
- Channel*channel
- Locked?*boolean
- Rolerole
Needs Discord permission: ManageRoles, ManageChannels
Delete channel
ActionDeletes a channel (ticket close, empty temp-voice cleanup).
discord.delete-channel
Inputs
- Channel*channel
Needs Discord permission: ManageChannels
Button clicked
TriggerFires when someone clicks a button this bot sent. Set “Button id†to react to one specific button (build tickets, self-roles, verify).
discord.button-click
Inputs
- Button idstring
Outputs
- Membermember
- Channelchannel
- Messagemessage
- Button idstring
Menu choice made
TriggerFires when someone picks from a select menu this bot sent.
discord.select
Inputs
- Menu idstring
Outputs
- Membermember
- Channelchannel
- Chosen valueslist<string>
Form submitted
TriggerFires when someone submits a form (modal) this bot opened. Field values arrive as a list of { id, value }. NOTE: opening a form from a button is a fast-follow — see ADR 0025.
discord.modal-submit
Inputs
- Form idstring
Outputs
- Membermember
- Channelchannel
- Fieldslist<any>
Slash command
TriggerFires when someone runs a /command on this server. Set the name, options, and (optionally) a required permission. Reply with “Reply to commandâ€.
discord.command
Inputs
- Command name*string
- Descriptionstring
- Optionsany
- Required permissionstring
Outputs
- Membermember
- Channelchannel
- Optionslist<any>
Command option
ValueReads one of a slash command's option values by name.
command.option
Inputs
- Options*list<any>
- Option name*string
Outputs
- Valueany
Reply privately
ActionReplies privately to whoever ran the slash command OR clicked the button that started this flow (only they see it). Use a plain-text reply, or open the builder for a rich Components V2 message.
discord.reply-command
Inputs
- Reply (text)string
- Rich messageany
Send buttons
ActionSends a message with up to 5 buttons. One button per line: “Label | id | style†(style = primary/secondary/success/danger). Clicks fire “Button clickedâ€.
discord.send-buttons
Inputs
- Channel*channel
- Message*string
- Buttons*string
Outputs
- Sent messagemessage
Needs Discord permission: SendMessages
Send menu
ActionSends a message with a select menu. One option per line: “Label | valueâ€. Choices fire “Menu choice madeâ€.
discord.send-select
Inputs
- Channel*channel
- Message*string
- Menu id*string
- Options*string
- Placeholderstring
Outputs
- Sent messagemessage
Needs Discord permission: SendMessages
Send message
ActionSends a rich message — text, embeds, images, buttons, menus — to a channel, a DM, or as a reply. Built with the message builder.
discord.send
Inputs
- Send to*string
- Channelchannel
- Useruser
- Reply tomessage
- Membermember
- Message*any
Outputs
- Sent messagemessage
Needs Discord permission: SendMessages, EmbedLinks
Update panel
ActionPosts a message the first time, then edits that same message on every later run with the same name — a live panel (e.g. an in-game player count). Self-heals if the message was deleted.
discord.update-panel
Inputs
- Panel name*string
- Channel*channel
- Membermember
- Useruser
- Message*any
Outputs
- Panel messagemessage
Needs Discord permission: SendMessages, EmbedLinks
ER:LC
Emergency call
★TriggerFires on an in-game emergency call (includes the map location).
erlc.emergency-call
Outputs
- Callerplayer
- Messagestring
- Locationstring
Player joined
TriggerFires when a player joins the in-game server.
erlc.player-join
Outputs
- Playerplayer
- Player countnumber
Player left
TriggerFires when a player leaves the in-game server.
erlc.player-leave
Outputs
- Playerplayer
- Player countnumber
Player count crossed
TriggerFires when the in-game player count rises to or above a threshold (set it in the flow with a Branch).
erlc.player-count
Outputs
- Player countnumber
- Max playersnumber
Server status
ValueReads the in-game server: player count, max players, queue length, staff online (players in-game with a staff rank) and name.
erlc.server-status
Outputs
- Playersnumber
- Max playersnumber
- In queuenumber
- Staff onlinenumber
- Namestring
Needs Discord permission: ManageGuild
Players in-game
ValueThe list of players currently in the server (loop over them with For each).
erlc.players
Outputs
- Playerslist<player>
Needs Discord permission: ManageGuild
Staff roster
ValueYour server's FULL staff roster (every Admin/Mod/Helper, online or not) — a list of { id, name, rank }. For how many staff are in-game right now, use Server status → Staff online.
erlc.staff
Outputs
- Stafflist<any>
Needs Discord permission: ManageGuild
Vehicles spawned
ValueVehicles currently spawned in-game — a list of { owner, name, texture }.
erlc.vehicles
Outputs
- Vehicleslist<any>
Needs Discord permission: ManageGuild
Kill log
ValueRecent kills in-game — a list of { killer, killed, timestamp }.
erlc.kill-log
Outputs
- Killslist<any>
Needs Discord permission: ManageGuild
Command log
ValueRecent `:` commands run in-game — a list of { player, command, timestamp }.
erlc.command-log
Outputs
- Commandslist<any>
Needs Discord permission: ManageGuild
Ban list
ValueThe in-game ban list — a list of { id, name }.
erlc.bans
Outputs
- Banslist<any>
Needs Discord permission: ManageGuild
In-game hint
ActionShows a hint to everyone in the server (:h).
erlc.hint
Inputs
- Text*string
Needs Discord permission: ManageGuild
In-game announcement
ActionSends a server-wide message (:m).
erlc.announce
Inputs
- Text*string
Needs Discord permission: ManageGuild
PM player
ActionSends a private message to one player in-game (:pm).
erlc.pm
Inputs
- Player*player
- Text*string
Needs Discord permission: ManageGuild
Kick player (in-game)
★ActionKicks a player from the in-game server (:kick). Requires ER:LC commands to be enabled.
erlc.kick
Inputs
- Player*player
- Reasonstring
Needs Discord permission: ManageGuild
Ban player (in-game)
★ActionBans a player from the in-game server (:ban). Requires ER:LC commands to be enabled.
erlc.ban
Inputs
- Player*player
- Reasonstring
Needs Discord permission: ManageGuild
Unban player (in-game)
★ActionRemoves a ban (:unban). Requires ER:LC commands to be enabled.
erlc.unban
Inputs
- Player*player
Needs Discord permission: ManageGuild
Jail player (in-game)
★ActionJails a player (:jail). Requires ER:LC commands to be enabled.
erlc.jail
Inputs
- Player*player
Needs Discord permission: ManageGuild
Unjail player (in-game)
★ActionReleases a player from jail (:unjail). Requires ER:LC commands to be enabled.
erlc.unjail
Inputs
- Player*player
Needs Discord permission: ManageGuild
Teleport player (in-game)
★ActionTeleports a player to another player or a location (:tp). Requires ER:LC commands to be enabled.
erlc.teleport
Inputs
- Player*player
- To (player or place)*string
Needs Discord permission: ManageGuild
Set weather (in-game)
★ActionChanges the in-game weather (:weather). Requires ER:LC commands to be enabled.
erlc.weather
Inputs
- Weather*string
Needs Discord permission: ManageGuild
Set time (in-game)
★ActionSets the in-game time of day in hours, 0–23 (:time). Requires ER:LC commands to be enabled.
erlc.time
Inputs
- Hour (0–23)*number
Needs Discord permission: ManageGuild
Toggle peacetime (in-game)
★ActionToggles peacetime on/off (:pt). Requires ER:LC commands to be enabled.
erlc.peacetime
Needs Discord permission: ManageGuild
Logic & Flow
Branch (if / else)
ControlRoutes execution down the true or false path.
flow.branch
Inputs
- Condition*boolean
For each
ControlRuns the loop body once for every item in a list, then continues.
flow.for-each
Inputs
- List*list<any>
Outputs
- Itemany
- Indexnumber
Break loop
ControlExits the surrounding “For each†loop early.
flow.break
Stop flow
ControlEnds the whole flow right here — nothing after this runs.
flow.stop
Inputs
- Reasonstring
Wait
ControlPauses the flow for a number of seconds before continuing.
flow.delay
Inputs
- Seconds*number
Compare
ConditionCompares two values and returns true/false.
flow.compare
Inputs
- A*any
- Operator*string
- B*any
Outputs
- Resultboolean
Text contains?
ConditionTrue when the text contains the given substring (case-insensitive).
flow.contains
Inputs
- Text*string
- Substring*string
Outputs
- Resultboolean
Text matches regex?
ConditionTrue when the text matches the regular expression.
flow.matches
Inputs
- Text*string
- Pattern*string
Outputs
- Resultboolean
And
ConditionTrue only when both A and B are true.
logic.and
Inputs
- A*boolean
- B*boolean
Outputs
- Resultboolean
Or
ConditionTrue when A or B (or both) are true.
logic.or
Inputs
- A*boolean
- B*boolean
Outputs
- Resultboolean
Not
ConditionFlips a true/false value.
logic.not
Inputs
- Value*boolean
Outputs
- Resultboolean
Random chance
ConditionTrue roughly X% of the time (e.g. 25 = a 1-in-4 chance).
logic.chance
Inputs
- Percent*number
Outputs
- Resultboolean
Schedule
Current time
ValueThe current time — a Unix timestamp for Discord's <t:…> format, plus an ISO string.
time.now
Outputs
- Unix secondsnumber
- ISO timestring
On a schedule
TriggerFires once at a chosen time, or on a repeating schedule — every N units, daily at a time, or a cron expression. Times use the configured timezone.
schedule.timer
Inputs
- Modestring
- Everynumber
- Unitstring
- Daily at (HH:MM)string
- At (date & time)string
- Cronstring
- Timezonestring
Outputs
- Nownumber
State
Set variable
ActionHolds a value in a named variable for the rest of THIS run (not saved between runs).
state.set-var
Inputs
- Name*string
- Value*any
Get variable
ValueReads a variable set earlier in this run.
state.get-var
Inputs
- Name*string
Outputs
- Valueany
Save value
ActionSaves a value that persists between runs — per server or per member. The type is kept (a number stays a number).
state.set
Inputs
- Scope*string
- Membermember
- Key*string
- Value*any
- Expires after (seconds)number
Load value
ValueLoads a saved value (per server or per member). Empty when nothing is saved.
state.get
Inputs
- Scope*string
- Membermember
- Key*string
Outputs
- Valueany
Delete value
ActionRemoves a saved value.
state.delete
Inputs
- Scope*string
- Membermember
- Key*string
Add to counter
ActionAtomically adds to a saved number (use a negative amount to subtract). The building block for points, XP, balances and warn counts.
state.increment
Inputs
- Scope*string
- Membermember
- Key*string
- Amount*number
Outputs
- New totalnumber
Add to list
ActionPushes a value onto a saved list (per server or per member) — the building block for entrant lists, birthday registers, queues. Optionally caps the list length (oldest dropped).
state.append
Inputs
- Scope*string
- Membermember
- Key*string
- Value*any
- Max lengthnumber
Outputs
- Listlist<any>
Leaderboard
ValueThe top members for a per-member number (e.g. highest balances or XP). Returns a list of { id, value }.
state.leaderboard
Inputs
- Key*string
- How many*number
- Order*string
Outputs
- Entrieslist<any>
Cooldown gate
ControlLets the flow through once per cooldown window, then routes to “on cooldown†until it expires.
flow.cooldown
Inputs
- Scope*string
- Membermember
- Key*string
- Cooldown (seconds)*number
Outputs
- Seconds leftnumber
Only once
ControlRuns the “first time†path once ever (per server or per member), then always the “again†path.
flow.once
Inputs
- Scope*string
- Membermember
- Key*string
AI
Ask AI
ActionSends a prompt to the AI and returns its reply. Use {{...}} wires to feed in message content, names, etc.
ai.generate
Inputs
- Prompt*string
Outputs
- Replystring
Summarize
ActionCondenses some text into a short summary.
ai.summarize
Inputs
- Text*string
- Max wordsnumber
Outputs
- Summarystring
Classify
ActionSorts text into one of your labels (e.g. spam / question / feedback). Great for triage.
ai.classify
Inputs
- Text*string
- Labels*string
Outputs
- Labelstring
Extract data (JSON)
ActionPulls structured JSON out of free text per your instructions. Branches on whether it succeeded.
ai.extract
Inputs
- Text*string
- What to extract*string
Outputs
- Dataany
Text & Data
Text value
ValueA fixed piece of text you can wire into any input.
value.text
Inputs
- Text*string
Outputs
- Valueany
Number value
ValueA fixed number you can wire into any input.
value.number
Inputs
- Number*number
Outputs
- Valueany
Toggle value
ValueA fixed on/off (true/false) value you can wire into any input.
value.toggle
Inputs
- On*boolean
Outputs
- Valueany
Join text
ValueSticks two pieces of text together (with an optional separator).
text.join
Inputs
- First*string
- Second*string
- Separatorstring
Outputs
- Resultstring
Uppercase
ValueConverts text to UPPERCASE.
text.uppercase
Inputs
- Text*string
Outputs
- Resultstring
Lowercase
ValueConverts text to lowercase.
text.lowercase
Inputs
- Text*string
Outputs
- Resultstring
Text length
ValueThe number of characters in some text.
text.length
Inputs
- Text*string
Outputs
- Lengthnumber
List size
ValueHow many items are in a list.
list.length
Inputs
- List*list<any>
Outputs
- Sizenumber
First item
ValueThe first item in a list (if any).
list.first
Inputs
- List*list<any>
Outputs
- Itemany
List is empty?
ConditionTrue when the list has no items.
list.is-empty
Inputs
- List*list<any>
Outputs
- Emptyboolean
Math
ValueAdds, subtracts, multiplies or divides two numbers.
math.calc
Inputs
- A*number
- Operator*string
- B*number
Outputs
- Resultnumber
Replace text
ValueReplaces every occurrence of one piece of text with another.
text.replace
Inputs
- Text*string
- Find*string
- Replace withstring
Outputs
- Resultstring
Split text
ValueSplits text into a list on a separator (e.g. a comma or space).
text.split
Inputs
- Text*string
- Separator*string
Outputs
- Itemslist<string>
Round number
ValueRounds a number up, down, or to nearest.
math.round
Inputs
- Value*number
- Mode*string
Outputs
- Resultnumber
Random number
ValueA random whole number between min and max (inclusive).
random.number
Inputs
- Min*number
- Max*number
Outputs
- Resultnumber
Get item
ValueGets the item at a position in a list (0 = first).
list.get
Inputs
- List*list<any>
- Index*number
Outputs
- Itemany
List contains?
ConditionTrue when the list includes the given value.
list.contains
Inputs
- List*list<any>
- Value*string
Outputs
- Resultboolean
Identity
Member verified
TriggerFires when someone finishes verifying their Roblox account (OAuth or code). Gives you the member and their linked Roblox player.
identity.member-verified
Outputs
- Membermember
- Playerplayer
Find their Discord
ControlLooks up a Roblox player's verified Discord account. Branches on whether they're verified.
identity.resolve-discord
Inputs
- Player*player
Outputs
- Membermember
- Useruser
Find their Roblox
ControlLooks up a Discord user's linked Roblox player. Branches on whether they're linked.
identity.resolve-roblox
Inputs
- User*user
Outputs
- Playerplayer
Player details
ValueA Roblox player's username and id as text (for messages or storage keys).
identity.player-fields
Inputs
- Player*player
Outputs
- Usernamestring
- Roblox idstring
Member details
ValueA Discord member's id and @mention as text.
identity.member-fields
Inputs
- Member*member
Outputs
- User idstring
- Mentionstring
Member display name
ActionA Discord member's display name (server nickname, or their account name). Falls back to their user id if it can't be read.
discord.member-name
Inputs
- Member*member
Outputs
- Display namestring
Tickets
Open ticket
ActionCreates a private ticket channel only the opener and staff can see, and tracks it. Returns the channel. Re-opening returns the user's existing open ticket.
tickets.open
Inputs
- Opener*member
- Channel namestring
- Staff roleslist<role>
Outputs
- Channelchannel
Needs Discord permission: ManageChannels
Close ticket
ActionSaves a shareable transcript (viewable at a /t/… link), marks the ticket closed, and deletes its channel. Outputs the transcript URL so you can post it to a log channel.
tickets.close
Inputs
- Ticket channel*channel
Outputs
- Transcript URLstring
Needs Discord permission: ManageChannels
Claim ticket
ActionRecords which staff member is handling the ticket channel.
tickets.claim
Inputs
- Ticket channel*channel
- Claimed by*member
Giveaways
Giveaway ended
TriggerFires when a giveaway you started reaches its end time. Gives you the channel, the prize, and the winner mentions.
giveaway.ended
Outputs
- Channelchannel
- Prizestring
- Winnersstring
Start giveaway
ActionStarts a giveaway in a channel (one running at a time per channel). Post an entry button with "giveaway-enter" so people can join.
giveaway.start
Inputs
- Channel*channel
- Prize*string
- Winners*number
- Duration (minutes)*number
Enter giveaway
ActionAdds a member to the channel's running giveaway (no double entries).
giveaway.enter
Inputs
- Channel*channel
- Member*member