Speeling fixes.

This commit is contained in:
Jeremy Fincher 2004-08-18 23:15:27 +00:00
parent f75e934163
commit 0f598271dc
31 changed files with 46 additions and 47 deletions

View File

@ -361,7 +361,7 @@ class Amazon(callbacks.PrivmsgCommandAndRegexp):
"""[--url] <category> """[--url] <category>
Returns a list of best selling items in <category>. The 'categories' Returns a list of best selling items in <category>. The 'categories'
command will return a list of the available categores. If --url command will return a list of the available categories. If --url
is specified, a link to amazon.com's page for the item will also be is specified, a link to amazon.com's page for the item will also be
returned. returned.
""" """

View File

@ -98,7 +98,7 @@ class Bugzillae(registry.SpaceSeparatedListOfStrings):
List = ircutils.IrcSet List = ircutils.IrcSet
conf.registerGlobalValue(conf.supybot.plugins.Bugzilla, 'bugzillae', conf.registerGlobalValue(conf.supybot.plugins.Bugzilla, 'bugzillae',
Bugzillae([], """Determines what bugzillas will be added to the bot when it Bugzillae([], """Determines what bugzillae will be added to the bot when it
starts.""")) starts."""))
def registerBugzilla(name, url='', description=''): def registerBugzilla(name, url='', description=''):
@ -148,7 +148,7 @@ class Bugzilla(callbacks.PrivmsgCommandAndRegexp):
"""<name> <url> [<description>] """<name> <url> [<description>]
Add a bugzilla <url> to the list of defined bugzillae. <name> Add a bugzilla <url> to the list of defined bugzillae. <name>
is the name that will be used to reference the zilla in all is the name that will be used to reference the bugzilla in all
commands. Unambiguous abbreviations of <name> will be accepted also. commands. Unambiguous abbreviations of <name> will be accepted also.
<description> is the common name for the bugzilla and will <description> is the common name for the bugzilla and will
be listed with the bugzilla query; if not given, it defaults to <name>. be listed with the bugzilla query; if not given, it defaults to <name>.
@ -271,7 +271,7 @@ class Bugzilla(callbacks.PrivmsgCommandAndRegexp):
Look for bugs with <search string in the desc>, also matching Look for bugs with <search string in the desc>, also matching
<keywords>. <keywords> can be statuses, severities, priorities, or <keywords>. <keywords> can be statuses, severities, priorities, or
resolutions, seperated by commas""" resolutions, separated by commas"""
keywords = None keywords = None
(optlist, rest) = getopt.getopt(args, '', ['keywords=']) (optlist, rest) = getopt.getopt(args, '', ['keywords='])
for (option, arguments) in optlist: for (option, arguments) in optlist:

View File

@ -60,7 +60,7 @@ class Ctcp(callbacks.PrivmsgRegexp):
def version(self, irc, msg, match): def version(self, irc, msg, match):
"\x01VERSION\x01" "\x01VERSION\x01"
self.log.info('Received CTCP VERSION from %s', msg.prefix) self.log.info('Received CTCP VERSION from %s', msg.prefix)
s = '\x01VERSION SupyBot %s\x01' % conf.version s = '\x01VERSION Supybot %s\x01' % conf.version
irc.queueMsg(notice(msg.nick, s)) irc.queueMsg(notice(msg.nick, s))
def userinfo(self, irc, msg, match): def userinfo(self, irc, msg, match):
@ -76,7 +76,7 @@ class Ctcp(callbacks.PrivmsgRegexp):
def finger(self, irc, msg, match): def finger(self, irc, msg, match):
"\x01FINGER\x01" "\x01FINGER\x01"
self.log.info('Received CTCP FINGER from %s' % msg.prefix) self.log.info('Received CTCP FINGER from %s' % msg.prefix)
s = '\x01SupyBot, the best Python bot in existence!\x01' s = '\x01Supybot, the best Python bot in existence!\x01'
irc.queueMsg(notice(msg.nick, s)) irc.queueMsg(notice(msg.nick, s))
def source(self, irc, msg, match): def source(self, irc, msg, match):

View File

@ -58,7 +58,7 @@ class Filter(callbacks.Privmsg):
"""This plugin offers several commands which transform text in some way. """This plugin offers several commands which transform text in some way.
It also provides the capability of using such commands to 'filter' the It also provides the capability of using such commands to 'filter' the
output of the bot -- for instance, you could make everything the bot says output of the bot -- for instance, you could make everything the bot says
be in leetspeak, or morse code, or any number of other kinds of filters. be in leetspeak, or Morse code, or any number of other kinds of filters.
Not very useful, but definitely quite fun :)""" Not very useful, but definitely quite fun :)"""
def __init__(self): def __init__(self):
self.outFilters = ircutils.IrcDict() self.outFilters = ircutils.IrcDict()

View File

@ -30,7 +30,7 @@
### ###
""" """
Allows people behind a relaybot (which uses <nick@network> to relay messages) Allows people behind a relay bot (which uses <nick@network> to relay messages)
to access the bot. to access the bot.
""" """

View File

@ -153,8 +153,8 @@ class Format(callbacks.Privmsg):
"""<string 1> <string 2> """<string 1> <string 2>
Concatenates two strings. Do keep in mind that this is *not* the same Concatenates two strings. Do keep in mind that this is *not* the same
thing as strjoin "", since if <string 2> contains spaces, they won't be thing as join "", since if <string 2> contains spaces, they won't be
removed by strconcat. removed by concat.
""" """
(first, second) = privmsgs.getArgs(args, required=2) (first, second) = privmsgs.getArgs(args, required=2)
irc.reply(first+second) irc.reply(first+second)

View File

@ -30,7 +30,7 @@
### ###
""" """
Acceses Google for various things. Accesses Google for various things.
""" """
__revision__ = "$Id$" __revision__ = "$Id$"
@ -126,7 +126,7 @@ def search(log, queries, **kwargs):
raise callbacks.Error, 'Invalid Google license key.' raise callbacks.Error, 'Invalid Google license key.'
except xml.sax.SAXException, e: except xml.sax.SAXException, e:
log.exception('Uncaught SAX error:') log.exception('Uncaught SAX error:')
raise callbacks.Error, 'Google returned an unparseable response. ' \ raise callbacks.Error, 'Google returned an unparsable response. ' \
'The full traceback has been logged.' 'The full traceback has been logged.'
except SOAP.Error, e: except SOAP.Error, e:
log.exception('Uncaught SOAP exception in Google.search:') log.exception('Uncaught SOAP exception in Google.search:')

View File

@ -173,7 +173,7 @@ class Http(callbacks.Privmsg):
"""<company symbol> """<company symbol>
Gets the information about the current price and change from the Gets the information about the current price and change from the
previous day of a given compny (represented by a stock symbol). previous day of a given company (represented by a stock symbol).
""" """
symbol = privmsgs.getArgs(args) symbol = privmsgs.getArgs(args)
if ' ' in symbol: if ' ' in symbol:
@ -336,7 +336,7 @@ class Http(callbacks.Privmsg):
def extension(self, irc, msg, args): def extension(self, irc, msg, args):
"""<ext> """<ext>
Returns the results of querying filext.com for file extenstions that Returns the results of querying filext.com for file extensions that
match <ext>. match <ext>.
""" """
ext = privmsgs.getArgs(args) ext = privmsgs.getArgs(args)
@ -367,7 +367,7 @@ class Http(callbacks.Privmsg):
if res: if res:
irc.reply(utils.commaAndify(res)) irc.reply(utils.commaAndify(res))
else: else:
irc.error('No matching file extenstions were found.') irc.error('No matching file extensions were found.')
_zipinfore = re.compile(r'Latitude<BR>\(([^)]+)\)</th><th>Longitude<BR>' _zipinfore = re.compile(r'Latitude<BR>\(([^)]+)\)</th><th>Longitude<BR>'
r'\(([^)]+)\).*?<tr>(.*?)</tr>', re.I) r'\(([^)]+)\).*?<tr>(.*?)</tr>', re.I)

View File

@ -60,7 +60,7 @@ conf.registerChannelValue(conf.supybot.plugins.Karma, 'simpleOutput',
versions of the karma output when requesting a single thing's karma.""")) versions of the karma output when requesting a single thing's karma."""))
conf.registerChannelValue(conf.supybot.plugins.Karma, 'response', conf.registerChannelValue(conf.supybot.plugins.Karma, 'response',
registry.Boolean(False, """Determines whether the bot will reply with a registry.Boolean(False, """Determines whether the bot will reply with a
success message when something's karma is incrneased or decreased.""")) success message when something's karma is increased or decreased."""))
conf.registerChannelValue(conf.supybot.plugins.Karma, 'rankingDisplay', conf.registerChannelValue(conf.supybot.plugins.Karma, 'rankingDisplay',
registry.Integer(3, """Determines how many highest/lowest karma things are registry.Integer(3, """Determines how many highest/lowest karma things are
shown when karma is called with no arguments.""")) shown when karma is called with no arguments."""))

View File

@ -169,7 +169,7 @@ class Math(callbacks.Privmsg):
def calc(self, irc, msg, args): def calc(self, irc, msg, args):
"""<math expression> """<math expression>
Returns the value of the evaluted <math expression>. The syntax is Returns the value of the evaluated <math expression>. The syntax is
Python syntax; the type of arithmetic is floating point. Floating Python syntax; the type of arithmetic is floating point. Floating
point arithmetic is used in order to prevent a user from being able to point arithmetic is used in order to prevent a user from being able to
crash to the bot with something like 10**10**10**10. One consequence crash to the bot with something like 10**10**10**10. One consequence

View File

@ -47,7 +47,7 @@
### ###
""" """
Attempt to port blootbot's nickometer command from perl. This plugin Attempt to port Infobot's nickometer command from Perl. This plugin
provides one command (called nickometer) which will tell you how 'lame' provides one command (called nickometer) which will tell you how 'lame'
an IRC nick is. It's an elitist hacker thing, but quite fun. an IRC nick is. It's an elitist hacker thing, but quite fun.
""" """
@ -184,7 +184,7 @@ class Nickometer(callbacks.Privmsg):
hits=re.findall(`i`, nick) hits=re.findall(`i`, nick)
if (hits and len(hits)>0): if (hits and len(hits)>0):
score += self.punish(k3wlt0k_weights[i] * len(hits) * 30, score += self.punish(k3wlt0k_weights[i] * len(hits) * 30,
'%s occurences of %s ' % (len(hits), i)) '%s occurrences of %s ' % (len(hits), i))
# An alpha caps is not lame in middle or at end, provided the first # An alpha caps is not lame in middle or at end, provided the first
# alpha is caps. # alpha is caps.

View File

@ -215,7 +215,7 @@ class RSS(callbacks.Privmsg):
results = rssparser.parse(url) results = rssparser.parse(url)
except sgmllib.SGMLParseError: except sgmllib.SGMLParseError:
self.log.exception('Uncaught exception from rssparser:') self.log.exception('Uncaught exception from rssparser:')
raise callbacks.Error, 'Invalid (unparseable) RSS feed.' raise callbacks.Error, 'Invalid (unparsable) RSS feed.'
except socket.timeout: except socket.timeout:
return error('Timeout downloading feed.') return error('Timeout downloading feed.')
self.cachedFeeds[url] = results self.cachedFeeds[url] = results

View File

@ -182,7 +182,7 @@ class Tail(privmsgs.CapabilityCheckingPrivmsg):
utils.sortBy(ircutils.toLower, L) utils.sortBy(ircutils.toLower, L)
irc.reply(utils.commaAndify(L)) irc.reply(utils.commaAndify(L))
else: else:
irc.reply('I\'m not currently targetting anywhere.') irc.reply('I\'m not currently targeting anywhere.')
elif remove: elif remove:
pass #XXX pass #XXX

View File

@ -30,7 +30,7 @@
### ###
""" """
The Todo module allows registered users to keep their own personal list of The Todo plugin allows registered users to keep their own personal list of
tasks to do, with an optional priority for each. tasks to do, with an optional priority for each.
""" """

View File

@ -84,7 +84,7 @@ conf.registerChannelValue(conf.supybot.plugins.URL, 'titleSnarfer',
title of URLs it sees in the channel.""")) title of URLs it sees in the channel."""))
conf.registerChannelValue(conf.supybot.plugins.URL, 'nonSnarfingRegexp', conf.registerChannelValue(conf.supybot.plugins.URL, 'nonSnarfingRegexp',
registry.Regexp(None, """Determines what URLs are to be snarfed and stored registry.Regexp(None, """Determines what URLs are to be snarfed and stored
in the database in the channel; URLs matchin the regexp given will not be in the database in the channel; URLs matching the regexp given will not be
snarfed. Give the empty string if you have no URLs that you'd like to snarfed. Give the empty string if you have no URLs that you'd like to
exclude from being snarfed.""")) exclude from being snarfed."""))

View File

@ -66,7 +66,7 @@ class UserInfo(callbacks.Privmsg):
def userinfo(self, irc, msg, args): def userinfo(self, irc, msg, args):
"""[<name>] """[<name>]
Returns the arbitary data associated with the user <name>. If <name> Returns the arbitrary data associated with the user <name>. If <name>
is not given, returns the data associated with the user giving the is not given, returns the data associated with the user giving the
command. command.
""" """

View File

@ -58,7 +58,7 @@ conf.registerGlobalValue(conf.supybot.plugins.Words, 'file',
will be used by this plugin as its list of words.""")) will be used by this plugin as its list of words."""))
conf.registerGroup(conf.supybot.plugins.Words, 'hangman') conf.registerGroup(conf.supybot.plugins.Words, 'hangman')
conf.registerChannelValue(conf.supybot.plugins.Words.hangman, 'maxTries', conf.registerChannelValue(conf.supybot.plugins.Words.hangman, 'maxTries',
registry.Integer(6, """Determines how many oppurtunities users will have to registry.Integer(6, """Determines how many opportunities users will have to
guess letters in the hangman game.""")) guess letters in the hangman game."""))
conf.registerChannelValue(conf.supybot.plugins.Words.hangman, 'prefix', conf.registerChannelValue(conf.supybot.plugins.Words.hangman, 'prefix',
registry.StringWithSpaceOnRight('-= HANGMAN =- ', """Determines what prefix registry.StringWithSpaceOnRight('-= HANGMAN =- ', """Determines what prefix

View File

@ -131,7 +131,7 @@ def main():
print textwrap.fill("""Sometimes you'll want a callback to be print textwrap.fill("""Sometimes you'll want a callback to be
threaded. If its methods (command or regexp-based, either one) will threaded. If its methods (command or regexp-based, either one) will
take a signficant amount of time to run, you'll want to thread them so take a significant amount of time to run, you'll want to thread them so
they don't block the entire bot.""") they don't block the entire bot.""")
print print
threaded = yn('Does your plugin need to be threaded?') threaded = yn('Does your plugin need to be threaded?')

View File

@ -392,8 +392,8 @@ def main():
if yn('Do you want your bot to join some channels when he connects?', if yn('Do you want your bot to join some channels when he connects?',
default=True): default=True):
defaultChannels = ' '.join(conf.supybot.channels()) defaultChannels = ' '.join(conf.supybot.channels())
output("""Seperate channels with spaces. If the channel is locked output("""Separate channels with spaces. If the channel is locked
with a key, follow the channel name with the key seperated with a key, follow the channel name with the key separated
by a comma. For example: by a comma. For example:
#supybot #mychannel,mykey #otherchannel"""); #supybot #mychannel,mykey #otherchannel""");
while True: while True:
@ -429,7 +429,7 @@ def main():
output("""Now we're going to run you through plugin configuration. There's output("""Now we're going to run you through plugin configuration. There's
a variety of plugins in supybot by default, but you can create and a variety of plugins in supybot by default, but you can create and
add your own, ofcourse. We'll allow you to take a look at the known add your own, of course. We'll allow you to take a look at the known
plugins' descriptions and configure them plugins' descriptions and configure them
if you like what you see.""") if you like what you see.""")
@ -451,7 +451,7 @@ def main():
# individual # individual
if yn('Would you like to look at plugins individually?'): if yn('Would you like to look at plugins individually?'):
output("""Next comes your oppurtunity to learn more about the plugins output("""Next comes your opportunity to learn more about the plugins
that are available and select some (or all!) of them to run in your that are available and select some (or all!) of them to run in your
bot. Before you have to make a decision, of course, you'll be able to bot. Before you have to make a decision, of course, you'll be able to
see a short description of the plugin and, if you choose, an example see a short description of the plugin and, if you choose, an example
@ -631,6 +631,6 @@ if __name__ == '__main__':
print ansi.RESET print ansi.RESET
print print
print print
output("""Well, it looks like you cancelled out of the wizard before output("""Well, it looks like you canceled out of the wizard before
it was done. Unfortunately, I didn't get to write anything to file. it was done. Unfortunately, I didn't get to write anything to file.
Please run the wizard again to completion.""") Please run the wizard again to completion.""")

View File

@ -311,7 +311,7 @@ class Admin(privmsgs.CapabilityCheckingPrivmsg):
def removecapability(self, irc, msg, args): def removecapability(self, irc, msg, args):
"""<name|hostmask> <capability> """<name|hostmask> <capability>
Takes from the user specified by <name> (or the uswer to whom Takes from the user specified by <name> (or the user to whom
<hostmask> currently maps) the specified capability <capability> <hostmask> currently maps) the specified capability <capability>
""" """
(name, capability) = privmsgs.getArgs(args, 2) (name, capability) = privmsgs.getArgs(args, 2)

View File

@ -619,7 +619,7 @@ class Channel(callbacks.Privmsg):
setcapability = privmsgs.checkChannelCapability(setcapability, 'op') setcapability = privmsgs.checkChannelCapability(setcapability, 'op')
def unsetcapability(self, irc, msg, args, channel): def unsetcapability(self, irc, msg, args, channel):
"""[<chanel>] <capability> """[<channel>] <capability>
If you have the #channel,op capability, this will unset the channel If you have the #channel,op capability, this will unset the channel
capability <capability> so each user's specific capability or the capability <capability> so each user's specific capability or the

View File

@ -321,7 +321,7 @@ class Misc(callbacks.Privmsg):
def source(self, irc, msg, args): def source(self, irc, msg, args):
"""takes no arguments """takes no arguments
Returns a URL saying where to get SupyBot. Returns a URL saying where to get Supybot.
""" """
irc.reply('My source is at http://supybot.sf.net/') irc.reply('My source is at http://supybot.sf.net/')

View File

@ -119,7 +119,7 @@ def loadPluginClass(irc, module, register=None):
conf.registerPlugin('Owner', True) conf.registerPlugin('Owner', True)
conf.supybot.plugins.Owner.register('public', registry.Boolean(True, conf.supybot.plugins.Owner.register('public', registry.Boolean(True,
"""Determines whether this plugin is publically visible.""")) """Determines whether this plugin is publicly visible."""))
### ###
# supybot.commands. # supybot.commands.

View File

@ -248,7 +248,6 @@ class Tokenizer:
return ret return ret
def tokenize(self, s): def tokenize(self, s):
"""Tokenizes a string according to supybot's nested argument format."""
lexer = shlex.shlex(StringIO(s)) lexer = shlex.shlex(StringIO(s))
lexer.commenters = '' lexer.commenters = ''
lexer.quotes = self.quotes lexer.quotes = self.quotes

View File

@ -319,7 +319,7 @@ registerChannelValue(supybot.reply.mores, 'instant',
registerGlobalValue(supybot.reply, 'oneToOne', registerGlobalValue(supybot.reply, 'oneToOne',
registry.Boolean(True, """Determines whether the bot will send registry.Boolean(True, """Determines whether the bot will send
multi-message replies in a single messsage or in multiple messages. For multi-message replies in a single message or in multiple messages. For
safety purposes (so the bot can't possibly flood) it will normally send safety purposes (so the bot can't possibly flood) it will normally send
everything in a single message.""")) everything in a single message."""))
@ -730,7 +730,7 @@ registerGlobalValue(supybot, 'defaultIgnore',
registerGlobalValue(supybot, 'humanTimestampFormat', registerGlobalValue(supybot, 'humanTimestampFormat',
registry.String('%I:%M %p, %B %d, %Y', """Determines how timestamps printed registry.String('%I:%M %p, %B %d, %Y', """Determines how timestamps printed
for human reading should be formatted. Refer to the Python documentation for human reading should be formatted. Refer to the Python documentation
for the time module to see valid formatting characteres for time for the time module to see valid formatting characters for time
formats.""")) formats."""))
class IP(registry.String): class IP(registry.String):

View File

@ -73,7 +73,7 @@ def reversed(L):
def window(L, size): def window(L, size):
"""Returns a sliding 'window' through the list L of size size.""" """Returns a sliding 'window' through the list L of size size."""
if size < 1: if size < 1:
raise ValueError, 'size <= 0 unallowed.' raise ValueError, 'size <= 0 disallowed.'
for i in xrange(len(L) - (size-1)): for i in xrange(len(L) - (size-1)):
yield L[i:i+size] yield L[i:i+size]

View File

@ -286,7 +286,7 @@ class IrcUser(object):
raise ValueError, 'secure flag set, unmatched hostmask' raise ValueError, 'secure flag set, unmatched hostmask'
def unsetAuth(self): def unsetAuth(self):
"""Unsets a use's authenticated hostmask.""" """Unsets a user's authenticated hostmask."""
if self.auth is not None: if self.auth is not None:
users.invalidateCache(hostmask=self.auth[1]) users.invalidateCache(hostmask=self.auth[1])
self.auth = None self.auth = None
@ -935,7 +935,7 @@ def _checkCapabilityForUnknownUser(capability, users=users, channels=channels):
return _x(capability, conf.supybot.capabilities.default()) return _x(capability, conf.supybot.capabilities.default())
def checkCapability(hostmask, capability, users=users, channels=channels): def checkCapability(hostmask, capability, users=users, channels=channels):
"""Checks that the user specified by name/hostmask has the capabilty given. """Checks that the user specified by name/hostmask has the capability given.
""" """
if world.testing: if world.testing:
return _x(capability, True) return _x(capability, True)

View File

@ -130,7 +130,7 @@ class IrcMsgQueue(object):
Probably smarter than it is now, though it's gotten quite a bit smarter Probably smarter than it is now, though it's gotten quite a bit smarter
than it originally was. A method to "score" methods, and a heapq to than it originally was. A method to "score" methods, and a heapq to
maintain a priority queue of the messages would be the ideal way to do maintain a priority queue of the messages would be the ideal way to do
intelligent queueing. intelligent queuing.
As it stands, however, we simple keep track of 'high priority' messages, As it stands, however, we simple keep track of 'high priority' messages,
'low priority' messages, and normal messages, and just make sure to return 'low priority' messages, and normal messages, and just make sure to return
@ -491,9 +491,9 @@ class Irc(IrcCommandDispatcher):
if self.password: if self.password:
log.info('Sending PASS command, not logging the password.') log.info('Sending PASS command, not logging the password.')
self.queueMsg(ircmsgs.password(self.password)) self.queueMsg(ircmsgs.password(self.password))
log.info('Queueing NICK command, nick is %s.', self.nick) log.info('Queuing NICK command, nick is %s.', self.nick)
self.queueMsg(ircmsgs.nick(self.nick)) self.queueMsg(ircmsgs.nick(self.nick))
log.info('Queueing USER command, ident is %s, user is %s.', log.info('Queuing USER command, ident is %s, user is %s.',
self.ident, self.user) self.ident, self.user)
self.queueMsg(ircmsgs.user(self.ident, self.user)) self.queueMsg(ircmsgs.user(self.ident, self.user))

View File

@ -84,7 +84,7 @@ class IrcMsg(object):
__slots__ = ('args', 'command', 'host', 'nick', 'prefix', 'user', __slots__ = ('args', 'command', 'host', 'nick', 'prefix', 'user',
'_hash', '_str', '_repr', '_len') '_hash', '_str', '_repr', '_len')
def __init__(self, s='', command='', args=(), prefix='', msg=None): def __init__(self, s='', command='', args=(), prefix='', msg=None):
assert not (msg and s), 'Ircmsg.__init__ cannot accept both s and msg' assert not (msg and s), 'IrcMsg.__init__ cannot accept both s and msg'
if not s and not command and not msg: if not s and not command and not msg:
raise MalformedIrcMsg, 'IRC messages require a command.' raise MalformedIrcMsg, 'IRC messages require a command.'
self._str = None self._str = None

View File

@ -273,7 +273,7 @@ def findBinaryInPath(s):
return cmdLine return cmdLine
def commaAndify(seq, comma=',', And='and'): def commaAndify(seq, comma=',', And='and'):
"""Given a a sequence, returns an english clause for that sequence. """Given a a sequence, returns an English clause for that sequence.
I.e., given [1, 2, 3], returns '1, 2, and 3' I.e., given [1, 2, 3], returns '1, 2, and 3'
""" """

View File

@ -135,7 +135,7 @@ def upkeep(scheduleNext=True):
schedule.addEvent(upkeep, time.time() + conf.supybot.upkeepInterval()) schedule.addEvent(upkeep, time.time() + conf.supybot.upkeepInterval())
collected = gc.collect() collected = gc.collect()
if gc.garbage: if gc.garbage:
log.warning('Uncollectable garbage (file this as a bug on SF.net): %s', log.warning('Noncollectable garbage (file this as a bug on SF.net): %s',
gc.garbage) gc.garbage)
return collected return collected