# nsfwbot for Matrix `nsfwbot` is a Matrix bot plugin that detects NSFW (Not Safe For Work) images posted in Matrix chat rooms. It uses [nudenet](https://github.com/notAI-tech/NudeNet), which includes a deep learning model that efficiently runs without requiring a GPU, with low resource demands. ## Features - **Image Analysis**: Detects and analyzes images posted in Matrix chats using NudeNet. - **Redaction of Spammed Images**: Automatically redacts images when users send more than the allowed number within a short time frame. - **Text Message Parsing**: Analyzes images embedded in text messages. - **Configurable Concurrency**: Controls concurrent image processing tasks. - **Custom Actions**: Configurable actions for detected content, including reporting and redacting messages. ## Requirements - **Maubot**: Runs within the Maubot framework. - **Python Dependencies**: `nudenet`, `beautifulsoup4`, and `maubot`. > **Note**: The `nudenet` package and other dependencies will not run on Alpine Linux, so use the custom Debian-based Maubot Docker image. To install the dependencies, you can find them listed in the `requirements.txt`: ```plaintext beautifulsoup4 nsfwdetection maubot ``` ## Installation 1. **Use the Custom Maubot Docker Image**: Replace the official Maubot image with a custom Debian-based image: ```bash docker pull ghcr.io/tcpipuk/maubot:debian ``` 2. a. **Install pre-prepared plugin from [repository releases](https://git.buechner.me/nbuechner/matrix-nsfwbot/releases)** b. **Clone the Repository**: ```bash git clone https://git.buechner.me/nbuechner/matrix-nsfwbot ``` Zip the plugin files and upload through the Maubot admin interface. Ensure the plugin is configured and enabled. 3. **Configure the Plugin**: Edit `base-config.yaml` to set: - `max_concurrent_jobs`: Number of concurrent jobs to allow. - `via_servers`: List of servers for `matrix.to` URLs. - `actions`: - `ignore_sfw`: Ignore SFW images (default: `true`). - `redact_nsfw`: Redact NSFW messages (default: `true`). - `direct_reply`: Reply directly in the same room (default: `false`). - `report_to_room`: Room ID for reporting (optional). - `max_images`: The maximum number of images a user can send within a certain time window (default: `3`). - `time_window`: The time window (in seconds) in which the image count is tracked (default: `60` seconds). > **Note**: `report_to_room` can be a room alias (like `#room:server`), but it is more efficient to use a room ID (`!room:server`). ## Usage Once installed and configured, `nsfwbot` will automatically analyze images posted in the chat and: - Classify images as NSFW or SFW. - Redact images if a user exceeds the configured spam limit (`max_images`). - Optionally report detected NSFW content to a configured room. Example output: ```markdown mxc://matrix.org/abcd1234 in https://matrix.to/#/!roomid:matrix.org/$eventid?via=matrix.org appears NSFW with score 87.93% ``` If multiple images are detected in a text message: ```markdown - mxc://matrix.org/abcd1234 in https://matrix.to/#/!roomid:matrix.org/$eventid?via=matrix.org appears SFW with score 2.45% - mxc://matrix.org/efgh5678 in https://matrix.to/#/!roomid:matrix.org/$eventid?via=matrix.org appears NSFW with score 94.82% ``` If a user sends too many images: ```markdown User @example:matrix.org has exceeded the image limit. Previous images redacted. ``` ## Contributing Contributions are welcome! Open an issue or submit a pull request on GitHub. ## License This project is licensed under the AGPLv3 License. See the [LICENSE](LICENSE) file for details.