Earthcomputer

storage.js

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