# This is a sample configuration file for PyLink. You'll likely want to rename it to config.yml
# and begin your configuration there.

# Note: lines starting with a "#" are comments and will be ignored.

bot:
    # Sets nick, user/ident, and real name.
    nick: pylink
    user: pylink
    realname: PyLink Service Client

    # Server description (shown in /links, /whois, etc.)
    serverdesc: PyLink Server

    # Sets the fantasy command prefix for calling commands inside channels
    # (requires fantasy plugin).
    prefix: "."

    # Determines whether the bot will reply to commands prefixed with its nick
    # (case sensitive and requires the fantasy plugin).
    respondtonick: true

login:
    # PyLink administrative login - Change this, or the service will not start!
    user: admin
    password: changeme

logging:
    # This configuration block defines targets that PyLink should log commands,
    # errors, etc., to.

    # This sets the level for STDOUT logging, which is always enabled. Valid
    # settings include DEBUG, INFO, WARNING, ERROR, and CRITICAL: see
    # https://docs.python.org/3/library/logging.html#logging-levels for details.
    stdout: INFO

    channels:
        # Log to channels on the specified networks.
        # Note: DEBUG logging is not supported here: any log level settings
        # below INFO be automatically raised to INFO.
        # Log messages are forwarded over relay, so you will get duplicate
        # messages if you add log blocks for more than one channel in one
        # relay.
        loglevel: INFO

        inspnet:
            "#services":
                loglevel: INFO
            "#pylink-notifications"
                loglevel: WARNING

        ts6net:
            "#services":
                loglevel: INFO

    files:
        # Logs to file targets. These will be placed in the log/ folder in the
        # PyLink directory, with a filename based on the current instance name
        # and the target name defined: instancename-targetname.log
        # Changing settings in this block will require a restart to take effect.

        # When running with ./pylink, this will create log/pylink-errors.log
        # When running with ./pylink someconf.yml, this will create log/someconf-errors.log
        "errors":
            loglevel: ERROR

        # Ditto above. When running with ./pylink, it will use log/pylink-commands.log
        # When running with ./pylink someconf.yml, this will create log/someconf-commands.log
        "commands":
            loglevel: INFO

servers:
    inspnet:
        # Server IP, port, and passwords
        ip: 127.0.0.1
        port: 7000
        recvpass: "abcd"
        sendpass: "abcd"

        # The full network name, used by plugins.
        netname: "InspIRCd Network"

        # Hostname we will use to connect to the remote server
        hostname: "pylink.yournet.local"

        # SID - required for InspIRCd and TS6 based servers. This must be three
        # characters long.
        # The first char must be a digit [0-9], and the remaining two chars may
        # be either uppercase letters [A-Z] or digits.
        sid: "0AL"

        # SID range - the range of SIDs PyLink is allowed to use to generate
        # server IDs. On TS6, this should be a combination of digits, letters,
        # and #'s. Each # denotes a range (0-9A-Z) of characters that can be
        # used by PyLink to generate appropriate SIDs. You will want to make
        # sure no other servers are using this range.
        # There must be at least one # in the entry.
        sidrange: "8##"

        # Autojoin channels
        channels: ["#pylink"]

        # Sets the protocol module to use - see the protocols/ folder for a list
        # of valid values (omitting the .py extension).
        protocol: "inspircd"

        # Sets autoconnect delay - comment this out or set the value below 1 to
        # disable autoconnect entirely.
        autoconnect: 5

        # Sets ping frequency (i.e. how long we should wait between sending
        # pings to our uplink). When more than two consecutive pings are missed,
        # PyLink will disconnect with a ping timeout. This defaults to 30 if
        # not set.
        pingfreq: 30

        # Separator character (used by relay)
        separator: "/"

        # Sets the max nick length for the network. It is important this is
        # set correctly, or PyLink might introduce a nick that is too long and
        # cause netsplits!
        maxnicklen: 30

        # Toggles SSL for this network. Defaults to false if not specified, and
        # requires the ssl_certfile and ssl_keyfile options to work.
        #ssl: true

        #ssl_certfile: pylink-cert.pem
        #ssl_keyfile: pylink-key.pem

        # Optionally, you can set this option to verify the SSL certificate
        # fingerprint of your uplink.
        #ssl_fingerprint: "e0fee1adf795c84eec4735f039503eb18d9c35cc"

        # This sets the hash type for the fingerprint (md5, sha1, sha256, etc.)
        # Valid values include md5 and sha1-sha512, though others may be
        # supported depending on your system: see
        # https://docs.python.org/3/library/hashlib.html
        # This setting defaults to sha256.
        #ssl_fingerprint_type: sha256

    ts6net:
        ip: ::1

        # Determines whether IPv6 should be used for this connection.
        ipv6: yes

        port: 7000
        recvpass: "abcd"
        sendpass: "abcd"
        hostname: "pylink.example.com"
        sid: "8PY"
        netname: "some TS6 network"
        sidrange: "8P#"

        # Leave this as an empty list if you don't want to join any channels.
        channels: []

        protocol: "ts6"
        autoconnect: 5
        pingfreq: 30
        maxnicklen: 30

        # Note: /'s in nicks are automatically converted to |'s for TS6
        # networks, since they don't allow "/" in nicks.
        separator: "|"

        # The following options are specific to TS6 servers:
        # Toggles owner (+y), admin (+a), and halfop (+h) support for
        # shadowircd/elemental-ircd.
        # This defaults to off for the best compatibility.
        use_owner: false
        use_admin: false
        use_halfop: false

        # Toggles support of shadowircd/elemental-ircd specific channel modes:
        # +T (no notice), +u (hidden ban list), +E (no kicks), +J (blocks
        # kickrejoin),
        # +K (no repeat messages), +d (no nick changes), and user modes:
        # +B (bot), +C (blocks CTCP), +D (deaf), +V (no invites), +I (hides
        # channel list)
        use_elemental_modes: false

# Plugins to load (omit the .py extension)
plugins:
    # Commands plugin: Provides core commands such as logging in, shutting down
    # PyLink, and various command help.
    - commands

    # Networks plugin: Allows you to manage (dis)connections to networks while
    # PyLink is running.
    - networks

    # Oper commands plugin: Provides a subset of network management commands.
    # (KILL, JUPE, etc.)
    # Note: these commands will be made available to anyone who's opered on your
    # network, so make sure your opers are trustworthy!
    #- opercmds

    # Bots plugin: Allows you to manipulate pseudo-clients (bots) on networks.
    #- bots

    # Relay plugin: Janus-style server-side relay plugin. See the relay: block
    # below for configuration.
    #- relay

    # Fantasy plugin: Allows you to trigger commands in channels by PyLink's
    # nick or a configurable prefix character.
    #- fantasy

    # Changehost plugin: Automatically changes the hostmask of matching users
    # to a template string, as they connect. This requires the changehost: block
    # to be configured correctly below.
    #- changehost

changehost:
    # This block configures the Changehost plugin. You don't need this if you
    # aren't using it.

    # Sets the networks where Changehost should be enabled.
    enabled_nets:
        - inspnet
        - ts6net

    # This sets the hostmasks that Changehost should look for. Whenever someone
    # with a matching nick!user@host connects, their host will be set to the
    # text defined. The following substitutions are available here:
    # $uid, $ts (time of connection), $nick, $realhost, $host, $ident, $ip.
    # Invalid characters in hosts are replaced with a "-".
    # Also, make sure you quote each entry so the YAML parser treats them as
    # raw strings.
    hosts:

        # Here are some examples. Note that to keep your users' details
        # private, you should probably refrain from using $ip or $realhost,
        # in these hostmasks, unless cloaking is already disabled.
        "*!GLolol@*.yournet.com": "$nick.opers.yournet.com"
        "*!*@localhost": "some-server.hostname"

        # Freenode-style masks are possible with this (though without the
        # hashing)
        "*!*@bnc-server.yournet.com": "yournet/bnc-users/$ident"
        "*!*@ircip?.mibbit.com": "$ident.$realhost"
        "WebchatUser*!*@*": "webchat/users/$ident"

relay:
    # This block defines various options for the Relay plugin. You don't need this
    # if you aren't using it.

    # Determines whether remote opers will have user mode +H (hideoper) set on
    # them. This has the benefit of lowering the oper count in /lusers and
    # /stats (P|p), but only on IRCds that support it. This defaults to true
    # if not set.
    hideoper: true

    # Determines whether real IPs should be sent across the relay. You should
    # generally have a consensus with your linked networks whether this should
    # be turned on. You will see other networks' user IP addresses, and they
    # will see yours.
    show_ips: false

    # Whether subservers should be spawned for each relay network (requires
    # reloading the plugin to change). Defaults to true.
    spawn_servers: true
