]> jfr.im git - erebus.git/blobdiff - modules/trivia.py
module cleanup
[erebus.git] / modules / trivia.py
index dfa0b7dc5d93566e49c2ccd713839e2eaf365665..63143f4dc81b3155767648105d22c871b4e09dc3 100644 (file)
@@ -6,7 +6,7 @@
 modinfo = {
        'author': 'Erebus Team',
        'license': 'public domain',
-       'compatible': [1,2],
+       'compatible': [2],
        'depends': ['userinfo'],
        'softdeps': ['help'],
 }
@@ -99,8 +99,8 @@ class TriviaState(object):
                else:
                        self.pointvote = None
 
-       def __del__(self):
-               self.closeshop()
+#      def __del__(self):
+#              self.closeshop()
        def closeshop(self):
                try:
                        self.steptimer.cancel()
@@ -110,14 +110,6 @@ class TriviaState(object):
                        self.nextquestiontimer.cancel()
                        self.nextquestiontimer = None
                except: pass
-#TODO remove if the replacement works
-#              if threading is not None and threading._Timer is not None:
-#                      if isinstance(self.steptimer, threading._Timer):
-#                              self.steptimer.cancel()
-#                      if isinstance(self.nextquestiontimer, threading._Timer):
-#                              self.nextquestiontimer.cancel()
-#                              self.nextquestiontimer = None
-#              self.savedb()
 
        def savedb(self): #returns whether or not it was able to save
                if json is not None and json.dump is not None:
@@ -138,7 +130,7 @@ class TriviaState(object):
                                                os.unlink(tmpfn)
                                        except OSError: # temp file is already gone
                                                pass
-                                       raise #TODO: we may be better off just swallowing exceptions?
+                                       raise # we may be better off just swallowing exceptions?
                return False
 
        def getchan(self):
@@ -269,9 +261,9 @@ class TriviaState(object):
                        if 'topicformat' in self.db and self.db['topicformat'] is not None:
                                self.getbot().conn.send("TOPIC %s" % (self.db['chan']))
 
-               if isinstance(self.steptimer, threading._Timer):
+               if isinstance(self.steptimer, MyTimer):
                        self.steptimer.cancel()
-               if isinstance(self.nextquestiontimer, threading._Timer):
+               if isinstance(self.nextquestiontimer, MyTimer):
                        self.nextquestiontimer.cancel()
                        self.nextquestiontimer = None
 
@@ -302,7 +294,7 @@ class TriviaState(object):
                        nextqid = random.randrange(0, len(self.questions))
                        nextq = self.questions[nextqid]
 
-               if nextq[0][0] == "!":
+               if nextq[0].startswith("!"):
                        nextqid = None
                        nextq = specialQuestion(nextq)
 
@@ -419,10 +411,10 @@ def trivia_checkanswer(bot, user, chan, *args):
                        bot.msg(chan, "\00312%s\003 got an extra point for getting it before the hints! New score: %d." % (user, state.addpoint(user)))
                state.nextquestion()
 
-@lib.hook(glevel=1, needchan=False)
+@lib.hook(glevel=1, needchan=False, wantchan=True)
 @lib.help(None, "saves the trivia database")
 def save(bot, user, chan, realtarget, *args):
-       if chan is not None and realtarget == chan.name: replyto = chan
+       if chan is not None: replyto = chan
        else: replyto = user
 
        if state.savedb():
@@ -430,10 +422,10 @@ def save(bot, user, chan, realtarget, *args):
        else:
                bot.msg(replyto, "Save failed!")
 
-@lib.hook(needchan=False)
+@lib.hook(needchan=False, wantchan=True)
 @lib.help("[<user>]", "shows how many points you or someone has")
 def points(bot, user, chan, realtarget, *args):
-       if chan is not None and realtarget == chan.name: replyto = chan
+       if chan is not Noneeplyto = chan
        else: replyto = user
 
        if len(args) != 0: who = args[0]
@@ -488,10 +480,10 @@ def setnext(bot, user, chan, realtarget, *args):
 def skip(bot, user, chan, realtarget, *args):
        state.nextquestion(qskipped=True, skipwait=True)
 
-@lib.hook(needchan=False)
+@lib.hook(needchan=False, wantchan=True)
 @lib.help(None, "starts the trivia game")
 def start(bot, user, chan, realtarget, *args):
-       if chan is not None and realtarget == chan.name: replyto = chan
+       if chan is not None: replyto = chan
        else: replyto = user
 
        if chan is not None and chan.name != state.db['chan']:
@@ -576,10 +568,10 @@ def delbadq(bot, user, chan, realtarget, *args):
        except:
                bot.msg(user, "Failed!")
 
-@lib.hook(needchan=False)
+@lib.hook(needchan=False, wantchan=True)
 @lib.help("[<user>]", "shows you or someone else's rank")
 def rank(bot, user, chan, realtarget, *args):
-       if chan is not None and realtarget == chan.name: replyto = chan
+       if chan is not None: replyto = chan
        else: replyto = user
 
        if len(args) != 0: who = args[0]
@@ -666,7 +658,7 @@ def questionpause(bot, user, chan, realtarget, *args):
 @lib.help("<full question>", "finds a qid given a complete question")
 def findq(bot, user, chan, realtarget, *args):
        args = list(args)
-       if args[0][0] == "@":
+       if args[0].startswith("@"):
                cat = args.pop(0)[1:].lower()
                questions = state.db['questions'][cat]
        else:
@@ -689,7 +681,7 @@ def findq(bot, user, chan, realtarget, *args):
 @lib.help("[@<category>] <regex>", "finds a qid given a regex or partial question")
 def findqre(bot, user, chan, realtarget, *args):
        args = list(args)
-       if args[0][0] == "@":
+       if args[0].startswith("@"):
                cat = args.pop(0)[1:].lower()
                questions = state.db['questions'][cat]
        else:
@@ -714,7 +706,7 @@ def findqre(bot, user, chan, realtarget, *args):
 @lib.help("[@<category>] <qid>", "displays the q*a for a qid", "category defaults to current")
 def showq(bot, user, chan, realtarget, *args):
        args = list(args)
-       if args[0][0] == "@":
+       if args[0].startswith("@"):
                cat = args.pop(0)[1:].lower()
                questions = state.db['questions'][cat]
        else:
@@ -736,7 +728,7 @@ def showq(bot, user, chan, realtarget, *args):
 @lib.help("[@<category>] <qid>", "removes a question from the database")
 def delq(bot, user, chan, realtarget, *args):
        args = list(args)
-       if args[0][0] == "@":
+       if args[0].startswith("@"):
                cat = args.pop(0)[1:].lower()
                questions = state.db['questions'][cat]
        else:
@@ -753,7 +745,7 @@ def delq(bot, user, chan, realtarget, *args):
 @lib.help("[@<category>] <q>*<a>", "adds a question")
 def addq(bot, user, chan, realtarget, *args):
        args = list(args)
-       if args[0][0] == "@":
+       if args[0].startswith("@"):
                cat = args.pop(0)[1:].lower()
                questions = state.db['questions'][cat]
        else:
@@ -769,6 +761,11 @@ def addq(bot, user, chan, realtarget, *args):
        questions.append([question, answer])
        bot.msg(user, "Done. Question is #%s" % (len(questions)-1))
 
+@lib.hook(needchan=False)
+@lib.help(None, "show current category")
+def showcat(bot, user, chan, realtarget, *args):
+       bot.msg(user, "Current category: %s" % (state.db['category']))
+
 @lib.hook(glevel=1, needchan=False)
 @lib.help("<category>", "change category")
 def setcat(bot, user, chan, realtarget, *args):
@@ -781,9 +778,9 @@ def setcat(bot, user, chan, realtarget, *args):
                bot.msg(user, "That category doesn't exist.")
 
 @lib.hook(needchan=False)
-@lib.help(None, "list categories")
+@lib.help(None, "list categories", "the current category will be marked with a *")
 def listcats(bot, user, chan, realtarget, *args):
-       cats = ["%s (%d)" % (c, len(state.db['questions'][c])) for c in state.db['questions'].keys()]
+       cats = ["%s%s (%d)" % ("*" if c == state.db['category'] else "", c, len(state.db['questions'][c])) for c in state.db['questions'].keys()]
        bot.msg(user, "Categories: %s" % (', '.join(cats)))
 
 @lib.hook(glevel=lib.STAFF, needchan=False)
@@ -873,6 +870,7 @@ def num_TOPIC(bot, textline):
                'lastwinner': state.db['lastwinner'],
                'lastwon': time.strftime("%b %d", time.gmtime(state.db['lastwon'])),
                'target': state.db['target'],
+               'category': state.db['category'],
        }
        if gottopic != formatted:
                state.getbot().conn.send("TOPIC %s :%s" % (state.db['chan'], formatted))