RoodyChat · Files
config.yml
# RoodyChat configuration.
#
# Formats support & codes, &#RRGGBB hex, MiniMessage (<gradient>, <rainbow>, <bold>...) and %PlaceholderAPI%.
# Placeholders you can use in formats, hovers and clicks: {name}, {displayname}, {prefix}, {suffix},
# {world}, {channel}, {group}, {ping}, {health}, {level}, {playtime}, {first-join}; and {message} in a format.
# {prefix}/{suffix} come from LuckPerms or Vault when installed; otherwise use a %papi% placeholder
# instead or leave them empty.
# Server language for console/holograms; en + es ship, add lang/<code>.yml for more.
language: en
# true = each player sees messages in their own client language (when a translation exists).
per-player-language: true
# One format per group. The group is resolved as: a 'roodychat.group.<id>' permission given to the
# player (if they have several, the first in this list wins: put the highest first) -> LuckPerms or
# Vault primary group with the same name -> 'default'. 'default' is required.
# hover: lines shown when hovering the sender (prefix and name), one list for everyone or one list
# per language (en:, es:...): each player sees theirs. click: suggest:/cmd | run:/cmd | url:... | copy:...
# hover-on-message: true = the hover and click also cover the message itself (default false).
groups:
admin:
# Give this format with the permission roodychat.group.admin (or a LuckPerms group named 'admin').
format: "<red>[Admin]</red> {prefix}<white>{name}</white><gray>:</gray> {message}"
hover:
en:
- "<red><bold>{name}</bold></red> <dark_gray>»</dark_gray> <gray>Staff</gray>"
- "<gray>Group: <white>{group}"
- "<gray>Ping: <white>{ping} ms"
- ""
- "<gray>Click to send a message"
es:
- "<red><bold>{name}</bold></red> <dark_gray>»</dark_gray> <gray>Staff</gray>"
- "<gray>Grupo: <white>{group}"
- "<gray>Ping: <white>{ping} ms"
- ""
- "<gray>Clic para enviar un mensaje"
click: "suggest:/msg {name} "
default:
format: "{prefix}<white>{name}</white><gray>:</gray> {message}"
# Basic info about the player when hovering their name. Edit, add or remove lines freely.
hover:
en:
- "<#F5C136><bold>{name}</bold></#F5C136>"
- "<gray>Group: <white>{group}"
- "<gray>Level: <white>{level} <gray>Health: <white>{health} ❤"
- "<gray>Ping: <white>{ping} ms"
- "<gray>Playtime: <white>{playtime}"
- "<gray>First joined: <white>{first-join}"
- ""
- "<gray>Click to send a message"
es:
- "<#F5C136><bold>{name}</bold></#F5C136>"
- "<gray>Grupo: <white>{group}"
- "<gray>Nivel: <white>{level} <gray>Vida: <white>{health} ❤"
- "<gray>Ping: <white>{ping} ms"
- "<gray>Tiempo jugado: <white>{playtime}"
- "<gray>Primera vez: <white>{first-join}"
- ""
- "<gray>Clic para enviar un mensaje"
click: "suggest:/msg {name} "
# Chat channels. A player talks in their current channel (/channel <id> to switch, or
# /channel <id> <message> to send one message without switching). Each channel grants the
# permission roodychat.channel.<id> (default: everyone, except 'permission'/'staff' types = op).
# type: global everyone with the permission
# local players within 'radius' blocks in the same world
# world players in the sender's world
# permission everyone with the permission, but op-only by default (staff channels)
# 'format' is optional; without it the channel uses the player's group format.
channels:
default-channel: global
list:
global:
type: global
local:
type: local
radius: 100
format: "<gray>[L]</gray> {prefix}<white>{name}</white><gray>:</gray> {message}"
staff:
type: permission
format: "<red>[Staff]</red> {prefix}<white>{name}</white> <dark_gray>»</dark_gray> <red>{message}</red>"
# Shortcut commands: /sc switches to this channel, /sc <message> sends one message to it.
commands: [sc, staffchat]
# Showcase tokens players can put in a message. [item] shows the held item and its amount with its
# real tooltip (texts token-item / token-item-amount in lang/); [inv] shows armour, off-hand and inventory;
# [inv] and [ec] post a clickable tag that opens a frozen, view-only copy. Each needs the matching
# permission (roodychat.token.item / .inv / .ec, all default true).
tokens:
item: true
inventory: true
enderchest: true
# Seconds a player must wait between showcase tokens (0 = no cooldown). roodychat.token.bypass skips it.
cooldown-seconds: 0
# Chat moderation. Each module's 'action' is: off | warn (let it through, tell the player) |
# correct (fix it) | block (cancel it). roodychat.bypass.moderation skips all of it; staff with
# roodychat.staff get the alerts when notify-staff is true.
moderation:
notify-staff: true
caps:
action: correct # correct = make it lowercase
min-length: 8 # only messages at least this long
percent: 70 # % of letters that must be uppercase to trigger
repetition:
action: correct # correct = collapse long runs like "aaaaaa"
max-repeats: 3
cooldown:
action: off # block | warn | off — minimum gap between messages
seconds: 2
flood:
action: block # too similar to your previous message
similarity: 95 # % similar to trigger
links:
action: off # block | correct (replace with ***) | warn | off ; roodychat.links bypasses
allow: [] # domains to allow, e.g. [youtube.com, discord.gg]
words:
action: off # block | correct (censor with *) | warn | off ; leet-aware (h0l4 = hola)
list: [] # e.g. [badword1, badword2]
# Escalation: a player who gets this many blocked/warned messages within the window is muted
# automatically (violations: 0 = off). Staff can also use /roodychat mute <player> <time> and unmute.
escalation:
violations: 5
window-seconds: 60
mute-seconds: 300
# Announcements sent every interval-seconds, in order or at random (order: random).
# type: chat | actionbar | title | bossbar (or a list, e.g. [chat, bossbar])
# lines: one list for everyone, or one list per language code (each player gets theirs).
# For title: line 1 = title, line 2 = subtitle. For actionbar/bossbar: the first line.
# hover/click (chat only): like the groups' line hover/click. sound: "id volume pitch".
# worlds / groups / permission: optional, who gets it (groups = LuckPerms/Vault groups,
# inherited ones too, or roodychat.group.<id>). Players can turn them off with /chattoggle.
# Placeholders: {player}, {online}, {max}, {world}, {prefix} (the lang prefix) and %PlaceholderAPI%.
# Send one now with /roodychat announce <id>.
announcements:
enabled: true
interval-seconds: 300
order: sequential
min-players: 1
list:
welcome:
type: chat
lines:
en:
- ""
- " <#F5C136><bold>Welcome to the server, {player}!</bold>"
- " <gray>Type <white>/help</white> to get started. There are <white>{online}</white> players online."
- ""
es:
- ""
- " <#F5C136><bold>¡Bienvenido al servidor, {player}!</bold>"
- " <gray>Escribe <white>/help</white> para empezar. Hay <white>{online}</white> jugadores conectados."
- ""
hover:
en: ["<gray>Click to open the help"]
es: ["<gray>Clic para abrir la ayuda"]
click: "run:/help"
sound: "block.note_block.pling 1 1.5"
channels:
type: actionbar
lines:
en: ["<gray>Tip: talk only to nearby players with <white>/ch local</white>"]
es: ["<gray>Consejo: habla solo con los de cerca con <white>/ch local</white>"]
mentions:
type: bossbar
lines:
en: ["<yellow>Mention someone with <white>@name</white> — they'll hear a ping"]
es: ["<yellow>Menciona a alguien con <white>@nombre</white> — le sonará un aviso"]
bossbar:
color: yellow # pink, blue, red, green, yellow, purple, white
style: progress # progress, notched_6, notched_10, notched_12, notched_20
seconds: 10
# Mentions. When someone writes your name it stands out for you ('self-format') and you hear the
# sound and get an action bar (turn pings off with /chattoggle mentions). With @ (@name) it is also
# highlighted for everyone ('format'); a bare name stands out only for the player it names.
# {mention} = the name as written (@Name or Name), {name} = the player's name.
# Needs roodychat.mention (everyone); @everyone needs roodychat.mention.everyone (op).
mentions:
enabled: true
require-at: false # true = only @name mentions; a bare name is just text
format: "<yellow>{mention}</yellow>"
self-format: "<#F5C136><bold>{mention}</bold></#F5C136>"
hover: "<gray>Click to message <white>{name}"
click: "suggest:/msg {name} "
sound: "entity.experience_orb.pickup 1 1.2"
actionbar: true
everyone: true
# Command whitelist: when enabled, players can only run (and only see in tab-complete) the
# commands listed for the groups they are in, plus 'default'. An allowed command also allows its
# aliases and its plugin:command form. roodychat.bypass.commands (op) skips it.
# Groups are LuckPerms/Vault groups (inherited ones too) or roodychat.group.<id>.
command-whitelist:
enabled: false
groups:
default: [help, list, msg, tell, r, me, channel, ch, chattoggle, spawn]
vip: [fly, hat]
# Extra names for commands (roodychat, channel, chattoggle), applied on reload.
# Chat games: every so often a challenge shows up in chat and the first to answer it wins
# (the rewards below). /chatgame top and /chatgame stats [player]; admins: /chatgame start [type]
# and /chatgame stop. Players hide them with /chattoggle games. Playing needs roodychat.games
# (everyone).
games:
enabled: false
# Seconds between the end of a game and the next one.
interval-seconds: 600
# Fewest players (who play) online for a game to start.
min-players: 2
# Seconds to answer.
time-limit: 60
# The winning message is not shown in chat (true), or it is (false).
hide-answer: true
# How often each game comes up compared with the others (0 = never).
types:
unscramble: 3 # unscramble a word of 'words'
missing: 2 # fill in the missing letters of a word of 'words'
type: 2 # be the first to type a random code
math: 2 # solve a sum
trivia: 2 # answer a question of 'trivia'
reaction: 1 # be the first to click a button
# Letters of the code of the 'type' game.
code-length: 6
# Console commands for the winner. {player} = their name, {game} = the game (math, trivia...).
# For example: ["eco give {player} 100", "give {player} diamond 1"]
rewards: []
# A game with its own rewards instead, for example: trivia: ["eco give {player} 250"]
type-rewards: {}
# Players shown in /chatgame top.
top-size: 10
sounds:
start: "block.note_block.pling 1 1.2"
win: "entity.player.levelup 1 1"
# Words of unscramble and missing, in the server language (one word each, 3 letters or more).
words:
en: [diamond, creeper, obsidian, emerald, skeleton, villager, enchant, redstone, netherite, pickaxe, furnace, beacon, elytra, trident, lantern]
es: [diamante, creeper, obsidiana, esmeralda, esqueleto, aldeano, encantar, redstone, netherita, pico, horno, faro, tridente, linterna, espada]
# Questions: a text, or one per language; answers = every answer that counts (any language).
trivia:
- question:
en: "How many obsidian blocks does the smallest nether portal frame need?"
es: "¿Cuántos bloques de obsidiana necesita como mínimo el marco de un portal al Nether?"
answers: ["10", "ten", "diez"]
- question:
en: "Which mob explodes when it gets close to you?"
es: "¿Qué mob explota cuando se te acerca?"
answers: ["creeper"]
- question:
en: "What do you need to make an enchanting table: a book, two diamonds and...?"
es: "¿Qué hace falta para una mesa de encantamientos: un libro, dos diamantes y...?"
answers: ["obsidian", "obsidiana", "4 obsidian", "four obsidian", "4 obsidiana"]
- question:
en: "Which dimension is the Ender Dragon in?"
es: "¿En qué dimensión está el Ender Dragon?"
answers: ["the end", "end", "el end", "el fin"]
command-aliases:
roodychat: [chat]
chatgame: [cg]
# Tell the console and admins (permission roodychat.update) when a new version is out
# on plugins.roody.es.
check-updates: true