UNPKG

dkto.js

Version:

<a href="https://discord.gg/H9Scw4mztH"><img src="https://img.shields.io/discord/944271427429871658?color=5865F2&logo=discord&logoColor=white" alt="Discord Server"/></a>

205 lines (170 loc) 3.72 kB
/** * @type {import('../typings/interactions').CreateSlashCommandOptions} * @link https://discord.com/developers/docs/interactions/application-commands#application-command-object-application-command-option-structure */ function CreateSlashCommandOptions() { class InteractionOptions { options = []; constructor() {} sub_command_group({ name, description }) { return new SCGroup(name, description, this, this.options); } string({ name, description, required, autocomplete, choices }) { this.options.push({ name, description, required, autocomplete, choices, type: 3, }); return this; } integer({ name, description, required, autocomplete, choices, min_value, max_value, }) { this.options.push({ name, description, required, autocomplete, choices, min_value, max_value, type: 4, }); return this; } boolean({ name, description, required }) { this.options.push({ name, description, required, type: 5 }); return this; } user({ name, description, required }) { this.options.push({ name, description, required, type: 6 }); return this; } channel({ name, description, required, channel_types }) { this.options.push({ name, description, required, channel_types, type: 7, }); return this; } role({ name, description, required }) { this.options.push({ name, description, required, type: 8 }); return this; } mentionable({ name, description, required }) { this.options.push({ name, description, required, type: 9 }); return this; } number({ name, description, required, autocomplete, choices, min_value, max_value, }) { this.options.push({ name, description, required, autocomplete, choices, min_value, max_value, type: 10, }); return this; } attachment({ name, description, required }) { this.options.push({ name, description, required, type: 11 }); return this; } toJSON() { return Object.freeze(this.options); } } class SC extends InteractionOptions { #name; #description; /** * @type {SCGroup} */ #self; #opts; constructor(name, description, self, options) { super(); this.#name = name; this.#description = description; this.#self = self; this.#opts = options; } build() { this.#opts.push({ name: this.#name, description: this.#description, options: this.options, type: 1, }); return this.#self; } } class SCGroup { #name; #description; /** * @type {InteractionOptions} */ #self; #options = []; #opts; constructor(name, description, self, options) { this.#name = name; this.#description = description; this.#self = self; this.#opts = options; } sub_command({ name, description }) { return new SC(name, description, this, this.#options); } build() { this.#opts.push({ name: this.#name, description: this.#description, options: this.#options, type: 2, }); return this.#self; } } return new InteractionOptions(); } /* console.log( JSON.stringify( CreateOptions() .sub_command_group({ name: 'hi', description: 'b' }) .sub_command({ name: 'hi', description: 'h' }) .boolean({name: 'hi', description: 'a', required: true}) .boolean({name: 'hi', description: 'a2', required: true}).build() .done() .toJSON() ) ) */ module.exports = { CreateSlashCommandOptions };