DPaletteDiscord Bot Builder
Build a bot →
GETTING STARTED

Let's build your first bot.

Start with a welcome for new members. We'll help you adapt an example to your server, test it, and publish it. You can also ask AI for a draft or build your own from scratch.

Try the basics · about 3 minutesNo login or Bot installation needed. Opens in a new tab. Your current Bot stays unchanged.
Make a welcome bot ↓Build a bot
01

Make a welcome bot from an example

When someone joins, your bot sends a greeting to the channel you choose. The steps are already connected: just adapt the destination and message to your server.

A member joinsSend a welcomeTest without sendingPublish & enable
  1. 1

    Choose a server and an example

    Sign in with Discord and choose a server at the top. If needed, use Install Bot to connect DPalette. Open Examples and load the Welcome example.

  2. 2

    Choose the destination channel

    In the example's setup screen, pick the channel where you want the greeting to appear. You do not need to look up or type a channel ID.

  3. 3

    Make the greeting your own

    Select Send Message and edit its content in the right panel. Use Insert value to choose a mention of the member who joined.

  4. 4

    Try it before going live

    Use Validate to check the settings and Test run to inspect the planned message. When you are happy with it, save the draft and choose Publish & enable.

02

Describe it, and ask AI for a draft

Tell AI what your bot should do, such as posting in your updates channel when a stream starts. It combines DPalette's features into a proposal for you to review before use.

Describe behavior

Say when, where, and what should happen. For example: welcome new members and give them the member role.

Fill in the details

When a channel, role, or member is needed, select it from your Discord server instead of copying IDs by hand.

Review and apply

Check the assumptions and warnings, then apply the proposal to the editing area. Every step stays editable. Check destinations and permissions, and test before publishing.

AI will not publish or run your bot for you

Applying a proposal only changes your unsaved work. It does not automatically save, test, publish, or run anything live. DPalette does not read or send your saved API keys (Secrets) or database records to AI.

03

Prefer to build it yourself?

Here are seven steps to build the same welcome behavior from scratch. Connect what should happen to the event that starts it.

  1. 1

    Sign in with Discord

    Sign in, then choose the Discord server you want to edit. Use Install Bot if DPalette is not there yet. Newly created servers appear after Refresh servers.

  2. 2

    Place a trigger

    Drag Member Joined from the step library into the editing area. This is the event that starts your bot's behavior.

  3. 3

    Place an action

    Add Send Message. This is the action that runs after the event.

  4. 4

    Connect the running order

    Connect the solid wire from Member Joined’s next port to Send Message’s input port.

  5. 5

    Configure on the right

    Set the channel and message. Use Insert value to pick the new member’s mention.

  6. 6

    Check settings and test

    Fix the issues shown under Validate. Then use a test run (Dry Run) to check what would happen without making real Discord changes.

  7. 7

    Save draft and publish

    Save the draft and choose Publish & enable after validation passes. Your bot will start responding to Discord events with the behavior you published.

04

Test before going live

Your draft is separate from the version running on your server. Your live bot keeps its current behavior until you publish the changes.

1. Check the settings

Use Validate to check missing connections, required settings, permissions, and more. Fix the reported issues before continuing.

2. Test without sending

A test run (Dry Run) checks the behavior without writing to Discord. You can see which steps ran and what they would have sent.

3. Publish and enable

Publish the draft you reviewed to use it on your server. That version keeps running while you edit the next change.

Take care with actions that cannot be undone

Review risk labels and execution limits for deletion actions. Start on a test server and confirm behavior with Dry Run.

05

The canvas and its two wire types

Execution order and data are separate. Keeping those jobs distinct makes larger workflows easier to follow.

Running order: solid Flow wires

Controls which node runs next. Branches such as true and false are Flow wires too.

Passing values: dashed Data wires

Passes values such as messages and members into typed input ports. Only compatible types connect.

join

Node ID

The first segment of a value reference. In this guide, the Member Joined node has the ID join.

When in doubt

Finish the execution order with solid Flow wires first, then add the dashed Data wires you need.

06

Reuse a previous node’s value

Most action fields—including messages, URLs, numbers, lists and choices—can reuse outputs from earlier steps. Suggestions follow your current workflow. Trigger setup and other fixed settings are excluded.

Welcome {{ join.member.mention }}!
+ Insert value or type {{
Available values{{ join.member.mention }}Member Joined · join{{ join.member.display_name }}Member Joined · join
No memorization required

Use the small {} button beside a field (Insert value), or Ctrl+Space. In text fields you can also type {{. Choose a suggestion to insert {{ node-id.output.property }}. Use arrow keys, Enter, and Escape to navigate.

Example pathValue
join.member.mentionDiscord mention for the member who joined
join.guild.member_countCurrent server member count after this member joined (including bots)
join.member.display_nameDisplay name of the member who joined
message.message.contentContent of the received message
message.author.mentionDiscord mention for the message author
manual.payload.target_userA target_user field defined by a Manual Action
webhook.bodyIncoming Webhook request body
schedule.scheduled_atTime at which a Schedule fired

Prefixes such as join, message, and manual are node IDs. Your suggestions use the IDs on your canvas. The source node must run before the node that reads its output.

07

Use API keys without putting them in workflows

Secrets are optional server-scoped values for external API keys, tokens, and other credentials. Ordinary presets, including YouTube notifications, do not require them.

1. Store under Safety → Secrets

Choose a server, open Safety, and save a name and value under Secrets. Names such as api_key or github_token make their purpose clear.

2. Reference the name

Use {{ secret.name }} in a text-capable node setting. For a secret named api_key, write {{ secret.api_key }}.

3. Call an external API

Secrets are useful in HTTP Request headers, query parameters, and bodies when an external service requires authentication.

The stored value stays hidden

DPalette does not show a secret value again after saving it and redacts it from stored execution details. Save a new value under the same name when you need to rotate it.

08

Run a workflow whenever you need it

DPalette can create Manual Actions that run immediately from an input form, not only automations that wait for events. The same workflow can also be exposed as a Discord slash command.

Manual TriggerPublishActions / /commandExecution History

1. Build a Manual Action

Start with a Manual Trigger, define fields such as target_user or a limit, and connect the actions that should follow. Test drafts in the Test panel; validate and publish before using the action in production.

2. Run it from Actions

Published Manual Actions appear as generated input forms under Actions. Inspect effects with Dry Run first, then use Run Now for non-destructive work or Review & Run for destructive operations such as deletion.

3. Turn it into a Discord command

Enable the slash command in the trigger settings to sync a guild-scoped command with the same inputs. Example: /purge-user target_user:@spammer. Commands sync after publishing and can be resynced from Actions.

Every entry point keeps the same safety model

Actions and Discord commands share the Workflow Executor, execution limits, concurrency controls, and Execution History. Dry Run does not consume production quota, and only a published revision can execute live.

09

Troubleshooting

Most problems come down to connections, execution order, or Discord permissions.

No value suggestions appear

Make sure another node with outputs exists on the canvas. A node’s own outputs are intentionally not suggested in its settings.

A newly created Discord server is missing

The server list is captured when you sign in. Use Refresh servers in the editor so Discord can issue a new snapshot, then pick the new server.

I get unknown property or unknown root

The typed path does not match the real node ID or output. Pick it again from Insert value.

A suggested value cannot resolve at runtime

Make sure the source node runs earlier on the same Flow branch.

Discord permissions fail

Review required permissions and Gateway Intents under Validate, plus the Bot role order, channel permissions, and Developer Portal settings.

Open support Discord (new tab)

Start with a small welcome.

Choose Welcome from the examples, and put your server's personality into the message.

Open examples →