1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
|
---
layout: doc
---
# Channel Chat
Create channels to separate conversations by group. To use this feature, set `features.channelChat.enabled` to `true` in `config.yml`.
## Creating a Channel
```
/lc channel create <channelId> <name> [description] [isPrivate]
```
- `channelId`: A unique identifier for the channel (alphanumeric, `_`, `-` only, 3-30 characters)
- `name`: The display name of the channel
- `description`: A description of the channel (optional)
- `isPrivate`: Set to `true` to make the channel private (default: `false`)
The creator automatically becomes the owner.
## Joining and Leaving Channels
```
/lc channel join <channelId> # Join a channel
/lc channel leave # Leave the active channel
/lc channel switch <channelId> # Switch the active channel
```
Joining a private channel requires an invitation from the owner or a moderator.
## Active Channel
Players can join multiple channels, but only one channel can be active at a time. Chat messages are sent to the active channel. Use `/lc channel switch` to change the active channel.
```
/lc channel status # Display the current active channel and list of joined channels
```
## Sending to Global Chat (`!` Prefix)
While a channel is active, your chat goes to that channel. Prefixing a message with `!` sends that one message to global chat instead, without leaving or switching the channel.
```
!Hello everyone # Goes to global chat even while a channel is active
```
The `!` and any space following it are stripped before the message is sent, so it never appears in the message itself. A message consisting of only `!` is discarded and nothing is sent.
> [!NOTE]
> The prefix is handled by the chat listener, which is only registered when channel chat, cross-server global chat, or Japanese conversion is enabled. If all three are disabled, a leading `!` stays in the message exactly as typed.
## Roles and Permissions
Channels have three roles.
| Role | Permissions |
|------|-------------|
| **OWNER** | Delete the channel, manage moderators, transfer ownership, manage members |
| **MODERATOR** | Invite, kick, ban/unban members |
| **MEMBER** | Participate in chat, view channel information |
### Moderator Management (Owner Only)
```
/lc channel mod <playerName> # Grant/revoke moderator permissions
/lc channel ownership <playerName> # Transfer ownership
```
### Member Management (Owner / Moderator)
```
/lc channel invite <playerName> # Invite a player
/lc channel kick <playerName> # Kick a player
/lc channel ban <playerName> # Ban a player
/lc channel unban <playerName> # Unban a player
```
## Limit Settings
You can set channel limits in `config.yml` (set to `0` for unlimited).
| Setting Key | Description |
|-------------|-------------|
| `maxChannelsPerServer` | Maximum number of channels per server |
| `maxMembersPerChannel` | Maximum number of members per channel |
| `maxMembershipPerPlayer` | Maximum number of channels a player can join |
## Message Logging
Channel messages can be logged in NDJSON format. Files are rotated daily, and a new file with a suffix is created when `maxFileSizeMB` is exceeded.
```json
{"timestamp":"2026-04-05T14:23:45.123Z","playerId":"550e8400-...","playerName":"Steve","channelId":"general","message":"Hello!"}
```
See the `features.channelChat.messageLogging` section on the [Configuration page](/docs/configuration) for logging settings.
## Bypass Permission
Players with the `lunaticchat.channelbypass` permission (default: op) are protected from kicks and bans, and can force-delete channels.
## Spy Mode
Channel messages are not private from administrators. Players with the `lunaticchat.spy` permission (default: op) also receive channel messages, excluding the sender and the channel's own members. See [Spy Mode](/docs/features/admin#spy-mode) for details.
## Message Format
The display format for channel messages can be customized via `messageFormat.channelMessageFormat` in `config.yml`. See [Message Format](/docs/reference/message-format) for details.
|