]> jfr.im git - erebus.git/commitdiff
trivia - update findq commands and add findqa
authorJohn Runyon <redacted>
Wed, 28 Jun 2023 01:24:17 +0000 (19:24 -0600)
committerJohn Runyon <redacted>
Wed, 28 Jun 2023 01:24:17 +0000 (19:24 -0600)
modules/trivia.py

index af0ff7fb1c4a8c571d4d045ca19fa7a4cd9edf1b..b716a597672834719e26051a0aa5a2473a6daa38 100644 (file)
@@ -729,7 +729,7 @@ def findq(bot, user, chan, realtarget, *args):
                questions = state.questions
 
        pattern = re.escape(' '.join(args))
-       bot.msg(user, _findq(questions, pattern))
+       return _findq(questions, pattern)
 
 @lib.hook(glevel=1, needchan=False)
 @lib.help("[@<category>] <regex>", "finds a question (qid) given a regex")
@@ -742,17 +742,31 @@ def findqre(bot, user, chan, realtarget, *args):
        else:
                questions = state.questions
        pattern = ' '.join(args)
-       bot.msg(user, _findq(questions, pattern))
+       return _findq(questions, pattern)
 
-def _findq(questions, pattern):
+@lib.hook(glevel=1, needchan=False)
+@lib.help("[@<category>] <phrase>", "finds a question (qid) given a (partial) question or answer")
+@lib.argsGE(1)
+def findqa(bot, user, chan, realtarget, *args):
+       args = list(args)
+       if args[0].startswith("@"):
+               cat = args.pop(0)[1:].lower()
+               questions = state.db['questions'][cat]
+       else:
+               questions = state.questions
+       pattern = ' '.join(args)
+       return _findq(questions, pattern, True)
+
+def _findq(questions, pattern, check_answers=False):
        searcher = re.compile(pattern, re.IGNORECASE)
-       matches = [str(i) for i in range(len(questions)) if searcher.search(questions[i][0]) is not None]
+       matches = [i for i in range(len(questions)) if searcher.search(questions[i][0]) is not None or (check_answers and searcher.search(questions[i][1]) is not None)]
        if len(matches) > 25:
                return "Too many matches! (>25)"
        elif len(matches) > 1:
-               return "Multiple matches: %s" % (', '.join(matches))
+               return "Multiple matches: %s" % (', '.join(str(x) for x in matches))
        elif len(matches) == 1:
-               return "One match: %s" % (matches[0])
+               i = matches[0]
+               return "One match: %s %s*%s" % (i, questions[i][0], questions[i][1])
        else:
                return "No match."