Buttons, menus, and forms
Build interactive messages with separate click, selection, and form-submission branches.
Components attach to the most recent response. Begin with Send Message, then connect the component node. Give each interactive component a unique ID within the bot so its interactions reach the intended branch.
Button Row
Add buttons with a label, style, optional emoji, and disabled state. A link button needs a URL and opens it without running a click branch. Interactive buttons use their click output to run actions.
Example: send “Choose your notification preference,” add an interactive Toggle updates button, and connect that button's click output to Manage Role → Toggle. Select the updates role and use {user.id} as the member. In the click branch, this identifies the person clicking the button. Finish with a private Send Message confirmation.
Choose only a role that members should be able to assign to themselves, and keep it below the bot role.
Select Menu
Choose a menu type: text options, users, roles, channels, or mentionables. Set the placeholder and minimum/maximum number of selections. Text options have a display label and a value used by the flow.
Connect the selection output to the actions that should run after a member chooses an option. Available values include:
| Variable | Value |
|---|---|
{store:selected} | All selected values, separated by commas |
{store:selected.0} | The first selected value |
{store:selected.1} | The second selected value, if present |
{option:selected} | The selection, available to conditions |
For a single-choice menu, branch on {store:selected.0} and compare it with the option's value, not its display label. A Discord role/channel/user selector returns IDs.
Open Modal
Set the form title and add short or paragraph text fields. Give each field its own ID, label, and optional placeholder, required state, and length limits. Connect the submit output to the follow-up actions.
A modal must open in response to a command or component interaction. Open it before sending a reply or running image generation. Put slow actions such as image generation in the submit branch.
The current form flow supports the submit branch but does not expose submitted text fields as graph variables. For a workflow that needs user-entered text now, use a required string command option instead.
Interaction scope
Each click, selection, or submission starts a new interaction. The user variables refer to the person interacting. Values created during the original command are not automatically available again; use a Data node to save and reload anything needed later.
Command permission requirements should match the operations in its component branches. Test with the permissions of a normal member as well as the bot owner.