Limnoria/src/conf.py
2004-01-01 20:08:53 +00:00

409 lines
14 KiB
Python

#!/usr/bin/env python
###
# Copyright (c) 2002, Jeremiah Fincher
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice,
# this list of conditions, and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions, and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
# * Neither the name of the author of this software nor the name of
# contributors to this software may be used to endorse or promote products
# derived from this software without specific prior written consent.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
###
__revision__ = "$Id$"
import fix
import os
import sys
import sets
import os.path
import logging
###
# Directions:
#
# Boolean values should be either True or False.
###
###
# Directories.
###
logDir = 'logs'
confDir = 'conf'
dataDir = 'data'
installDir = os.path.dirname(os.path.dirname(sys.modules[__name__].__file__))
pluginDirs = [os.path.join(installDir, s) for s in ('src', 'plugins')]
###
# Files.
###
userfile = 'users.conf'
channelfile = 'channels.conf'
###
# minimumLogPriority: The minimum priority that will be logged. Defaults to
# logging.INFO, which is probably a good value. Can also
# be usefully set to logging.{DEBUG,WARNING,ERROR,CRITICAL}
###
minimumLogPriority = logging.INFO
###
# stdoutLogging: Determines whether or not the bot logs to stdout.
###
stdoutLogging = True
###
# colorizedStdoutLogging: Determines whether or not the bot logs colored logs
# to stdout.
###
colorizedStdoutLogging = True
###
# logTimestampFormat: A format string defining how timestamps should be. Check
# the Python library reference for the "time" module to see
# what the various format specifiers mean.
###
logTimestampFormat = '[%d-%b-%Y %H:%M:%S]'
###
# humanTimestampFormat: A format string defining how timestamps should be
# formatted for human consumption. Check the Python
# library reference for the "time" module to see what the
# various format specifiers mean.
###
humanTimestampFormat = '%I:%M %p, %B %d, %Y'
###
# externalIP: A string that is the external IP of the bot. If this is None,
# the bot will attempt to find out its IP dynamically (though
# sometimes this doesn't work.)
###
externalIP = None
###
# throttleTime: A floating point number of seconds to throttle queued messages.
# (i.e., messages will not be sent faster than once per
# throttleTime units.)
###
throttleTime = 1.0
###
# snarfThrottle: A floating point number of seconds to throttle snarfed URLs,
# in order to prevent loops between two bots.
###
snarfThrottle = 10.0
###
# allowEval: True if the owner (and only the owner) should be able to eval
# arbitrary Python code.
###
allowEval = False
###
# replyWhenNotCommand: True if you want the bot reply when someone apparently
# addresses him but there is no command. Otherwise he'll
# just remain silent.
###
replyWhenNotCommand = True
###
# replyWithPrivateNotice: True if replies to a user in a channel should be
# noticed to that user instead of sent to the channel
# itself.
###
replyWithPrivateNotice = False
###
# replyWithNickPrefix: True if the bot should always prefix the nick of the
# person giving the command to its reply.
###
replyWithNickPrefix = True
###
# replyWhenAddressedByNick: True if the bot should reply to messages of the
# form "botnick: foo" where "botnick" is the bot's
# nick.
###
replyWhenAddressedByNick = True
###
# replyWhenNotAddressed: True if the bot should reply to messages even if they
# don't address it at all. If you have this on, you'll
# almost certainly want to make sure replyWhenNotCommand
# is turned off.
###
replyWhenNotAddressed = False
###
# requireRegistration: Oftentimes a plugin will want to record who added or
# changed or messed with it last. Supybot's user database
# is an excellent way to determine who exactly someone is.
# You may, however, want something a little less
# "intrustive," so you can set this variable to False to
# tell such plugins that they should use the hostmask when
# the user isn't registered with the user database.
###
requireRegistration = False
###
# requireChannelCommandsToBeSentInChannel: Normally, you can send channel
# related commands in private or in
# another channel. Sometimes this
# can be confusing, though, if the
# command changes the behavior of
# the bot in the channel. Set this
# variable to True if you want to
# require such commands to be sent
# in the channel to which they apply.
###
requireChannelCommandsToBeSentInChannel = False
###
# followIdentificationThroughNickChanges: By default the bot will simply
# unidentify someone when he changes
# his nick. Setting this to True will
# cause the bot to track such changes.
###
followIdentificationThroughNickChanges = False
###
# enablePipeSyntax: Supybot allows nested commands; generally, commands are
# nested via [square brackets]. Supybot can also use a
# syntax more similar to Unix pipes. What would be (and
# still can be; the pipe syntax doesn't disable the bracket
# syntax) "bot: bar [foo]" can now by "bot: foo | bar"
# This variable enables such syntax.
###
enablePipeSyntax = False
###
# showOnlySyntax : Supybot normally returns the full help whenever a user
# misuses a command. If this option is set to True, the bot
# will only return the syntax of the command (the first line
# of the docstring) rather than the full help.
###
showOnlySyntax = False
###
# defaultCapabilities: Capabilities allowed to everyone by default. You almost
# certainly want to have !owner and !admin in here.
###
defaultCapabilities = sets.Set(['-owner', '-admin', '-trusted'])
###
# reply%s: Stock replies for various reasons.
###
replyError = 'An error has occurred and has been logged. ' \
'Please contact this bot\'s administrator for more information.'
replyNoCapability = 'You don\'t have the "%s" capability. If you think ' \
'that you should have this capability, be sure that ' \
'you are identified via the "whoami" command.'
replySuccess = 'The operation succeeded.'
replyIncorrectAuth = 'Your hostmask doesn\'t match or your password is wrong.'
replyNoUser = 'I can\'t find that user in my database.'
replyNotRegistered = 'You must be registered to use this command. ' \
'If you are already registered, you must either ' \
'identify (using the identify command) or add a ' \
'hostmask matching your current hostmask (using ' \
'the addhostmask command).'
replyInvalidArgument = 'I can\'t send \\r, \\n, or \\0 (\\x00).'
replyRequiresPrivacy = 'That can\'t be done in a channel.'
replyEvalNotAllowed = 'You must enable conf.allowEval for that to work.'
replyPossibleBug = 'This may be a bug. If you think it is, please file a bug '\
'report at <http://sourceforge.net/tracker/?' \
'func=add&group_id=58965&atid=489447>'
###
# errorReplyPrivate: True if errors should be reported privately so as not to
# bother the channel.
###
errorReplyPrivate = False
###
# telnetEnable: A boolean saying whether or not to enable the telnet REPL.
# This will allow a user with the 'owner' capability to telnet
# into the bot and see how it's working internally. A lifesaver
# for development.
###
telnetEnable = False
telnetPort = 31337
###
# poll: the length of a polling term.
# If asyncore drivers are all you're using, feel free to make
# this arbitrarily large -- be warned, however, that all other
# drivers are just sitting around while asyncore waits during
# this poll period (including the schedule). It'll take more
# CPU, but you probably don't want to set this more than 0.01
# when you've got non-asyncore drivers to worry about.
###
poll = 1
###
# pingServer: Determines whether the bot will send PINGs to the server it's
# connected to in order to keep the connection alive. Sometimes
# this seems to result in instability.
###
pingServer = True
###
# maxHistory: Maximum number of messages kept in an Irc object's state.
###
maxHistory = 1000
###
# pingInterval: Number of seconds between PINGs to the server.
# 0 means not to ping the server.
###
pingInterval = 120
###
# nickmods: List of ways to 'spice up' a nick so the bot doesn't run out of
# nicks if all his normal ones are taken.
###
nickmods = ['%s^', '^%s^', '__%s__', '%s_', '%s__', '__%s', '^^%s^^', '{%s}',
'[%s]', '][%s][', '}{%s}{', '}{}%s', '^_^%s', '%s^_^', '^_^%s^_^']
###
# defaultAllow: Are commands allowed by default?
###
defaultAllow = True
###
# defaultIgnore: True if users should be ignored by default.
# It's a really easy way to make sure that people who want to
# talk to the bot register first. (Of course, they can't
# register if they're ignored. We'll work on that.)
###
defaultIgnore = False
###
# ignores: Hostmasks to ignore.
###
ignores = []
###
# prefixChars: A string of chars that are valid prefixes to address the bot.
###
prefixChars = '@'
###
# validPrefixChars: A string of chars that are allowed to be used as
# prefixChars.
###
validPrefixChars = '`~!@#$%^&*()_-+=[{}]\\|\'";:,<.>/?'
###
# detailedTracebacks: A boolean describing whether or not the bot will give
# *extremely* detailed tracebacks. Be cautioned, this eats
# a lot of log file space.
###
detailedTracebacks = True
###
# driverModule: A string that is the module where the default driver for the
# bot will be found.
###
driverModule = 'socketDrivers'
#driverModule = 'asyncoreDrivers'
#driverModule = 'twistedDrivers'
###############################
###############################
###############################
# DO NOT EDIT PAST THIS POINT #
###############################
###############################
###############################
version ='0.76.1'
commandsOnStart = []
# This is a dictionary mapping names to converter functions for use in the
# Owner.setconf command.
def mybool(s):
"""Converts a string read from the user into a bool, fuzzily."""
if s.capitalize() == 'False' or s == '0':
return False
elif s.capitalize() == 'True' or s == '1':
return True
else:
raise ValueError, 'invalid literal for mybool()'
def mystr(s):
"""Converts a string read from the user into a real string."""
while s and s[0] in "'\"" and s[0] == s[-1]:
s = s[1:-1]
return s
types = {
'logDir': mystr,
'confDir': mystr,
'dataDir': mystr,
#'pluginDirs': (list, str),
'userfile': mystr,
'channelfile': mystr,
'logTimestampFormat': mystr,
'humanTimestampFormat': mystr,
'throttleTime': float,
'snarfThrottle': float,
#'allowEval': mybool,
'replyWhenNotCommand': mybool,
'replyWithPrivateNotice': mybool,
'replyWithNickPrefix': mybool,
'replyWhenAddressedByNick': mybool,
'requireRegistration': mybool,
'enablePipeSyntax': mybool,
'replyError': mystr,
'replyNoCapability': mystr,
'replySuccess': mystr,
'replyIncorrectAuth': mystr,
'replyNoUser': mystr,
'replyNotRegistered': mystr,
'replyInvalidArgument': mystr,
'replyRequiresPrivacy': mystr,
'replyEvalNotAllowed': mystr,
'errorReplyPrivate': mybool,
#'telnetEnable': mybool,
#'telnetPort': int,
'poll': float,
#'maxHistory': int,
'pingInterval': float,
#'nickmods': (list, str),
'defaultAllow': mybool,
'defaultIgnore': mybool,
#'ignores': (list, str),
'prefixChars': mystr,
'detailedTracebacks': mybool,
'driverModule': mystr,
'showOnlySyntax': mybool,
'pingServer': mybool,
'followIdentificationThroughNickChanges': mybool
}
if os.name == 'nt':
colorizedStdoutLogging = False
# vim:set shiftwidth=4 tabstop=8 expandtab textwidth=78: