Deepslate Studios
SlateChat

Configuration

Every option in config.yml, channels.yml and the other module config files.


All of SlateChat's config files support MiniMessage and MineDown formatting, plus any PlaceholderAPI expansion you have installed. Each module has its own file so you're never staring at options you don't use.

config.yml

Global messages, plus the switches that turn each module on or off.

# Sent when a player lacks permission for a channel or command
no_permission: "<red>You do not have permission!"

# Sent to the sender with how many players saw their message
amount_readed: "<dark_purple><amount> players saw your message!"
no_one: "<red>No one readed your message! :c"

# Console-only / usage messages
players_only: "<red>Only players can execute this command!"
channel_command_usage: "<red>Usage: /ch <channel>"
channel_usage_message: "<red>Usage: /<command> <message>"
channel_changed: "<green>Channel changed to <channelName> - <channelCommand>"
invalid_channel: "<red>Invalid channel!"
plugin_reloaded: "<green>Plugin reloaded."

# Mirror every chat message to console
log_to_console: true
console_log: "[<channel>] %luckperms_prefix%<player>> <message>"

modules:
  chatcolor: true # Lets players pick their own chat color with /chatcolor
  discordsrv: true # Detect DiscordSRV and bridge channel messages to it
  discordsrv_send: false # Also forward Discord -> plugin chat (off by default, avoids duplicates)
  focus: true # Let players lock to a default channel with /ch
  filter: true # Word filtering (blocked_words / replace)

  chatformat:
    spam:
      enable: false
      limit: 10 # Max repeated characters before a message is blocked
      message: "<green>Message canceled because contain spam."
    flood:
      enable: false # Block sending the same message twice in a row
      message: "<green>You cannot send a message like the previous message."
    lowercase: false # Force messages to lowercase
    title_format: false # Force-capitalize the first letter of every message

channels.yml

Defines every channel. Keys must be unique, and local is the default channel new players start in — don't remove it.

local:
  format: "<yellow>[l] %luckperms_prefix% <yellow><player><blue><bold>> <yellow>%luckperms_suffix%%chat_color%<message>"
  command: "l"
  enable: true
  broadcast: false
  radius: 200
  restrict: false
  actionbar: true
  permission: chat.local

global:
  format: "&7[g] %luckperms_prefix% %clans_prefix%&7<player>&9&l> &7%chat_color%<message>"
  command: "g"
  broadcast: true
  radius: 0
  restrict: false
  actionbar: false
  permission: chat.global
KeyMeaning
formatThe message format. Supports <player>, <message>, PAPI placeholders and %chat_color%
commandWhat /ch <command> matches, alongside the channel's name
enableOnly used on local — whether the default channel is active
broadcastIf true, ignores radius and reaches every online player
radiusBlock radius the message reaches when broadcast is false. 0 means same world only
restrictIf true, only players with permission can use this channel
actionbarShow the sender an action bar read receipt for this channel
permissionNode checked when restrict is true, and reported by /ch tab-completion

Add as many extra channels as you want under this file, they all support the same keys as global.

color.yml

Backs the /chatcolor command.

enable_rgb: true # Allow hex colors; disable to only accept legacy codes
clear_keywords:
  - "clear"
  - "remove"
  - "reset"

only_players: "<red>Avaliable only for players!"
no_permission: "<red>You do not have permission!"
no_arg: "<red>Type an color! /chatcolor #<color>"
invalid: "<red>Type an valid hex color! /chatcolor #<color>"
removed: "<green>Your chat color was removed!"
success: "<green>The color of your chat was changed to %chat_color%this<green>."

filter.yml

Word filtering. Matching is case-insensitive.

# Censored (replaced with asterisks) wherever they appear
blocked_words:
  - "bitch"
  - "damn"

# left->right replacement, e.g. every "barney" becomes "swarley"
replace:
  - "barney->swarley"

focus.yml

Forces players into a channel while they're in specific worlds, regardless of what they last picked with /ch.

worlds:
  - dummy:global

Each entry is world:channel — replace dummy with a real world name and global with the channel you want enforced there.

On this page