# 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 ` 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:///_matrix/maubot/plugin//sonarr-webhook # and Headers: `Authorization: Bearer `. 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: # Set to "jellyfin" for a Jellyfin server. Affects display labels only — # the API surface used (/Users/{id}/Items, /Sessions, /System/Info/Public, # etc.) is identical between the two. type: 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 ` 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: {}