diff --git a/modules/calc.py b/modules/calc.py
index ea29b4c..128cc55 100644
--- a/modules/calc.py
+++ b/modules/calc.py
@@ -15,30 +15,31 @@ r_result = re.compile(r'(?i)(.*?)')
r_tag = re.compile(r'<\S+.*?>')
subs = [
- (' in ', ' -> '),
- (' over ', ' / '),
- ('£', 'GBP '),
- ('€', 'EUR '),
- ('\$', 'USD '),
- (r'\bKB\b', 'kilobytes'),
- (r'\bMB\b', 'megabytes'),
- (r'\bGB\b', 'kilobytes'),
- ('kbps', '(kilobits / second)'),
+ (' in ', ' -> '),
+ (' over ', ' / '),
+ ('£', 'GBP '),
+ ('€', 'EUR '),
+ ('\$', 'USD '),
+ (r'\bKB\b', 'kilobytes'),
+ (r'\bMB\b', 'megabytes'),
+ (r'\bGB\b', 'kilobytes'),
+ ('kbps', '(kilobits / second)'),
('mbps', '(megabits / second)')
]
-def c(phenny, input):
+
+def c(phenny, input):
"""Google calculator."""
if not input.group(2):
return phenny.reply("Nothing to calculate.")
q = input.group(2)
- q = q.replace('\xcf\x95', 'phi') # utf-8 U+03D5
- q = q.replace('\xcf\x80', 'pi') # utf-8 U+03C0
+ q = q.replace('\xcf\x95', 'phi') # utf-8 U+03D5
+ q = q.replace('\xcf\x80', 'pi') # utf-8 U+03C0
uri = 'http://www.google.com/ig/calculator?q='
bytes = web.get(uri + web.quote(q))
parts = bytes.split('",')
answer = [p for p in parts if p.startswith('rhs: "')][0][6:]
- if answer:
+ if answer:
#answer = ''.join(chr(ord(c)) for c in answer)
#answer = answer.decode('utf-8')
answer = answer.replace('\\x26#215;', '*')
@@ -48,26 +49,31 @@ def c(phenny, input):
answer = answer.replace('', ')')
answer = web.decode(answer)
phenny.say(answer)
- else: phenny.reply('Sorry, no result.')
+ else:
+ phenny.reply('Sorry, no result.')
c.commands = ['c']
c.example = '.c 5 + 3'
-def wa(phenny, input):
+
+def wa(phenny, input):
if not input.group(2):
return phenny.reply("No search term.")
query = input.group(2)
- uri = 'http://tumbolia.appspot.com/wa/'
- answer = web.get(uri + web.quote(query.replace('+', '%2B')))
- try:
- answer = answer.split(';')[1]
- except IndexError:
- answer = ""
+ re_output = re.compile(r'{"stringified": "(.*?)",')
- if answer:
- phenny.say(answer)
- else: phenny.reply('Sorry, no result.')
+ uri = 'http://www.wolframalpha.com/input/?i={}'
+ out = web.get(uri.format(web.quote(query)))
+ answers = re_output.findall(out)
+ if len(answers) <= 0:
+ phenny.reply("Sorry, no result.")
+ return
+
+ answer = answers[1]
+ answer = answer.replace('\\n', ', ')
+ phenny.say(answer)
wa.commands = ['wa']
-if __name__ == '__main__':
+
+if __name__ == '__main__':
print(__doc__.strip())
diff --git a/modules/oblique.py b/modules/oblique.py
deleted file mode 100644
index 413a061..0000000
--- a/modules/oblique.py
+++ /dev/null
@@ -1,119 +0,0 @@
-#!/usr/bin/env python
-"""
-oblique.py - Web Services Interface
-Copyright 2008-9, Sean B. Palmer, inamidst.com
-Licensed under the Eiffel Forum License 2.
-
-http://inamidst.com/phenny/
-"""
-
-import re
-import web
-
-definitions = 'https://github.com/nslater/oblique/wiki'
-
-r_item = re.compile(r'(?i)
(.*?)')
-r_tag = re.compile(r'<[^>]+>')
-
-def mappings(uri):
- result = {}
- bytes = web.get(uri)
- for item in r_item.findall(bytes):
- item = r_tag.sub('', item).strip(' \t\r\n')
- if not ' ' in item: continue
-
- command, template = item.split(' ', 1)
- if not command.isalnum(): continue
- if not template.startswith('http://'): continue
- result[command] = template.replace('&', '&')
- return result
-
-def service(phenny, input, command, args):
- t = o.services[command]
- template = t.replace('${args}', web.quote(args, ''))
- template = template.replace('${nick}', web.quote(input.nick, ''))
- uri = template.replace('${sender}', web.quote(input.sender, ''))
-
- info = web.head(uri)
- if isinstance(info, list):
- info = info[0]
- if not 'text/plain' in info.get('content-type', '').lower():
- return phenny.reply("Sorry, the service didn't respond in plain text.")
- bytes = web.get(uri)
- lines = bytes.splitlines()
- if not lines:
- return phenny.reply("Sorry, the service didn't respond any output.")
- try: line = lines[0].encode('utf-8')[:350]
- except: line = lines[0][:250]
- phenny.say(lines[0][:350])
-
-def refresh(phenny):
- if hasattr(phenny.config, 'services'):
- services = phenny.config.services
- else: services = definitions
-
- old = o.services
- o.serviceURI = services
- o.services = mappings(o.serviceURI)
- return len(o.services), set(o.services) - set(old)
-
-def o(phenny, input):
- """Call a webservice."""
- text = input.group(2)
-
- if (not o.services) or (text == 'refresh'):
- length, added = refresh(phenny)
- if text == 'refresh':
- msg = 'Okay, found %s services.' % length
- if added:
- msg += ' Added: ' + ', '.join(sorted(added)[:5])
- if len(added) > 5: msg += ', &c.'
- return phenny.reply(msg)
-
- if not text:
- return phenny.reply('Try %s for details.' % o.serviceURI)
-
- if ' ' in text:
- command, args = text.split(' ', 1)
- else: command, args = text, ''
- command = command.lower()
-
- if command == 'service':
- msg = o.services.get(args, 'No such service!')
- return phenny.reply(msg)
-
- if command not in o.services:
- return phenny.reply('Service not found in %s' % o.serviceURI)
-
- if hasattr(phenny.config, 'external'):
- default = phenny.config.external.get('*')
- manifest = phenny.config.external.get(input.sender, default)
- if manifest:
- commands = set(manifest)
- if (command not in commands) and (manifest[0] != '!'):
- return phenny.reply('Sorry, %s is not whitelisted' % command)
- elif (command in commands) and (manifest[0] == '!'):
- return phenny.reply('Sorry, %s is blacklisted' % command)
- service(phenny, input, command, args)
-o.commands = ['o']
-o.example = '.o servicename arg1 arg2 arg3'
-o.services = {}
-o.serviceURI = None
-
-def snippet(phenny, input):
- if not o.services:
- refresh(phenny)
-
- search = web.quote(input.group(2))
- py = "BeautifulSoup.BeautifulSoup(re.sub('<.*?>|(?<= ) +', '', " + \
- "''.join(chr(ord(c)) for c in " + \
- "eval(urllib.urlopen('http://ajax.googleapis.com/ajax/serv" + \
- "ices/search/web?v=1.0&q=" + search + "').read()" + \
- ".replace('null', 'None'))['responseData']['resul" + \
- "ts'][0]['content'].decode('unicode-escape')).replace(" + \
- "'"', '\x22')), convertEntities=True)"
- service(phenny, input, 'py', py)
-snippet.commands = ['snippet']
-
-if __name__ == '__main__':
- print(__doc__.strip())
diff --git a/modules/test/test_calc.py b/modules/test/test_calc.py
index cbf80d3..081bccf 100644
--- a/modules/test/test_calc.py
+++ b/modules/test/test_calc.py
@@ -38,6 +38,13 @@ class TestCalc(unittest.TestCase):
'(asked, but not answered, about a general swallow in the '\
'1975 film Monty Python and the Holy Grail)')
+ def test_wa_math(self):
+ input = Mock(group=lambda x: '2+2')
+ wa(self.phenny, input)
+
+ self.phenny.say.assert_called_once_with('4')
+
+
def test_wa_none(self):
input = Mock(group=lambda x: "jajoajaj ojewphjqo I!tj")
wa(self.phenny, input)