| 116 if not ModuleCore.is_available (cmd, ident, host): |
116 if not ModuleCore.is_available (cmd, ident, host): |
| 117 command_error ('you may not use %s' % cmd['name']) |
117 command_error ('you may not use %s' % cmd['name']) |
| 118 |
118 |
| 119 bot.privmsg (replyto, '%s %s: %s' % (cmd['name'], cmd['args'], cmd['description'])) |
119 bot.privmsg (replyto, '%s %s: %s' % (cmd['name'], cmd['args'], cmd['description'])) |
| 120 |
120 |
| |
121 def mathsubstitute (expr, token, value): |
| |
122 rex = re.compile (r'^(.*)\b' + token + r'\b(.*)$') |
| |
123 match = rex.match (expr) |
| |
124 |
| |
125 while match: |
| |
126 expr = match.group(1) + str (value) + match.group(2) |
| |
127 match = rex.match (expr) |
| |
128 |
| |
129 return expr |
| |
130 |
| 121 def cmd_calc (bot, replyto, args, **rest): |
131 def cmd_calc (bot, replyto, args, **rest): |
| 122 expr = args['expression'] |
132 expr = args['expression'] |
| 123 |
133 |
| 124 try: |
134 try: |
| 125 # I want pi around so yeah |
135 # Substitute some mathematical constants |
| 126 pirex = re.compile (r'^(.*)\bpi\b(.*)$') |
136 expr = mathsubstitute (expr, 'pi' , 3.141592653589793) |
| 127 match = pirex.match (expr) |
137 expr = mathsubstitute (expr, 'e' , 2.718281828459045) |
| 128 |
138 expr = mathsubstitute (expr, 'phi', 1.618033988749895) # golden ratio |
| 129 while match: |
|
| 130 expr = match.group(1) + '3.14159265358979323846264338327950288' + match.group(2) |
|
| 131 match = pirex.match (expr) |
|
| 132 |
139 |
| 133 result = subprocess.check_output (['calc', expr], stderr=subprocess.STDOUT) \ |
140 result = subprocess.check_output (['calc', expr], stderr=subprocess.STDOUT) \ |
| 134 .replace ('\t', '') \ |
141 .replace ('\t', '') \ |
| 135 .replace ('\n', '') |
142 .replace ('\n', '') |
| 136 |
143 |