]> jfr.im git - erebus.git/blobdiff - modules/trivia.py
adjust logging
[erebus.git] / modules / trivia.py
index 18e2e6b7494ae26ac36f4cf8c0163e0e1144894d..0055c422a3855d42f52844988ad5dd7fa0fb0120 100644 (file)
@@ -100,20 +100,29 @@ class TriviaState(object):
        def __del__(self):
                self.closeshop()
        def closeshop(self):
-               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()
+               try:
+                       self.steptimer.cancel()
+                       self.steptimer = None
+               except: pass
+               try:
+                       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:
 #                      json.dump(self.db, open(self.questionfile, "w"))#, indent=4, separators=(',', ': '))
                        dbjson = json.dumps(self.db)
                        if len(dbjson) > 0:
-                               os.rename(self.questionfile, self.questionfile+".autobak")
+                               os.rename(self.questionfile, self.questionfile+".auto.bak")
                                tmpfn = os.tempnam('.', 'trivia')
                                try:
                                        f = open(tmpfn, "w")
@@ -122,7 +131,7 @@ class TriviaState(object):
                                        os.rename(tmpfn, self.questionfile)
                                        return True
                                except: #if something happens, restore the backup
-                                       os.rename(self.questionfile+".autobak", self.questionfile)
+                                       os.rename(self.questionfile+".auto.bak", self.questionfile)
                                        try:
                                                os.unlink(tmpfn)
                                        except OSError: # temp file is already gone
@@ -269,13 +278,13 @@ class TriviaState(object):
                self.revealpossibilities = None
                self.reveal = None
 
+               self.savedb()
+
                if self.missedquestions > self.db['maxmissedquestions']:
                        stop()
                        self.getbot().msg(self.getchan(), "%d questions unanswered! Stopping the game." % (self.missedquestions))
                        return
 
-               self.savedb()
-
                if skipwait:
                        self._nextquestion(iteration)
                else:
@@ -312,7 +321,10 @@ class TriviaState(object):
                qary = nextq[0].split(None)
                qtext += " "
                for qword in qary:
-                       qtext += "\00304,01"+qword+"\00301,01"+chr(random.randrange(0x61,0x7A)) #a-z
+                       spacer = random.choice(
+                               range(0x61,0x7A) + ([0x20]*4)
+                       )
+                       qtext += "\00304,01"+qword+"\00301,01"+chr(spacer) #a-z
                self.getbot().fastmsg(self.chan, qtext)
 
                self.curq = nextq
@@ -384,11 +396,11 @@ class TriviaState(object):
                if user in self.db['users']:
                        rank = self.db['users'][user]['rank']
                        if rank == 0:
-                               return "N/A"
+                               return ""
                        else:
-                               return self.db['users'][self.db['ranks'][rank-1]]['points']
+                               return "("+str(self.db['users'][self.db['ranks'][rank-1]]['points'])+")"
                else:
-                       return self.db['users'][self.db['ranks'][-1]]['points']
+                       return "("+str(self.db['users'][self.db['ranks'][-1]]['points'])+")"
 
 state = TriviaState()
 
@@ -398,9 +410,9 @@ def trivia_checkanswer(bot, user, chan, *args):
        if state.checkanswer(line):
                state.curq = None
                if state.hintanswer.lower() == line.lower():
-                       bot.fastmsg(chan, "\00312%s\003 has it! The answer was \00312%s\003. New score: %d. Rank: %d. Target: %s (%s)." % (user, line, state.addpoint(user), state.rank(user), state.targetuser(user), state.targetpoints(user)))
+                       bot.fastmsg(chan, "\00312%s\003 has it! The answer was \00312%s\003. New score: %d. Rank: %d. Target: %s %s" % (user, line, state.addpoint(user), state.rank(user), state.targetuser(user), state.targetpoints(user)))
                else:
-                       bot.fastmsg(chan, "\00312%s\003 has it! The answer was \00312%s\003 (hinted answer: %s). New score: %d. Rank: %d. Target: %s (%s)." % (user, line, state.hintanswer, state.addpoint(user), state.rank(user), state.targetuser(user), state.targetpoints(user)))
+                       bot.fastmsg(chan, "\00312%s\003 has it! The answer was \00312%s\003 (hinted answer: %s). New score: %d. Rank: %d. Target: %s%s" % (user, line, state.hintanswer, state.addpoint(user), state.rank(user), state.targetuser(user), state.targetpoints(user)))
                if state.hintsgiven == 0:
                        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()
@@ -571,7 +583,7 @@ def rank(bot, user, chan, realtarget, *args):
        if len(args) != 0: who = args[0]
        else: who = user
 
-       bot.msg(replyto, "%s is in %d place (%s points). Target is: %s (%s points)." % (who, state.rank(who), state.points(who), state.targetuser(who), state.targetpoints(who)))
+       bot.msg(replyto, "%s is in %d place (%s points). Target is: %s %s" % (who, state.rank(who), state.points(who), state.targetuser(who), state.targetpoints(who)))
 
 @lib.hook(needchan=False)
 @lib.help(None, "shows top10 list")