X-Git-Url: https://plomlompom.com/repos/?p=plomlombot-irc.git;a=blobdiff_plain;f=plomlombot.py;h=c32b6dd3c0c42b79f86bb00c96d6f8b7d9017fd2;hp=0f738f0003e5c8dca674e97b2df0bde7c9b9c460;hb=7bbd08d498b289f2f3cad8b85c8582aa6ceffc04;hpb=057a62fe23a19af870b72684e50755c4e93821fc diff --git a/plomlombot.py b/plomlombot.py index 0f738f0..c32b6dd 100755 --- a/plomlombot.py +++ b/plomlombot.py @@ -11,6 +11,7 @@ import bs4 import random import hashlib import os +import plomsearch # Defaults, may be overwritten by command line arguments. SERVER = "irc.freenode.net" @@ -110,18 +111,19 @@ def lineparser_loop(io, nickname): def url_check(msg): - def handle_url(url): + def handle_url(url, show_url=False): def mobile_twitter_hack(url): re1 = 'https?://(mobile.twitter.com/)[^/]+(/status/)' - re2 = 'https?://mobile.twitter.com/([^/]+)/status/([^\?]+)' + re2 = 'https?://mobile.twitter.com/([^/]+)/status/' \ + + '([^\?/]+)' m = re.search(re1, url) if m and m.group(1) == 'mobile.twitter.com/' \ and m.group(2) == '/status/': m = re.search(re2, url) url = 'https://twitter.com/' + m.group(1) + '/status/' \ + m.group(2) - handle_url(url) + handle_url(url, True) return True try: @@ -136,7 +138,10 @@ def lineparser_loop(io, nickname): return title = bs4.BeautifulSoup(r.text).title if title: - notice("PAGE TITLE: " + title.string.strip()) + prefix = "PAGE TITLE: " + if show_url: + prefix = "PAGE TITLE FOR <" + url + ">: " + notice(prefix + title.string.strip()) else: notice("PAGE HAS NO TITLE TAG") @@ -163,9 +168,16 @@ def lineparser_loop(io, nickname): quotesfile.close() notice("ADDED QUOTE #" + str(len(lines) - 1)) elif tokens[0] == "quote": - if len(tokens) > 2 or \ + if (len(tokens) > 2 and tokens[1] != "search") or \ + (len(tokens) < 3 and tokens[1] == "search") or \ (len(tokens) == 2 and not tokens[1].isdigit()): - notice("SYNTAX: !quote [int]") + notice("SYNTAX: !quote [int] OR !quote search 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')") return if not os.access(quotesfile_name, os.F_OK): notice("NO QUOTES AVAILABLE") @@ -180,6 +192,20 @@ def lineparser_loop(io, nickname): notice("THERE'S NO QUOTE OF THAT INDEX") return i = i - 1 + elif len(tokens) > 2: + query = str.join(" ", tokens[2:]) + try: + results = plomsearch.search(query, lines) + except plomsearch.LogicParserError as err: + notice("FAILED QUERY PARSING: " + str(err)) + return + if len(results) == 0: + notice("NO QUOTES MATCHING QUERY") + else: + for result in results: + notice("QUOTE #" + str(result[0] + 1) + " : " + + result[1]) + return else: i = random.randrange(len(lines)) notice("QUOTE #" + str(i + 1) + ": " + lines[i])