[pybot-commits] CVS: pybot/pybot/modules freshmeat.py,1.6,1.7 help.py,1.3,1.4 infopack.py,1.3,1.4 lo
Brought to you by:
niemeyer
From: Gustavo N. <nie...@us...> - 2003-05-09 21:32:09
|
Update of /cvsroot/pybot/pybot/pybot/modules In directory sc8-pr-cvs1:/tmp/cvs-serv20181/pybot/modules Modified Files: freshmeat.py help.py infopack.py log.py messages.py modulecontrol.py options.py permission.py plock.py repeat.py social.py testadora.py uptime.py userdata.py xmlrpc.py Log Message: Added new triggers option in register_help(). Now the "help" command alone also shows items the user can ask for help on. Index: freshmeat.py =================================================================== RCS file: /cvsroot/pybot/pybot/pybot/modules/freshmeat.py,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** freshmeat.py 9 May 2003 15:27:44 -0000 1.6 --- freshmeat.py 9 May 2003 21:32:06 -0000 1.7 *************** *** 48,53 **** self.re1 = re.compile(r"(?P<dont>don'?t\s+|do\s+not\s+)?show\s+freshmeat\s+news(?:\s+(?:to|on|at|for)(?:\s+channel|\s+user)?\s+(?P<target>\S+)(?:(?:\s+on|\s+at)?\s+server\s+(?P<server>\S+?))?)?\s*[!.]*$", re.I) ! # Match '[leav(e|ing)] message[s]' ! mm.register_help(0, "freshmeat(?:\s+news)?", HELP) def unload(self): --- 48,53 ---- self.re1 = re.compile(r"(?P<dont>don'?t\s+|do\s+not\s+)?show\s+freshmeat\s+news(?:\s+(?:to|on|at|for)(?:\s+channel|\s+user)?\s+(?P<target>\S+)(?:(?:\s+on|\s+at)?\s+server\s+(?P<server>\S+?))?)?\s*[!.]*$", re.I) ! # freshmeat [news] ! mm.register_help(0, "freshmeat(?:\s+news)?", HELP, "freshmeat") def unload(self): Index: help.py =================================================================== RCS file: /cvsroot/pybot/pybot/pybot/modules/help.py,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** help.py 4 Dec 2001 00:57:38 -0000 1.3 --- help.py 9 May 2003 21:32:06 -0000 1.4 *************** *** 18,21 **** --- 18,22 ---- from pybot import hooks, mm, options + from types import ListType import re *************** *** 29,32 **** --- 30,34 ---- def __init__(self, bot): self.data = options.getsoft("Help.data", []) + self.triggers = options.getsoft("Help.triggers", {}) mm.register("register_help", self.mm_register_help) mm.register("unregister_help", self.mm_unregister_help) *************** *** 49,53 **** if something: found = 0 ! for pattern, text in self.data: if pattern.match(something): found = 1 --- 51,55 ---- if something: found = 0 ! for pattern, text, triggers in self.data: if pattern.match(something): found = 1 *************** *** 58,61 **** --- 60,71 ---- for line in HELP: msg.answer("%:", *line) + alltriggers = [] + for pattern, text, triggers in self.data: + alltriggers.extend(triggers) + if alltriggers: + alltriggers.sort() + s = "At least the following help items are known: " + s += ", ".join(alltriggers) + msg.answer("%:", s) if not found: msg.answer("%:", ["No", "Sorry, no", "Sorry, but there's no"], "help about that", [".", "!"]) *************** *** 63,69 **** msg.answer("%:", ["Sorry, you", "You"], ["can't", "are not allowed to"], "ask for help", [".", "!"]) return 0 ! ! def mm_register_help(self, defret, pattern, text): ! self.data.append((re.compile(pattern, re.I), text)) def mm_unregister_help(self, defret, text): --- 73,83 ---- msg.answer("%:", ["Sorry, you", "You"], ["can't", "are not allowed to"], "ask for help", [".", "!"]) return 0 ! ! def mm_register_help(self, defret, pattern, text, triggers=None): ! if not triggers: ! triggers = [] ! elif type(triggers) is not ListType: ! triggers = [triggers] ! self.data.append((re.compile(pattern, re.I), text, triggers)) def mm_unregister_help(self, defret, text): *************** *** 71,75 **** if self.data[i][1] == text: del self.data[i] - # Make sure it is loaded first to let mm.register_help() --- 85,88 ---- Index: infopack.py =================================================================== RCS file: /cvsroot/pybot/pybot/pybot/modules/infopack.py,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** infopack.py 17 Jun 2002 20:33:40 -0000 1.3 --- infopack.py 9 May 2003 21:32:06 -0000 1.4 *************** *** 240,245 **** if found: return 0 - - def __loadmodule__(bot): --- 240,243 ---- Index: log.py =================================================================== RCS file: /cvsroot/pybot/pybot/pybot/modules/log.py,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** log.py 9 May 2003 15:27:44 -0000 1.8 --- log.py 9 May 2003 21:32:06 -0000 1.9 *************** *** 32,36 **** HELP_SEARCH = [ ("""\ ! You may search the log files with "[show] (log[s]|message[s]) \ [with] /<regexp>/'. You must have the "logsearch" permission for \ this to work.\ --- 32,36 ---- HELP_SEARCH = [ ("""\ ! You may search the log files with "[show|search] (log[s]|message[s]) \ [with] /<regexp>/'. You must have the "logsearch" permission for \ this to work.\ *************** *** 131,145 **** hooks.register("OutCTCP", self.log_outctcp, 150) ! # Match '[have you] seen <nick> [!?]' self.re1 = re.compile(r"(?:have\s+you\s+)?seen\s+(?P<nick>[^\s!?]+)\s*[!?]*$", re.I) ! # Match '[show] (log[s]|message[s]) [with] /<regexp>/[.!]' self.re2 = re.compile("(?:show\s+|search\s+)?(?:log|message)s?\s+(?:with\s+|search\s+)?/(?P<regexp>.*)/\s*[.!?]*$", re.I) ! # Match 'seen' ! mm.register_help(0, "seen", HELP_SEEN) ! # Match '(log|search (log[s]|message[s]))' ! mm.register_help(0, "log|search\s+(?:log|message)s?", HELP_SEARCH) def unload(self): --- 131,146 ---- hooks.register("OutCTCP", self.log_outctcp, 150) ! # [have you] seen <nick> [!?] self.re1 = re.compile(r"(?:have\s+you\s+)?seen\s+(?P<nick>[^\s!?]+)\s*[!?]*$", re.I) ! # [show|search] (log[s]|message[s]) [with] /<regexp>/[.!] self.re2 = re.compile("(?:show\s+|search\s+)?(?:log|message)s?\s+(?:with\s+|search\s+)?/(?P<regexp>.*)/\s*[.!?]*$", re.I) ! # seen ! mm.register_help(0, "seen", HELP_SEEN, "seen") ! # log|(search|show) (log[s]|message[s]) ! mm.register_help(0, "log|(?:search|show)\s+(?:log|message)s?", ! HELP_SEARCH, "log") def unload(self): Index: messages.py =================================================================== RCS file: /cvsroot/pybot/pybot/pybot/modules/messages.py,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** messages.py 3 Apr 2002 23:24:07 -0000 1.5 --- messages.py 9 May 2003 21:32:06 -0000 1.6 *************** *** 36,44 **** self.strip_nick = re.compile(r"^[\W_]*([^\W_]+)[\W_]*$") ! # Match '[priv[ate]] message (to|for) <nick>: <message>' self.re1 = re.compile(r"(?P<private>priv(?:ate)?\s+)?message\s+(?:to|for)\s+(?P<nick>\S+?)\s*:\s+(?P<message>.*)$", re.I) ! # Match '[leav(e|ing)] message[s]' ! mm.register_help(0, "(?:leav(?:e|ing)\s+)?messages?", HELP) def unload(self): --- 36,44 ---- self.strip_nick = re.compile(r"^[\W_]*([^\W_]+)[\W_]*$") ! # [priv[ate]] message (to|for) <nick>: <message> self.re1 = re.compile(r"(?P<private>priv(?:ate)?\s+)?message\s+(?:to|for)\s+(?P<nick>\S+?)\s*:\s+(?P<message>.*)$", re.I) ! # [leav(e|ing)] message[s] ! mm.register_help(0, "(?:leav(?:e|ing)\s+)?messages?", HELP, "messages") def unload(self): Index: modulecontrol.py =================================================================== RCS file: /cvsroot/pybot/pybot/pybot/modules/modulecontrol.py,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** modulecontrol.py 9 May 2003 15:27:44 -0000 1.6 --- modulecontrol.py 9 May 2003 21:32:06 -0000 1.7 *************** *** 33,44 **** modls.loadlist(self.modules) ! # Match '[re|un]load [the] [module] <module>' self.re1 = re.compile("(?P<command>(?:re|un)?load)(?:\s+the)?(?:\s+module)?\s+(?P<module>[\w_-]+)\s*[.!]*$", re.I) ! # Match '(show|list) [loaded] modules' self.re2 = re.compile("(?:show|list)(?:\s+loaded)\s+modules\s*[.!]*$", re.I) ! # Match '[[un|re]load] module[s]' ! mm.register_help(0, "(?:(?:un|re)?load\s+)?modules?", HELP) def unload(self): --- 33,44 ---- modls.loadlist(self.modules) ! # [re|un]load [the] [module] <module> self.re1 = re.compile("(?P<command>(?:re|un)?load)(?:\s+the)?(?:\s+module)?\s+(?P<module>[\w_-]+)\s*[.!]*$", re.I) ! # (show|list) [loaded] modules self.re2 = re.compile("(?:show|list)(?:\s+loaded)\s+modules\s*[.!]*$", re.I) ! # [[un|re]load] module[s] ! mm.register_help(0, "(?:(?:un|re)?load\s+)?modules?", HELP, "modules") def unload(self): Index: options.py =================================================================== RCS file: /cvsroot/pybot/pybot/pybot/modules/options.py,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** options.py 9 May 2003 20:18:36 -0000 1.3 --- options.py 9 May 2003 21:32:06 -0000 1.4 *************** *** 17,21 **** # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ! from pybot import mm, hooks, options from types import * import os --- 17,21 ---- # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ! from pybot import mm, hooks, options, config from types import * import os Index: permission.py =================================================================== RCS file: /cvsroot/pybot/pybot/pybot/modules/permission.py,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** permission.py 9 May 2003 20:18:36 -0000 1.7 --- permission.py 9 May 2003 21:32:06 -0000 1.8 *************** *** 63,67 **** # perm[ission][s] [system] ! mm.register_help(0, "perm(?:ission)?s?(?:\s+system)?", HELP) def unload(self): --- 63,68 ---- # perm[ission][s] [system] ! mm.register_help(0, "perm(?:ission)?s?(?:\s+system)?", HELP, ! "premissions") def unload(self): Index: plock.py =================================================================== RCS file: /cvsroot/pybot/pybot/pybot/modules/plock.py,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** plock.py 9 May 2003 15:27:44 -0000 1.7 --- plock.py 9 May 2003 21:32:06 -0000 1.8 *************** *** 68,88 **** hooks.register("Message", self.message) ! # Match '[force] plock <package> [,<package>] [!|.]' self.re1 = re.compile(r"(?P<force>force\s+)?plock\s+(?P<package>[\w_\.-]+(?:(?:\s*,?\s*and\s+|[, ]+)[\w_\.-]+)*)\s*[!.]*$") ! # Match '[force] (unplock|punlock) <package> [,<package>] [!|.]' self.re2 = re.compile(r"(?P<force>force\s+)?(?:unplock|punlock)\s+(?P<package>[\w_\.-]+(?:(?:\s*,?\s*and\s+|[, ]+)[\w_\.-]+)*)\s*[!.]*$") ! # Match '(my plocks|plocks of <user>) [?]' self.re3 = re.compile(r"(?:(?P<my>my)\s+plocks|plocks\s+of\s+(?P<user>[\w\.@_-]+))\s*(?:!*\?[?!]*)?$") ! # Match '([who] [has] plocked|plocker [of]) <package> [,<package>] [?]' self.re4 = re.compile(r"(?:(?:who\s+)?(?:has\s+)plocked|plocker\s+(?:of\s+)?)(?P<package>[\w_\.-]+(?:(?:\s*,?\s*and\s+|[, ]+)[\w_\.-]+)*)\s*(?:!*\?[?!]*)?$") ! # Match 'plock <package> [,<package>] ?' self.re5 = re.compile(r"plock\s+(?P<package>[\w_\.-]+(?:(?:\s*,?\s*and\s+|[, ]+)[\w_\.-]+)*)\s*(?:!*\?[?!]*)$") ! # Match '[un]plock[ing] | <package|pkg> lock[ing] ! mm.register_help(0, "(?:un)?plock(?:ing)?|(?:package|pkg)\s+lock(?:ing)?", HELP) def unload(self): --- 68,89 ---- hooks.register("Message", self.message) ! # [force] plock <package> [,<package>] [!|.] self.re1 = re.compile(r"(?P<force>force\s+)?plock\s+(?P<package>[\w_\.-]+(?:(?:\s*,?\s*and\s+|[, ]+)[\w_\.-]+)*)\s*[!.]*$") ! # [force] (unplock|punlock) <package> [,<package>] [!|.] self.re2 = re.compile(r"(?P<force>force\s+)?(?:unplock|punlock)\s+(?P<package>[\w_\.-]+(?:(?:\s*,?\s*and\s+|[, ]+)[\w_\.-]+)*)\s*[!.]*$") ! # (my plocks|plocks of <user>) [?] self.re3 = re.compile(r"(?:(?P<my>my)\s+plocks|plocks\s+of\s+(?P<user>[\w\.@_-]+))\s*(?:!*\?[?!]*)?$") ! # ([who] [has] plocked|plocker [of]) <package> [,<package>] [?] self.re4 = re.compile(r"(?:(?:who\s+)?(?:has\s+)plocked|plocker\s+(?:of\s+)?)(?P<package>[\w_\.-]+(?:(?:\s*,?\s*and\s+|[, ]+)[\w_\.-]+)*)\s*(?:!*\?[?!]*)?$") ! # plock <package> [,<package>] ? self.re5 = re.compile(r"plock\s+(?P<package>[\w_\.-]+(?:(?:\s*,?\s*and\s+|[, ]+)[\w_\.-]+)*)\s*(?:!*\?[?!]*)$") ! # [un]plock[ing] | <package|pkg> lock[ing] ! mm.register_help(0, "(?:un)?plock(?:ing)?|(?:package|pkg)\s+lock(?:ing)?", ! HELP, "plock") def unload(self): Index: repeat.py =================================================================== RCS file: /cvsroot/pybot/pybot/pybot/modules/repeat.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** repeat.py 4 Dec 2001 00:57:38 -0000 1.2 --- repeat.py 9 May 2003 21:32:06 -0000 1.3 *************** *** 42,46 **** hooks.register("Message", self.message) ! # Match: '[don[']t|do not] repeat [each <n> seconds] (to|at|on) [channel|user] <target> [[on|at] server <server>] [/me|/notice] ...' self.re1 = re.compile(r"(?:(?P<dont>don'?t|do\s+not)\s+)?repeat(?:\s+each\s+(?P<interval>[0-9]+)\s*(?P<intervalunit>se?c?o?n?d?s?|mi?n?u?t?e?s?|ho?u?r?s?))?(?:\s+(?:to|at|on)(?:\s+(?:channel|user))?\s+(?P<target>\S+))?(?:\s+(?:on|at)?\s+server\s+(?P<server>\S+))?\s+(?P<action>/me\s)?(?P<notice>/notice\s)?(?P<phrase>.*)$") --- 42,46 ---- hooks.register("Message", self.message) ! # [don[']t|do not] repeat [each <n> seconds] (to|at|on) [channel|user] <target> [[on|at] server <server>] [/me|/notice] ... self.re1 = re.compile(r"(?:(?P<dont>don'?t|do\s+not)\s+)?repeat(?:\s+each\s+(?P<interval>[0-9]+)\s*(?P<intervalunit>se?c?o?n?d?s?|mi?n?u?t?e?s?|ho?u?r?s?))?(?:\s+(?:to|at|on)(?:\s+(?:channel|user))?\s+(?P<target>\S+))?(?:\s+(?:on|at)?\s+server\s+(?P<server>\S+))?\s+(?P<action>/me\s)?(?P<notice>/notice\s)?(?P<phrase>.*)$") Index: social.py =================================================================== RCS file: /cvsroot/pybot/pybot/pybot/modules/social.py,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** social.py 17 Jun 2002 20:33:41 -0000 1.5 --- social.py 9 May 2003 21:32:06 -0000 1.6 *************** *** 27,55 **** hooks.register("UnhandledMessage", self.unhandled_message) ! # Match '(hi|hello) [there|everybody|all|guys|folks|pybot] [!|.]' self.re1 = re.compile(r'(?:hi|hello)(?:\s+(?:there|everybody|all|guys|folks|(?P<nick>\w+)))?\s*[!.]*$', re.I) ! # Match 'pybot!' self.re2 = re.compile(r'(?P<nick>\w+)\s*!+$', re.I) ! # Match '[thank[']s|thank you|thx|tnk[']s] [!|.]' self.re3 = re.compile(r'(?:thank|thx|tnk)(?:\'?s|\s+you)(?:\s+(?P<nick>\w+))?\s*[!.]*', re.I) ! # Match 'are you ok?|how are you [doing]?' self.re4 = re.compile(r'(?:are\s+you\s+ok|how\s+are\s+you(?:\s+doing)?)\s*[!?]*$', re.I) ! # Match 'pybot?' self.re5 = re.compile(r'!*\?[?!]*$', re.I) ! # Match 'never mind [!|.]' self.re6 = re.compile(r'never\s+mind\s*[!.]*$', re.I) ! # Match '[very|pretty] (nice|good|great) [.|!]' self.re7 = re.compile(r'(?:(?:very|pretty)\s+)?(?:nice|good|great)\s*[.!]*$', re.I) ! # Match ' (gay|stupid|fuck|idiot|imbecile|cretin) ' self.re8 = re.compile(r'.*(?:gay|stupid|fuck|idiot|imbecile|cretin)', re.I) ! # Match 'h[e|u|a]h' self.re9 = re.compile(r'h[eua]h', re.I) --- 27,55 ---- hooks.register("UnhandledMessage", self.unhandled_message) ! # (hi|hello) [there|everybody|all|guys|folks|pybot] [!|.] self.re1 = re.compile(r'(?:hi|hello)(?:\s+(?:there|everybody|all|guys|folks|(?P<nick>\w+)))?\s*[!.]*$', re.I) ! # pybot! self.re2 = re.compile(r'(?P<nick>\w+)\s*!+$', re.I) ! # [thank[']s|thank you|thx|tnk[']s] [!|.] self.re3 = re.compile(r'(?:thank|thx|tnk)(?:\'?s|\s+you)(?:\s+(?P<nick>\w+))?\s*[!.]*', re.I) ! # are you ok?|how are you [doing]? self.re4 = re.compile(r'(?:are\s+you\s+ok|how\s+are\s+you(?:\s+doing)?)\s*[!?]*$', re.I) ! # pybot? self.re5 = re.compile(r'!*\?[?!]*$', re.I) ! # never mind [!|.] self.re6 = re.compile(r'never\s+mind\s*[!.]*$', re.I) ! # [very|pretty] (nice|good|great) [.|!] self.re7 = re.compile(r'(?:(?:very|pretty)\s+)?(?:nice|good|great)\s*[.!]*$', re.I) ! # (gay|stupid|fuck|idiot|imbecile|cretin) self.re8 = re.compile(r'.*(?:gay|stupid|fuck|idiot|imbecile|cretin)', re.I) ! # h[e|u|a]h self.re9 = re.compile(r'h[eua]h', re.I) Index: testadora.py =================================================================== RCS file: /cvsroot/pybot/pybot/pybot/modules/testadora.py,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** testadora.py 8 May 2003 16:43:29 -0000 1.1 --- testadora.py 9 May 2003 21:32:06 -0000 1.2 *************** *** 30,34 **** HELP_TESTADORA = [ ("""\ ! Use "help compile time" to get help on the available testadora commands.\ """,)] --- 30,35 ---- HELP_TESTADORA = [ ("""\ ! For now, only the "compile time" command is available. Use "help compile \ ! time" for more information on this command.\ """,)] *************** *** 46,50 **** # testadora ! mm.register_help(0, "testadora", HELP_TESTADORA) def unload(self): --- 47,51 ---- # testadora ! mm.register_help(0, "testadora", HELP_TESTADORA, "testadora") def unload(self): Index: uptime.py =================================================================== RCS file: /cvsroot/pybot/pybot/pybot/modules/uptime.py,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** uptime.py 4 Dec 2001 00:57:38 -0000 1.3 --- uptime.py 9 May 2003 21:32:06 -0000 1.4 *************** *** 22,25 **** --- 22,30 ---- import re + HELP = [ + ("""\ + The "uptime" command shows you for how much time I'm online.\ + """,)] + class Uptime: def __init__(self, bot): *************** *** 27,38 **** hooks.register("Message", self.message) ! # Match '[show|display] uptime [!|.|?]' self.re1 = re.compile(r"(?:(?:show|display)\s+)?uptime\s*[!.?]*$") ! # Match 'reset uptime [!|.]' self.re2 = re.compile(r"reset\s+uptime\s*[!.]*$") def unload(self): hooks.unregister("Message", self.message) def days_in_last_month(self, tuple): --- 32,47 ---- hooks.register("Message", self.message) ! # [show|display] uptime [!|.|?] self.re1 = re.compile(r"(?:(?:show|display)\s+)?uptime\s*[!.?]*$") ! # reset uptime [!|.] self.re2 = re.compile(r"reset\s+uptime\s*[!.]*$") + + # uptime + mm.register_help(0, "uptime", HELP, "uptime") def unload(self): hooks.unregister("Message", self.message) + mm.unregister_help(0, HELP) def days_in_last_month(self, tuple): Index: userdata.py =================================================================== RCS file: /cvsroot/pybot/pybot/pybot/modules/userdata.py,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** userdata.py 9 May 2003 15:27:44 -0000 1.3 --- userdata.py 9 May 2003 21:32:06 -0000 1.4 *************** *** 91,98 **** # [un]register|identify ! mm.register_help(0, "(?:un)?register|ident(?:ify)?", HELP_REGISTER) # set|unset|add|remove ! mm.register_help(0, "set|unset|add|remove", HELP_SET) def unload(self): --- 91,99 ---- # [un]register|identify ! mm.register_help(0, "(?:un)?register|ident(?:ify)?", HELP_REGISTER, ! "register") # set|unset|add|remove ! mm.register_help(0, "set|unset|add|remove", HELP_SET, ["set","unset"]) def unload(self): Index: xmlrpc.py =================================================================== RCS file: /cvsroot/pybot/pybot/pybot/modules/xmlrpc.py,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** xmlrpc.py 5 May 2003 20:47:24 -0000 1.1 --- xmlrpc.py 9 May 2003 21:32:06 -0000 1.2 *************** *** 92,96 **** # xmlrpc ! mm.register_help(0, "xmlrpc", HELP) def unload(self): --- 92,96 ---- # xmlrpc ! mm.register_help(0, "xmlrpc", HELP, "xmlrpc") def unload(self): |