Advertisement
Earthcomputer

storage.js

Jul 12th, 2018
203
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function log(message, obj) {
  2.     channel.message(message + ": " + JSON.stringify(obj));
  3. }
  4.  
  5. function getData(arg) {
  6.     var ret = parseName(arg);
  7.     log("Initial split", ret);
  8.     arg = ret[1];
  9.     var obj = storage.get(ret[0]);
  10.     log("obj before parsing", obj);
  11.     if (!arg) {
  12.         channel.message(obj);
  13.         return;
  14.     }
  15.     try {
  16.         obj = JSON.parse(obj);
  17.     } catch (e) {
  18.         channel.message("Data was not in json format");
  19.         return;
  20.     }
  21.     log("obj after parsing", obj);
  22.     while (arg) {
  23.         channel.message("===========");
  24.         log("arg", arg);
  25.         ret = parseName(arg);
  26.         log("split", ret);
  27.         arg = ret[1];
  28.         var name = ret[0];
  29.         if (obj === null) {
  30.             channel.message("Data not found, noob");
  31.             return;
  32.         }
  33.         obj = obj[name];
  34.         log("obj", obj);
  35.     }
  36.     channel.message(JSON.stringify(obj));
  37. }
  38.  
  39. function setData(arg) {
  40.     var ret = parseName(arg);
  41.     log("Initial split", ret);
  42.     arg = ret[1];
  43.     if (!arg || arg.startsWith("=")) {
  44.         if (arg.startsWith("=")) {
  45.             arg = arg.substring(1);
  46.             arg = skipWhitespace(arg);
  47.         }
  48.         channel.message("No path, setting \"" + ret[0] + "\" to \"" + arg + "\"");
  49.         storage.set(ret[0], arg);
  50.         channel.message("Data successfully stored");
  51.         return;
  52.     }
  53.     var lastObj;
  54.     var name = null;
  55.     var obj = storage.get(ret[0]);
  56.     log("obj before parsing", obj);
  57.     try {
  58.         obj = JSON.parse(obj);
  59.     } catch (e) {
  60.         channel.message("Data was not in json format");
  61.         return;
  62.     }
  63.     log("obj after parsing", obj);
  64.     var topLevelObj = obj;
  65.     log("topLevelObj", topLevelObj);
  66.     while (arg && !arg.startsWith("=")) {
  67.         channel.message("===========");
  68.         log("arg", arg);
  69.         lastObj = obj;
  70.         ret = parseName(arg);
  71.         log("split", ret);
  72.         arg = ret[1];
  73.         name = ret[0];
  74.         if (obj === null)
  75.             obj = {};
  76.         obj = obj[name];
  77.         log("obj", obj);
  78.     }
  79.     if (arg.startsWith("="))
  80.         arg = arg.substring(1);
  81.     arg = skipWhitespace(arg);
  82.     log("value before parsing", arg);
  83.     log("lastObj before set", lastObj);
  84.     log("topLevelObj before set", topLevelObj);
  85.     try {
  86.         lastObj[name] = JSON.parse(arg);
  87.     } catch (e) {
  88.         channel.message("json parse error:\n" + e.message);
  89.         return;
  90.     }
  91.     log("value after parsing", lastObj[name]);
  92.     log("lastObj after set", lastObj);
  93.     log("topLevelObj after set", topLevelObj);
  94.     storage.set(ret[0], JSON.stringify(topLevelObj));
  95.     channel.message("Data stored");
  96. }
  97.  
  98. function deleteData(arg) {
  99.     var ret = parseName(arg);
  100.     log("Initial split", ret);
  101.     arg = ret[1];
  102.     if (!arg) {
  103.         channel.message("No path");
  104.         storage.delete(ret[0]);
  105.     } else {
  106.         var obj = storage.get(ret[0]);
  107.         log("obj before parsing", obj);
  108.         try {
  109.             obj = JSON.parse(obj);
  110.         } catch (e) {
  111.             channel.message("Data was not in json format");
  112.             return;
  113.         }
  114.         log("obj after parsing", obj);
  115.         var topLevelObj = obj;
  116.         var name = null;
  117.         var lastObj;
  118.         while (arg) {
  119.             channel.message("=============");
  120.             log("arg", arg);
  121.             lastObj = obj;
  122.             ret = parseName(arg);
  123.             log("split", ret);
  124.             arg = ret[1];
  125.             name = ret[0];
  126.             if (obj == null) {
  127.                 channel.message("Data not found, noob");
  128.                 return;
  129.             }
  130.             obj = obj[name];
  131.             log("obj", obj);
  132.         }
  133.         if (obj === null) {
  134.             channel.message("Data not found, noob");
  135.             return;
  136.         }
  137.         log("lastObj before delete", lastObj);
  138.         log("topLevelObj before delete", topLevelObj);
  139.         delete lastObj[name];
  140.         log("lastObj after delete", lastObj);
  141.         log("topLevelObj after delete", topLevelObj);
  142.         storage.set(ret[0], JSON.stringify(topLevelObj));
  143.     }
  144.     channel.message("Data deleted");
  145. }
  146.  
  147. function parseName(arg) {
  148.     arg = skipWhitespace(arg);
  149.     var name = "";
  150.     if (arg.startsWith("\"")) {
  151.         var escaped = false;
  152.         arg = arg.substring(1);
  153.         while (arg) {
  154.             var c = arg.charAt(0);
  155.             arg = arg.substring(1);
  156.             if (c == "\\") {
  157.                 if (!escaped) {
  158.                     escaped = true;
  159.                 } else {
  160.                     escaped = false;
  161.                     name += "\\";
  162.                 }
  163.             } else {
  164.                 if (c == "\"" && !escaped)
  165.                     break;
  166.                 name += c;
  167.                 escaped = false;
  168.             }
  169.         }
  170.         arg = skipWhitespace(arg);
  171.         if (arg.startsWith("."))
  172.             arg = arg.substring(1);
  173.         arg = skipWhitespace(arg);
  174.         return [name, arg];
  175.     } else {
  176.         while (arg && !arg.startsWith("=") && !arg.startsWith(".") && !(/\s.+/.test(arg))) {
  177.             name += arg.charAt(0);
  178.             arg = arg.substring(1);
  179.         }
  180.         arg = skipWhitespace(arg);
  181.         if (arg.startsWith("."))
  182.             arg = arg.substring(1);
  183.         arg = skipWhitespace(arg);
  184.         return [name, arg];
  185.     }
  186. }
  187. function skipWhitespace(arg) {
  188.     while (/\s.+/.test(arg))
  189.         arg = arg.substring(1);
  190.     return arg;
  191. }
  192.  
  193.  
  194. var arg = message.getContent();
  195. if (arg.startsWith("//storage "))
  196.     arg = arg.substring(10);
  197. if (arg.startsWith("get ")) {
  198.     getData(arg.substring(4));
  199. } else if (arg.startsWith("set ")) {
  200.     setData(arg.substring(4));
  201. } else if (arg.startsWith("delete ")) {
  202.     deleteData(arg.substring(7));
  203. } else {
  204.     channel.message("```\nUsage:\n//storage get path.to.data\n//storage set path.to.data=newValue\n//storage delete path.to.data\n```");
  205. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement