mirror of
https://github.com/Mikaela/Limnoria.git
synced 2024-11-24 03:29:28 +01:00
409 lines
14 KiB
Python
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:
|