diff --git a/src/inc/trigger/lib/brainfuck.js b/src/inc/trigger/lib/brainfuck.js new file mode 100644 index 0000000..09ef2e8 --- /dev/null +++ b/src/inc/trigger/lib/brainfuck.js @@ -0,0 +1,80 @@ +function gcd(a, b) { + if (b === 0) + return a; + else + return gcd(b, a % b); +} + +function inverse_mod(n, m) { + var inv1 = 1, + inv2 = 0, + tmp; + while (m) { + tmp = inv1; + inv1 = inv2; + inv2 = tmp - inv2 * (n / m | 0); + tmp = n; + n = m; + m = tmp % m; + } + return inv1; +} + +function shortest_str(arr) { + var min = 0; + for (var i = 1; i < arr.length; i++) + if (arr[i].length < arr[min].length) + min = i; + return min; +} + +var map = [], + plus_map = [""], + minus_map = [""], + iter = true, + repeat = 2, + start; + +for (var i = 1; i < 256; i++) { + plus_map[i] = plus_map[i - 1] + "+"; + minus_map[i] = minus_map[i - 1] + "-"; +} + +for (var x = 0; x < 256; x++) { + map[x] = []; + for (var y = 0; y < 256; y++) { + var delta = y - x; + if (delta > 128) + delta -= 256; + if (delta < -128) + delta += 256; + if (delta >= 0) + map[x][y] = plus_map[delta]; + else + map[x][y] = minus_map[-delta]; + } +} + +function generate(str) { + var last = 0, + len = str.length, + char_map, + result = "", + memory = [0], + index = 0; + for (var i = 0; i < len; i++) { + var + chr = str.charCodeAt(i) & 255, + options = [ + ">" + map[0][chr], + map[last][chr], + ], + shortest; + shortest = shortest_str(options); + result += options[shortest] + "."; + last = chr; + } + return result; +} + +export default { generate }; \ No newline at end of file diff --git a/src/inc/trigger/sandbox.js b/src/inc/trigger/sandbox.js index c149137..23edcac 100644 --- a/src/inc/trigger/sandbox.js +++ b/src/inc/trigger/sandbox.js @@ -1,8 +1,7 @@ +import { generate as bfgen } from "./lib/brainfuck.js"; + const vm = require("vm") - , http = require("http") - , https = require("https") - , request = require("request") - , querystring = require("querystring"); + , request = require("request"); const maxoutput = 400; @@ -141,4 +140,15 @@ module.exports = bot => { }); } }); + + bot._trigger.set("bfgen", { + call: /^\!bfgen .*/i, + level: 100, + active: true, + clients: ["irc", "tg"], + f: e => { + let args = e.message.trim().substring(7); + e.reply(bfgen(args)); + } + }); };