X-Git-Url: https://jfr.im/git/erebus.git/blobdiff_plain/a62d0d18bbb5926d22df18db5eba53eb21a10817..f5aec86546a7762dd0202f3983de22fe1c3814e9:/modules/trivia.py diff --git a/modules/trivia.py b/modules/trivia.py index cb4b407..63143f4 100644 --- a/modules/trivia.py +++ b/modules/trivia.py @@ -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("[]", "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 None: eplyto = 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("[]", "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("", "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("[@] ", "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("[@] ", "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("[@] ", "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("[@] *", "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("", "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) @@ -858,8 +855,8 @@ def num_TOPIC(bot, textline): "%s (%s)" % (person(x), pts(x)) for x in range(3) if x < len(state.db['ranks']) ]), - 'top3c': ' '.join([ - "%s (%s, %s)" % (person(x), pts(x), country(x)) + 'top3c': ', '.join([ + "%s (%s) %s" % (person(x), country(x), pts(x)) for x in range(3) if x < len(state.db['ranks']) ]), 'top10': ' '.join([ @@ -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)) @@ -890,6 +888,7 @@ def specialQuestion(oldq): randnum2 = random.randrange(0, 11) newq[0] = "What is %d + %d?" % (randnum1, randnum2) newq[1] = spellout(randnum1+randnum2) + else: pass #default to not modifying return newq def spellout(num):