Setup guide
1. Make a command
Open the builder and choose a template. Select a block to edit it. Connect the trigger to a reply, or add a role/channel condition with True and False paths. The list view lets you do the same work without dragging.
2. Preview your reply
Pick a command and set the sample user, server, channel and role IDs. Preview uses the same Python interpreter as the exported bot. It never sends messages to Discord.
3. Connect to Discord
Follow the Discord setup steps below to create your bot, get its token, and add it to your server.
4. Export or publish
Export downloads bot.json and a Python launcher. Run it on your own machine or server. Hosted publishing is available only to the configured owner during the pilot. Signing in with Discord authenticates you; it does not supply your bot token.
2.1 visual features
Commands and checks
Select a Command block and choose Slash, Prefix, or Slash + prefix. Add a category, permission, server/channel/role checks, and typed arguments. Arguments can have defaults, fixed choices, or autocomplete suggestions. Insert arguments into replies with {{options.argument_name}}. Both modes share validation and cooldowns.
Interactive replies and forms
Add an Interactive block for reply/link buttons, dropdowns and text attachments. Test buttons and dropdowns directly in the preview. Form blocks collect named text inputs; their submission reply can use {{input.field_name}}. Forms must be the first response of a slash-only command and end the flow.
Bot features and events
Expand Bot configuration & features to set presence, intents, allowed mentions, searchable help and built-in polls/reminders/moderation packs. Add greeting/auto-role, message and reaction hooks, or scheduled announcements. The event simulator tests matches without connecting to Discord. Reactions use cached message events.
Storage, settings and moderation
Action blocks read/write server data, increment counters, read/update versioned server settings, schedule messages or cancel your own jobs. Updating settings requires Manage Server. Set defaults and rename migrations in Bot configuration. Moderation actions end the flow with an owner-only confirmation; live execution rechecks bot/caller permissions and role hierarchy and records an audit entry.
Preview, export and registration
Preview uses sample permissions, roles and channel restrictions. Sample storage survives subsequent previews until Reset simulation. It never moderates users or schedules real deliveries. Export preserves these features in bot.json and uses the updated Python runtime. The registration comparison accepts an explicit saved Discord snapshot and shows additions, changes and removals without connecting to Discord.
Built-in command packs run in exported/hosted bots. Arbitrary Python plugins, arbitrary callback code, binary uploads, PostgreSQL bot storage, distributed jobs and restart-persistent interactive views are outside the visual format. Run one bot process per SQLite file. Hosted storage uses a persistent per-project volume.
Run with Python
Install the package from PyPI ↗. The library works independently of this website.
Create a bot and get its token
- Open the Discord Developer Portal, choose New Application, and enter a name.
- Open Bot. Add a bot user if prompted, then choose Reset Token and copy the bot token.
- Open Installation and enable Guild Install. Under Default Install Settings, select
botandapplications.commands. - Select View Channels, Send Messages, and Embed Links, then save.
- Open the Discord Provided Link, choose Add to Server, and authorize it in a server you can manage.
Keep the token private. It is different from the application ID, public key, and OAuth client secret. Reset it if exposed. These Python bots use the Gateway, so leave Interactions Endpoint URL empty.
Slash commands need no privileged intents. Enable Message Content Intent only for prefix commands; enable Server Members Intent if your Python bot uses member welcomes.
Install and run
Export your bot and extract the ZIP. In that folder, create a virtual environment and install the requirements:
python -m venv .venv
# macOS / Linux
source .venv/bin/activate
# Windows PowerShell: .venv\Scripts\Activate.ps1
python -m pip install -r requirements.txt Set the token in your terminal. The exported launcher and CLI read environment variables; they do not load a .env file automatically.
# macOS / Linux
export DISCORD_BOT_TOKEN='your-bot-token'
# Windows PowerShell
$env:DISCORD_BOT_TOKEN='your-bot-token' For a test server, enable User Settings → Advanced → Developer Mode in Discord, right-click the server, and choose Copy Server ID. Replace YOUR_SERVER_ID below:
discord-bot-maker validate bot.json
discord-bot-maker preview bot.json --command hello
discord-bot-maker run bot.json --sync --guild-id YOUR_SERVER_ID Replace hello with your command name. Use --sync on the first run and after changing commands. Omit --guild-id to register commands globally. Keep the process running, then try your command in Discord.
Writing your bot in Python instead? Install with python -m pip install discord-bot-maker. Bot.from_env() can also read a local .env file next to your script; add that file to .gitignore.
Save, publish, and rollback
Your browser keeps your current local draft. Sign in to save projects across devices. Saving changes the draft; publishing creates a separate immutable version. Rollback selects an earlier published version without overwriting your draft. Stop disconnects a hosted bot; deleting credentials also stops it.
Open the builder →