← Home

Documentation

DSL (Domain-Specific Language) v3.0 is a text-based format for describing Discord server structure. The DS Motier bot reads a .txt template and builds the server automatically: categories, channels, roles, forums, tickets, temporary voice channels.

Key Features

  • Categories, text channels, forums, stages, counters
  • Roles with permissions, colors, display settings
  • Ticket system and temporary voice channels
  • Button and reaction role assignment
  • Greetings, auto-messages, embeds
  • Variables $name
  • File includes via !INCLUDE
  • Access selectors @allow / @deny

Blocks

CATEGORY

Category

Groups channels. Can contain CHANNEL, FORUM, VOICE, STAGE, COUNTER, TEMP_VOICE.

CATEGORY "Information" {
  CHANNEL #rules
  CHANNEL #news
}

CATEGORY "Admin" @admin {
  CHANNEL #admin-chat
}

Selector @admin after the name restricts category visibility to that role.

CHANNEL

Text Channel

CHANNEL #general
CHANNEL #rules { @slowmode 5 }
CHANNEL #admin { @deny @everyone @allow admin }

Attributes: @slowmode (seconds), selectors @allow/@deny.

FORUM

Forum

Forum channel with built-in threads. At least one THREAD is required inside.

FORUM "Support" {
  THREAD bug-report
  THREAD question
  @slowmode 30
}
THREAD

Forum Thread

THREAD bug-report
THREAD "topic with spaces"

Single word - no quotes, multiple words - in double quotes.

STAGE

Stage (Event)

Voice channel for events.

STAGE "Live stream"
STAGE "LIVE" { @topic "Discussing the update" }
COUNTER

Member Counter

A voice channel whose name displays the server member count.

COUNTER "👥 Members: {count}"
COUNTER "🎧 In voice: {count}"

{count} is replaced with the current member count.

ROLE

Role

ROLE "Moderator" {
  @color #5865F2
  @permissions kick_members, ban_members
  @display separate
  @mentionable true
}

ROLE "Newcomer" { @color #808080 }

Attributes:

  • @color - HEX color
  • @permissions - comma-separated permission list
  • @display - separate / none
  • @mentionable - true / false
TICKET

Ticket System

Creates a channel with a ticket open button. Clicking creates a private channel for the user.

TICKET "Contact us" {
  @category "Support"
  @button 📩 Create ticket
  @description "We will reply shortly"
}
TEMP_VOICE

Temporary Voice

User clicks a button - a temporary voice channel is created. Deleted when everyone leaves.

TEMP_VOICE "Create room" {
  @category "Voice"
  @button 🔈 Create
  @channel_prefix "Room"
  @user_limit 10
}
EMBED

Embed Message

Sends a styled embed message to the specified channel on build.

EMBED #rules {
  @title "Server Rules"
  @description "1. Respect each other\n2. No spamming"
  @color #5865F2
  @footer "DS Motier"
}
BUTTON_ROLE

Button Roles

Assign roles by button click.

BUTTON_ROLE "Roles" {
  @channel #roles
  @description "Select games"
  ROLE "CS:GO" 🎮
  ROLE "Valorant" 🔫
}
REACTION_ROLE

Reaction Roles

Assign roles by reacting to a message.

REACTION_ROLE "Notifications" {
  @channel #reactions
  @description "Click a reaction"
  REACTION "📢" announcements
  REACTION "🎮" events
}
AUTO_MESSAGE

Auto Message

Automatically sends a message to a channel on build.

AUTO_MESSAGE #general {
  @content "Welcome!"
}

AUTO_MESSAGE #rules {
  @embed "Rules"
  @content "See above"
}
WELCOME

Welcome

Greets new members in the specified channel.

WELCOME {
  @channel #general
  @message "Welcome, {user}!"
}

{user} is replaced with the new member's mention.

!INCLUDE

File Includes

Allows splitting the template into multiple files.

!INCLUDE "base.txt"
!INCLUDE "roles/moderators.txt"

Variables

Variables let you reuse values in the template. Declared with $name = value.

$color_primary = #5865F2
$color_danger  = #ED4245
$prefix        = "!"
$admin_role    = "Administrator"

CATEGORY "Main" {
  CHANNEL #general { @allow $admin_role }
}

ROLE $admin_role { @color $color_primary }

Can be used anywhere in the template except string literals.

Access Selectors

Control visibility of channels and categories.

CHANNEL #admin-chat {
  @allow admin
  @deny @everyone
}

CATEGORY "VIP" @vip {
  CHANNEL #vip-chat
}
  • @allow role - grant access
  • @deny role - deny access
  • @everyone - reference to the @everyone role
  • Selector after CATEGORY applies to all nested channels

Examples

Minimal Template

CATEGORY "Main" {
  CHANNEL #general
  CHANNEL #offtopic
}

ROLE "Moderator" { @color #5865F2 }

Full Template

@name "My Server"

$color_main = #5865F2
$color_success = #57F287

!INCLUDE "base.txt"

CATEGORY "Information" {
  CHANNEL #rules { @slowmode 5 }
  CHANNEL #news
  CHANNEL #announcements { @allow admin }
}

CATEGORY "Chat" {
  CHANNEL #general
  CHANNEL #offtopic
  FORUM "Support" {
    THREAD bug-report
    THREAD question
    THREAD suggestion
  }
}

ROLE "Moderator" color=$color_main {
  @permissions kick_members, ban_members
  @display separate
}

TICKET "Contact us" {
  @category "Support"
  @button 📩 Create ticket
}

TEMP_VOICE "Create room" {
  @category "Voice"
  @button 🔈 Create
}

WELCOME {
  @channel #general
  @message "Welcome, {user}!"
}
← Home