Discord давно перестал быть просто мессенджером для геймеров. Сегодня это платформа для сообществ, рабочих групп, клубов по интересам и даже целых компаний. Но создание сервера с нуля — процесс муторный: сотни кликов, десятки настроек, постоянные переключения между вкладками.

DS Motier решает эту проблему радикально: вы описываете сервер в обычном .txt файле, бот читает его и строит всё автоматически.

Давайте разберёмся, как это работает.

Что такое DSL v3.0

DSL (Domain-Specific Language) — язык описания структуры Discord-сервера. Версия 3.0 поддерживает всё, что может понадобиться:

— Категории, текстовые/голосовые каналы, форумы, стейджи — Роли с цветом, правами и отображением — Тикет-система с кнопками — Временные голосовые комнаты (TEMP_VOICE) — Роли по кнопкам и реакциям — Приветствия и автосообщения — Счётчики участников — Переменные и подключение файлов (INCLUDE) — Селекторы доступа allow/deny

Установка бота

DS Motier работает на Python. Установка занимает 30 секунд.

pip install -r requirements.txt

Скопируйте config.example.py в config.py, вставьте токен бота (получить можно на discord.com/developers/applications).

Запуск: python main.py

На сервере введите /build и загрузите .txt файл с шаблоном.

Основы синтаксиса

Вся структура описывается внутри блока SERVER { }.

SERVER { name = “Мой сервер”

// Роли
ROLE {
    name = "Админ"
    color = #ED4245
    permissions = administrator
}

// Категории с каналами
CATEGORY {
    name = "Общение"

    TEXT {
        name = "общий"
        topic = "Общайтесь"
    }

    VOICE {
        name = "Голосовой"
        limit = 10
    }
}

}

Никаких лишних символов. Просто, читаемо, понятно.

Роли

ROLE { name = “Модератор” color = #5865F2 permissions = kick_members, ban_members hoist = true mentionable = true }

Поддерживаемые параметры: — name — название роли — color — цвет в HEX (#RRGGBB) — permissions — права через запятую — hoist — показывать отдельно в списке (true/false) — mentionable — можно ли упоминать роль (true/false)

Категории и каналы

CATEGORY { name = “Информация”

TEXT { name = "правила" slowmode = 5 }
TEXT { name = "новости" }
TEXT { name = "объявления" readonly = true }

VOICE { name = "Общий" limit = 0 }
STAGE { name = "Эфир" topic = "Мероприятие" }

FORUM {
    name = "Поддержка"
    tags = "вопрос", "баг", "предложение"
}

}

Поддерживаемые параметры для каналов: — topic — описание канала — slowmode — задержка между сообщениями (секунды) — limit — лимит пользователей (для voice, 0 = без лимита) — nsfw — возрастное ограничение (true/false) — readonly — только чтение (true/false) — allow / deny — права доступа по именам ролей

Форумы

Форумы позволяют создавать темы внутри канала.

FORUM { name = “Техподдержка” tags = “установка”, “ошибка”, “вопрос”, “предложение” }

Участники смогут создавать темы с выбранными тегами.

Тикет-система

TICKETS { category = “Информация” staff_roles = “Модератор” create_channel_name = “тикет” transcript = true auto_close_days = 7 }

При нажатии на кнопку создаётся приватный канал, видимый только пользователю и персоналу.

Временные голосовые комнаты

TEMP_VOICE { name = “➕ Создать комнату” category = “Голосовые” user_limit = 10 }

Пользователь нажимает кнопку — создаётся его личная голосовая комната. Когда все выходят — комната удаляется автоматически.

Роли по кнопкам и реакциям

BUTTON_ROLE { channel = “роли” label = “🎮 Игрок” role = “Игрок” style = primary }

REACTION_ROLE { channel = “уведомления” message = “Выбери реакции” emoji = “📢” role = “Анонсы” }

Счётчики

COUNTER { type = members name = “👥 Участники: {count}” }

COUNTER { type = voice name = “🎧 В голосе: {count}” }

Счётчики создают голосовые каналы, в названии которых отображается текущее количество участников или людей в голосе.

Подключение файлов (INCLUDE)

Можно разбивать шаблон на несколько файлов для удобства:

!INCLUDE “base.txt” !INCLUDE “roles/moderators.txt”

Файлы ищутся относительно расположения основного шаблона.

Готовый пример сервера

SERVER { name = “Моё сообщество”

ROLE {
    name = "Админ"
    color = #ED4245
    permissions = administrator
    hoist = true
}

ROLE {
    name = "Модератор"
    color = #FEE75C
    permissions = kick_members, ban_members
    hoist = true
}

CATEGORY {
    name = "📢 Информация"

    TEXT { name = "правила" slowmode = 30 }
    TEXT { name = "новости" }
    TEXT { name = "объявления" }
}

CATEGORY {
    name = "💬 Общение"

    TEXT { name = "общий" }
    TEXT { name = "оффтоп" }

    FORUM {
        name = "Поддержка"
        tags = "вопрос", "баг", "идея"
    }
}

TICKETS {
    category = "📢 Информация"
    staff_roles = "Модератор", "Админ"
}

WELCOME {
    channel = "правила"
    message = "Добро пожаловать, {user}! Ознакомься с правилами."
}

COUNTER {
    type = members
    name = "👥 Участники: {count}"
}

}

Сохраните это в .txt и загрузите через /build. Через секунду сервер будет готов.

Где узнать больше

Репозиторий на GitHub

— Discord: discord.gg/34YmpcVjrR

Документация DSL на сайте проекта DS Motier