Trigger reference
Every event that can start a flow, what it fires on, and the extra variables it puts into the run. Entries written as {var:name} are read with that exact syntax in step fields; the rest are bare variables like {user}.
Commands and input
The ways a member deliberately runs a flow.
| Trigger | Fires when | Extra variables |
|---|---|---|
Commandcommand | A slash command plus prefix alias - the flow name becomes the command. Supports parent + group for subcommands. | {args}, {arg:N}, {option:name}, {optionId:name} |
User context menuuserContext | Right-click a member, then Apps. The flow name is the menu label. | {targetUser}, {targetUserId}, {targetUsername} |
Message context menumessageContext | Right-click a message, then Apps. | {targetUser} / {targetUserId} / {targetUsername} = the author, {var:targetMessageId}, {var:targetContent} |
Button clickbutton | A button with the matching custom ID (created by a Buttons node) is clicked. | {selected} = the button custom ID |
Select menuselectMenu | A dropdown with the matching custom ID (created by a Select Menu node) is used. | {selected}, {var:selectedIds}, {var:selectedData} (resolved JSON) |
Messages
React to chat traffic. A keyword flow with a blank keyword fires on every message in its channel.
| Trigger | Fires when | Extra variables |
|---|---|---|
Keywordkeyword | A message contains the phrase. Blank keyword = every message, but a channel scope is required. | {content}, {messageId}, {args} |
Bot mentionedmentionBot | Someone @mentions the bot. | {content} |
Message replymessageReply | Someone replies to one of the bot's messages. | {content}, {var:replyToId}, {var:replyToContent} |
Message deletedmessageDelete | A message is deleted. {content} may be empty for old uncached messages. | {content}, {messageId} |
Message editedmessageUpdate | A message is edited. | {oldContent}, {content}, {messageId} |
Attachment postedattachmentPost | A message with attachments lands. Optional file-type filter. | {var:attachmentCount}, {var:attachmentNames}, {var:attachmentUrl} |
Link postedlinkPost | A message containing a URL lands. Optional domain filter (wildcards allowed). | {var:linkUrl}, {var:linkDomain} |
First messagefirstMessage | A member's first-ever message in the server - survives restarts. Premium. | {user}, {content} |
Poll endedpollEnd | A native Discord poll closes. Premium. | {var:pollQuestion}, {var:pollResults}, {var:pollMessageId} |
Members
Joins, leaves, and member lifecycle events.
| Trigger | Fires when | Extra variables |
|---|---|---|
Member joinedmemberJoin | A new member joins. Invite attribution is included when the bot has Manage Server. | {user}, {var:inviteCode}, {var:inviteUses}, {var:inviterId}, {var:inviter}, {var:inviterUsername} |
Member leftmemberLeave | A member leaves or is kicked. | {user}, {username} |
Member boostedmemberBoost | A member starts boosting the server. | {user} |
Boost endedboostEnd | A member's boost ends. | {user} |
Member updatedmemberUpdate | Nickname or timeout status changes. | {user}, {var:changedFields}, {var:oldNickname}, {var:newNickname}, {var:timeoutUntil} |
Role addedmemberRoleAdd | A role is granted to someone - optional role filter, blank = any role. | {user}, {var:roleId}, {var:roleName} |
Role removedmemberRoleRemove | A role is removed from someone. | {user}, {var:roleId}, {var:roleName} |
Member timed outmemberTimeout | A member receives a timeout. | {user}, {var:timeoutUntil} |
Presence changedpresenceUpdate | A member's status changes (online/idle/dnd/offline). Optional user + status filters. Premium. | {user}, {var:status}, {var:oldStatus}, {var:customStatus} |
Server changes
Admin and audit events. "Server changed" is one trigger with a watch-for dropdown; channel and role deletion also have dedicated triggers that identify who did it.
| Trigger | Fires when | Extra variables |
|---|---|---|
Server changedserverChange | Watch for: name, icon, banner, channelCreated, channelDeleted, channelUpdated, roleCreated, roleDeleted, roleUpdated, emoji, inviteCreated, webhookUpdate. | {var:changeType}, {var:changeTargetId}, {var:changeTargetName}, {var:oldValue}, {var:newValue}; inviteCreated also sets {var:inviterId}, {var:inviterUsername} |
Channel deletedchannelDelete | A channel is deleted. Best-effort audit-log lookup names who did it. | {channel}, {var:deletedName}, {var:deletedId}, {var:deleterId}, {var:deleterTag} |
Role deletedroleDelete | A role is deleted, same audit lookup. | {var:deletedName}, {var:deletedId}, {var:deleterId}, {var:deleterTag} |
Member bannedguildBanAdd | A member is banned. | {user} |
Member unbannedguildBanRemove | A ban is lifted. | {user} |
Thread createdthreadCreate | A thread is created - optional parent-channel filter. | {channel}, {var:threadId}, {var:threadName}, {var:parentChannelId} |
Event createdeventCreate | A scheduled event is created. Optional event filter. | {var:eventId}, {var:eventName}, {var:eventUrl} |
Event startedeventStart | A scheduled event goes live. | {var:eventId}, {var:eventName}, {var:eventUrl} |
Event joinedeventJoin | A member RSVPs to a scheduled event. | {user}, {var:eventId}, {var:eventName} |
Bot added to serverguildJoin | Your bot is invited to a new guild. | {server}, {var:guildId}, {var:guildName}, {var:memberCount}, {var:ownerId} |
Bot removedguildLeave | Your bot is removed from a guild. No channel context - only data and cross-guild steps work. | {server}, {var:guildId}, {var:guildName}, {var:memberCount} |
Emoji created / deletedemojiCreate / emojiDelete | The server emoji set changes. | {var:emojiName}, {var:emojiId} |
Sticker created / deletedstickerCreate / stickerDelete | The server sticker set changes. | {var:stickerName}, {var:stickerId} |
Stage started / endedstageStart / stageEnd | A Stage channel event opens or closes. | {var:stageTopic}, {var:stageChannelId} |
Invite usedinviteUsed | A member joins through an identified invite - optional invite-code filter. | {user}, {var:inviteCode}, {var:inviteUses}, {var:inviterId}, {var:inviter}, {var:inviterUsername} |
Voice
Voice channel traffic. Moving between channels fires both leave and join.
| Trigger | Fires when | Extra variables |
|---|---|---|
Voice joinedvoiceJoin | A member joins or moves into a voice channel. Optional channel filter. | {user}, {voiceChannel} |
Voice leftvoiceLeave | A member leaves or moves out of a voice channel. | {user}, {voiceChannel} |
Time and external
Flows that run on a schedule or in response to systems outside Discord.
| Trigger | Fires when | Extra variables |
|---|---|---|
Scheduledscheduled | Runs every N minutes (1-1440), or once at a specific date/time. | {channel} |
Cron schedulecronSchedule | A standard 5-field cron expression in UTC. Premium. | {channel} |
Stream alertstreamAlert | Polls Twitch via a saved connection - fires once on the go-live transition. Premium. | {var:streamer}, {var:streamTitle}, {var:streamGame}, {var:streamViewers}, {var:streamUrl}, {var:streamThumbnail} |
Webhook eventwebhookEvent | Any service POSTs JSON to the flow's secret endpoint URL - optional event-name filter and HMAC signature check. Premium. | {var:wh_<field>} per JSON field, {var:whBody} = raw body |
HTTP watchhttpWatch | Polls a URL every 5-1440 min: feed mode fires on new RSS/Atom items (works for YouTube uploads), value mode on a JSON field changing, status mode on up/down flips. Premium. | {var:watchUrl}, {var:watchMode}, {var:watchValue}, {var:watchPrevious} |
Minecraft eventminecraftEvent | Events pushed by the StyzBridge plugin on your Minecraft server - optional event-type and player filters. Premium. | {var:mcEvent}, {var:mcPlayer}, {var:mcMessage}, {var:mcWorld}, {var:mcCoords} and more |
Things every trigger shares
- The base variables are always there:
{user},{userId},{username},{server},{memberCount},{channel}are filled on every run, so a member-join flow can greet the member without extra steps. On triggers with no human actor (schedules, guild events) the author fields resolve to the bot itself. - Output channel: event triggers take a channel ID in their config - that is where message steps post. Blank falls back to the channel the event happened in, then the system channel.
- Gates still apply: allowed roles, allowed channels, cooldown, and daily limit work on event triggers too - a keyword flow can still be staff-only.
- Premium triggers: minecraftEvent, webhookEvent, httpWatch, streamAlert, cronSchedule, firstMessage, presenceUpdate, and pollEnd require a paid plan - enforced when the flow is saved.
- Intents: the bot requests Discord privileged intents on demand - presenceUpdate flows request Guild Presences, pollEnd flows request Polls - so adding one of these triggers may take a restart to activate.