]> jfr.im git - erebus.git/commitdiff
help - write help to a file instead of messaging for command list
authorzonidjan <redacted>
Sun, 3 Sep 2017 02:22:27 +0000 (21:22 -0500)
committerzonidjan <redacted>
Sun, 3 Sep 2017 02:22:27 +0000 (21:22 -0500)
modules/help.py

index 0010470b39549d5ef47b4a9d3d427ce7f7ce3809..cf36363fc4d6243b9fa92aefd08b02fa3b6439b9 100644 (file)
@@ -18,11 +18,11 @@ modstart = lib.modstart
 modstop = lib.modstop
 
 # module code
+import os.path
 helps = {}
 cmds  = {}
 
 # ! this is part of this module's API, called from modlib.help()
-# this function only handles the command name and aliases - the rest is passed directly to _reghelp()
 def reghelp(func, *args, **kwargs):
        syntax = None
        shorthelp = None
@@ -54,7 +54,7 @@ def reghelp(func, *args, **kwargs):
 
 def dereghelp(func, *args, **kwargs):
        for c in func.cmd:
-               del cmds[cmd]
+               del cmds[c]
        del helps[func]
 
 class HelpLine(object):
@@ -79,25 +79,99 @@ class HelpLine(object):
                else:
                        return "%-40s - %-50s" % (self.cmd+' '+self.syntax, self.shorthelp)
 
+def _mkhelp(level, func):
+       lines = []
+       if level >= func.reqglevel:
+               lines.append(HelpLine(func.cmd[0], func.syntax, func.shorthelp, (level > 0), func.reqglevel, func.module))
+               if len(func.cmd) > 1:
+                       for c in func.cmd[1:]:
+                               lines.append(HelpLine(c, "", "Alias of %s" % (func.cmd[0]), (level > 0), func.reqglevel, func.module))
+       return lines
+
+def _genhelp(bot, user, chan, realtarget, *args):
+       try:
+               filepath = bot.parent.cfg.get('help', 'path', default='./help/%d.txt')
+               for level in range(-1, 101):
+                       filename = filepath % (level)
+                       fo = open(filename, 'w')
+                       lines = []
+                       for func in helps.itervalues():
+                               lines += _mkhelp(level, func)
+                       for line in sorted(lines):
+                               fo.write(str(line)+"\n")
+       except Exception as e:
+               return e
+       return True
+
+@lib.hook(glevel=1, needchan=False)
+@lib.help(None, "generates help file", "default path: ./help/<level>.txt", "config as: [help]", "path = ./help/%d.txt")
+#TODO: use args... "[@<module>] [#<level>] [<file>]"
+def genhelp(bot, user, chan, realtarget, *args):
+       ret = _genhelp(bot, user, chan, realtarget, *args)
+       if not isinstance(ret, BaseException):
+               bot.msg(user, "Help written.")
+       else:
+               bot.msg(user, "Failed writing help. %s" % (ret))
+
 @lib.hook(needchan=False)
-@lib.help('[<command>]', 'lists commands or describes a command')
+@lib.help("<command>", "describes a command")
+@lib.argsGE(1)
+def help(bot, user, chan, realtarget, *args):
+       cmd = str(' '.join(args)).lower()
+       if cmd in cmds and user.glevel >= cmds[cmd].reqglevel:
+               func = cmds[cmd]
+               bot.slowmsg(user, str(HelpLine(func.cmd[0], func.syntax, func.shorthelp, (user.glevel > 0), func.reqglevel, func.module)))
+               for line in func.longhelps:
+                       bot.slowmsg(user, "  %s" % (line))
+               bot.slowmsg(user, "End of help for %s." % (func.cmd[0]))
+               if len(func.cmd) > 1:
+                       bot.slowmsg(user, "  Aliases: %s" % (' '.join(func.cmd[1:])))
+       else:
+               bot.slowmsg(user, "No help found for %s" % (cmd))
+
+@lib.hook(needchan=False)
+@lib.help(None, "provides command list")
+def showcommands(bot, user, chan, realtarget, *args):
+       if bool(int(bot.parent.cfg.get('help', 'autogen', default=0))):
+               _genhelp(bot, user, chan, realtarget, *args)
+       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))
+       else:
+               bot.msg(user, "I don't know where help is. Sorry. Contact my owner.")
+
+"""#DISABLED
+@lib.hook(needchan=False)
+@lib.help('[@<module>|<command>]', 'lists commands or describes a command', 'with @<module>, lists all commands in <module>')
 def help(bot, user, chan, realtarget, *args):
        if len(args) == 0: # list commands
                lines = []
                for func in helps.itervalues():
-                       if user.glevel >= func.reqglevel:
-                               lines.append(HelpLine(func.cmd[0], func.syntax, func.shorthelp, (user.glevel > 0), func.reqglevel, func.__module__))
-                               if len(func.cmd) > 1:
-                                       for c in func.cmd[1:]:
-                                               lines.append(HelpLine(c, "", "Alias of %s" % (func.cmd[0]), (user.glevel > 0), func.reqglevel, func.__module__))
+                       lines += _mkhelp(user, func)
+               for line in sorted(lines):
+                       bot.slowmsg(user, str(line))
+               bot.slowmsg(user, "End of command listing.")
+       elif args[0][0] == "@":
+               lines = []
+               mod = args[0][1:].lower()
+               for func in helps.itervalues():
+                       if func.module == mod:
+                               lines += _mkhelp(user, func)
                for line in sorted(lines):
                        bot.slowmsg(user, str(line))
                bot.slowmsg(user, "End of command listing.")
        else: # help for a specific command/topic
-               cmd = str(' '.join(args))
+               cmd = str(' '.join(args)).lower()
                if cmd in cmds and user.glevel >= cmds[cmd].reqglevel:
                        func = cmds[cmd]
-                       bot.slowmsg(user, str(HelpLine(func.cmd[0], func.syntax, func.shorthelp, (user.glevel > 0), func.reqglevel, func.__module__)))
+                       bot.slowmsg(user, str(HelpLine(func.cmd[0], func.syntax, func.shorthelp, (user.glevel > 0), func.reqglevel, func.module)))
                        for line in func.longhelps:
                                bot.slowmsg(user, "  %s" % (line))
                        bot.slowmsg(user, "End of help for %s." % (func.cmd[0]))
@@ -106,3 +180,5 @@ def help(bot, user, chan, realtarget, *args):
                                bot.slowmsg(user, "  Aliases: %s" % (' '.join(func.cmd[1:])))
                else:
                        bot.slowmsg(user, "No help found for %s" % (cmd))
+"""
+pass