+@lib.hook(needchan=False)
+@lib.help("<option>", "votes for a trarget score for next round")
+def vote(bot, user, chan, realtarget, *args):
+ if state.pointvote is not None:
+ if int(args[0]) in state.voteamounts:
+ state.voteamounts[int(args[0])] += 1
+ bot.msg(user, "Your vote has been recorded.")
+ else:
+ bot.msg(user, "Sorry - that's not an option!")
+ else:
+ bot.msg(user, "There's no vote in progress.")
+
+@lib.hook(glevel=lib.ADMIN, needchan=False)
+@lib.help("<number>", "sets the max missed question before game stops")
+def maxmissed(bot, user, chan, realtarget, *args):
+ try:
+ state.db['maxmissedquestions'] = int(args[0])
+ bot.msg(state.db['chan'], "Max missed questions before round ends has been changed to %s." % (state.db['maxmissedquestions']))
+ except:
+ bot.msg(user, "Failed to set maxmissed.")
+
+@lib.hook(glevel=lib.ADMIN, needchan=False)
+@lib.help("<seconds>", "sets the time between hints")
+def hinttimer(bot, user, chan, realtarget, *args):
+ try:
+ state.db['hinttimer'] = float(args[0])
+ bot.msg(state.db['chan'], "Time between hints has been changed to %s." % (state.db['hinttimer']))
+ except:
+ bot.msg(user, "Failed to set hint timer.")
+
+@lib.hook(glevel=lib.ADMIN, needchan=False)
+@lib.help("<number>", "sets the number of hints given")
+def hintnum(bot, user, chan, realtarget, *args):
+ try:
+ state.db['hintnum'] = int(args[0])
+ bot.msg(state.db['chan'], "Max number of hints has been changed to %s." % (state.db['hintnum']))
+ except:
+ bot.msg(user, "Failed to set hintnum.")
+
+@lib.hook(glevel=lib.ADMIN, needchan=False)
+@lib.help("<seconds>", "sets the pause between questions")
+def questionpause(bot, user, chan, realtarget, *args):
+ try:
+ state.db['questionpause'] = float(args[0])
+ bot.msg(state.db['chan'], "Pause between questions has been changed to %s." % (state.db['questionpause']))
+ except:
+ bot.msg(user, "Failed to set questionpause.")
+
+@lib.hook(glevel=1, needchan=False)
+@lib.help("<full question>", "finds a qid given a complete question")
+def findq(bot, user, chan, realtarget, *args):
+ if len(args) == 0:
+ bot.msg(user, "You need to specify the question.")
+ return
+
+ searchkey = ' '.join(args).lower()
+ matches = [str(i) for i in range(len(state.db['questions'])) if state.db['questions'][i][0].lower() == searchkey]
+ if len(matches) > 1:
+ bot.msg(user, "Multiple matches: %s" % (', '.join(matches)))
+ elif len(matches) == 1:
+ bot.msg(user, "One match: %s" % (matches[0]))
+ else:
+ bot.msg(user, "No match.")
+
+@lib.hook(glevel=1, needchan=False)
+@lib.help("<regex>", "finds a qid given a regex or partial question")
+def findqre(bot, user, chan, realtarget, *args):
+ if len(args) == 0:
+ bot.msg(user, "You need to specify a search string.")
+ return
+
+ searcher = re.compile(' '.join(args), re.IGNORECASE)
+ matches = [str(i) for i in range(len(state.db['questions'])) if searcher.search(state.db['questions'][i][0]) is not None]
+ if len(matches) > 25:
+ bot.msg(user, "Too many matches! (>25)")
+ elif len(matches) > 1:
+ bot.msg(user, "Multiple matches: %s" % (', '.join(matches)))
+ elif len(matches) == 1:
+ bot.msg(user, "One match: %s" % (matches[0]))
+ else:
+ bot.msg(user, "No match.")
+
+@lib.hook(glevel=lib.STAFF, needchan=False)
+@lib.help("<qid>", "displays the q*a for a qid")
+def showq(bot, user, chan, realtarget, *args):
+ try:
+ qid = int(args[0])
+ except:
+ bot.msg(user, "Specify a numeric question ID.")
+ return
+ try:
+ q = state.db['questions'][qid]
+ except:
+ bot.msg(user, "ID not valid.")
+ return
+ bot.msg(user, "%s: %s*%s" % (qid, q[0], q[1]))
+
+@lib.hook(('delq', 'deleteq'), glevel=lib.STAFF, needchan=False)
+@lib.help("<qid>", "removes a question from the database")
+def delq(bot, user, chan, realtarget, *args):
+ try:
+ backup = state.db['questions'][int(args[0])]
+ del state.db['questions'][int(args[0])]
+ bot.msg(user, "Deleted %s*%s" % (backup[0], backup[1]))
+ except:
+ bot.msg(user, "Couldn't delete that question. %r" % (e))