Earthcomputer

storage.js

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