What the custom builder is
The Discord Custom Builder is Verba’s no-code Discord workflow builder for:- Slash commands
- Interaction events like buttons, selects, and modals
- Timed automations
- Webhook-driven flows
- Variables and reusable message templates
- Ticketing, modmail, welcome flows, and other Discord automations
What you can build right now
Current practical use cases:- Ticket systems
- Thread-based modmail systems
- Welcome messages
- Reaction and button flows
- Channel and thread automations
- Role and moderation automations
- Logging and transcript flows
- Webhook intake flows
- Status and utility commands
Open Ticketbutton -> create ticket channel -> post intro -> log itOpen Modmailbutton -> create support thread -> escalate to case channel -> close with transcriptguild_member_addevent -> send welcome message into a configured channel- Webhook POST -> create thread -> post intake details -> notify staff
Builder project types
Every builder project is one of these:CommandEventTimed Event
Commands
Use command projects for slash commands like:/ticket-panel/modmail-panel/rank/apply
- Chat input commands
- Guild/server-only commands
- DM/all-context command targets
- Command options like text, number, user, channel, role, boolean, attachment
Events
Use event projects for Discord and builder-driven triggers like:guild_member_addmessage_createmessage_reaction_addinteraction_buttoninteraction_select_menuinteraction_modal_submitwebhook_receive
- Keep one event project focused on one job
- For advanced systems, use multiple event projects with the same trigger
- Example: duplicate guard project + open project + close project
Timed Events
Use timed events for:- Intervals
- Daily automations
- Weekly automations
- One-time scheduled runs
- Sticky message refresh
- Scheduled announcements
- Daily reminders
- Cleanup jobs
How saving works
The builder is manual save, not autosave. That means:- Changes on the canvas are local until you press save
- The bot uses the last saved version
- Unsaved edits do not go live
Core builder building blocks
The current builder supports three major block families:OptionsActionsConditions
Options
Options define slash command inputs:- Text
- Number
- User
- Channel
- Role
- Choice / boolean
- Attachment
Actions
Important action categories currently available:- Advanced Message
- Message Actions
- Custom Variable Actions
- HTTP / Webhooks
- Loop Actions
- Other Actions
- Voice Actions
- Role Actions
- Channel Actions
- Thread and Forum Actions
- Server Actions
Send or Edit a MessageSet VariableSend an API RequestCreate a ChannelFind a ChannelCreate a ThreadDelete a ThreadCreate TranscriptAdd RolesCreate Server Invite
Conditions
Current condition blocks include:Comparison ConditionChance ConditionPermissions ConditionRole ConditionChannel ConditionChannel ExistsUser ConditionPremium CheckSwitchFor Each
Message builder
The message builder is used by message blocks like Send or Edit a Message. It supports:- Main message content
- Up to 10 embeds
- Embed title, description, author, footer, images, thumbnail
- Embed fields
- Buttons
- Saved message templates
- Live Discord-style preview
- The same panel should be reused in multiple projects
- You want one place to update a ticket/modmail panel
- You want consistent intros, logs, or prompts
Variables
There are two kinds of values in the builder:- Custom variables you define
- Built-in runtime variables the builder exposes automatically
Custom variables
Custom variables can be scoped as:globalserverchanneluser
VAR_modmail_hub_channel_idVAR_ticket_log_channel_idVAR_sticky_last_message_id
Built-in runtime variables
Built-in values are available automatically and do not need to be created in Data Storage. Common examples:{user}{user_name}{user_displayName}{user_id}{user_tag}{server}{server_id}{channel}{current_channel_id}{current_channel_name}{message_id}{interaction_custom_id}{button_custom_id}{select_values}{DEFAULT_SERVER}{last_bot_message_id}{created_channel_id}{created_thread_id}{created_role_id}{invite_url}
Channel lookup built-ins
When usingFind a Channel or Channel Exists, these become available:
{channel_exists}{last_found_channel_id}{last_found_channel_name}{last_found_channel_mention}
- Duplicate ticket prevention
- Duplicate modmail prevention
- Existing case-channel checks
Webhooks and HTTP requests
The builder supports two related capabilities:- outbound HTTP requests
- inbound webhook events
Outbound HTTP requests
The Send an API Request block goes through Verba’s backend proxy layer. That means:- The bot/browser is not making the request directly
- Your frontend users are not exposing your backend IP through the builder UI
- Response values are returned to the builder runtime
{http_status}{http_body}{http_json}
Incoming webhook events
Use thewebhook_receive event type for inbound automation.
A webhook event project can define:
webhookPathwebhookSecretdefaultServerId
x-verba-builder-secretx-builder-secretAuthorization: Bearer <secret>
{webhook_method}{webhook_path}{webhook_headers_json}{webhook_query_json}{webhook_body_json}{webhook_raw_body}{webhook_secret_valid}
Builder patterns that work well
The builder runtime is strongest when you structure flows as small focused projects.Good pattern: split advanced logic into multiple projects
For a ticket or modmail system, use:- one command project to post the panel
- one event project as duplicate guard
- one event project to open the ticket/thread
- one event project to close it
- one event project to escalate or hand off
Example: advanced modmail
A working thread-based modmail system typically looks like:/modmail-panelcommand posts a panelinteraction_buttonwithmodmail_open- duplicate guard checks whether
modmail-{user_id}already exists - open flow creates a thread in the configured hub channel
- intro message posts buttons for close or escalation
- escalation creates a dedicated case channel
- close flow creates transcript -> logs -> deletes thread/channel
- webhook flow can create a new modmail thread from external intake
Starter systems
The builder includes starter systems so users do not have to begin from an empty canvas. Current starter systems include:- Advanced Ticketing
- Welcome System
- Leveling System
Current runtime behavior and limitations
This matters if you are building advanced bots.Important limitation: execution is still linear
The current compiler/runtime still executes projects in a linear sequence. That means:- It does not yet provide full arbitrary BotGhost-style branch routing by handles
- It is better to split complex flows across multiple projects instead of trying to force one huge graph
- duplicate guard project
- open project
- close project
- webhook intake project
- timed cleanup project
if/else tree
Multiple incoming edges are blocked
The builder currently prevents multiple blocks from connecting into one target block. This is intentional because the current execution model would become ambiguous and break logic.Unsaved edits are not live
If the bot still acts like old logic:- make sure the project was saved
- confirm the correct command/event project is enabled
- wait briefly for Discord slash command registration if you changed command definitions
Practical advanced systems you can build now
With the current runtime, these are realistic:- Advanced ticketing
- Thread-based modmail
- Welcome systems
- Sticky messages
- Logging systems
- Case escalation systems
- Button-driven support systems
- Webhook intake systems
- Complex visual branching with arbitrary graph joins
- Fully general “build anything at all” logic graphs
- Full DM relay modmail out of the box
Troubleshooting custom builder issues
The bot still uses old command content
The bot still uses old command content
The builder is manual-save. The live bot only uses the last saved project state.
The command appears in Discord but says the application did not respond
The command appears in Discord but says the application did not respond
Make sure the connected bot runtime is actually online and the command project is enabled.
My button does nothing
My button does nothing
A duplicate ticket/modmail check is not working
A duplicate ticket/modmail check is not working
Use
Channel Exists or Find a Channel, and make sure the naming pattern matches the created channel or thread name exactly.My webhook event is not firing
My webhook event is not firing
Check the route, secret header, and whether the webhook event project is enabled.
Why can't I connect two blocks into one block?
Why can't I connect two blocks into one block?
The current runtime does not support multi-parent execution safely, so the builder blocks that connection.
Recommended workflow
For reliable advanced systems:- Configure variables first
- Build and save reusable message templates
- Keep each event project focused on one job
- Use explicit channel/thread naming conventions
- Use
Channel ExistsbeforeCreate ChannelorCreate Thread - Save often and test with a live connected bot
- Add logging blocks so failures are visible
Related guides
Discord Deployment
Connect your Discord bot, configure intents, and understand routing.
Discord Command Reference
Default built-in Verba slash commands and permission behavior.

