UNPKG

@jadl/cmd

Version:
81 lines (80 loc) 3.29 kB
"use strict"; 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) };