bdjs
Version:
A potent package for creating Discord bots.
73 lines (72 loc) • 2.77 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const Function_1 = require("../structures/Function");
const util_1 = require("util");
exports.default = new Function_1.BaseFunction({
description: 'Allows you to handle and manage errors and exceptions in a code.',
parameters: [
{
name: 'Code',
description: 'The code to try first.',
required: true,
resolver: 'String',
compile: false,
value: 'none'
},
{
name: 'Catch code',
description: 'The code to execute something goes wrong.',
required: true,
resolver: 'String',
compile: false,
value: 'none'
},
{
name: 'Finally code',
description: 'The code to execute if the condition is false.',
required: false,
resolver: 'String',
compile: false,
value: 'none'
},
{
name: 'Separator',
description: 'Code result separator.',
required: false,
resolver: 'String',
value: ','
}
],
code: async function (d, [code, catchCode, finallyCode, sep = ',']) {
if (code === undefined)
throw new d.error(d, 'required', 'code', d.function?.name);
if (catchCode === undefined)
throw new d.error(d, 'required', 'catch code', d.function?.name);
const results = [];
d.reader.compile(code, d).then((compiled) => {
if (compiled.code !== '')
results.push(compiled.code);
}).catch(async (e) => {
const data = d.extend(d);
data.functions.set('error', new Function_1.BaseFunction({
description: 'Retrieves a property from the error.',
code: async function (subdata, [property = 'message']) {
const properties = ['message', 'stack', 'raw'];
if (!properties.includes(property.toLowerCase()))
throw new subdata.error(d, 'invalid', 'property', subdata.function?.name);
const error = (0, util_1.inspect)(property.toLowerCase() === 'raw' ? e : e[property], { depth: 4 });
return error;
}
}));
const compiled = await data.reader.compile(catchCode, data);
if (compiled.code !== '')
results.push(compiled.code);
});
if (finallyCode) {
const compiled = await d.reader.compile(finallyCode, d);
if (compiled.code !== '')
results.push(compiled.code);
}
return results.join(sep);
}
});