95 lines
3.4 KiB
JavaScript
95 lines
3.4 KiB
JavaScript
import { read, write, cfg } from "../cfg";
|
|
|
|
const _modes = ["get", "set", "rm", "add", "opts"];
|
|
const _opts = {
|
|
showTypes: { type: "boolean", stdval: false },
|
|
showHidden: { type: "boolean", stdval: false }
|
|
};
|
|
const _debug = false;
|
|
|
|
export default bot => {
|
|
bot._trigger.set("cfg", new bot.trigger({
|
|
call: /^\!cfg/i,
|
|
level: 100,
|
|
clients: ["irc"],
|
|
f: e => {
|
|
let args = e.message.substring(5);
|
|
let opts = {};
|
|
let value = null;
|
|
|
|
if (args.includes("{") && args.includes(":") && args.charAt(args.length - 1) === "}") { // check if options available
|
|
try {
|
|
opts = JSON.parse(args.replace(/.*\{(.*?)\}.*/, "{$1}")); // parse options
|
|
}
|
|
catch(err) {
|
|
return e.reply(err.message); // throw errormessage
|
|
}
|
|
args = args.replace(/(.*?)\{.*\}(.*?)/, "$1$2"); // remove options from arguments
|
|
}
|
|
for (let _opt in _opts) // check options
|
|
if (!opts.hasOwnProperty(_opt))
|
|
opts[_opt] = _opts[_opt].stdval;
|
|
else
|
|
if (typeof opts[_opt] !== _opts[_opt].type)
|
|
opts[_opt] = _opts[_opt].stdval;
|
|
|
|
if(_debug)
|
|
e.reply(`opts: ${JSON.stringify(opts)}`);
|
|
|
|
args = args.trim().split(" ");
|
|
let mode = args.shift();
|
|
|
|
if (mode === "set" && e.message.includes("=")) { // get value if mode = set
|
|
args = args.join(" "); // omg
|
|
value = args.replace(/.*=(.*?)/, "$1").trim();
|
|
args = args.replace(/(.*?)=.*/, "$1").trim().split(" ");
|
|
|
|
e.reply(`value: ${value}, rest: ${args}`);
|
|
}
|
|
|
|
if (mode === "opts") // maybe replaced by switch in the future
|
|
return e.reply(`options: ${Object.keys(_opts).map(el => `[b]${el}[/b]: [i]${_opts[el].stdval} (${_opts[el].type})[/i]`).join(", ")}`)
|
|
|
|
if (!_modes.includes(mode)) // if unknown mode
|
|
return e.reply(`wrong mode! (${_modes.join(", ")})`);
|
|
if (args.length === 0) // no mode given, get classes
|
|
return e.reply(`classes: ${Object.keys(cfg).join(", ")}`);
|
|
|
|
let cfgstr = args[0].split(".");
|
|
|
|
if (cfgstr.length === 1) { // get keys in class
|
|
if (!Object.keys(cfg).includes(cfgstr[0]))
|
|
return e.reply(`class [b]${cfgstr[0]}[/b] not found`);
|
|
let keys = { // split between hidden and public keys
|
|
hidden: Object.keys(cfg[cfgstr[0]]).filter(el => cfg[cfgstr[0]][el].hidden),
|
|
public: Object.keys(cfg[cfgstr[0]]).filter(el => !cfg[cfgstr[0]][el].hidden)
|
|
};
|
|
return e.reply(`keys in class [b]${cfgstr[0]}[/b]: ${keys.public.length > 0 ? keys.public.map(el => `${el}${opts.showTypes ? ` [i](${cfg[cfgstr[0]][el].type})[/i]` : ""}`).join(", ") : "none"} (${keys.hidden.length} hidden)`);
|
|
}
|
|
|
|
if(mode === "get") {
|
|
if (!opts.showHidden)
|
|
if (cfg[cfgstr[0]][cfgstr[1]].hidden || opts.showHidden) // catch hidden key
|
|
return e.reply(`key [b]${cfgstr[1]}[/b] in class [b]${cfgstr[0]}[/b] is hidden, kek`);
|
|
}
|
|
|
|
switch (mode) {
|
|
case "get":
|
|
e.reply(cfg[cfgstr[0]][cfgstr[1]].val);
|
|
break;
|
|
case "set":
|
|
if (cfg[cfgstr[0]][cfgstr[1]].type === "json")
|
|
return e.reply("JSON isn't supported yet");
|
|
if(value === null)
|
|
return e.reply("Error");
|
|
|
|
write(cfgstr[0], cfgstr[1], value, cfg[cfgstr[0]][cfgstr[1]].type, () => {
|
|
e.reply(cfg[cfgstr[0]][cfgstr[1]].val);
|
|
})
|
|
break;
|
|
}
|
|
|
|
}
|
|
}));
|
|
};
|