/** * Evaluates an expression * * @param {String} expression * @returns {String} */ function evaluateExpression (expression, functionIdentifier, call) { if (stack++ > MAX_STACK) { stack = 0 throw new Error("Call stack overflow for " + call) } if (expression === "") { throw new Error(functionIdentifier + "(): '" + call + "' must contain a non-whitespace string") } expression = evaluateNestedExpression(expression, call) var units = getUnitsInExpression(expression) // If the expression contains multiple units or CSS variables, // then let the expression be (i.e. browser calc()) if (units.length > 1 || expression.indexOf("var(") > -1) { return functionIdentifier + "(" + expression + ")" } var unit = units[0] || "" if (unit === "%") { // Convert percentages to numbers, to handle expressions like: 50% * 50% (will become: 25%): // console.log(expression) expression = expression.replace(/\b[0-9\.]+%/g, function(percent) { return parseFloat(percent.slice(0, -1)) * 0.01 }) } // Remove units in expression: var toEvaluate = expression.replace(new RegExp(unit, "gi"), "") var result try { result = mexp.eval(toEvaluate) } catch (e) { return functionIdentifier + "(" + expression + ")" } // Transform back to a percentage result: if (unit === "%") { result *= 100 } // adjust rounding shit // (0.1 * 0.2 === 0.020000000000000004) if (functionIdentifier.length || unit === "%") { result = Math.round(result * decimalPrecision) / decimalPrecision } // Add unit result += unit return result }
exports.run = function(client, message, args) { var soru = args.join(' '); if(!soru) return message.reply('Bir işlem belirtin. **Doğru Kullanım**: ?hesapla <işlem>') else { let cevap; try { cevap = math.eval(soru) } catch(err) { message.channel.send('Hatalı işlem: **' + err) } const embed = new Discord.RichEmbed() .addField('Soru', soru) .addField('Cevap', cevap) message.channel.send(embed) } };