341 lines
14 KiB
Markdown
341 lines
14 KiB
Markdown
+++
|
|
title = "Community Moderation"
|
|
template = "docs/with_menu.html"
|
|
weight = 200
|
|
[extra]
|
|
emoji = "🛡️"
|
|
tile = "I want to deploy moderation tools"
|
|
updated = "2023-01-25T06:43:00Z"
|
|
meta_description = """
|
|
Matrix allows communities to stay safe thanks to moderation tools. Mjolnir is
|
|
the recommended solution for community managers who want to fight abuse on
|
|
Matrix.
|
|
"""
|
|
+++
|
|
|
|
## Power levels
|
|
|
|
Matrix has a basic system of roles, sometimes also called Power Levels. It is a
|
|
number usually going from 0 to 100. Advanced users can decide to use a different
|
|
range, but we will not cover it here for the sake of simplicity.
|
|
|
|
By default, there are three roles in Matrix:
|
|
|
|
| Power Level | Role |
|
|
|-------------|---------------|
|
|
| 0 | User |
|
|
| 50 | Moderator |
|
|
| 100 | Administrator |
|
|
|
|
With the recommended default:
|
|
|
|
- **Users** can send messages, media, reactions and redact their own messages in
|
|
a room.
|
|
- **Moderators** can also change the room name, address, topic, remove users
|
|
from the room (temporarily or permanently), redact other's messages and send a
|
|
notification to everyone in the room at once using `@room`.
|
|
- **Administrators** can also change the history visibility (whether people can
|
|
see messages from before they joined or not), enable encryption in the room,
|
|
remove entire servers from the room, and promote others to Moderator or
|
|
Administrator.
|
|
|
|
Most people in your community are just going to be regular users. Usually
|
|
Moderators are appointed to handle the ad-hoc moderation issues. Note that this
|
|
can be an issue if you want to preserve the anonymity of your Trust & Safety
|
|
team for their own security. The moderation bot mjolnir brings a good answer to
|
|
this.
|
|
|
|
If you're taking over a community previously managed by someone with a high
|
|
level of technical expertise in Matrix and strongly opinionated on power levels, the
|
|
roles may not be the same. In that case, we recommend you to email
|
|
[support@matrix.org](mailto:support@matrix.org) for help.
|
|
|
|
## Your community's security guard
|
|
|
|
The tools built into Matrix are good for small group moderation, but they are
|
|
limited for now: removing a user (temporarily or permanently) is only possible
|
|
at the room level, and banning an entire server from a room is not exposed in
|
|
the UI.
|
|
|
|
Fortunately, a tool exists to step up your moderation game: a security guard
|
|
robot you add to all of your public rooms that can enforce your moderation
|
|
decisions on all the rooms at once.
|
|
|
|
And that's really what mjolnir is: a security guard for your rooms. Because of
|
|
the decentralised nature of Matrix, you need to add the robot to guard the door
|
|
of each of your rooms, and you need to grant it the Administrator role so it can
|
|
do its job properly.
|
|
|
|
### Getting mjolnir
|
|
|
|
At the moment, to get mjolnir for your community you need either to pay someone
|
|
to run mjolnir for you, or to [run it yourself on your own infrastructure](https://github.com/matrix-org/mjolnir/tree/main/docs)
|
|
if you have the technical knowledge to do it. We're aware this situation is
|
|
suboptimal and are working on a service so people get can mjolnir bots much more
|
|
easily.
|
|
|
|
### Setting it up in your rooms
|
|
|
|
Once you have performed the technical set-up of mjolnir, you need to:
|
|
1. Make sure your moderation staff is in the control room of your community
|
|
1. Invite mjolnir the security guard bot in all your rooms
|
|
1. Make the mjolnir bot Administrator in all your rooms (so it can enforce
|
|
moderation decisions).
|
|
|
|
To do so you need to invite the moderation bot in each room. You can do so
|
|
either by opening the right panel, opening the members list and clicking on
|
|
Invite, or you can type the following message in the message bar at the bottom:
|
|
|
|
```
|
|
/invite @yourMjolnirBot:example.com
|
|
```
|
|
|
|
The bot will join, and you can then promote it Administrator by finding it in
|
|
the list of members and changing its role, or you can type the following message
|
|
in the message bar at the bottom:
|
|
|
|
```
|
|
/op @yourMjolnirBot:example.com 100
|
|
```
|
|
|
|
You should spend some time thinking about what privileges you want to give to your Mjolnir. A common setup is to give the Mjolnir user power level 100. This gives Mjolnir the permissions to kick and ban people from the rooms it protects. This has a couple of implications. First, anyone with access to the Mjolnir has power level 100 in the rooms it protects. Also, Mjolnir is the de-facto owner of those community rooms. For more advanced set-ups, read the [spec covering power levels](https://spec.matrix.org/v1.5/client-server-api/#mroompower_levels).
|
|
|
|
## Getting moderation reports
|
|
|
|
By default, the moderation reports go to the reporter's homeserver
|
|
administrator. If you are the homeserver admin, you can choose to send the reports to the Mjolnir management room. Those reports look like this:
|
|
|
|
![](./mjolnir_report.png)
|
|
|
|
The report gives you some information about the reported message. Underneath, there are some buttons that you can use to take action on the report.
|
|
|
|
We'll talk about moderation actions in a moment. If you want to set up these reports, please follow the documentation [here](https://github.com/matrix-org/mjolnir#enabling-readable-abuse-reports).
|
|
|
|
## Enforcing moderation
|
|
|
|
### Redacting a specific message
|
|
|
|
There are two ways to redact a message. You can click the {{ mjolnirbutton(text="🗍 Redact") }} button underneath a report, if you are using those reports. You can also redact a particular message by sending a message in Mjolnir's control room. This method is useful when you haven't received a report about a message, but you want to redact it.
|
|
|
|
To redact a specific message, you need to find its permalink. You can find the permalink by hovering the message you want to delete, clicking on the `…`, then on `Share`.
|
|
|
|
![](./share_message.png)
|
|
|
|
This will open a pop-up window from which you can copy the permalink.
|
|
|
|
![](./copy_permalink.png)
|
|
|
|
Once you have the permalink, you can use it in mjolnir's redaction command
|
|
|
|
```
|
|
!mjolnir redact <event permalink>
|
|
```
|
|
|
|
For example
|
|
|
|
```
|
|
!mjolnir redact https://matrix.to/#/!yOatELRSQXzfQMmxjH:matrix.org/$F76L2figPEC240TFaUkHoKPxxhJ3P54vP4hi14Sd8xw?via=matrix.org&via=t2bot.io
|
|
```
|
|
|
|
One important feature of Mjolnir is to protect individual moderators from retaliation. If you redact a message using the client UI, that redaction appears with your user id. When you use Mjolnir, it shows Mjolnir's id. This can help to reduce direct retaliation against moderators for their moderation actions. Your management room will record who took the action.
|
|
|
|
### Redacting a user's last messages
|
|
|
|
Offensive users can sometimes try to spam messages before they are caught.
|
|
Finding the permalinks for these messages would be tedious and would make
|
|
moderation particularly inefficient.
|
|
|
|
If such a user has been identified, it's possible to redact their last n
|
|
messages, either globally or in a specific room. To do so, grab the user's
|
|
Matrix ID and issue a command following this pattern:
|
|
|
|
```
|
|
!mjolnir redact <user ID> [room alias/ID] [limit]
|
|
```
|
|
|
|
For example to redact the last 100 messages of `@john:example.com` in
|
|
`#matrix:matrix.org`:
|
|
|
|
```
|
|
!mjolnir redact @john:example.com #matrix:matrix.org 100
|
|
```
|
|
|
|
Or to redact the last 100 messages from `@john:example.com` globally:
|
|
|
|
```
|
|
!mjolnir redact @john:example.com 100
|
|
```
|
|
|
|
Note that this command will redact the last messages of the user, but will not
|
|
take any measure to prevent them from posting more abusive messages. Most of the
|
|
time you will want to also remove this person temporarily or permanently from
|
|
your community.
|
|
|
|
### Removing someone temporarily (kick)
|
|
|
|
If you have moderation reports enabled and click on the
|
|
{{ mjolnirbutton(text="⚽️ Kick") }} button below it, mjolnir will kick the user
|
|
from the room where they were reported.
|
|
|
|
If you don't have moderation reports enabled, you can also kick a user either
|
|
from a specific room or globally with the following command.
|
|
|
|
```
|
|
!mjolnir kick <glob> [room alias/ID] [reason]
|
|
```
|
|
|
|
For example
|
|
|
|
```
|
|
!mjolnir kick @john:example.com #matrix:matrix.org Inappropriate interactions with other people.
|
|
```
|
|
|
|
### Removing someone definitely (ban)
|
|
|
|
Some people may not stop after their messages have been redacted and they have
|
|
been kicked. In that case you need to be able to remove them permanently from
|
|
your community.
|
|
|
|
If you have reports enabled, and click on the
|
|
{{ mjolnirbutton(text="🚫 Ban") }} button below it, mjolnir will ban the user
|
|
from all the rooms it protects. The user will be banned not only from the room
|
|
where they were reported, but from your whole community.
|
|
|
|
If you don't have moderation reports enabled, you can also ban either a user
|
|
with the following command
|
|
|
|
```
|
|
!mjolnir ban <list shortcode> <user|room|server> <glob> [reason]
|
|
```
|
|
|
|
For example, to remove `@john:example.com` permanently from your community for
|
|
infringement to the code of conduct, you can issue the following command in
|
|
mjolnir's control room.
|
|
|
|
```
|
|
!mjolnir ban coc user @john:example.com User keeps insulting people
|
|
```
|
|
|
|
That's a complex command, let's try to understand what it does.
|
|
|
|
- `!mjolnir ban` tells mjolnir we want it to perform a ban
|
|
- `coc` tells mjolnir we want to add the person to the ban list with shortname
|
|
`coc`. We'll explore what ban lists are a little further below.
|
|
- `user` tells mjolnir it needs to ban a user. It is not strictly mandatory, but
|
|
it's a good practice to add it in order to avoid banning a whole server when
|
|
trying to ban a single user, in case of typo.
|
|
- `@john:example.com` is the Matrix ID of the person we want to ban
|
|
- `User keeps insulting people` is the reason why we are banning them. Their
|
|
client will be able to display that message.
|
|
|
|
Mjolnir then adds the user we're banning to the ban list we specified. Mjolnir
|
|
keeps watching one or several ban lists, and will ban all the users present on
|
|
those lists from all the rooms it protects.
|
|
|
|
Note that this command will likely fail if it's the first time you are trying to
|
|
ban someone. Indeed, you need to create one or more ban lists before adding
|
|
users or servers on them. See the section [Creating ban lists](#creating-ban-lists)
|
|
below for more information on how to create them.
|
|
|
|
### Removing a server definitely
|
|
|
|
Matrix is a federated network. This means people can set up new servers
|
|
specifically to harm some communities. This allows them to create a virtually
|
|
infinite number of users, making it possible to raid other communities easily.
|
|
|
|
Fortunately, all these malicious users have one thing in common: they come from
|
|
the same homeserver. This means if you block the malicious homeserver entirely,
|
|
all the malicious users are going to be banned at once.
|
|
|
|
To do so, you can issue a variant of the command used to ban an individual user.
|
|
The command was
|
|
|
|
```
|
|
!mjolnir ban <list shortcode> <user|room|server> <glob> [reason]
|
|
```
|
|
|
|
As you probably guessed, you are not going to ban a user but a server this once.
|
|
For example, to ban the `maliciousdomain.tld` domain:
|
|
|
|
```
|
|
!mjolnir ban spam server maliciousdomain.tld
|
|
```
|
|
|
|
Mjolnir is going to add the domain to the `spam` ban list, and whenever someone
|
|
from that homeserver tries to join your community they are going to be banned.
|
|
|
|
### Creating ban lists
|
|
|
|
Mjolnir allows you to create several ban lists that it can later watch. Those
|
|
ban lists can also be watched by third parties if you make them public.
|
|
|
|
The command to issue in mjolnir's control room to create a list is the
|
|
following
|
|
|
|
```
|
|
!mjolnir list create <shortcode> <alias localpart>
|
|
```
|
|
|
|
- `shortcode` is a short name given to this list. It should be short and easy to
|
|
type, since you are likely to type it a lot when banning users.
|
|
- `alias localpart` is the local part of the address mjolnir is going to create
|
|
for this list. This is useful if you ever want to share your ban list with
|
|
other communities.
|
|
|
|
For example, assuming the server mjolnir is deployed against is `example.com`,
|
|
the following command will create a ban list with the short code `spam` and the
|
|
address `#my-community-spam-ban-list:example.com`
|
|
|
|
```
|
|
!mjolnir list create spam my-community-spam-ban-list
|
|
```
|
|
|
|
You only need to create a ban list once, and can then add as many users and
|
|
servers as you want to that ban list. You can also create as many ban lists as
|
|
you want.
|
|
|
|
Communities often create two ban lists: one for spam, and one for code of
|
|
conduct infringements.
|
|
|
|
It is also possible to configure a default ban list mjolnir will use for bans if
|
|
no short code is specified. For example, to use the ban list with short code
|
|
`spam` by default, issue the following command:
|
|
|
|
```
|
|
!mjolnir default spam
|
|
```
|
|
|
|
Finally, from a technical perspective, a ban list is just a regular Matrix room
|
|
filled with moderation hidden messages, technically called events. As such, you
|
|
can give it a public address, and make it publicly accessible like you would for
|
|
any other room.
|
|
|
|
### Subscribing to ban lists
|
|
|
|
Ban lists are a clever mechanism that allows moderation teams to ban users for
|
|
different motives (e.g. one list for `spam` and one for `coc`). Such a
|
|
distinction can be useful when several communities want to collaborate together.
|
|
|
|
Not all communities will share a similar Code of Conduct, but a lot of them will
|
|
agree on what is spam. Being able to subscribe to another community's spam list
|
|
means your own community will be protected from spammers the other community has
|
|
already met, all while observing different code of conducts.
|
|
|
|
To subscribe to a public ban list, you need to retrieve the address of this
|
|
list. That list being technically nothing more than a Matrix room, its address
|
|
follows the usual `#room_name:server.tld` format.
|
|
|
|
Then to make mjolnir follow this list, you need to issue the following command
|
|
in its control room
|
|
|
|
```
|
|
!mjolnir watch <room alias/ID>
|
|
```
|
|
|
|
For example to subscribe to the `#matrix-org-hs-tos-bl:matrix.org` ban list
|
|
maintained by the Matrix.org Foundation, you would issue the following command
|
|
|
|
```
|
|
!mjolnir watch #matrix-org-hs-tos-bl:matrix.org
|
|
```
|