# matrix-appservice-discord is a Matrix <-> Discord bridge
# See: https://github.com/Half-Shot/matrix-appservice-discord

matrix_appservice_discord_enabled: true

matrix_appservice_discord_docker_image: "halfshot/matrix-appservice-discord:latest"
matrix_appservice_discord_docker_image_force_pull: "{{ matrix_appservice_discord_docker_image.endswith(':latest') }}"

matrix_appservice_discord_base_path: "{{ matrix_base_data_path }}/appservice-discord"
matrix_appservice_discord_config_path: "{{ matrix_base_data_path }}/appservice-discord/config"
matrix_appservice_discord_data_path: "{{ matrix_base_data_path }}/appservice-discord/data"

# Get your own keys at https://discordapp.com/developers/applications/me/create
matrix_appservice_discord_client_id: ''
matrix_appservice_discord_bot_token: ''

matrix_appservice_discord_appservice_token: ''
matrix_appservice_discord_homeserver_token: ''

# Controls whether the matrix-appservice-discord container exposes its HTTP port (tcp/9005 in the container).
#
# Takes an "<ip>:<port>" or "<port>" value (e.g. "127.0.0.1:9005"), or empty string to not expose.
matrix_appservice_discord_container_http_host_bind_port: ''

# A list of extra arguments to pass to the container
matrix_appservice_discord_container_extra_arguments: []

# List of systemd services that matrix-appservice-discord.service depends on.
matrix_appservice_discord_systemd_required_services_list: ['docker.service']

# List of systemd services that matrix-appservice-discord.service wants
matrix_appservice_discord_systemd_wanted_services_list: []

matrix_appservice_discord_appservice_url: 'http://matrix-appservice-discord:9005'

matrix_appservice_discord_bridge_domain: "{{ matrix_domain }}"
# As of right now, the homeserver URL must be a public URL. See below.
matrix_appservice_discord_bridge_homeserverUrl: "{{ matrix_homeserver_url }}"
matrix_appservice_discord_bridge_disablePresence: false
matrix_appservice_discord_bridge_enableSelfServiceBridging: false

matrix_appservice_discord_configuration_yaml: |
  #jinja2: lstrip_blocks: "True"
  bridge:
    # Domain part of the bridge, e.g. matrix.org
    domain: {{ matrix_appservice_discord_bridge_domain }}
    # This should be your publically facing URL because Discord may use it to
    # fetch media from the media store.
    homeserverUrl: {{ matrix_appservice_discord_bridge_homeserverUrl }}
    # Interval at which to process users in the 'presence queue'. If you have
    # 5 users, one user will be processed every 500 milliseconds according to the
    # value below. This has a minimum value of 250.
    # WARNING: This has a high chance of spamming the homeserver with presence
    # updates since it will send one each time somebody changes state or is online.
    presenceInterval: 500
    # Disable setting presence for 'ghost users' which means Discord users on Matrix
    # will not be shown as away or online.
    disablePresence: {{ matrix_appservice_discord_bridge_disablePresence|to_json }}
    # Disable sending typing notifications when somebody on Discord types.
    disableTypingNotifications: false
    # Disable deleting messages on Discord if a message is redacted on Matrix.
    disableDeletionForwarding: false
    # Enable users to bridge rooms using !discord commands. See
    # https://t2bot.io/discord for instructions.
    enableSelfServiceBridging: {{ matrix_appservice_discord_bridge_enableSelfServiceBridging|to_json }}
    # Disable sending of read receipts for Matrix events which have been
    # successfully bridged to Discord.
    disableReadReceipts: false
    # Disable Join Leave echos from matrix
    disableJoinLeaveNotifications: false
  # Authentication configuration for the discord bot.
  auth:
    clientID: {{ matrix_appservice_discord_client_id|string|to_json }}
    botToken: {{ matrix_appservice_discord_bot_token }}
  logging:
    # What level should the logger output to the console at.
    console: "warn" #silly, verbose, info, http, warn, error, silent
    lineDateFormat: "MMM-D HH:mm:ss.SSS" # This is in moment.js format
    # files:
    #   - file: "debug.log"
    #     disable:
    #       - "PresenceHandler" # Will not capture presence logging
    #   - file: "warn.log" # Will capture warnings
    #     level: "warn"
    #   - file: "botlogs.log" # Will capture logs from DiscordBot
    #     level: "info"
    #     enable:
    #       - "DiscordBot"
  database:
    userStorePath: "/data/user-store.db"
    roomStorePath: "/data/room-store.db"
    # You may either use SQLite or Postgresql for the bridge database, which contains
    # important mappings for events and user puppeting configurations.
    # Use the filename option for SQLite, or connString for Postgresql.
    # If you are migrating, see https://github.com/Half-Shot/matrix-appservice-discord/blob/master/docs/howto.md#migrate-to-postgres-from-sqlite
    # WARNING: You will almost certainly be fine with sqlite unless your bridge
    # is in heavy demand and you suffer from IO slowness.
    filename: "/data/discord.db"
    # connString: "postgresql://user:password@localhost/database_name"
  room:
    # Set the default visibility of alias rooms, defaults to "public".
    # One of: "public", "private"
    defaultVisibility: "public"
  channel:
      # Pattern of the name given to bridged rooms.
      # Can use :guild for the guild name and :name for the channel name.
      namePattern: "[Discord] :guild :name"
      # Changes made to rooms when a channel is deleted.
      deleteOptions:
        # Prefix the room name with a string.
        #namePrefix: "[Deleted]"
        # Prefix the room topic with a string.
        #topicPrefix: "This room has been deleted"
        # Disable people from talking in the room by raising the event PL to 50
        disableMessaging: false
        # Remove the discord alias from the room.
        unsetRoomAlias: true
        # Remove the room from the directory.
        unlistFromDirectory: true
        # Set the room to be unavaliable for joining without an invite.
        setInviteOnly: true
        # Make all the discord users leave the room.
        ghostsLeave: true
  limits:
      # Delay in milliseconds between discord users joining a room.
      roomGhostJoinDelay: 6000
      # Delay in milliseconds before sending messages to discord to avoid echos.
      # (Copies of a sent message may arrive from discord before we've
      # fininished handling it, causing us to echo it back to the room)
      discordSendDelay: 750
  ghosts:
      # Pattern for the ghosts nick, available is :nick, :username, :tag and :id
      nickPattern: ":nick"
      # Pattern for the ghosts username, available is :username, :tag and :id
      usernamePattern: ":username#:tag"

matrix_appservice_discord_configuration_extension_yaml: |
  # Your custom YAML configuration goes here.
  # This configuration extends the default starting configuration (`matrix_appservice_discord_configuration_yaml`).
  #
  # You can override individual variables from the default configuration, or introduce new ones.
  #
  # If you need something more special, you can take full control by
  # completely redefining `matrix_appservice_discord_configuration_yaml`.

matrix_appservice_discord_configuration_extension: "{{ matrix_appservice_discord_configuration_extension_yaml|from_yaml if matrix_appservice_discord_configuration_extension_yaml|from_yaml is mapping else {} }}"

matrix_appservice_discord_configuration: "{{ matrix_appservice_discord_configuration_yaml|from_yaml|combine(matrix_appservice_discord_configuration_extension, recursive=True) }}"

matrix_appservice_discord_registration_yaml: |
  #jinja2: lstrip_blocks: "True"
  id: appservice-discord
  as_token: "{{ matrix_appservice_discord_appservice_token }}"
  hs_token: "{{ matrix_appservice_discord_homeserver_token }}"
  namespaces:
    users:
    - exclusive: true
      regex: '^@_discord_.*'
    aliases:
    - exclusive: true
      regex: '^#_discord_.*'
  url: {{ matrix_appservice_discord_appservice_url }}
  sender_localpart: _discord_bot
  rate_limited: false
  protocols:
    - discord

matrix_appservice_discord_registration: "{{ matrix_appservice_discord_registration_yaml|from_yaml }}"