diff --git a/bot.py b/bot.py index c1f33b1..21b8529 100755 --- a/bot.py +++ b/bot.py @@ -55,6 +55,8 @@ class Phenny(irc.Bot): for filename in filenames: name = os.path.basename(filename)[:-3] if name in excluded_modules: continue + # if name in sys.modules: + # del sys.modules[name] try: module = imp.load_source(name, filename) except Exception, e: print >> sys.stderr, "Error loading %s: %s (in bot.py)" % (name, e) diff --git a/irc.py b/irc.py index f9e3703..b2611a9 100755 --- a/irc.py +++ b/irc.py @@ -42,6 +42,9 @@ class Bot(asynchat.async_chat): import threading self.sending = threading.RLock() + # def push(self, *args, **kargs): + # asynchat.async_chat.push(self, *args, **kargs) + def __write(self, args, text=None): # print '%r %r %r' % (self, args, text) try: @@ -151,7 +154,10 @@ class Bot(asynchat.async_chat): self.sending.release() return - self.__write(('PRIVMSG', recipient), text) + def safe(input): + input = input.replace('\n', '') + return input.replace('\r', '') + self.__write(('PRIVMSG', safe(recipient)), safe(text)) self.stack.append((time.time(), text)) self.stack = self.stack[-10:] diff --git a/modules/head.py b/modules/head.py index 2c9f9cc..db479a9 100755 --- a/modules/head.py +++ b/modules/head.py @@ -114,6 +114,17 @@ def gettitle(uri): uri = uri.replace('#!', '?_escaped_fragment_=') title = None + localhost = [ + 'http://localhost/', 'http://localhost:80/', + 'http://localhost:8080/', 'http://127.0.0.1/', + 'http://127.0.0.1:80/', 'http://127.0.0.1:8080/', + 'https://localhost/', 'https://localhost:80/', + 'https://localhost:8080/', 'https://127.0.0.1/', + 'https://127.0.0.1:80/', 'https://127.0.0.1:8080/', + ] + for s in localhost: + if uri.startswith(s): + return phenny.reply('Sorry, access forbidden.') try: redirects = 0 diff --git a/modules/oblique.py b/modules/oblique.py index 6d6156c..7bd6718 100755 --- a/modules/oblique.py +++ b/modules/oblique.py @@ -81,7 +81,7 @@ def o(phenny, input): return phenny.reply(msg) if not o.services.has_key(command): - return phenny.reply('Sorry, no such service. See %s' % o.serviceURI) + return phenny.reply('Service not found in %s' % o.serviceURI) if hasattr(phenny.config, 'external'): default = phenny.config.external.get('*') diff --git a/modules/reload.py b/modules/reload.py index 32e6796..dfd0e8e 100755 --- a/modules/reload.py +++ b/modules/reload.py @@ -19,6 +19,8 @@ def f_reload(phenny, input): return phenny.reply('What?') if (not name) or (name == '*'): + phenny.variables = None + phenny.commands = None phenny.setup() return phenny.reply('done') diff --git a/modules/search.py b/modules/search.py index c8f9a6a..bfc50bd 100755 --- a/modules/search.py +++ b/modules/search.py @@ -18,26 +18,26 @@ class Grab(web.urllib.URLopener): def http_error_default(self, url, fp, errcode, errmsg, headers): return web.urllib.addinfourl(fp, [headers, errcode], "http:" + url) -def search(query): +def google_ajax(query): """Search using AjaxSearch, and return its JSON.""" uri = 'http://ajax.googleapis.com/ajax/services/search/web' - args = '?v=1.0&safe=off&q=' + web.urllib.quote(query.encode('utf-8')) + args = '?v=1.0&safe=off&q=' + web.urllib.quote(query) handler = web.urllib._urlopener web.urllib._urlopener = Grab() bytes = web.get(uri + args) web.urllib._urlopener = handler return web.json(bytes) -def result(query): - results = search(query) +def google_search(query): + results = google_ajax(query) try: return results['responseData']['results'][0]['unescapedUrl'] except IndexError: return None except TypeError: print results return False -def count(query): - results = search(query) +def google_count(query): + results = google_ajax(query) if not results.has_key('responseData'): return '0' if not results['responseData'].has_key('cursor'): return '0' if not results['responseData']['cursor'].has_key('estimatedResultCount'): @@ -56,7 +56,8 @@ def g(phenny, input): query = input.group(2) if not query: return phenny.reply('.g what?') - uri = result(query) + query = query.encode('utf-8') + uri = google_search(query) if uri: phenny.reply(uri) if not hasattr(phenny.bot, 'last_seen_uri'): @@ -73,7 +74,8 @@ def gc(phenny, input): query = input.group(2) if not query: return phenny.reply('.gc what?') - num = formatnumber(count(query)) + query = query.encode('utf-8') + num = formatnumber(google_count(query)) phenny.say(query + ': ' + num) gc.commands = ['gc'] gc.priority = 'high' @@ -93,7 +95,8 @@ def gcs(phenny, input): results = [] for i, query in enumerate(queries): query = query.strip('[]') - n = int((formatnumber(count(query)) or '0').replace(',', '')) + query = query.encode('utf-8') + n = int((formatnumber(google_count(query)) or '0').replace(',', '')) results.append((n, query)) if i >= 2: __import__('time').sleep(0.25) if i >= 4: __import__('time').sleep(0.25) @@ -105,6 +108,13 @@ gcs.commands = ['gcs', 'comp'] r_bing = re.compile(r'