##########################################################################
#                                                                        #
#  This is the config-template for Err. This file should be copied and   #
#  renamed to config.py, then modified as you see fit to run Errbot      #
#  the way you like it.                                                  #
#                                                                        #
#  As this is a regular Python file, note that you can do variable       #
#  assignments and the likes as usual. This can be useful for example if #
#  you use the same values in multiple places.                           #
#                                                                        #
#  Note: Various config options require a tuple to be specified, even    #
#  when you are configuring only a single value. An example of this is   #
#  the BOT_ADMINS option. Make sure you use a valid tuple here, even if  #
#  you are only configuring a single item, else you will get errors.     #
#  (So don't forget the trailing "," in these cases)                     #
#                                                                        #
##########################################################################

import logging

##########################################################################
# Core Errbot configuration                                              #
##########################################################################

# BACKEND selection.
# This configures the type of chat server you wish to use Errbot with.
#
# The current choices:

# Debug backends to test your plugins manually:
# "Text"     - on the text console

# Commercial backends:
# "Slack"    - see https://slack.com/
# "Gitter"   - see https://gitter.im/ (follow instructions from https://github.com/errbotio/err-backend-gitter)

# Open protocols:
# "TOX"      - see https://tox.im/ (follow instructions from https://github.com/errbotio/err-backend-tox)
# "IRC"      - for classic IRC or bridged services like https://gitter.im
# "XMPP"     - the Extensible Messaging and Presence Protocol (https://xmpp.org/)
# "Telegram" - cloud-based mobile and desktop messaging app with a focus
#              on security and speed. (https://telegram.org/)

# BACKEND = "Text"  # defaults to Text

# STORAGE selection.
# This configures the type of persistence you wish to use Errbot with.
#
# The current choices:

# Debug:
# "Memory"        - local memory storage to test your bot in memory:

# Filesystem:
# "Shelf"         - python shelf (default)

# STORAGE = "Shelf"  # defaults to filestorage (python shelf).

# BOT_EXTRA_STORAGE_PLUGINS_DIR = None  # extra search path to find custom storage plugins

# The location where all of Err's data should be stored. Make sure to set
# this to a directory that is writable by the user running the bot.
BOT_DATA_DIR = "/var/lib/err"

### Repos and plugins config.

# Set this to change from where errbot gets its installable plugin list.
# By default it gets the index from errbot.io which is a file generated by tools/plugin-gen.py.
# BOT_PLUGIN_INDEXES = "https://errbot.io/repos.json"
#
# You can also specify a local file:
# BOT_PLUGIN_INDEXES = "tools/repos.json"
#
# Or a list. note: if some plugins exists in 2 lists, only the first hit will be taken into account.
# BOT_PLUGIN_INDEXES = ("/data/repos.json", "https://my.private.tld/errbot/myrepos.json")

# Set this to a directory on your system where you want to load extra
# plugins from, which is useful mostly if you want to develop a plugin
# locally before publishing it. Note that you can specify only a single
# directory, however you are free to create subdirectories with multiple
# plugins inside this directory.
BOT_EXTRA_PLUGIN_DIR = None

# If you use an external backend as a plugin,
# this is where you tell Errbot where to find it.
# BOT_EXTRA_BACKEND_DIR = "/opt/errbackends"

# If you want only a subset of the core plugins that are bundled with errbot, you can specify them here.
# CORE_PLUGINS = None # This is default, all core plugins.
# For example CORE_PLUGINS = ("ACLs", "Backup", "Help") you get those names from the .plug files Name entry.
# For absolutely no plug: CORE_PLUGINS = ()

# Defines an order in which the plugins are getting their callbacks. Useful if you want to have plugins do
# pre- or post-processing on messages.
# The "None" tuple entry represents all the plugins that aren't to be explicitly ordered. For example, if
# you want "A" to run first, then everything else but "B", then "B", you would use ("A", None, "B").
PLUGINS_CALLBACK_ORDER = (None,)

# Should plugin dependencies be installed automatically? If this is true
# then Errbot will use pip to install any missing dependencies automatically.
#
# If you have installed Errbot in a virtualenv, this will run the equivalent
# of `pip install -r requirements.txt`.
# If no virtualenv is detected, the equivalent of `pip install --user -r
# requirements.txt` is used to ensure the package(s) is/are only installed for
# the user running Err.
# AUTOINSTALL_DEPS = True

# To use your own custom log formatter, uncomment and set BOT_LOG_FORMATTER
# to your formatter instance (inherits from logging.Formatter)
#   For information on how to create a logging formatter and what it can do, see
#   https://docs.python.org/3/library/logging.html#formatter-objects
# BOT_LOG_FORMATTER =

# The location of the log file. If you set this to None, then logging will
# happen to console only.
BOT_LOG_FILE = BOT_DATA_DIR + "/err.log"

# The verbosity level of logging that is done to the above logfile, and to
# the console. This takes the standard Python logging levels, DEBUG, INFO,
# WARN, ERROR. For more info, see http://docs.python.org/library/logging.html
#
# If you encounter any issues with Err, please set your log level to
# logging.DEBUG and attach a log with your bug report to aid the developers
# in debugging the issue.
BOT_LOG_LEVEL = logging.INFO

# Enable logging to sentry (find out more about sentry at www.getsentry.com).
# You can also separate Flask exceptions by enabling it. This will give more information in sentry
# This is optional and disabled by default.
BOT_LOG_SENTRY = False
BOT_LOG_SENTRY_FLASK = False
SENTRY_DSN = ""
SENTRY_LOGLEVEL = BOT_LOG_LEVEL
SENTRY_EVENTLEVEL = BOT_LOG_LEVEL

# Options that can be passed to sentry_sdk.init() at initialization time
# Note that DSN should be specified via its dedicated config option
# and that the 'integrations' setting cannot be set
# e.g: SENTRY_OPTIONS = {"environment": "production"}
SENTRY_OPTIONS = {}

# Execute commands in asynchronous mode. In this mode, Errbot will spawn 10
# separate threads to handle commands, instead of blocking on each
# single command.
# BOT_ASYNC = True

# Size of the thread pool for the asynchronous mode.
# BOT_ASYNC_POOLSIZE = 10

##########################################################################
# Account and chatroom (MUC) configuration                               #
##########################################################################

# The identity, or credentials, used to connect to a server
BOT_IDENTITY = {
    ## Text mode
    "username": "@errbot",  # The name for the bot
    ## XMPP (Jabber) mode
    # "username": "err@localhost",  # The JID of the user you have created for the bot
    # "password": "changeme",  # The corresponding password for this user
    # "server": ("host.domain.tld", 5222),  # server override
    ## Slack mode (comment the others above if using this mode)
    # "token": "xoxb-4426949411-aEM7...",
    ## you can also include the proxy for the SlackClient connection
    # "proxies": {"http": "some-http-proxy", "https": "some-https-proxy"}
    ## Telegram mode (comment the others above if using this mode)
    # "token": "103419016:AAbcd1234...",
    ## IRC mode (Comment the others above if using this mode)
    # "nickname": "err-chatbot",
    # "username": "err-chatbot",  # optional, defaults to nickname if omitted
    # "password": None,  # optional
    # "server": "irc.freenode.net",
    # "port": 6667,  # optional
    # "ssl": False,  # optional
    # "ipv6": False,  # optional
    # "nickserv_password": None,  # optional
    ## Optional: Specify an IP address or hostname (vhost), and a
    ## port, to use when making the connection. Leave port at 0
    ## if you have no source port preference.
    ##    example: "bind_address": ("my-errbot.io", 0)
    # "bind_address": ("localhost", 0),
}

# Set the admins of your bot. Only these users will have access
# to the admin-only commands.
#
# Unix-style glob patterns are supported, so "gbin@localhost"
# would be considered an admin if setting "*@localhost".
BOT_ADMINS = ("gbin@localhost",)

# Set of admins that wish to receive administrative bot notifications.
# BOT_ADMINS_NOTIFICATIONS = ()

# Chatrooms your bot should join on startup. For the IRC backend you
# should include the # sign here. For XMPP rooms that are password
# protected, you can specify another tuple here instead of a string,
# using the format (RoomName, Password).
# CHATROOM_PRESENCE = ("err@conference.server.tld",)

# The FullName, or nickname, your bot should use. What you set here will
# be the nickname that Errbot shows in chatrooms. Note that some XMPP
# implementations are very picky about what name you use.
# CHATROOM_FN = "Errbot"

##########################################################################
# Prefix configuration                                                   #
##########################################################################

# Command prefix, the prefix that is expected in front of commands directed
# at the bot.
#
# Note: When writing plugins,you should always use the default "!".
# If the prefix is changed from the default, the help strings will be
# automatically adjusted for you.
#
# BOT_PREFIX = "!"
#
# Uncomment the following and set it to True if you want the prefix to be
# optional for normal chat.
# (Meaning messages sent directly to the bot as opposed to within a MUC)
# BOT_PREFIX_OPTIONAL_ON_CHAT = False

# You might wish to have your bot respond by being called with certain
# names, rather than the BOT_PREFIX above. This option allows you to
# specify alternative prefixes the bot will respond to in addition to
# the prefix above.
# BOT_ALT_PREFIXES = ("Err",)

# If you use alternative prefixes, you might want to allow users to insert
# separators like , and ; between the prefix and the command itself. This
# allows users to refer to your bot like this (Assuming "Err" is in your
# BOT_ALT_PREFIXES):
# "Err, status" or "Err: status"
#
# Note: There's no need to add spaces to the separators here
#
# BOT_ALT_PREFIX_SEPARATORS = (":", ",", ";")

# Continuing on this theme, you might want to permit your users to be
# lazy and not require correct capitalization, so they can do "Err",
# "err" or even "ERR".
# BOT_ALT_PREFIX_CASEINSENSITIVE = True

##########################################################################
# Access controls and message diversion                                  #
##########################################################################

# Access controls, allowing commands to be restricted to specific users/rooms.
# Available filters (you can omit a filter or set it to None to disable it):
#   allowusers: Allow command from these users only
#   denyusers: Deny command from these users
#   allowrooms: Allow command only in these rooms (and direct messages)
#   denyrooms: Deny command in these rooms
#   allowargs: Allow a command's argument from these users only
#   denyargs: Deny a command's argument from these users
#   allowprivate: Allow command from direct messages to the bot
#   allowmuc: Allow command inside rooms
# Rules listed in ACCESS_CONTROLS_DEFAULT are applied by default and merged
# with any commands found in ACCESS_CONTROLS.
#
# The options allowusers, denyusers, allowrooms and denyrooms, allowargs,
# denyargs support unix-style globbing similar to BOT_ADMINS.
#
# Command names also support unix-style globs and can optionally be restricted
# to a specific plugin by prefixing the command with the name of a plugin,
# separated by a colon. For example, `Health:status` will match the `!status`
# command of the `Health` plugin and `Health:*` will match all commands defined
# by the `Health` plugin.
#
# Please note that the first command match found will be used so if you have
# overlapping patterns you must used an OrderedDict instead of a regular dict:
# https://docs.python.org/3/library/collections.html#collections.OrderedDict
#
# Example:
#
# ACCESS_CONTROLS_DEFAULT = {}  # Allow everyone access by default
# ACCESS_CONTROLS = {
#     "status": {
#         "allowrooms": ("someroom@conference.localhost",),
#     },
#     "about": {
#         "denyusers": ("*@evilhost",),
#         "allowrooms": ("room1@conference.localhost", "room2@conference.localhost"),
#     },
#     "uptime": {"allowusers": BOT_ADMINS},
#     "help": {"allowmuc": False},
#     "ChatRoom:*": {"allowusers": BOT_ADMINS},
# }

# Uncomment and set this to True to hide the restricted commands from
# the help output.
# HIDE_RESTRICTED_COMMANDS = False

# Uncomment and set this to True to ignore commands from users that have no
# access for these instead of replying with error message.
# HIDE_RESTRICTED_ACCESS = False

# A list of commands which should be responded to in private, even if
# the command was given in a MUC. For example:
# DIVERT_TO_PRIVATE = ("help", "about", "status")
# If all commands are desired, use the specical case "ALL_COMMANDS"
DIVERT_TO_PRIVATE = ()

# A list of commands which should be responded to in a thread if the backend supports it.
# For example:
# DIVERT_TO_THREAD = ("help", "about", "status")
# If all commands are desired, use the specical case "ALL_COMMANDS"
DIVERT_TO_THREAD = ()

# Chat relay
# Can be used to relay one to one message from specific users to the bot
# to MUCs. This can be useful with XMPP notifiers like for example the
# standard Altassian Jira which don't have native support for MUC.
# For example: CHATROOM_RELAY = {"gbin@localhost" : (_TEST_ROOM,)}
CHATROOM_RELAY = {}

# Reverse chat relay
# This feature forwards whatever is said to a specific user.
# It can be useful if you client like gtalk doesn't support MUC correctly
# For example: REVERSE_CHATROOM_RELAY = {_TEST_ROOM : ("gbin@localhost",)}
REVERSE_CHATROOM_RELAY = {}

##########################################################################
# Miscellaneous configuration options                                    #
##########################################################################

# Define the maximum length a single message may be. If a plugin tries to
# send a message longer than this length, it will be broken up into multiple
# shorter messages that do fit.
# MESSAGE_SIZE_LIMIT = 10000

# XMPP TLS certificate verification. In order to validate offered certificates,
# you must supply a path to a file containing certificate authorities. By
# default, "/etc/ssl/certs/ca-certificates.crt" is used, which on most Linux
# systems holds the default system trusted CA certificates. You might need to
# change this depending on your environment. Setting this to None disables
# certificate validation, which can be useful if you have a self-signed
# certificate for example.
# XMPP_CA_CERT_FILE = "/etc/ssl/certs/ca-certificates.crt"

# Influence the security methods used on connection with XMPP-based
# backends. You can use this to work around authentication issues with
# some buggy XMPP servers.
#
# The default is to try anything:
# XMPP_FEATURE_MECHANISMS = {}
# To use only unencrypted plain auth:
# XMPP_FEATURE_MECHANISMS = {
#     "use_mech": "PLAIN",
#     "unencrypted_plain": True,
#     "encrypted_plain": False,
# }

# Modify the default keep-alive interval. By default, Errbot will send
# some whitespace to the XMPP server every 300 seconds to keep the TCP
# connection alive. On some servers, or when running Errbot from behind
# a NAT router, the default might not be fast enough and you will need
# to set it to a lower value.
#
# If you're having issues with your bot getting constantly disconnected,
# try to gradually lower this value until it no longer happens.
# XMPP_KEEPALIVE_INTERVAL = 300

# Modify default settings for IPv6 usage. This key affects the XMPP backend.
# XMPP_USE_IPV6 = False

# XMPP supports some formatting with XEP-0071 (http://www.xmpp.org/extensions/xep-0071.html).
# It is disabled by default because XMPP clients support has been found to be spotty.
# Switch it to True to enable XHTML-IM formatting.
# XMPP_XHTML_IM = False

# XMPP may require a specific ssl protocol version when making connections.
# This option allows the option to change that behavior.
# It uses python's built-in ssl module.
# import ssl
# XMPP_SSL_VERSION = ssl.PROTOCOL_TLSv1_2

# Message rate limiting for the IRC backend. This will delay subsequent
# messages by this many seconds (floats are supported). Setting these
# to a value of 0 effectively disables rate limiting.
# IRC_CHANNEL_RATE = 1  # Regular channel messages
# IRC_PRIVATE_RATE = 1  # Private messages
# IRC_RECONNECT_ON_KICK = 5  # Reconnect back to a channel after a kick (in seconds)
# Put it at None if you don't want the chat to
# reconnect
# IRC_RECONNECT_ON_DISCONNECT = 5  # Reconnect back to a channel after a disconnection (in seconds)

# The pattern to build a user representation from for ACL matches.
# The default is "{nick}!{user}@{host}" which results in "zoni!zoni@ams1.groenen.me"
# for the user zoni connecting from ams1.groenen.me.
# Available substitution variables:
#   {nick}  ->  The nickname of the user
#   {user}  ->  The username of the user
#   {host}  ->  The hostname the user is connecting from
# IRC_ACL_PATTERN = "{nick}!{user}@{host}"

# Allow messages sent in a chatroom to be directed at requester.
# GROUPCHAT_NICK_PREFIXED = False

# Disable table borders, making output more compact (supported only on IRC, Slack and Telegram currently).
# COMPACT_OUTPUT = True

# Disables the logging output in Text mode and only outputs Ansi.
# TEXT_DEMO_MODE = False

# Prevent ErrBot from saying anything if the command is unrecognized.
# SUPPRESS_CMD_NOT_FOUND = False
