maubot-media/base-config.yaml
Maddox 6cfad31dfc v0.6.0: Seerr optional, scrubbed personal data, README rewrite
Issue #2.

Search/request now work without Seerr — when seerr.url/api_key are left
as placeholders the bot falls back to direct Sonarr/Radarr lookup + add
(mirrors how Lidarr music already works). Numbered selection keeps
working across both sources via a _source discriminator stamped onto
each result. !media requests / !media trending now print a friendly
hint when Seerr is absent.

base-config.yaml no longer ships any homelab-specific URLs, MXIDs, or
Emby UIDs — admin_users defaults to [], user_map to {}, and every
service URL uses a docker-hostname placeholder. New per-service config
keys (quality_profile_id, root_folder_path, monitor, search_on_add,
language_profile_id, minimum_availability) let operators pin Sonarr/
Radarr defaults the same way Lidarr already could; null = auto-pick
the first profile/folder.

README rewritten as a self-contained setup guide: requirements, build,
upload, instance config (Required vs Optional with the Seerr fallback
called out), webhook setup, fork notes.
2026-05-03 15:02:50 -04:00

113 lines
3.6 KiB
YAML

# Media bot configuration
#
# After uploading the plugin, set real values via the maubot UI's
# "instance config" tab. Anything left at the placeholder values below
# disables the related feature.
http_timeout: 15
default_results: 5
# Inline poster art on `!media request` confirmations and `!media random` picks.
posters_enabled: true
# Matrix users allowed to approve/decline Seerr requests via 👍/👎 reactions.
admin_users: []
# Where to post Seerr/Sonarr webhook notifications and the daily digest.
# Must be a room the bot has joined. Leave empty to disable.
notifications_room: ""
# Shared secret Seerr must send as `Authorization: Bearer <secret>` header
# when calling the seerr-webhook endpoint. Generate with `openssl rand -hex 32`.
# Empty = no auth check (NOT recommended).
seerr_webhook_secret: ""
# Sonarr → Matrix subscription notifications.
# Configure Sonarr → Settings → Connect → Webhook with URL
# https://<your-maubot>/_matrix/maubot/plugin/<instance>/sonarr-webhook
# and Headers: `Authorization: Bearer <secret>`. Triggers on Download events.
sonarr_webhook_secret: ""
# Daily digest — fires once a day in `notifications_room`.
digest_enabled: true
digest_hour: 8 # local hour, 0-23
# Optional Sunday recap pulled from an ntfy topic (e.g. an external cleanup job
# posts its summary there). Leave ntfy_url empty to skip.
ntfy_url: ""
emby_cleaner_topic: "emby-cleaner"
# --- Service endpoints ---
#
# Seerr is OPTIONAL. If url/api_key are left as placeholders, `!media search`
# and `!media request` route directly to Sonarr (TV) and Radarr (movies)
# instead. The `!media requests` and `!media trending` commands require Seerr
# and will return a hint when it isn't configured.
seerr:
url: ""
api_key: ""
# Sonarr / Radarr / Lidarr — defaults below auto-pick the first quality
# profile + root folder Lidarr/Sonarr/Radarr report. Override here to pin
# specific ones.
sonarr:
url: http://sonarr:8989
api_key: CHANGEME
quality_profile_id: null # auto-pick first if null
language_profile_id: null # auto-pick first; Sonarr v3 only (v4 ignores)
root_folder_path: null # e.g. "/tv"
monitor: "all" # all|future|missing|existing|firstSeason|latestSeason|none
search_on_add: true
radarr:
url: http://radarr:7878
api_key: CHANGEME
quality_profile_id: null
root_folder_path: null # e.g. "/movies"
monitor: "movieOnly"
minimum_availability: "released" # announced|inCinemas|released
search_on_add: true
# Lidarr — music. API v1 (different from Sonarr/Radarr v3).
lidarr:
url: http://lidarr:8686
api_key: CHANGEME
quality_profile_id: null
metadata_profile_id: null
root_folder_path: null # e.g. "/music"
monitor: "all"
search_on_add: true
emby:
url: http://emby:8096/emby
api_key: CHANGEME
nzbget:
url: http://nzbget:6789
username: nzbget
password: CHANGEME
qbittorrent:
url: http://qbittorrent:8080
username: admin
password: CHANGEME
# Map Matrix user IDs to per-service user identifiers.
# Senders not in this map get an "unauthorized" reply.
#
# Per-user fields:
# seerr_user_id: int — required for `!media request` when Seerr is enabled
# emby_user_id: str — required for Emby commands (recent/watched/etc)
#
# Optional per-user defaults:
# default_media_type: "movie" | "tv" — used by `!media request <q>` when no
# --tv/--movie flag is given
# result_count: int — overrides default_results above
#
# Example (uncomment and edit):
# user_map:
# "@alice:example.com":
# seerr_user_id: 1
# emby_user_id: "abc123def456"
# default_media_type: "movie"
user_map: {}