> For the complete documentation index, see [llms.txt](https://esmp-fun.gitbook.io/plugins/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://esmp-fun.gitbook.io/plugins/community-chat/using-it/moderation.md).

# Moderation

All enforcement happens at the relay — one choke point, one audit log, the same rules in every direction (game → Discord and Discord → game). A punishment issued anywhere applies everywhere.

## Staff commands

**In-game** (need the `crosschat.mod` permission, default: op):

| Command                               | What it does                                             |
| ------------------------------------- | -------------------------------------------------------- |
| `/gmute <player> [duration] [reason]` | Mute a player network-wide (no duration = until unmuted) |
| `/gunmute <player>`                   | Lift a network mute                                      |
| `/gban <player> [duration] [reason]`  | Ban a player from network chat                           |
| `/gunban <player>`                    | Lift a network chat ban                                  |
| `/gwarn <player> <reason>`            | Record a warning                                         |

**On Discord** (slash commands, role-gated per community by the operator): `/gmute`, `/gunmute`, `/gban`, `/gunban`, `/gwarn` — plus `/playerlist` (who's online across the whole network), `/whois` (look up a linked player) and `/history` (a player's punishment record).

Every punishment and every revoke is posted to the community's mod-log channel (the `modLogChannelId` setting) and stored in the audit log.

## AutoMod

The relay checks every message that crosses the network — in-game and Discord alike. It's configured in the relay's `config.yml`, works out of the box, and each part can be tuned:

<details>

<summary><strong>Word lists</strong> — the three <code>words-*.txt</code> files</summary>

Three severity levels:

* `censor` — the word becomes `****`, the message still goes through.
* `drop` — the message is quietly not delivered.
* `mute` — the message is blocked *and* the sender is instantly muted.

**No YAML needed.** On first start the relay creates three plain text files next to its config:

```
words-censor.txt
words-drop.txt
words-mute.txt
```

One word or phrase per line, lines starting with `#` are ignored. Edit them with any text editor; changes apply when someone presses **Save** in the in-game menu (`/crosschat menu`) or when the relay restarts. They're empty by default — every network draws its own lines.

</details>

<details>

<summary><strong>Links</strong></summary>

Allow them, strip them (`[link removed]` unless the site is on your allow-list), or block the whole message. Default: strip, with youtube.com, imgur.com and discord.gg allowed.

</details>

<details>

<summary><strong>SHOUTING</strong></summary>

Long mostly-uppercase messages simply get lowercased. Nobody is punished for caps.

</details>

<details>

<summary><strong>Spam</strong></summary>

Sending the same message twice within 15 seconds drops the copy, and each player is limited to 5 network messages per 10 seconds (extras stay local to their own server).

</details>

<details>

<summary><strong>Escalation</strong></summary>

Three dropped messages within 10 minutes = an automatic 30-minute mute plus a mod-log ping. All numbers adjustable.

</details>

Exact keys and defaults: [relay settings reference](/plugins/community-chat/reference/relay-settings.md).

## Local rules still count

* A player muted on their own server (Essentials, LuckPerms, any chat plugin that cancels chat) stays silent on the network too.
* Granting a player the `crosschat.muted` permission keeps their chat off the network without any command.
* `/crosschat pause` cuts one server out of the mesh in both directions, instantly.

## The staff guild (optional)

Networks that want shared oversight can set `staffLogChannelId` in the relay config: one channel — typically in a private staff Discord — then receives a copy of **every** community's punishment log. [Running a healthy network](/plugins/community-chat/using-it/governance.md) has the full staff-guild setup plus a charter template with the recommended rules-of-the-road: home community decides local, council majority decides global.
