Developer
Configuration examples
Copy-paste schemas for welcome bots, moderation, tickets and economy.
Real
Welcome bot
Moderation bot with a select and a range
The last entry shows the two flags that matter:
Ticket bot, grouped with categories
Settings that share a
Validation rules the backend enforces
bottly_config.json files you can adapt. Each one is valid as-is.Welcome bot
{
"version": 1,
"settings": {
"welcome_channel": {
"type": "channel",
"label": "Welcome channel",
"description": "Where the greeting is posted.",
"editable": true,
"required": true
},
"welcome_message": {
"type": "textarea",
"label": "Welcome message",
"description": "Use {user} for a mention and {server} for the server name.",
"default": "Welcome {user} to {server}!",
"editable": true
},
"accent_color": {
"type": "color",
"label": "Embed colour",
"default": "#5865F2",
"editable": true
}
}
}
Moderation bot with a select and a range
{
"version": 1,
"settings": {
"log_channel": { "type": "channel", "label": "Mod-log channel", "editable": true, "required": true },
"mute_role": { "type": "role", "label": "Mute role", "editable": true, "required": true },
"warn_action": {
"type": "select",
"label": "Action after 3 warnings",
"default": "mute",
"editable": true,
"options": [
{ "label": "Mute", "value": "mute" },
{ "label": "Kick", "value": "kick" },
{ "label": "Ban", "value": "ban" },
{ "label": "Nothing","value": "none" }
]
},
"mute_minutes": { "type": "number", "label": "Mute length (minutes)", "default": 60, "min": 1, "max": 10080, "editable": true },
"dm_on_action": { "type": "boolean", "label": "DM the member", "default": true, "editable": true },
"internal_api": { "type": "url", "label": "Internal endpoint", "editable": false, "internal": true }
}
}
The last entry shows the two flags that matter:
editable: false means buyers can see nothing to change, and internal: true hides it from them completely.Ticket bot, grouped with categories
{
"version": 1,
"settings": {
"panel_channel": { "type": "channel", "label": "Panel channel", "category": "Setup", "editable": true, "required": true },
"ticket_category":{ "type": "channel", "label": "Ticket category","category": "Setup", "editable": true, "required": true },
"support_role": { "type": "role", "label": "Support role", "category": "Permissions","editable": true, "required": true },
"open_emoji": { "type": "emoji", "label": "Open button emoji", "default": "🎫", "category": "Appearance", "editable": true },
"max_open": { "type": "number", "label": "Max open tickets per member", "default": 1, "min": 1, "max": 10, "category": "Limits", "editable": true }
}
}
Settings that share a
category are grouped together in the buyer's form.Validation rules the backend enforces
keys start with a letter, then letters, numbers or underscores (max 49 characters)
select needs at least one option, and option values must be uniquenumber rejects min greater than maxcolor must be a six-digit hex like #5865F2role, channel and user must be Discord IDs (digits only)url must be http or httpsdefaults are validated against their own type — a bad default blocks publishing