# MumbleDJ
# By Matthieu Grieger
# Copyright (c) 2016 Matthieu Grieger (MIT License)
# config.yaml

api_keys:

    # YouTube API key.
    youtube: ""

    # SoundCloud API key.
    # NOTE: The API key is your client ID.
    soundcloud: ""


defaults:

    # Default comment to be applied to bot.
    # NOTE: If you do not want a comment by default, set to empty string ("").
    comment: "Hello! I am a bot. Type !help for a list of commands."

    # Default channel for the bot to enter upon connection.
    # NOTE: If you wish for the bot to connect to the root channel, set to empty string ("").
    channel: ""

    # Command to use to play audio files. The two supported choices are "ffmpeg" and "avconv".
    player_command: "ffmpeg"


queue:

    # Ratio that must be met or exceeded to trigger a track skip.
    track_skip_ratio: 0.5

    # Ratio that must be met or exceeded to trigger a playlist skip.
    playlist_skip_ratio: 0.5

    # Maximum track duration in seconds. Set to 0 for unrestricted duration.
    max_track_duration: 0

    # Maximum tracks per playlist. Set to 0 for unrestricted playlists.
    max_tracks_per_playlist: 50

    # Is shuffling enabled when the bot starts?
    automatic_shuffle_on: false

    # Announce track information at the beginning of audio playback?
    announce_new_tracks: true


connection:

    # Address bot should attempt to connect to.
    address: "127.0.0.1"

    # Port bot should attempt to connect to.
    port: "64738"

    # Password for connecting to server.
    # NOTE: If no password, set to empty string ("").
    password: ""

    # Username for MumbleDJ.
    username: "MumbleDJ"

    # Should the bot attempt an insecure connection?
    # An insecure connection does not verify the certificate of the server for
    # consistency. It is best to leave this on, but disable it if you are having
    # issues connecting to a server or are running multiple instances of MumbleDJ.
    insecure: false

    # Filepath to certificate file.
    # NOTE: If no certificate file is needed, set to empty string ("").
    cert: ""

    # Filepath to certificate key file.
    # NOTE: If no key is needed, set to empty string ("").
    key: ""

    # Access tokens to initialize the bot with, separated by commas.
    # NOTE: If no access tokens are needed, set to empty string ("").
    access_tokens: ""

    # Should the bot automatically attempt to retry connection to a server after disconnecting?
    retry_enabled: true

    # How many times should the bot attempt to reconnect to the server?
    retry_attempts: 10

    # How many seconds should the bot wait in-between connection retry attempts?
    retry_interval: 5


cache:

    # Cache songs as they are downloaded?
    enabled: false

    # Maximum total file size of cache directory in MiB.
    maximum_size: 512

    # Period of time that should elapse before a song is cleared from the cache, in hours.
    expire_time: 24

    # Period of time between each check of the cache for expired items, in minutes.
    check_interval: 5

    # Directory to store cached items. Environment variables are able to be used here.
    directory: "$HOME/.cache/mumbledj"


volume:

    # Default volume.
    default: 0.2

    # Lowest volume allowed.
    lowest: 0.01

    # Highest volume allowed.
    highest: 0.8


admins:

    # Enable admins?
    # NOTE: If this is set to false, any command can be executed by any user.
    enabled: true

    # List of admin names.
    # NOTE: It is recommended that the names in this list are registered on the
    # server so that imposters cannot execute admin commands.
    names:
        - "SuperUser"


commands:

    # Character used to designate commands from normal text messages.
    # NOTE: Only one character (the first) is used.
    prefix: "!"

    common_messages:
        no_tracks_error: "There are no tracks in the queue."
        caching_disabled_error: "Caching is currently disabled."

    # Below is a list of the commands supported by MumbleDJ. Each command has
    # three configurable options:
    # aliases: A list of names that can be used to execute the command.
    # is_admin: true = only admins can execute the command, false = anyone can execute the command.
    # description: Description shown for the command when the help command is executed.
    # messages: Various messages that may be sent as a text message from the command. Useful for translating
    #           strings to other languages. Do NOT remove strings that begin with "%" (such as "%s", "%d", etc.)
    #           as they substituted with runtime data. Removing these strings will cause the bot to misbehave.
    add:
        aliases:
            - "add"
            - "a"
        is_admin: false
        description: "Adds a track or playlist from a media site to the queue."
        messages:
            no_url_error: "A URL must be supplied with the add command."
            no_valid_tracks_error: "No valid tracks were found with the provided URL(s)."
            tracks_too_long_error: "Your track(s) were either too long or an error occurred while processing them. No track(s) have been added."
            one_track_added: "<b>%s</b> added <b>1</b> track to the queue:<br><i>%s</i> from %s"
            many_tracks_added: "<b>%s</b> added <b>%d</b> tracks to the queue."
            num_tracks_too_long: "<br><b>%d</b> tracks could not be added due to error or because they are too long."

    addnext:
        aliases:
            - "addnext"
            - "an"
        is_admin: true
        description: "Adds a track or playlist from a media site as the next item in the queue."
        # addnext uses the messages defined for add.

    cachesize:
        aliases:
            - "cachesize"
            - "cs"
        is_admin: true
        description: "Outputs the file size of the cache in MiB if caching is enabled."
        messages:
            current_size: "The current size of the cache is <b>%.2v MiB</b>."

    currenttrack:
        aliases:
            - "currenttrack"
            - "currentsong"
            - "current"
        is_admin: false
        description: "Outputs information about the current track in the queue if one exists."
        messages:
            current_track: "The current track is <i>%s</i>, added by <b>%s</b>."

    forceskip:
        aliases:
            - "forceskip"
            - "fs"
        is_admin: true
        description: "Immediately skips the current track."
        messages:
            track_skipped: "The current track has been forcibly skipped by <b>%s</b>."

    forceskipplaylist:
        aliases:
            - "forceskipplaylist"
            - "fsp"
        is_admin: true
        description: "Immediately skips the current playlist."
        messages:
            no_playlist_error: "The current track is not part of a playlist."
            playlist_skipped: "The current playlist has been forcibly skipped by <b>%s</b>."

    help:
        aliases:
            - "help"
            - "h"
        is_admin: false
        description: "Outputs this list of commands."
        messages:
            commands_header: "<br><b>Commands:</b><br>"
            admin_commands_header: "<br><b>Admin Commands:</b><br>"

    joinme:
        aliases:
            - "joinme"
            - "join"
        is_admin: true
        description: "Moves MumbleDJ into your current channel if not playing audio to someone else."
        messages:
            others_are_listening_error: "Users in another channel are listening to me."
            in_your_channel: "I am now in your channel!"

    kill:
        aliases:
            - "kill"
            - "k"
        is_admin: true
        description: "Stops the bot and cleans its cache directory."

    listtracks:
        aliases:
            - "listtracks"
            - "listsongs"
            - "list"
            - "l"
        is_admin: false
        description: "Outputs a list of the tracks currently in the queue."
        messages:
            invalid_integer_error: "An invalid integer was supplied."
            track_listing: "<b>%d</b>: <i>%s</i>, added by <b>%s</b>.<br>"

    move:
        aliases:
            - "move"
            - "m"
        is_admin: true
        description: "Moves the bot into the Mumble channel provided via argument."
        messages:
            no_channel_provided_error: "A destination channel must be supplied to move the bot."
            channel_doesnt_exist_error: "The provided channel does not exist."
            move_successful: "You have successfully moved the bot to <b>%s</b>." 

    nexttrack:
        aliases:
            - "nexttrack"
            - "nextsong"
            - "next"
        is_admin: false
        description: "Outputs information about the next track in the queue if one exists."
        messages:
            current_track_only_error: "The current track is the only track in the queue."
            next_track: "The next track is <i>%s</i>, added by <b>%s</b>."

    numcached:
        aliases:
            - "numcached"
            - "nc"
        is_admin: true
        description: "Outputs the number of tracks cached on disk if caching is enabled."
        messages:
            num_cached: "There are currently <b>%d</b> items stored in the cache."

    numtracks:
        aliases:
            - "numtracks"
            - "numsongs"
            - "nt"
        is_admin: false
        description: "Outputs the number of tracks currently in the queue."
        messages:
            one_track: "There is currently <b>1</b> track in the queue."
            plural_tracks: "There are currently <b>%d</b> tracks in the queue."

    pause:
        aliases:
            - "pause"
        is_admin: false
        description: "Pauses audio playback."
        messages:
            no_audio_error: "Either the audio is already paused, or there are no tracks in the queue."
            paused: "<b>%s</b> has paused audio playback."

    reload:
        aliases:
            - "reload"
            - "r"
        is_admin: true
        description: "Reloads the configuration file."
        messages:
            reloaded: "The configuration file has been successfully reloaded."

    reset:
        aliases:
            - "reset"
            - "re"
        is_admin: true
        description: "Resets the queue by removing all queue items."
        messages:
            queue_reset: "<b>%s</b> has reset the queue."

    resume:
        aliases:
            - "resume"
        is_admin: false
        description: "Resumes audio playback."
        messages:
            audio_error: "Either the audio is already playing, or there are no tracks in the queue."
            resumed: "<b>%s</b> has resumed audio playback."

    setcomment:
        aliases:
            - "setcomment"
            - "comment"
            - "sc"
        is_admin: true
        description: "Sets the comment displayed next to MumbleDJ's username in Mumble."
        messages:
            comment_removed: "The comment for the bot has been successfully removed."
            comment_changed: "The comment for the bot has been successfully changed to the following: %s"

    shuffle:
        aliases:
            - "shuffle"
            - "shuf"
            - "sh"
        is_admin: true
        description: "Randomizes the tracks currently in the queue."
        messages:
            not_enough_tracks_error: "There are not enough tracks in the queue to execute a shuffle."
            shuffled: "The audio queue has been shuffled."

    skip:
        aliases:
            - "skip"
            - "s"
        is_admin: false
        description: "Places a vote to skip the current track."
        messages:
            already_voted_error: "You have already voted to skip this track."
            voted: "<b>%s</b> has voted to skip the current track."

    skipplaylist:
        aliases:
            - "skipplaylist"
            - "sp"
        is_admin: false
        description: "Places a vote to skip the current playlist."
        messages:
            no_playlist_error: "The current track is not part of a playlist."
            already_voted_error: "You have already voted to skip this playlist."
            voted: "<b>%s</b> has voted to skip the current playlist."

    toggleshuffle:
        aliases:
            - "toggleshuffle"
            - "toggleshuf"
            - "togshuf"
            - "tsh"
        is_admin: true
        description: "Toggles automatic track shuffling on/off."
        messages:
            toggled_off: "Automatic shuffling has been toggled off."
            toggled_on: "Automatic shuffling has been toggled on."


    version:
        aliases:
            - "version"
            - "v"
        is_admin: false
        description: "Outputs the current version of MumbleDJ."
        messages:
            version: "MumbleDJ version: <b>%s</b>"

    volume:
        aliases:
            - "volume"
            - "vol"
        is_admin: false
        description: "Changes the volume if an argument is provided, outputs the current volume otherwise."
        messages:
            parsing_error: "The requested volume could not be parsed."
            out_of_range_error: "Volumes must be between the values <b>%.2f</b> and <b>%.2f</b>."
            current_volume: "The current volume is <b>%.2f</b>."
            volume_changed: "<b>%s</b> has changed the volume to <b>%.2f</b>."