Skip to content

Doplarr

Description / nameInput element
Your domain name

Overview

Doplarr is a chatbot used to simplify using services like Sonarr/Radarr/Overseer via the use of chat. Current platform is Discord only.


Configuration

Note

📢 You may also override the default setting of Doplarr working with overseer, to work with Sonarr and Radarr. The recommended way to customize these parameters is to use the inventory. You should edit /srv/git/saltbox/inventories/host_vars/localhost.yml and add the following section.

Inventory
doplarr_docker_envs_defaults:
  SONARR__URL: # (1)!
  RADARR__URL: # (2)!
  SONARR__API: # (3)!
  RADARR__API: # (4)!
  DISCORD__TOKEN: # (5)!
  1. This line will set the Sonarr URL. Saltbox defaults to "http://sonarr:8989".
  2. This line will set the Radarr URL. Saltbox defaults to "http://radarr:7878".
  3. This line will set the Sonarr API key. Place your API key here. Wrap it in quotes.
  4. This line will set the Radarr API key. Place your API key here. Wrap it in quotes.
  5. This line will set the Discord token. Place your token here. Wrap it in quotes.

Create Discord bot

  1. Create a new Application in Discord
  2. Go to the Bot tab and add a new bot
  3. Copy the token and paste it in /opt/sandbox/settings.yml in the doplarr.discord_token field:

    /opt/sandbox/settings.yml
    doplarr:
      discord_token: your_discord_bot_token
      overseerr_url: "http://overseerr:5055"
      overseerr_api:
    
  4. Go to OAuth2 and under "OAuth2 URL Generator", enable applications.commands and bot

  5. Copy the resulting URL and open it in your browser in order to invite your bot to your discord channel.

Set up overseer parameters

  1. In /opt/sandbox/settings.yml : set up the overseer url in the corresponding field doplarr.overseerr_url according to your setings. If you have not customize saltbox settings, the default url http://overseerr:5055 should be correct:

    /opt/sandbox/settings.yml
    doplarr:
      discord_token: your_discord_bot_token
      overseerr_url: "http://overseerr:5055"
      overseerr_api:
    
  2. In /opt/sandbox/settings.yml : set up the overseer API key in the corresponding field doplarr.overseerr_api according to your overseer settings. You can get your api keys in your main setting page in overseer: https://overseerr.iYOUR_DOMAIN_NAMEi/settings:

    /opt/sandbox/settings.yml
      discord_token: your_discord_bot_token
      overseerr_url: "http://overseerr:5055"
      overseerr_api:
    

Deployment

sb install sandbox-doplarr

Usage

Role Defaults

Use the Inventory to customize variables. (1)

  1. Example override

    doplarr_name: "custom_value"
    

    Avoid overriding variables ending in _default

    When overriding variables that end in _default (like doplarr_docker_envs_default), you replace the entire default configuration. Future updates that add new default values will not be applied to your setup, potentially breaking functionality.

    Instead, use the corresponding _custom variable (like doplarr_docker_envs_custom) to add your changes. Custom values are merged with defaults, ensuring you receive updates.

doplarr_name
# Type: string
doplarr_name: doplarr
doplarr_role_discord_token
# Type: string
doplarr_role_discord_token: ""
doplarr_role_overseerr_url
# Type: string
doplarr_role_overseerr_url: ""
doplarr_role_overseerr_api
# Type: string
doplarr_role_overseerr_api: ""
doplarr_role_radarr_api
# Type: string
doplarr_role_radarr_api: ""
doplarr_role_radarr_url
# Type: string
doplarr_role_radarr_url: ""
doplarr_role_sonarr_api
# Type: string
doplarr_role_sonarr_api: ""
doplarr_role_sonarr_url
# Type: string
doplarr_role_sonarr_url: ""
doplarr_role_discord_max_results
# Type: string
doplarr_role_discord_max_results: "25"
doplarr_role_discord_role_id
# Type: string
doplarr_role_discord_role_id: ""
doplarr_role_discord_requested_msg_style
# Type: string
doplarr_role_discord_requested_msg_style: ":plain"
doplarr_role_sonarr_quality_profile
# Type: string
doplarr_role_sonarr_quality_profile: ""
doplarr_role_radarr_quality_profile
# Type: string
doplarr_role_radarr_quality_profile: ""
doplarr_role_sonarr_language_profile
# Type: string
doplarr_role_sonarr_language_profile: ""
doplarr_role_overseer_default_id
# Type: string
doplarr_role_overseer_default_id: ""
doplarr_role_partial_seasons
# Type: string
doplarr_role_partial_seasons: "true"
doplarr_role_log_level
# Type: string
doplarr_role_log_level: ":info"

Container

doplarr_role_docker_container
# Type: string
doplarr_role_docker_container: "{{ doplarr_name }}"

Image

doplarr_role_docker_image_pull
# Type: bool (true/false)
doplarr_role_docker_image_pull: true
doplarr_role_docker_image_repo
# Type: string
doplarr_role_docker_image_repo: "lscr.io/linuxserver/doplarr"
doplarr_role_docker_image_tag
# Type: string
doplarr_role_docker_image_tag: "latest"
doplarr_role_docker_image
# Type: string
doplarr_role_docker_image: "{{ lookup('role_var', '_docker_image_repo', role='doplarr') }}:{{ lookup('role_var', '_docker_image_tag', role='doplarr') }}"

Envs

doplarr_role_docker_envs_default
# Type: dict
doplarr_role_docker_envs_default:
  TZ: "{{ tz }}"
  PUID: "{{ uid }}"
  PGID: "{{ gid }}"
  DISCORD__TOKEN: "{{ lookup('role_var', '_discord_token', role='doplarr') }}"
  OVERSEERR__URL: "{{ lookup('role_var', '_overseerr_url', role='doplarr') }}"
  OVERSEERR__API: "{{ lookup('role_var', '_overseerr_api', role='doplarr') }}"
  RADARR__API: "{{ lookup('role_var', '_radarr_api', role='doplarr') }}"
  RADARR__URL: "{{ lookup('role_var', '_radarr_url', role='doplarr') }}"
  SONARR__API: "{{ lookup('role_var', '_sonarr_api', role='doplarr') }}"
  SONARR__URL: "{{ lookup('role_var', '_sonarr_url', role='doplarr') }}"
  DISCORD__MAX_RESULTS: "{{ lookup('role_var', '_discord_max_results', role='doplarr') }}"
  DISCORD__ROLE_ID: "{{ lookup('role_var', '_discord_role_id', role='doplarr') }}"
  DISCORD__REQUESTED_MSG_STYLE: "{{ lookup('role_var', '_discord_requested_msg_style', role='doplarr') }}"
  SONARR__QUALITY_PROFILE: "{{ lookup('role_var', '_sonarr_quality_profile', role='doplarr') }}"
  RADARR__QUALITY_PROFILE: "{{ lookup('role_var', '_radarr_quality_profile', role='doplarr') }}"
  SONARR__LANGUAGE_PROFILE: "{{ lookup('role_var', '_sonarr_language_profile', role='doplarr') }}"
  OVERSEERR__DEFAULT_ID: "{{ lookup('role_var', '_overseer_default_id', role='doplarr') }}"
  PARTIAL_SEASONS: "{{ lookup('role_var', '_partial_seasons', role='doplarr') }}"
  LOG_LEVEL: "{{ lookup('role_var', '_log_level', role='doplarr') }}"
doplarr_role_docker_envs_custom
# Type: list
doplarr_role_docker_envs_custom: []

Hostname

doplarr_role_docker_hostname
# Type: string
doplarr_role_docker_hostname: "{{ doplarr_name }}"

Networks

doplarr_role_docker_networks_alias
# Type: string
doplarr_role_docker_networks_alias: "{{ doplarr_name }}"
doplarr_role_docker_networks_default
# Type: list
doplarr_role_docker_networks_default: []
doplarr_role_docker_networks_custom
# Type: list
doplarr_role_docker_networks_custom: []

Restart Policy

doplarr_role_docker_restart_policy
# Type: string
doplarr_role_docker_restart_policy: unless-stopped

State

doplarr_role_docker_state
# Type: string
doplarr_role_docker_state: started

The following advanced options are available via create_docker_container but are not defined in the role. See: docker_container module

Resource Limits

doplarr_role_docker_blkio_weight
# Type: int
doplarr_role_docker_blkio_weight:
doplarr_role_docker_cpu_period
# Type: int
doplarr_role_docker_cpu_period:
doplarr_role_docker_cpu_quota
# Type: int
doplarr_role_docker_cpu_quota:
doplarr_role_docker_cpu_shares
# Type: int
doplarr_role_docker_cpu_shares:
doplarr_role_docker_cpus
# Type: string
doplarr_role_docker_cpus:
doplarr_role_docker_cpuset_cpus
# Type: string
doplarr_role_docker_cpuset_cpus:
doplarr_role_docker_cpuset_mems
# Type: string
doplarr_role_docker_cpuset_mems:
doplarr_role_docker_kernel_memory
# Type: string
doplarr_role_docker_kernel_memory:
doplarr_role_docker_memory
# Type: string
doplarr_role_docker_memory:
doplarr_role_docker_memory_reservation
# Type: string
doplarr_role_docker_memory_reservation:
doplarr_role_docker_memory_swap
# Type: string
doplarr_role_docker_memory_swap:
doplarr_role_docker_memory_swappiness
# Type: int
doplarr_role_docker_memory_swappiness:
doplarr_role_docker_shm_size
# Type: string
doplarr_role_docker_shm_size:

Security & Devices

doplarr_role_docker_cap_drop
# Type: list
doplarr_role_docker_cap_drop:
doplarr_role_docker_cgroupns_mode
# Type: string
doplarr_role_docker_cgroupns_mode:
doplarr_role_docker_device_cgroup_rules
# Type: list
doplarr_role_docker_device_cgroup_rules:
doplarr_role_docker_device_read_bps
# Type: list
doplarr_role_docker_device_read_bps:
doplarr_role_docker_device_read_iops
# Type: list
doplarr_role_docker_device_read_iops:
doplarr_role_docker_device_requests
# Type: list
doplarr_role_docker_device_requests:
doplarr_role_docker_device_write_bps
# Type: list
doplarr_role_docker_device_write_bps:
doplarr_role_docker_device_write_iops
# Type: list
doplarr_role_docker_device_write_iops:
doplarr_role_docker_devices
# Type: list
doplarr_role_docker_devices:
doplarr_role_docker_devices_default
# Type: string
doplarr_role_docker_devices_default:
doplarr_role_docker_groups
# Type: list
doplarr_role_docker_groups:
doplarr_role_docker_privileged
# Type: bool (true/false)
doplarr_role_docker_privileged:
doplarr_role_docker_security_opts
# Type: list
doplarr_role_docker_security_opts:
doplarr_role_docker_user
# Type: string
doplarr_role_docker_user:
doplarr_role_docker_userns_mode
# Type: string
doplarr_role_docker_userns_mode:

Networking

doplarr_role_docker_dns_opts
# Type: list
doplarr_role_docker_dns_opts:
doplarr_role_docker_dns_search_domains
# Type: list
doplarr_role_docker_dns_search_domains:
doplarr_role_docker_dns_servers
# Type: list
doplarr_role_docker_dns_servers:
doplarr_role_docker_domainname
# Type: string
doplarr_role_docker_domainname:
doplarr_role_docker_exposed_ports
# Type: list
doplarr_role_docker_exposed_ports:
doplarr_role_docker_hosts
# Type: dict
doplarr_role_docker_hosts:
doplarr_role_docker_hosts_use_common
# Type: bool (true/false)
doplarr_role_docker_hosts_use_common:
doplarr_role_docker_ipc_mode
# Type: string
doplarr_role_docker_ipc_mode:
doplarr_role_docker_links
# Type: list
doplarr_role_docker_links:
doplarr_role_docker_network_mode
# Type: string
doplarr_role_docker_network_mode:
doplarr_role_docker_pid_mode
# Type: string
doplarr_role_docker_pid_mode:
doplarr_role_docker_ports
# Type: list
doplarr_role_docker_ports:
doplarr_role_docker_uts
# Type: string
doplarr_role_docker_uts:

Storage

doplarr_role_docker_keep_volumes
# Type: bool (true/false)
doplarr_role_docker_keep_volumes:
doplarr_role_docker_mounts
# Type: list
doplarr_role_docker_mounts:
doplarr_role_docker_storage_opts
# Type: dict
doplarr_role_docker_storage_opts:
doplarr_role_docker_tmpfs
# Type: list
doplarr_role_docker_tmpfs:
doplarr_role_docker_volume_driver
# Type: string
doplarr_role_docker_volume_driver:
doplarr_role_docker_volumes
# Type: list
doplarr_role_docker_volumes:
doplarr_role_docker_volumes_from
# Type: list
doplarr_role_docker_volumes_from:
doplarr_role_docker_volumes_global
# Type: bool (true/false)
doplarr_role_docker_volumes_global:
doplarr_role_docker_working_dir
# Type: string
doplarr_role_docker_working_dir:

Monitoring & Lifecycle

doplarr_role_docker_auto_remove
# Type: bool (true/false)
doplarr_role_docker_auto_remove:
doplarr_role_docker_cleanup
# Type: bool (true/false)
doplarr_role_docker_cleanup:
doplarr_role_docker_force_kill
# Type: string
doplarr_role_docker_force_kill:
doplarr_role_docker_healthcheck
# Type: dict
doplarr_role_docker_healthcheck:
doplarr_role_docker_healthy_wait_timeout
# Type: int
doplarr_role_docker_healthy_wait_timeout:
doplarr_role_docker_init
# Type: bool (true/false)
doplarr_role_docker_init:
doplarr_role_docker_kill_signal
# Type: string
doplarr_role_docker_kill_signal:
doplarr_role_docker_log_driver
# Type: string
doplarr_role_docker_log_driver:
doplarr_role_docker_log_options
# Type: dict
doplarr_role_docker_log_options:
doplarr_role_docker_oom_killer
# Type: bool (true/false)
doplarr_role_docker_oom_killer:
doplarr_role_docker_oom_score_adj
# Type: int
doplarr_role_docker_oom_score_adj:
doplarr_role_docker_output_logs
# Type: bool (true/false)
doplarr_role_docker_output_logs:
doplarr_role_docker_paused
# Type: bool (true/false)
doplarr_role_docker_paused:
doplarr_role_docker_recreate
# Type: bool (true/false)
doplarr_role_docker_recreate:
doplarr_role_docker_restart_retries
# Type: int
doplarr_role_docker_restart_retries:
doplarr_role_docker_stop_timeout
# Type: int
doplarr_role_docker_stop_timeout:

Other Options

doplarr_role_docker_capabilities
# Type: list
doplarr_role_docker_capabilities:
doplarr_role_docker_cgroup_parent
# Type: string
doplarr_role_docker_cgroup_parent:
doplarr_role_docker_commands
# Type: list
doplarr_role_docker_commands:
doplarr_role_docker_create_timeout
# Type: int
doplarr_role_docker_create_timeout:
doplarr_role_docker_entrypoint
# Type: string
doplarr_role_docker_entrypoint:
doplarr_role_docker_env_file
# Type: string
doplarr_role_docker_env_file:
doplarr_role_docker_labels
# Type: dict
doplarr_role_docker_labels:
doplarr_role_docker_labels_use_common
# Type: bool (true/false)
doplarr_role_docker_labels_use_common:
doplarr_role_docker_read_only
# Type: bool (true/false)
doplarr_role_docker_read_only:
doplarr_role_docker_runtime
# Type: string
doplarr_role_docker_runtime:
doplarr_role_docker_sysctls
# Type: list
doplarr_role_docker_sysctls:
doplarr_role_docker_ulimits
# Type: list
doplarr_role_docker_ulimits:
doplarr_role_autoheal_enabled
# Enable or disable Autoheal monitoring for the container created when deploying
# Type: bool (true/false)
doplarr_role_autoheal_enabled: true
doplarr_role_depends_on
# List of container dependencies that must be running before the container start
# Type: string
doplarr_role_depends_on: ""
doplarr_role_depends_on_delay
# Delay in seconds before starting the container after dependencies are ready
# Type: string (quoted number)
doplarr_role_depends_on_delay: "0"
doplarr_role_depends_on_healthchecks
# Enable healthcheck waiting for container dependencies
# Type: string ("true"/"false")
doplarr_role_depends_on_healthchecks:
doplarr_role_discord_max_results
# Type: string
doplarr_role_discord_max_results:
doplarr_role_discord_requested_msg_style
# Type: string
doplarr_role_discord_requested_msg_style:
doplarr_role_discord_role_id
# Type: string
doplarr_role_discord_role_id:
doplarr_role_discord_token
# Type: string
doplarr_role_discord_token:
doplarr_role_diun_enabled
# Enable or disable Diun update notifications for the container created when deploying
# Type: bool (true/false)
doplarr_role_diun_enabled: true
doplarr_role_docker_controller
# Enable or disable Saltbox Docker Controller management for the container
# Type: bool (true/false)
doplarr_role_docker_controller: true
doplarr_role_docker_image_repo
# Type: string
doplarr_role_docker_image_repo:
doplarr_role_docker_image_tag
# Type: string
doplarr_role_docker_image_tag:
doplarr_role_docker_volumes_download
# Type: bool (true/false)
doplarr_role_docker_volumes_download:
doplarr_role_log_level
# Type: string
doplarr_role_log_level:
doplarr_role_overseer_default_id
# Type: string
doplarr_role_overseer_default_id:
doplarr_role_overseerr_api
# Type: string
doplarr_role_overseerr_api:
doplarr_role_overseerr_url
# Type: string
doplarr_role_overseerr_url:
doplarr_role_partial_seasons
# Type: string
doplarr_role_partial_seasons:
doplarr_role_radarr_api
# Type: string
doplarr_role_radarr_api:
doplarr_role_radarr_quality_profile
# Type: string
doplarr_role_radarr_quality_profile:
doplarr_role_radarr_url
# Type: string
doplarr_role_radarr_url:
doplarr_role_sonarr_api
# Type: string
doplarr_role_sonarr_api:
doplarr_role_sonarr_language_profile
# Type: string
doplarr_role_sonarr_language_profile:
doplarr_role_sonarr_quality_profile
# Type: string
doplarr_role_sonarr_quality_profile:
doplarr_role_sonarr_url
# Type: string
doplarr_role_sonarr_url: