Earthcomputer

storage.js

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