**TL;DR**: [Appoint mods](#moderating-abuse); [keep in touch](#communication-channels); [tag your room right](#community-tags) (`#nsfw` and `#test`); [and above all, follow the rules](README.md#policy).
Communities listed on our site must take care to [follow our policy](README.md#policy), which includes the [Session Terms of Service](https://getsession.org/terms-of-service).
**Abuse is a very real problem on Session. Make sure to appoint sufficient moderators to your Communities**.
The following mitigations may also help prevent abuse in your Community.
### Disabling attachments
The following command will allow only staff to send attachments in a given Community:
```sh
sogs --rooms "MY_ROOM_ID" --remove-perms u
```
Replace `MY_ROOM_ID` with `*` (asterisk) to apply this change to all Communities on your server.
- Access to the command line (or [other tools](#additional-moderator-tools)) are necessary to grant the upload permission to individual users: `sogs --rooms MY_ROOM_ID --add-perms u --users USER_SESSION_ID`.
### PySOGS SQL Triggers (recommended)
The [PySOGS SQL Triggers](https://codeberg.org/gravel/pysogs-sql-triggers) are a set of database modifications compiled by `gravel` for the Session Open Group Server.
The SQL triggers provide additional features to Communities, such as anti-abuse measures and other utilities.
Features of the SQL triggers include:
- Setting restrictions on new user activity
- Setting restrictions on direct messaging activity
- Use of the `!lockdown` and `!endlockdown` chat commands
- Use of the `!requestrole uploader` and `!requestrole moderator` chat commands
The SQL triggers are both *customizable* and *reversible* by design, and were developed for use with the [PySOGS SQL Manager](https://codeberg.org/gravel/pysogs-sql-cli). For installation instructions, see [pysogs-sql-triggers#Installation](https://codeberg.org/gravel/pysogs-sql-triggers#installation). Note that the PostgreSQL database is not supported at this time.
The following command-line script will prevent your Community server from propagating message requests when both participants are "untrusted"; that is, when neither participant is a moderator, nor has explicit permissions to upload attachments:
To grant the attachment upload permission to a regular user, see [Disabling Attachments](#disabling-attachments) or [Additional Moderator Tools](#additional-moderator-tools).
### Filtering abusive language
You can use the built-in profanity list feature of your SOGS to block messages containing certain words. To edit this profanity list, see the `/var/lib/session-open-group-server/profanity-block-list.txt` file. You may also modify the behavior of the profanity blocker, such as adding a custom reply; see your `sogs.ini` configuration file.
Existing lists created by the community may serve as a basis for your profanity list:
- Profanity list by slrslr: <https://github.com/slrslr/misc/blob/main/profanity-block-list.txt>
**Side effects**:
- ⚠️ Long profanity lists may slow down restarts of your SOGS, consume all available virtual memory and/or lead to crashes. ([Issue](https://github.com/oxen-io/session-pysogs/issues/159))
### Additional moderator tools
- Compile and use the AppImage for `gravel`'s [fork of Session Desktop](https://codeberg.org/gravel/session-desktop/src/branch/dev-gravel/CONTRIBUTING.md#developer-setup).
-`Allow sending attachments` and `Remove attachment exception` options allow moderators to grant or revoke upload permissions for regular users.
-`Ban User from Server` and `Unban User from Server` options allow **global** moderators to ban a user from all Communities on a given server.
- **Warning**: To receive updates, you will need to compile new versions of the fork. The fork is maintained for personal use and may fall behind on security fixes.
Make your Community look more legitimate by setting a name and description.
Don't know how to set up a room with a name and description? Check the [official documentation](https://github.com/oxen-io/session-pysogs/blob/stable/administration.md#creating-a-room).
Forgot to set a description? Update it like so:
```sh
sogs --rooms MY_ROOM_ID --description "New description goes here #lang:en#privacy"
```
Forgot to set a name? The following command might just save you (just replace the bits in uppercase):
```sh
sqlite3 /var/lib/session-open-group-server/sogs.db 'update rooms set name="MY_ROOM_NAME" where token="MY_ROOM_ID";'
The obvious benefit is searchability. However, tags such `#nsfw` or `#test` also help us automatically hide parts of the Community display:
The `#nsfw` tag hides the Community avatar and ensures visitors know your Community is not safe for work, while the `#test` tag marks a Community as "intended for testing" and hides it from our index. The `#unlisted` tag can be used for the same purpose, such as when archiving Communities.
You may notice the Host column groups Communities by their host SOGS, and some SOGS are easily recognizable by a unified icon. If you also want your Communities to be linked by a recognizable icon, the requirements are easy:
- The icon must be the same as an existing Community avatar.
- The icon must be safe-for-work, i.e., no suggestive or violent material.
- first, confirm it is listed on an upstream source,
- verify it can be joined from the app,
- check in our page footer that the list has been updated recently, and
- ensure your Community [follows our policy](README.md#policy).
If your Community still does not appear on our list, [please contact us](README.md#contact-us). Note that poor connectivity may affect our ability to list Communities in regions affected by internet censorship.
We occasionally accept requests from server operators to de-list whole Community servers.
If you feel our listing would be detrimental to your Communities — such as in cases where your Communities reveal sensitive information about your users — you may [contact us](README.md#contact-us) to request to de-list a Community server. Please note that Session Communities are not designed with private communication in mind.