From 9505eae02ec38624c0e2a58247f59b65f87ddb3d Mon Sep 17 00:00:00 2001 From: "Sean B. Palmer" Date: Sat, 21 Jul 2012 13:04:31 +0100 Subject: Twitter module, gc augmentation, and various small fixes --- modules/admin.py | 4 ++-- modules/etymology.py | 8 ++++---- modules/search.py | 53 ++++++++++++++++++++++++++++++++++++++++++++-------- modules/seen.py | 25 ++++++++++++++----------- modules/translate.py | 5 ++++- modules/twitter.py | 4 +++- 6 files changed, 72 insertions(+), 27 deletions(-) diff --git a/modules/admin.py b/modules/admin.py index 249f117..b42822a 100755 --- a/modules/admin.py +++ b/modules/admin.py @@ -55,8 +55,8 @@ def me(phenny, input): if input.sender.startswith('#'): return if input.admin: msg = '\x01ACTION %s\x01' % input.group(3) - phenny.msg(input.group(2), msg) -me.rule = (['me'], r'(#?\S+) (.*)') + phenny.msg(input.group(2) or input.sender, msg) +me.rule = (['me'], r'(#?\S+) (.+)') me.priority = 'low' if __name__ == '__main__': diff --git a/modules/etymology.py b/modules/etymology.py index 37d1316..4caea12 100755 --- a/modules/etymology.py +++ b/modules/etymology.py @@ -70,10 +70,10 @@ def etymology(word): return None sentence = m.group(0) - try: - sentence = unicode(sentence, 'iso-8859-1') - sentence = sentence.encode('utf-8') - except: pass + # try: + # sentence = unicode(sentence, 'iso-8859-1') + # sentence = sentence.encode('utf-8') + # except: pass sentence = web.decode(sentence) maxlength = 275 diff --git a/modules/search.py b/modules/search.py index b884d1c..89e57b2 100755 --- a/modules/search.py +++ b/modules/search.py @@ -53,6 +53,9 @@ def formatnumber(n): parts.insert(i, ',') return ''.join(parts) +def old_gc(query): + return formatnumber(google_count(query)) + def g(phenny, input): """Queries Google for the specified input.""" query = input.group(2) @@ -71,7 +74,7 @@ g.commands = ['g'] g.priority = 'high' g.example = '.g swhack' -def gc(phenny, input): +def oldgc(phenny, input): """Returns the number of Google results for the specified input.""" query = input.group(2) if not query: @@ -79,9 +82,8 @@ def gc(phenny, input): query = query.encode('utf-8') num = formatnumber(google_count(query)) phenny.say(query + ': ' + num) -gc.commands = ['gc'] -gc.priority = 'high' -gc.example = '.gc extrapolate' +oldgc.commands = ['ogc', 'oldgc'] +oldgc.example = '.oldgc extrapolate' r_query = re.compile( r'\+?"[^"\\]*(?:\\.[^"\\]*)*"|\[[^]\\]*(?:\\.[^]\\]*)*\]|\S+' @@ -114,13 +116,12 @@ def bing_search(query, lang='en-GB'): query = web.urllib.quote(query) base = 'http://www.bing.com/search?mkt=%s&q=' % lang bytes = web.get(base + query) - m = r_bing.search(bytes) - if m: return m.group(1) + for result in r_bing.findall(bytes): + if "r.msn.com/" in result: continue + return result def bing(phenny, input): """Queries Bing for the specified input.""" - return phenny.reply("Sorry, .bing is disabled pending a QA review.") - query = input.group(2) if query.startswith(':'): lang, query = query.split(' ', 1) @@ -200,5 +201,41 @@ def suggest(phenny, input): else: phenny.reply('Sorry, no result.') suggest.commands = ['suggest'] +def new_gc(query): + uri = 'https://www.google.com/search?hl=en&q=' + uri = uri + web.urllib.quote(query).replace('+', '%2B') + if '"' in query: uri += '&tbs=li:1' + bytes = web.get(uri) + if "did not match any documents" in bytes: + return "0" + for result in re.compile(r'(?ims)([0-9,]+) results?').findall(bytes): + return result + return None + +def ngc(phenny, input): + if not input.group(2): + return phenny.reply("No query term.") + query = input.group(2).encode('utf-8') + result = new_gc(query) + if result: + phenny.say(query + ": " + result) + else: phenny.reply("Sorry, couldn't get a result.") + +ngc.commands = ['ngc'] +ngc.priority = 'high' +ngc.example = '.ngc extrapolate' + +def gc(phenny, input): + if not input.group(2): + return phenny.reply("No query term.") + query = input.group(2).encode('utf-8') + old = old_gc(query) or "?" + new = new_gc(query) or "?" + phenny.say(query + ": " + old + " / " + new) + +gc.commands = ['gc'] +gc.priority = 'high' +gc.example = '.gc extrapolate' + if __name__ == '__main__': print __doc__.strip() diff --git a/modules/seen.py b/modules/seen.py index 26dc05f..f04d9c9 100755 --- a/modules/seen.py +++ b/modules/seen.py @@ -10,21 +10,24 @@ http://inamidst.com/phenny/ import time from tools import deprecated -@deprecated -def f_seen(self, origin, match, args): +def seen(phenny, input): """.seen - Reports when was last seen.""" - if origin.sender == '#talis': return - nick = match.group(2).lower() - if not hasattr(self, 'seen'): - return self.msg(origin.sender, '?') - if self.seen.has_key(nick): - channel, t = self.seen[nick] + nick = input.group(2) + if not nick: + return phenny.reply("Need a nickname to search for...") + nick = nick.lower() + + if not hasattr(phenny, 'seen'): + return phenny.reply("?") + + if phenny.seen.has_key(nick): + channel, t = phenny.seen[nick] t = time.strftime('%Y-%m-%d %H:%M:%S UTC', time.gmtime(t)) msg = "I last saw %s at %s on %s" % (nick, t, channel) - self.msg(origin.sender, str(origin.nick) + ': ' + msg) - else: self.msg(origin.sender, "Sorry, I haven't seen %s around." % nick) -f_seen.rule = (['seen'], r'(\S+)') + phenny.reply(msg) + else: phenny.reply("Sorry, I haven't seen %s around." % nick) +seen.rule = (['seen'], r'(\S+)')' @deprecated def f_note(self, origin, match, args): diff --git a/modules/translate.py b/modules/translate.py index 94e5f64..927bcb9 100755 --- a/modules/translate.py +++ b/modules/translate.py @@ -75,7 +75,10 @@ tr.priority = 'low' def tr2(phenny, input): """Translates a phrase, with an optional language hint.""" - command = input.group(2).encode('utf-8') + command = input.group(2) + if not command: + return phenny.reply("Need something to translate!") + command = command.encode('utf-8') def langcode(p): return p.startswith(':') and (2 < len(p) < 10) and p[1:].isalpha() diff --git a/modules/twitter.py b/modules/twitter.py index 132d5cb..4e7c134 100755 --- a/modules/twitter.py +++ b/modules/twitter.py @@ -75,7 +75,9 @@ def twitter(phenny, input): elif r_username.match(arg): phenny.say(user_tweet(arg)) elif r_link.match(arg): - phenny.say(read_tweet(arg)) + username = arg.split('/')[3] + tweet = read_tweet(arg) + phenny.say(format(tweet, username)) else: phenny.reply("Give me a link, a username, or a tweet id") twitter.commands = ['tw', 'twitter'] -- cgit v1.2.3-1-g7c22