Earthcomputer

storage.js

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