# This is a sample configuration file for PyLink. You'll likely want to rename it to pylink.yml # and begin your configuration there. # Note: lines starting with a "#" are comments and will be ignored. # Note 2: Use SPACES, NOT tabs to indent, or you will get parser errors on start! bot: # Sets nick, user/ident, and real name. nick: PyLink ident: pylink realname: PyLink Service Client # Server description (shown in /links, /whois, etc.) serverdesc: PyLink Server # Options below this require the fantasy plugin to be loaded. # Sets the default fantasy command prefix for calling commands inside channels prefix: "&" # Determines whether the bot will reply to commands prefixed with its nick # (case sensitive and requires the fantasy plugin). respondtonick: true # Custom fantasy command prefixes for other service bots if they are loaded. prefixes: games: "@" # Determines whether hideoper modes should be respected in WHOIS responses. # Defaults to true if not specified. whois_use_hideoper: true # Determines whether PyLink service clients should protect themselves from # kicks, kills, etc. using IRCd-side servprotect modes. For this to work # properly, this requires that PyLink be U-Lined (on most IRCds). Defaults to # False. protect_services: false # Determines how long plugins should wait (in seconds) before flushing their # databases to disk. Defaults to 300 seconds. Changes here require a reload # of all database-enabled plugins to take effect. save_delay: 300 login: # PyLink administrative login - Change this, or the service will not start! user: admin password: changeme servers: # Please note: these are only EXAMPLE link blocks. You should edit them and # remove ones that you don't need in your config. # Short name for the network. This is used for relay's nick suffixes, the # network plugin's (dis)connect commands, and elsewhere internally. # You should change this to some abbreviation representing your network # name; usually something 3-5 characters should be good. inspnet: # Server IP, port, and passwords. The ip: field also supports resolving # hostnames, but this is not well tested and thus not recommended. 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. Leave this as an empty list or remove the key if # you don't want to have service bots join any channels by default. 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 90 if # not set. pingfreq: 90 # Separator character (used by relay). Making this include anything other # than letters, numbers, or /|_`-[]^ will void your support. separator: "/" # If enabled, this opts this network out of relay IP sharing. i.e. this network # will not have its users' IPs sent across the relay, and it will not see any # IPs of other networks' users. #relay_no_ips: true # 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! This defaults to 30 if not set. 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 # The following option is specific to InspIRCd networks: # Force PyLink to handle WHOIS requests locally for all its clients # (experimental). This is required if you want custom WHOIS handlers # implemented by plugins like relay to work. Defaults to false. #use_experimental_whois: false ts6net: ip: ::1 # Determines whether IPv6 should be used for this connection. Should the ip: # above be a hostname instead of an IP, this will affect whether A records # (IPv4) or AAAA records (IPv6) will be used in resolving it. ipv6: yes port: 7000 recvpass: "abcd" sendpass: "abcd" hostname: "pylink.example.com" sid: "8PY" netname: "some TS6 network" sidrange: "8P#" protocol: "ts6" autoconnect: 5 # 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 unrealnet: ip: 1.2.3.4 port: 8067 recvpass: "coffee" sendpass: "tea" hostname: "pylink.example.com" sid: "2PY" netname: "This should match your UnrealIRCd config" sidrange: "8##" channels: [] protocol: "unreal" autoconnect: 5 # This option enables SUPER HACKY UNREAL 3.2 COMPAT mode, which allows # PyLink to link to mixed Unreal 3.2/4.0 networks, using a 4.0 server # as a direct uplink. # THIS IS EXPERIMENTAL, NOT WELL TESTED, AND MAY SET YOUR HOUSE ON FIRE # AND G-LINE EVERYONE ON YOUR NETWORK. # We encourage you to upgrade so that all your servers are running the # same IRCd version. #mixed_link: true # You can also define network-specific nicks and idents for various service # bots, using the configuration options "servicename_nick" and "servicename_ident". #pylink_nick: MagicServ #pylink_ident: magicserv #games_nick: MagicGames #games_ident: magicgames nefarious: ip: 1.2.3.4 port: 45454 recvpass: "recv" sendpass: "send" hostname: "pylink.midnight.vpn" # For P10, the SID and SID range options are just numbers. Make sure nothing # else is using the range you're reserving for PyLink. sid: 50 sidrange: "100-150" channels: ["#lounge"] protocol: nefarious autoconnect: 5 netname: "Nefarious test server" # The following options are specific to Nefarious servers. # Halfop is optional in Nefarious. This should match your IRCd configuration. use_halfop: false # Determines whether account-based cloaks should be used (someone.users.yournet.org # format). This should match your IRCd configuration: # ENABLE this if HOST_HIDING_STYLE is set to either 1 or 3. use_account_cloaks: true # The cloak suffix to be used for account-based cloaks. This **MUST** match your # IRCd configuration if use_account_cloaks is enabled. cloak_suffix: "users.yournet.org" # Determines whether account-based cloaks should be used for opers # (someone.opers.yournet.org format). If use_account_cloaks is disabled, # this will have no effect. This should match your IRCd configuration: use_oper_account_cloaks: true # The cloak suffix to be used for IRCop account-based cloaks. This **MUST** match your # IRCd configuration if use_oper_account_cloaks is enabled. oper_cloak_suffix: "staff.yournet.org" # Determines whether UnrealIRCd-style hashed-host cloaks will be used. # This should match your IRCd configuration: # ENABLE this if HOST_HIDING_STYLE is set to either 2 or 3. use_hashed_cloaks: true # Determines whether extended accounts should be used for this network. # This **MUST** match the EXTENDED_ACCOUNTS setting in your IRCd configuration. # Disable this if you are using X3, and leave it on for any other service package # (atheme, etc.) use_extended_accounts: true # 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 # Ctcp plugin: handles basic CTCP replies (VERSION, etc). - ctcp # 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 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. # Make sure that the main PyLink client is configured to join your # log channel in the channels: blocks for the networks it will be # logging on. It will not automatically join log channels. # Note: 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. # Note 2: DEBUG logging is not supported here: any log level settings # below INFO be automatically raised to INFO. 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 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 on whether this should # be turned on. You will see other networks' user IP addresses, and they # will see yours. Individual networks can also opt out of IP sharing # both ways by defining "relay_no_ips: true" in their server block. show_ips: false # Determines whether NickServ login info should be shown in the /whois output for # relay users. For InspIRCd networks, this requires "use_experimental_whois" to be # set. # Valid options include "all" (show this to everyone), "opers" (show only to # opers), and "none" (disabled). Defaults to none if not specified. whois_show_accounts: all # Determines whether the origin server should be shown in the /whois output for # relay users. For InspIRCd networks, this requires "use_experimental_whois" to be # set. # Valid options include "all" (show this to everyone), "opers" (show only to # opers), and "none" (disabled). Defaults to none if not specified. whois_show_server: opers # Determines whether netsplits should be hidden as *.net *.split over the relay. # Defaults to False. show_netsplits: false games: # Sets the nick of the Games service, if you're using it. nick: Games automode: # Sets the nick of the Automode service, if you're using it. nick: ModeBot