@jadl/cmd
Version:
A command handler for JADL
81 lines (80 loc) • 3.29 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Options = exports.CommandOption = void 0;
const v9_1 = require("discord-api-types/v9");
const __1 = require("../..");
const Decorators_1 = require("../../utils/Decorators");
exports.CommandOption = Decorators_1.Decorators.createParameterDecorator(([data, customFn], cmd, base, index) => {
if (!base[__1.Symbols.interaction].options)
base[__1.Symbols.interaction].options = [];
if (!cmd.interactionOptions)
cmd.interactionOptions = [];
cmd.interactionOptions.push(data);
cmd.indexToOption[index] = data.name;
return (int) => {
if (int.data.type !== v9_1.ApplicationCommandType.ChatInput)
return;
let val;
if (cmd.name !== __1.Symbols.baseCommand) {
const subCommand = int.data.options?.find((x) => x.name === cmd.name);
if (subCommand?.type === v9_1.ApplicationCommandOptionType.Subcommand) {
val = subCommand.options?.find((x) => x.name === data.name);
}
}
else {
val = int.data.options?.find((x) => x.name === data.name);
}
if (!val)
return undefined;
if (!('value' in val))
return;
return customFn ? customFn(val.value, int) : val.value;
};
});
const CreateOption = (type, customFn) => {
return (name, description, options) => (0, exports.CommandOption)({ type, name, description, ...options }, customFn);
};
exports.Options = {
String: CreateOption(v9_1.ApplicationCommandOptionType.String),
Integer: CreateOption(v9_1.ApplicationCommandOptionType.Integer),
Boolean: CreateOption(v9_1.ApplicationCommandOptionType.Boolean),
User: CreateOption(v9_1.ApplicationCommandOptionType.User, (id, int) => {
if (typeof id !== 'string')
return id;
if (int.data.resolved &&
'users' in int.data.resolved &&
int.data.resolved.users) {
return int.data.resolved.users[id] ?? { id };
}
else {
return { id };
}
}),
Member: CreateOption(v9_1.ApplicationCommandOptionType.User, (id, int) => {
if (typeof id !== 'string')
return id;
if (int.data.resolved &&
'members' in int.data.resolved &&
int.data.resolved.members &&
int.data.resolved.users) {
const resolvedMember = int.data.resolved.members[id];
if (!resolvedMember)
return { id };
const member = {
...resolvedMember,
user: int.data.resolved.users[id],
deaf: Symbol('unknown'),
mute: Symbol('unknown')
};
return member;
}
else {
return { id };
}
}),
Channel: CreateOption(v9_1.ApplicationCommandOptionType.Channel),
Role: CreateOption(v9_1.ApplicationCommandOptionType.Role),
Mentionable: CreateOption(v9_1.ApplicationCommandOptionType.Mentionable),
Number: CreateOption(v9_1.ApplicationCommandOptionType.Number),
Attachment: CreateOption(v9_1.ApplicationCommandOptionType.Attachment)
};