home · contact · privacy
Fix syntax error.
[plomlombot-irc.git] / plomlombot.py
index 9bf6ce0ee0319ead6b96d68ffb4b49527e833620..7f3d4e5d2984bf89054be0f47c4787777a07e94f 100755 (executable)
@@ -198,23 +198,29 @@ def handle_command(command, argument, notice, target, session):
     def quote():
 
         def help():
-            notice("syntax: !quote [int] OR !quote search QUERY")
+            notice("syntax: !quote [int] OR !quote search QUERY "
+                   "OR !quote offset-search [int] QUERY")
             notice("QUERY may be a boolean grouping of quoted or unquoted " +
                    "search terms, examples:")
             notice("!quote search foo")
             notice("!quote search foo AND (bar OR NOT baz)")
             notice("!quote search \"foo\\\"bar\" AND ('NOT\"' AND \"'foo'\"" +
                    " OR 'bar\\'baz')")
+            notice("The offset-search int argument defines how many matches "
+                   "to skip (useful if results are above maximum number to "
+                   "display).")
 
         if "" == argument:
             tokens = []
         else:
             tokens = argument.split(" ")
-        if (len(tokens) > 1 and tokens[0] != "search") or \
-            (len(tokens) == 1 and
-                (tokens[0] == "search" or not tokens[0].isdigit())):
-            help()
-            return
+        if len(tokens) != 0:
+           if (len(tokens) == 1 and not tokens[0].isdigit()) or \
+               tokens[0] not in {"search", "offset-search"} or \
+               (tokens[0] == "offset-search" and
+                ((not len(tokens) > 2) or (not tokens[1].isdigit()))):
+                help()
+                return
         if not os.access(session.quotesfile, os.F_OK):
             notice("no quotes available")
             return
@@ -229,7 +235,12 @@ def handle_command(command, argument, notice, target, session):
                 return
             i = i - 1
         elif len(tokens) > 1:
-            query = str.join(" ", tokens[1:])
+            to_skip = 0
+            if tokens[0] == "search":
+                query = str.join(" ", tokens[1:])
+            elif tokens[0] == "offset-search":
+                to_skip = int(tokens[1])
+                query = str.join(" ", tokens[2:])
             try:
                 results = plomsearch.search(query, lines)
             except plomsearch.LogicParserError as err:
@@ -238,11 +249,16 @@ def handle_command(command, argument, notice, target, session):
             if len(results) == 0:
                 notice("no quotes matching query")
             else:
-                if len(results) > 3:
-                    notice("showing 3 of " + str(len(results)) + " quotes")
-                for result in results[:3]:
-                    notice("quote #" + str(result[0] + 1) + ": "
-                           + result[1][:-1])
+                if to_skip >= len(results):
+                    notice("skipped all quotes matching query")
+                else:
+                    notice("found %s matches, showing max. 3, skipping %s"
+                           % (len(results), to_skip))
+                for i in range(len(results)):
+                    if i >= to_skip and i < to_skip + 3:
+                        result = results[i]
+                        notice("quote #" + str(result[0] + 1) + ": "
+                               + result[1][:-1])
             return
         else:
             i = random.randrange(len(lines))
@@ -570,7 +586,7 @@ while True:
         hash_server = hashlib.md5(opts.server.encode("utf-8")).hexdigest()
         dbdir = opts.dbdir + "/" + hash_server
         session = Session(io, opts.username, opts.nickname, opts.CHANNEL,
-                          opts.twtfile, dbdir, opts.rmlogs, opts.markov_input)
+                          opts.twtfile, dbdir, opts.rmlogs, opts.markov_store)
         session.loop()
     except ExceptionForRestart:
         io.socket.close()