VoiceMaster
Learn how to setup the VoiceMaster module.
Replace [prefix] with your server's prefix.
VoiceMaster gives every member their own voice channel. They join one channel, serenity creates a channel for them and moves them into it — and in there they're the owner: they can lock it, hide it, rename it, set a member limit and decide who gets in. When the last person leaves, the channel deletes itself.
You can also run these commands as slash commands, as they sometimes work better this way.
Setting up VoiceMaster
One command builds everything:
// Syntax
[prefix]voicemaster setup
// Example
;voicemaster setup
Serenity creates a voicemaster category with two channels in it — a join to create voice channel and an #interface text channel holding the control panel.

Rename the category and both channels however you like — serenity remembers them by id, not by name.
Serenity needs Manage Channels, Manage Roles, Connect and View Channel. If any of them is missing, the setup tells you which one instead of half-building the module.
How it works
A member joins join to create
Serenity creates a voice channel for them in the same category.They get moved into it
They're the owner of that channel from that moment on.They control it from #interface
Buttons for lock, hide, rename, member limit and the rest.The last person leaves
The channel is deleted again. Nothing to clean up.
A category can hold 50 channels. Once it's full, the next member to join gets moved back out and a DM telling them there's no free slot — so give the category room, or clear old channels out of it.
Naming the Channels
By default a new channel is called {user}'s channel. Change the pattern with:
// Syntax
[prefix]voicemaster channelname [name]
// Example
;voicemaster channelname {user}'s room

| Variable | What it becomes |
|---|---|
{user} | The member's username, possessive |
{user.display} | Their nickname in this server, possessive |
Up to 100 characters — the same limit Discord puts on a channel name.
The Interface
The panel in #interface is what members actually use. Every button works on their own channel, so the same panel serves the whole server.

| Button | What it does |
|---|---|
| lock | Nobody new can join |
| unlock | Everyone can join again |
| hide | The channel disappears from the channel list |
| reveal | The channel is visible again |
| rename | Opens a modal for the new name |
| decrease | Member limit one lower |
| increase | Member limit one higher |
| info | Owner, creation time, bitrate and how many people are connected |
| kick | Opens permit and kick, each with a member dropdown |
| claim | Take over a channel whose owner has left |

The buttons only work for the owner of the channel, and only while they're sitting in it. Anyone else gets told they're not the owner — the panel can't be used to mess with someone else's channel.
Letting People in and Throwing them out
The kick button opens both halves of the access control: Permit lets members into a locked or hidden channel, Kick disconnects them and blocks them from coming back. Both use a dropdown, and both take up to 5 members at once.
The member limit runs from 0 to 99, where 0 means no limit at all.
Building your own Interface
The default panel is fine, but you can write your own with [prefix]interface and an embed script. Buttons are just another parameter in that script.
// Syntax
[prefix]interface [code]
// Example
;interface {embed}{title: voicemaster}$v{description: control your voicemaster channel}$v{button: lock && emoji: 🔒}$v{button: unlock && emoji: 🔓 && style: green}$v{button: hide && emoji: 👻 && style: red}

A button takes an action first, then any of emoji, label and style, separated by &&:
actionlock, unlock, hide, reveal, rename, decrease, increase, info, kick, claimrequiredemojiemojilabeltextstylered, green, blue, graydefault grayWrite only the buttons you want. A panel with three buttons is a lot less intimidating than one with ten, and the commands below still cover everything else.
Back to the Default Interface
Run [prefix]interface with no script and serenity posts the default panel again, into whichever channel you ran it in.
Controlling a Channel with Commands
Everything on the panel is a command too, and a few things are commands only. All of them need you to be the owner of the channel you're in.
| Command | What it does |
|---|---|
[prefix]voice lock | Nobody new can join |
[prefix]voice unlock | Everyone can join again |
[prefix]voice hide | Hide the channel from the channel list |
[prefix]voice reveal | Show it again |
[prefix]voice rename [name] | Rename the channel |
[prefix]voice status [text] | Set the channel's status line |
[prefix]voice permit [member|role] | Let someone into your locked channel |
[prefix]voice reject [member|role] | Block someone, and disconnect them now |
[prefix]voice kick [member] | Disconnect someone without blocking them |
[prefix]voice claim | Take over a channel whose owner has left |
[prefix]voice transfer [member] | Hand the channel to someone else in it |
// Syntax
[prefix]voice permit [member|role]
// Example
;voice permit @eivoran
;voice permit @Friends
permit and reject both take a role as well as a member — one command to let your whole friends role in.
Renaming is limited to twice every 10 minutes per channel. That's Discord's rate limit on channel edits, not ours — hitting it would freeze the rename for everyone in the server.
Claiming a Channel
If the owner leaves and the channel is still alive, anyone in it can take it over with [prefix]voice claim. It only works while the owner is actually gone — as long as they're still sitting in the channel, it stays theirs.
Presets
A preset saves how a channel is set up so you don't have to rebuild it every time. It stores the name, the bitrate, the member limit and every permission you handed out — who's permitted, who's blocked.
// Syntax
[prefix]voice preset add [name]
// Example
;voice preset add friends
Presets belong to you, not to the server, so they follow you into every server serenity is in. You can keep up to 5.
Using a Preset
// Syntax
[prefix]voice preset load [name]
// Example
;voice preset load friends
Loading rewrites the whole channel, permissions included. Members who were permitted but have since left the server are skipped and reported back to you.
Loading a Preset Automatically
Rather than loading it by hand every time, mark one preset to apply the moment your channel is created.
// Syntax
[prefix]voice preset autoload [name]
// Example
;voice preset autoload friends
Only one preset can be on autoload. Picking a second one asks you whether to switch. [prefix]voice preset autoload none turns it off again.
Managing your Presets
// Syntax
[prefix]voice preset list
[prefix]voice preset update [name]
[prefix]voice preset delete [name]
// Example
;voice preset list
;voice preset update friends
;voice preset delete friends

update overwrites a preset with how your channel looks right now — the usual way to change one, rather than deleting and re-adding it.
Removing VoiceMaster
// Syntax
[prefix]voicemaster unsetup
// Example
;voicemaster unsetup
Serenity asks what should happen to the channels first:

Either way your interface and every custom button you built is gone. Temporary channels that are still open stop being managed — they won't clean themselves up any more.