Canvas
Canvas is a visual editor for building your own server automations. You drop a trigger (something that happens, like a member joining), optionally one or more conditions (checks such as has role), and one or more actions (what the bot does), then wire them together. The moment you save, the automation is live.
How it works#
- Every workflow starts with exactly one trigger node, e.g. Member Join, Message Sent or Reaction Added.
- Lines between nodes decide the order. A condition that fails stops that branch — actions after it don't run.
- Resource nodes (Role, Channel, Permission set) describe server structure. On Save the bot creates or updates them in Discord for you.
- Groups bundle nodes together; a group can be saved as a template and reused in any other workflow from the Templates tab.
- The built-in AI Assistant reads your current canvas and answers questions about it in plain language.
Before you start#
Set it up#
In the Studio sidebar, under ESSENTIALS, click Canvas.
The Node library on the left has a search box and three lists: TRIGGERS, CONDITIONS and ACTIONS. Search for e.g. Member Join.
Hold the node, drag it to the empty area in the middle and let go.
Drag e.g. Has Role onto the canvas. Connect it by dragging from the dot on the right of the trigger to the dot on the left of the condition.
Drag an action like Send Message or Add Role onto the canvas and connect it the same way.
Every node opens its own settings panel on the right: which channel, which message, which role and so on.
Click the purple Save button in the top right.
Every setting explained#
| Node name | Your own label for the node, only shown on the canvas. |
| Role | The Discord role this node reads, gives or removes. |
| Channel | The channel this node posts in or changes. |
| Reason | Shown in Discord's audit log next to the action. |
| Channel name | Name of the channel to create. |
| Type | Text or voice channel. TextVoice |
| Category (optional) | The category the new channel is placed in. |
| Access | Allow = the connected role can see the channel; Deny = it's hidden for that role. Allow (can view channel)Deny (channel hidden) |
| Permission | The Discord permission this condition checks. |
| Duration (minutes) | How long the timeout lasts. |
| Emoji | The emoji the bot reacts with. |
| Voice channel | The voice channel members are moved to. |
| Role name | Name of the role to create. |
| Color | Pick from the palette or enter a hex code. |
| Permissions | The permissions this new role gets. |
| Permissions to apply to connected role(s) | Connect one or more Role nodes to the bottom handle — each gets this exact permission set on Save. |
| Allow | Permissions explicitly granted on this channel. |
| Deny | Connect one or more Role nodes to the bottom handle — each gets this exact overwrite on Save. |
| Group name | Label shown on top of the group frame. |
| Create a Discord category from this group | On Save, the group becomes a real Discord category with its channels inside. |
| Save as reusable template | Saves this group's nodes and connections so you can drag them into any workflow later, from the Templates tab in the node library. |
Examples#
Member Join → Add Role Newcomer → Send Message in #welcome: Welcome {user}! Read #rules first.
Drop a Create Channel node (staff-chat), a Role node (Staff) and connect the role's right handle to the channel's bottom handle with Access = Allow. Every other role is denied automatically.