Repository navigation
Permissions
permissions.yml decides who may do what, and bounds what players who aren't staff can make the server fetch.
Every action is a permission node of its own: actions.player.pause in the file is the node cdisc.player.pause. All nodes are registered at startup, so LuckPerms and similar plugins list them by name. Screens are built from these nodes, so a button a player may not press is not drawn for them.
A value in the file is one rule, or a list of rules where any one is enough:
| Rule | Lets in |
|---|---|
true |
everyone |
false |
nobody, until a permission plugin grants the node |
op |
operators |
notop |
everyone who is not an operator |
somegroup.vip |
whoever has that permission |
'!somegroup.muted' |
whoever has not got it. The quotes are required: a bare ! breaks the YAML |
[somegroup.admin, somegroup.mod] |
whoever has either |
true, false and op set the node's default, so a permission plugin can still overrule them for one player. A rule naming other permissions is a second way in: whoever matches it gets through, and so does anyone granted the node directly.
| Node | Default | Covers |
|---|---|---|
cdisc.disc.create |
true | /cdisc create |
cdisc.disc.playlist |
true | /cdisc disc playlist |
cdisc.disc.clear |
true | /cdisc disc clear |
cdisc.disc.convert |
true | /cdisc disc convert |
cdisc.disc.download |
op | /cdisc admin download |
cdisc.disc.broadcast |
true | /cdisc create broadcast:Name |
cdisc.player.gui |
true | Opening the player screen at all |
cdisc.player.play, pause, next, previous
|
true | The buttons |
cdisc.player.seek |
true | Seek buttons, timecode, the dialog slider |
cdisc.player.repeat, shuffle
|
true | |
cdisc.player.volume |
true | The jukebox volume everyone hears |
cdisc.player.local-volume |
true | Your own volume while carrying |
cdisc.player.beacon |
true | Beacon range levels |
cdisc.player.portable |
true | Picking a playing jukebox up |
cdisc.player.channels |
true | Channel and volume of a lone jukebox |
cdisc.player.messages |
true | Your track messages, /cdisc messages
|
cdisc.player.screen |
true | Switching between chest screen and dialog |
cdisc.player.info |
true |
/cdisc player info and status, /cdisc sneak
|
cdisc.queue.open, add, remove, play
|
true | The queue |
cdisc.queue.policy |
true | What happens to a played disc |
cdisc.queue.crossfade |
true | Crossfade on or off for a jukebox |
cdisc.lyrics.toggle |
true | /cdisc lyrics |
cdisc.lyrics.preset |
true | /cdisc preset |
cdisc.lyrics.share |
true | /cdisc preset share |
cdisc.lyrics.scoreboard |
true | Lyrics in the sidebar while carrying |
cdisc.pair.create, manage, settings, dissolve, list
|
true | Speaker groups |
cdisc.admin.reload |
op | |
cdisc.admin.doctor |
op | |
cdisc.admin.logs |
op | /cdisc admin logs |
cdisc.admin.local-files |
op | /cdisc admin local-files-config |
cdisc.admin.presets |
op | /cdisc admin presets |
Two nodes are not in the file:
-
cdisc.admincovers every node above exceptcdisc.admin.logs, ignores the limits below, and may change other players' speaker groups. Operators have it. -
cdisc.admin.configopens the settings window,/cdisc admin config, and also gives everythingcdisc.admingives.cdisc.admindoes not grant it. Operators only by default.
Uploading logs is granted only by cdisc.admin.logs itself or its rule, and log-upload: false in config.yml turns it off for everyone, console included.
Nodes from before the per-action split still work:
| Old node | Grants |
|---|---|
cdisc.create |
create, convert, broadcast |
cdisc.create.playlist |
disc.playlist |
cdisc.clear, cdisc.download, cdisc.doctor
|
their one action |
cdisc.player |
the whole player screen, the queue, lyrics.toggle, preset, scoreboard
|
cdisc.pair |
every speaker group action |
cdisc.portable, cdisc.messages
|
their one action |
cdisc.preset |
lyrics.preset and share
|
Applied to everyone without cdisc.admin. /cdisc create makes the server fetch an address a player chose; without limits, one player can spend your bandwidth as fast as they type.
limits:
create-cooldown-seconds: 5 # 0 turns the wait off
max-track-seconds: 0 # 0 means no limit
allow-live: true # a stream has no length, so the line above can't bound it
allowed-hosts: [] # filled in, ONLY these hosts pass
blocked-hosts: []A leading www. is ignored and subdomains count: youtube.com also covers music.youtube.com. Search queries aren't checked against the host lists, since they can't reach anywhere but their own source.
limits:
create-cooldown-seconds: 15
max-track-seconds: 900
allow-live: false
allowed-hosts:
- youtube.com
- youtu.be
- soundcloud.com- Leave
enabled.httpinsources.ymloff, or switch it on only together withallowed-hosts. - Keep a cooldown on
/cdisc create. - Keep
cdisc.disc.downloadfor staff: it writes to disk.