Earthcomputer

storage.js

Jul 11th, 2018
257
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function getData(arg) {
  2.     var ret = parseName(arg);
  3.     arg = ret[1];
  4.     var obj = storage.get(ret[0]);
  5.     channel.message("Parsing json: " + obj);
  6.     obj = JSON.parse(obj);
  7.     while (!arg.isEmpty()) {
  8.         ret = parseName(arg);
  9.         arg = ret[1];
  10.         var name = ret[0];
  11.         if (obj == null) {
  12.             channel.message("Data not found, noob");
  13.             return;
  14.         }
  15.         obj = obj[name];
  16.     }
  17.     channel.message(JSON.stringify(obj));
  18. }
  19.  
  20. function setData(arg) {
  21.     var ret = parseName(arg);
  22.     arg = ret[1];
  23.     var lastObj;
  24.     var name = null;
  25.     var obj = storage.get(ret[0]);
  26.     channel.message("Parsing json: " + obj);
  27.     obj = JSON.parse(obj);
  28.     var topLevelObj = obj;
  29.     while (!arg.isEmpty() && !arg.startsWith("=")) {
  30.         lastObj = obj;
  31.         ret = parseName(arg);
  32.         arg = ret[1];
  33.         name = ret[0];
  34.         if (obj == null)
  35.             obj = {};
  36.         obj = obj[name];
  37.         if (obj == null)
  38.             obj = {};
  39.     }
  40.     if (arg.startsWith("="))
  41.         arg = arg.substring(1);
  42.     arg = skipWhitespace(arg);
  43.     if (name == null) {
  44.         storage.set(ret[0], arg);
  45.     } else {
  46.         channel.message("Parsing json: " + arg);
  47.         lastObj[name] = JSON.parse(arg);
  48.         storage.set(ret[0], JSON.stringify(topLevelObj));
  49.     }
  50.     channel.message("Data successfully stored");
  51. }
  52.  
  53. function deleteData(arg) {
  54.     var ret = parseName(arg);
  55.     arg = ret[1];
  56.     if (arg.isEmpty()) {
  57.         storage.delete(ret[0]);
  58.     } else {
  59.         var obj = storage.get(ret[0]);
  60.         obj = JSON.parse(obj);
  61.         var topLevelObj = obj;
  62.         var name = null;
  63.         var lastObj;
  64.         while (!arg.isEmpty()) {
  65.             lastObj = obj;
  66.             ret = parseName(arg);
  67.             arg = ret[1];
  68.             name = ret[0];
  69.             obj = obj[name];
  70.             if (obj == null) {
  71.                 channel.message("Data not found, noob");
  72.                 return;
  73.             }
  74.         }
  75.         if (name == null) {
  76.             storage.delete(ret[0]);
  77.         } else {
  78.             delete lastObj[name];
  79.             storage.set(ret[0], JSON.stringify(topLevelObj));
  80.         }
  81.     }
  82.     channel.message("Data deleted");
  83. }
  84.  
  85. function parseName(arg) {
  86.     arg = skipWhitespace(arg);
  87.     if (arg.startsWith("\"")) {
  88.         var escaped = false;
  89.         var name = "";
  90.         arg = arg.substring(1);
  91.         while (!arg.isEmpty()) {
  92.             var c = arg.charAt(0);
  93.             arg = arg.substring(1);
  94.             if (c == "\\") {
  95.                 if (!escaped) {
  96.                     escaped = true;
  97.                 } else {
  98.                     escaped = false;
  99.                     name += "\\";
  100.                 }
  101.             } else {
  102.                 if (c == "\"" && !escaped)
  103.                     break;
  104.                 name += c;
  105.                 escaped = false;
  106.             }
  107.         }
  108.         arg = skipWhitespace(arg);
  109.         if (arg.startsWith("."))
  110.             arg = arg.substring(1);
  111.         arg = skipWhitespace(arg);
  112.         return [name, arg];
  113.     } else {
  114.         var name = "";
  115.         while (/\w.+/.test(arg)) {
  116.             name += arg.charAt(0);
  117.             arg = arg.substring(1);
  118.         }
  119.         arg = skipWhitespace(arg);
  120.         if (arg.startsWith("."))
  121.             arg = arg.substring(1);
  122.         arg = skipWhitespace(arg);
  123.         return [name, arg];
  124.     }
  125. }
  126. function skipWhitespace(arg) {
  127.     while (/\s.+/.test(arg))
  128.         arg = arg.substring(1);
  129.     return arg;
  130. }
  131.  
  132. var arg = message.getContent();
  133. if (arg.startsWith("//storage "))
  134.     arg = arg.substring(10);
  135. if (arg.startsWith("get ")) {
  136.     getData(arg.substring(4));
  137. } else if (arg.startsWith("set ")) {
  138.     setData(arg.substring(4));
  139. } else if (arg.startsWith("delete ")) {
  140.     deleteData(arg.substring(7));
  141. } else {
  142.     channel.message("```\nUsage:\n//storage get path.to.data\n//storage set path.to.data=newValue\n//storage delete path.to.data\n```");
  143. }
Advertisement
Add Comment
Please, Sign In to add comment