Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var debug = false;
- function logStr(message) {
- if (debug)
- channel.message(message);
- }
- function log(message, obj) {
- logStr(message + ": " + JSON.stringify(obj));
- }
- function outputRawData(strVal) {
- if (strVal.length > 1980)
- strVal = strVal.substring(0, 1980) + "\n...";
- channel.message("```\n" + strVal + "\n```");
- }
- function getData(arg) {
- logStr("Getting data");
- var ret = parseName(arg);
- log("Initial split", ret);
- arg = ret[1];
- var obj = storage.get(ret[0]);
- log("obj before parsing", obj);
- log("of type", typeof obj);
- if (!arg) {
- outputRawData(obj);
- return;
- }
- try {
- obj = JSON.parse(obj);
- } catch (e) {
- channel.message("Data was not in json format");
- return;
- }
- log("obj after parsing", obj);
- while (arg) {
- logStr("===========");
- log("arg", arg);
- ret = parseName(arg);
- log("split", ret);
- arg = ret[1];
- var name = ret[0];
- if (obj === null) {
- channel.message("Data not found, noob");
- return;
- }
- if (name in obj)
- obj = obj[name];
- else
- obj = null;
- log("obj", obj);
- }
- outputRawData(JSON.stringify(obj));
- }
- function setData(arg) {
- logStr("Setting data");
- var ret = parseName(arg);
- log("Initial split", ret);
- var varSlot = ret[0];
- arg = ret[1];
- if (!arg || arg.startsWith("=")) {
- if (arg.startsWith("=")) {
- arg = arg.substring(1);
- arg = skipWhitespace(arg);
- }
- logStr("No path, setting \"" + ret[0] + "\" to \"" + arg + "\"");
- storage.set(varSlot, arg);
- channel.message("Data stored");
- return;
- }
- var lastObj = null;
- var name = null;
- var obj = storage.get(varSlot);
- log("obj before parsing", obj);
- log("of type", typeof obj);
- try {
- obj = JSON.parse(obj);
- } catch (e) {
- channel.message("Data was not in json format");
- return;
- }
- log("obj after parsing", obj);
- var topLevelObj = obj;
- log("topLevelObj", topLevelObj);
- while (arg && !arg.startsWith("=")) {
- logStr("===========");
- log("arg", arg);
- if (obj === null) {
- obj = {};
- if (lastObj !== null)
- lastObj[name] = obj;
- if (topLevelObj === null)
- topLevelObj = obj;
- }
- lastObj = obj;
- ret = parseName(arg);
- log("split", ret);
- arg = ret[1];
- name = ret[0];
- if (name in obj)
- obj = obj[name];
- else
- obj = null;
- log("obj", obj);
- }
- if (arg.startsWith("="))
- arg = arg.substring(1);
- arg = skipWhitespace(arg);
- log("value before parsing", arg);
- log("lastObj before set", lastObj);
- log("topLevelObj before set", topLevelObj);
- try {
- lastObj[name] = JSON.parse(arg);
- } catch (e) {
- channel.message("json parse error:\n" + e.message);
- return;
- }
- log("value after parsing", lastObj[name]);
- log("lastObj after set", lastObj);
- log("topLevelObj after set", topLevelObj);
- storage.set(varSlot, JSON.stringify(topLevelObj));
- channel.message("Data stored");
- }
- function deleteData(arg) {
- logStr("Deleting data");
- var ret = parseName(arg);
- log("Initial split", ret);
- var varSlot = ret[0];
- arg = ret[1];
- if (!arg) {
- logStr("No path");
- storage.delete(varSlot);
- } else {
- var obj = storage.get(varSlot);
- log("obj before parsing", obj);
- log("of type", typeof obj);
- try {
- obj = JSON.parse(obj);
- } catch (e) {
- channel.message("Data was not in json format");
- return;
- }
- log("obj after parsing", obj);
- var topLevelObj = obj;
- var name = null;
- var lastObj;
- while (arg) {
- logStr("=============");
- log("arg", arg);
- lastObj = obj;
- ret = parseName(arg);
- log("split", ret);
- arg = ret[1];
- name = ret[0];
- if (obj == null) {
- channel.message("Data not found, noob");
- return;
- }
- if (name in obj)
- obj = obj[name];
- else
- obj = null;
- log("obj", obj);
- }
- if (obj === null) {
- channel.message("Data not found, noob");
- return;
- }
- log("lastObj before delete", lastObj);
- log("topLevelObj before delete", topLevelObj);
- delete lastObj[name];
- log("lastObj after delete", lastObj);
- log("topLevelObj after delete", topLevelObj);
- storage.set(varSlot, JSON.stringify(topLevelObj));
- }
- channel.message("Data deleted");
- }
- function spliceData(arg) {
- logStr("Splicing data");
- var ret = parseName(arg);
- log("Initial split", ret);
- var varSlot = ret[0];
- arg = ret[1];
- if (!arg) {
- logStr("No path");
- storage.delete(varSlot);
- } else {
- var obj = storage.get(varSlot);
- log("obj before parsing", obj);
- log("of type", typeof obj);
- try {
- obj = JSON.parse(obj);
- } catch (e) {
- channel.message("Data was not in json format");
- return;
- }
- log("obj after parsing", obj);
- var topLevelObj = obj;
- var name = null;
- var lastObj;
- while (arg) {
- logStr("=============");
- log("arg", arg);
- lastObj = obj;
- ret = parseName(arg);
- log("split", ret);
- arg = ret[1];
- name = ret[0];
- if (obj == null) {
- channel.message("Data not found, noob");
- return;
- }
- if (name in obj)
- obj = obj[name];
- else
- obj = null;
- log("obj", obj);
- }
- if (obj === null) {
- channel.message("Data not found, noob");
- return;
- }
- log("lastObj before delete", lastObj);
- log("topLevelObj before delete", topLevelObj);
- try {
- lastObj.splice(parseInt(name), 1);
- } catch (e) {
- channel.message("Can only splice from array");
- }
- log("lastObj after delete", lastObj);
- log("topLevelObj after delete", topLevelObj);
- storage.set(varSlot, JSON.stringify(topLevelObj));
- }
- channel.message("Data spliced");
- }
- function listData() {
- javaKeys = storage.getKeys();
- keys = [];
- for (var i = 0; i < javaKeys.length; i++)
- keys.push(javaKeys[i]);
- keys.sort();
- if (keys.length) {
- var msg = "There are " + keys.length + " storage keys in this guild:";
- for (var i = 0; i < keys.length; i++) {
- var line = "\n";
- line += "- " + keys[i];
- if (msg.length + line.length > 2000) {
- channel.message(msg);
- msg = "";
- }
- msg += line;
- }
- channel.message(msg);
- } else {
- channel.message("There are no storage keys in this guild");
- }
- }
- function parseName(arg) {
- arg = skipWhitespace(arg);
- var name = "";
- if (arg.startsWith("\"")) {
- var escaped = false;
- arg = arg.substring(1);
- while (arg) {
- var c = arg.charAt(0);
- arg = arg.substring(1);
- if (c == "\\") {
- if (!escaped) {
- escaped = true;
- } else {
- escaped = false;
- name += "\\";
- }
- } else {
- if (c == "\"" && !escaped)
- break;
- name += c;
- escaped = false;
- }
- }
- arg = skipWhitespace(arg);
- if (arg.startsWith("."))
- arg = arg.substring(1);
- arg = skipWhitespace(arg);
- return [name, arg];
- } else {
- while (arg && !arg.startsWith("=") && !arg.startsWith(".") && !(/^\s.+$/.test(arg))) {
- name += arg.charAt(0);
- arg = arg.substring(1);
- }
- arg = skipWhitespace(arg);
- if (arg.startsWith("."))
- arg = arg.substring(1);
- arg = skipWhitespace(arg);
- return [name, arg];
- }
- }
- function skipWhitespace(arg) {
- while (/^\s.+$/.test(arg))
- arg = arg.substring(1);
- return arg;
- }
- var arg = message.getContent();
- if (arg.startsWith("//storage "))
- arg = arg.substring(10);
- if (arg.startsWith("--debug ")) {
- arg = arg.substring(8);
- debug = true;
- }
- if (arg.startsWith("get ")) {
- getData(arg.substring(4));
- } else if (arg.startsWith("set ")) {
- setData(arg.substring(4));
- } else if (arg.startsWith("delete ")) {
- deleteData(arg.substring(7));
- } else if (arg.startsWith("splice ")) {
- spliceData(arg.substring(7));
- } else if (arg == "list" || arg.startsWith("list ")) {
- listData();
- } else {
- channel.message("```\nUsage:\n$storage get path.to.data\n$storage set path.to.data=newValue\n$storage delete path.to.data\n$storage splice path.to.data\n$storage list\n```");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement