Earthcomputer

storage.js

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