@akarui/aoi.parser
Version:
A parser for Aoi.js' Message System
95 lines • 3.48 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.setup = exports.parseChatInputOptions = exports.parse = exports.createAst = void 0;
const block_1 = __importDefault(require("./block"));
const components_1 = require("./components");
const utils_1 = require("./utils");
function createAst(input) {
input = input
.replaceAll("\\{", "#RIGHT_BRACKET#")
.replaceAll("\\}", "#LEFT_BRACKET#").replaceAll("\\:", "#COLON#");
let parent = new block_1.default("");
for (let char of input) {
if (char === "{") {
const child = new block_1.default("");
parent.addChild(child);
parent.add(child.name);
child.setParent(parent);
parent = child;
}
else if (char === "}") {
parent = parent.parent;
}
else {
parent.add(char);
}
}
return parent;
}
exports.createAst = createAst;
function parse(input) {
const ast = createAst(input);
const data = (0, components_1.parseMessage)(ast);
let options;
for (const child of ast.children) {
const [name, value] = child.splits;
if (name !== "extraOptions") {
continue;
}
options = (0, components_1.parseExtraOptions)(child);
}
return { data, options };
}
exports.parse = parse;
function parseChatInputOptions(ast) {
const options = [];
for (const child of ast.children) {
const [name, _] = child.splits.map(utils_1.removeEscapesAndTrim);
if (name === "string") {
options.push((0, components_1.parseChatInputStringOptions)(child));
}
else if (name === "integer" || "number") {
options.push((0, components_1.parseChatInputNumberOptions)(child));
}
else if (name === "user" ||
name === "role" ||
name === "mentionable") {
options.push((0, components_1.parseChatInputUserRoleMentionableOptions)(child));
}
else if (name === "channel") {
options.push((0, components_1.parseChatInputChannelOptions)(child));
}
else if (name === "boolean") {
options.push((0, components_1.parseChatInputBooleanOptions)(child));
}
else if (name === "subCommand") {
options.push((0, components_1.parseChatInputSubCommandOptions)(child));
}
else if (name === "subCommandGroup") {
options.push((0, components_1.parseChatInputSubCommandGroupOptions)(child));
}
}
return options;
}
exports.parseChatInputOptions = parseChatInputOptions;
function setup(Util) {
Util.parsers.ErrorHandler = parse;
Util.parsers.ComponentParser = (data) => {
return createAst(data).children.map(components_1.parseComponents);
};
Util.parsers.EmbedParser = (data) => {
return createAst(data).children.map(x => (0, components_1.parseEmbed)(x).data);
};
Util.parsers.FileParser = (data) => {
return createAst(data).children.map(components_1.parseFiles);
};
Util.parsers.OptionParser = (data) => {
return createAst(data).children.map(components_1.parseExtraOptions);
};
Util.parsers.SlashOptionsParser = parseChatInputOptions;
}
exports.setup = setup;
//# sourceMappingURL=index.js.map