]> jfr.im git - erebus.git/blobdiff - modules/help.py
help - dont allow args to SHOWCOMMANDS
[erebus.git] / modules / help.py
index 69bcf942e41a2d047c0ced7ac41fbcc144fecdc1..252353656713c8268d7c64788c26dc8c2602dfbc 100644 (file)
@@ -19,11 +19,12 @@ def modstart(parent, *args, **kwargs):
        if parent.cfg.getboolean('erebus', 'nofakelag'):
                lib.hook('help', needchan=False)(lib.help('[@<module>|<command>]', 'lists commands or describes a command', 'with @<module>, lists all commands in <module>')(help_nolag))
        else:
-               lib.hook('help', needchan=False)(lib.help("<command>", "describes a command")(help))
+               lib.hook('help', needchan=False)(lib.help("<command>", "describes a command", "see also: showcommands")(help))
        return lib.modstart(parent, *args, **kwargs)
 modstop = lib.modstop
 
 # module code
+import functools
 import os.path
 helps = {}
 cmds  = {}
@@ -63,6 +64,7 @@ def dereghelp(func, *args, **kwargs):
                del cmds[c]
        del helps[func]
 
+@functools.total_ordering
 class HelpLine(object):
        def __init__(self, cmd, syntax, shorthelp, admin, glevel, module, clevel):
                self.cmd = cmd
@@ -73,6 +75,15 @@ class HelpLine(object):
                self.module = module
                self.clevel = clevel
 
+       def __lt__(self, other):
+               if self.glevel == other.glevel:
+                       return self.cmd < other.cmd
+               else:
+                       return self.glevel < other.glevel
+
+       def __eq__(self, other):
+               return self.glevel == other.glevel and self.cmd == other.cmd
+
        def __cmp__(self, other):
                if self.glevel == other.glevel:
                        return cmp(self.cmd, other.cmd)
@@ -145,10 +156,14 @@ def genhelp(bot, user, chan, realtarget, *args):
                return
        bot.msg(user, "Help written.")
 
+# This is hooked in modstart
 #@lib.hook(needchan=False)
 #@lib.help("<command>", "describes a command")
-@lib.argsGE(1)
 def help(bot, user, chan, realtarget, *args):
+       if len(args) == 0:
+               bot.msg(user, "Usage: %sHELP <command>" % bot.parent.trigger)
+               return showcommands(bot, user, chan, realtarget, *args)
+
        cmd = str(' '.join(args)).lower()
        if cmd in cmds and user.glevel >= cmds[cmd].reqglevel:
                func = cmds[cmd]
@@ -162,32 +177,30 @@ def help(bot, user, chan, realtarget, *args):
 
 @lib.hook(needchan=False)
 @lib.help(None, "provides command list")
+@lib.argsEQ(0)
 def showcommands(bot, user, chan, realtarget, *args):
+       if bot.parent.cfg.getboolean('erebus', 'nofakelag'):
+               return help_nolag(bot, user, chan, realtarget, *args)
        if bot.parent.cfg.getboolean('help', 'autogen'):
                try:
-                       _genhelp(bot, user, chan, realtarget, *args)
+                       _genhelp(bot, user, chan, realtarget)
                except: pass
 
        url = bot.parent.cfg.get('help', 'url', default=None)
-       if url is None:
-               try:
-                       import urllib2
-                       myip = urllib2.urlopen("https://api.ipify.org").read()
-                       url = "http://%s/help/%%d.txt (maybe)" % (myip)
-               except: url = None
        if url is not None:
                url = url % (user.glevel)
-               bot.msg(user, "Help is at: %s" % (url))
+               bot.msg(user, "Command list is at: %s" % (url))
        else:
-               bot.msg(user, "I don't know where help is. Sorry. Contact my owner.")
+               bot.msg(user, "I don't know where help is. Sorry. Contact my owner and tell him to set in the config file [help] url = .")
 
+# This is hooked in modstart
 #@lib.hook(needchan=False)
 #@lib.help('[@<module>|<command>]', 'lists commands or describes a command', 'with @<module>, lists all commands in <module>')
 def help_nolag(bot, user, chan, realtarget, *args):
        if len(args) == 0: # list commands
                lines = []
                for func in helps.values():
-                       lines += _mkhelp(user, func)
+                       lines += _mkhelp(user.glevel, func)
                for line in sorted(lines):
                        bot.slowmsg(user, str(line))
                bot.slowmsg(user, "End of command listing.")
@@ -196,7 +209,7 @@ def help_nolag(bot, user, chan, realtarget, *args):
                mod = args[0][1:].lower()
                for func in helps.values():
                        if func.module == mod:
-                               lines += _mkhelp(user, func)
+                               lines += _mkhelp(user.glevel, func)
                for line in sorted(lines):
                        bot.slowmsg(user, str(line))
                bot.slowmsg(user, "End of command listing.")