From ad2014b7b2b040c67f1c3e66b2fa779636357dc0 Mon Sep 17 00:00:00 2001 From: Syxpi Date: Mon, 9 Feb 2026 14:36:26 +0100 Subject: [PATCH] Update Bot (j'ai plus le repo sur GitHub) Qui c'est la conne qui a delete le repo sur GitHub? C'EST MOIIIII --- .env | 18 +- .gitignore | 3 +- .idea/dataSources.xml | 24 +- .idea/data_source_mapping.xml | 8 +- .idea/femboy-france-bot.iml | 1 + .idea/inspectionProfiles/Project_Default.xml | 4 + .idea/jsLibraryMappings.xml | 1 + .idea/sqldialects.xml | 7 +- .idea/vcs.xml | 6 - README.md | 91 +- VERIFIED.md | 94 + commands/dev/infra.js | 75 +- commands/dev/reload.js | 27 +- commands/info/adminprofil.js | 119 + commands/info/embed.js | 43 + commands/info/info.js | 83 +- commands/info/profil.js | 334 + commands/info/serverinfo.js | 53 + commands/info/userinfo.js | 70 + commands/moderation/ban.js | 144 +- commands/moderation/casier.js | 87 +- commands/moderation/changemute.js | 149 + commands/moderation/changesanction.js | 114 + commands/moderation/clear.js | 74 + commands/moderation/kick.js | 89 + commands/moderation/mute.js | 113 + commands/moderation/mysanctions.js | 97 + commands/moderation/purge.js | 103 + commands/moderation/revokesanction.js | 101 + commands/moderation/unban.js | 77 +- commands/moderation/unmute.js | 86 + commands/moderation/untimeout.js | 78 + commands/moderation/warn.js | 101 + commands/ticket/ticket.js | 673 + commands/utility/avatar.js | 31 + commands/utility/ping.js | 28 +- commands/xp/bumptime.js | 79 + commands/xp/leaderboard.js | 65 + commands/xp/level.js | 97 + commands/xp/resetlevel.js | 116 + commands/xp/xpexclude.js | 140 + deploy-commands.js | 154 +- env.example | 74 + events/interactionCreate.js | 119 +- events/messageCreate.js | 162 + events/ready.js | 18 +- events/voiceStateUpdate.js | 143 + functions/bump/bumpReminder.js | 56 + functions/database/db.js | 214 +- functions/moderation/autoUnban.js | 21 +- functions/moderation/autoUnmute.js | 47 + functions/xp/xp.js | 177 + index.js | 59 +- node_modules/.package-lock.json | 1497 -- node_modules/@discordjs/builders/README.md | 3 +- .../@discordjs/builders/dist/index.d.mts | 12347 +++++++++++++++- .../@discordjs/builders/dist/index.d.ts | 12347 +++++++++++++++- .../@discordjs/builders/dist/index.js | 909 +- .../@discordjs/builders/dist/index.js.map | 2 +- .../@discordjs/builders/dist/index.mjs | 830 +- .../@discordjs/builders/dist/index.mjs.map | 2 +- node_modules/@discordjs/builders/package.json | 8 +- node_modules/@discordjs/formatters/README.md | 3 +- .../@discordjs/formatters/dist/index.d.mts | 78 +- .../@discordjs/formatters/dist/index.d.ts | 78 +- .../@discordjs/formatters/dist/index.js | 95 +- .../@discordjs/formatters/dist/index.js.map | 2 +- .../@discordjs/formatters/dist/index.mjs | 86 +- .../@discordjs/formatters/dist/index.mjs.map | 2 +- .../@discordjs/formatters/package.json | 4 +- node_modules/@discordjs/util/README.md | 1 + node_modules/@discordjs/util/dist/index.d.mts | 36 +- node_modules/@discordjs/util/dist/index.d.ts | 36 +- node_modules/@discordjs/util/dist/index.js | 23 +- .../@discordjs/util/dist/index.js.map | 2 +- node_modules/@discordjs/util/dist/index.mjs | 16 +- .../@discordjs/util/dist/index.mjs.map | 2 +- node_modules/@discordjs/util/package.json | 5 +- .../@eslint-community/eslint-utils/index.js | 19 +- .../eslint-utils/index.js.map | 2 +- .../@eslint-community/eslint-utils/index.mjs | 19 +- .../eslint-utils/index.mjs.map | 2 +- .../eslint-utils/package.json | 2 +- .../@eslint-community/regexpp/index.js | 19 +- .../@eslint-community/regexpp/index.js.map | 2 +- .../@eslint-community/regexpp/index.mjs | 19 +- .../@eslint-community/regexpp/index.mjs.map | 2 +- .../@eslint-community/regexpp/package.json | 2 +- node_modules/@eslint/config-array/README.md | 5 +- .../@eslint/config-array/dist/cjs/index.cjs | 23 +- .../@eslint/config-array/dist/cjs/index.d.cts | 18 +- .../config-array/dist/cjs/std__path/posix.cjs | 3 +- .../dist/cjs/std__path/windows.cjs | 3 +- .../@eslint/config-array/dist/cjs/types.ts | 29 - .../@eslint/config-array/dist/esm/index.d.ts | 18 +- .../@eslint/config-array/dist/esm/index.js | 23 +- .../config-array/dist/esm/std__path/posix.js | 3 +- .../dist/esm/std__path/windows.js | 3 +- .../@eslint/config-array/package.json | 11 +- node_modules/@eslint/config-helpers/README.md | 2 +- .../@eslint/config-helpers/dist/cjs/index.cjs | 67 +- .../config-helpers/dist/cjs/index.d.cts | 20 +- .../@eslint/config-helpers/dist/cjs/types.cts | 10 +- .../config-helpers/dist/esm/index.d.ts | 20 +- .../@eslint/config-helpers/dist/esm/index.js | 67 +- .../config-helpers/dist/esm/types.d.ts | 8 +- .../@eslint/config-helpers/dist/esm/types.ts | 10 +- .../@eslint/config-helpers/package.json | 11 +- node_modules/@eslint/core/README.md | 2 +- .../@eslint/core/dist/cjs/types.d.cts | 360 +- node_modules/@eslint/core/dist/esm/types.d.ts | 360 +- node_modules/@eslint/core/package.json | 2 +- node_modules/@eslint/eslintrc/README.md | 19 +- .../@eslint/eslintrc/dist/eslintrc.cjs | 14 +- .../@eslint/eslintrc/dist/eslintrc.cjs.map | 2 +- .../@eslint/eslintrc/lib/flat-compat.js | 14 +- node_modules/@eslint/eslintrc/package.json | 10 +- node_modules/@eslint/js/README.md | 36 +- node_modules/@eslint/js/package.json | 2 +- .../js/src/configs/eslint-recommended.js | 136 +- node_modules/@eslint/object-schema/README.md | 8 +- .../@eslint/object-schema/dist/cjs/index.cjs | 14 +- .../object-schema/dist/cjs/index.d.cts | 8 +- .../@eslint/object-schema/dist/cjs/types.ts | 57 - .../@eslint/object-schema/dist/esm/index.d.ts | 8 +- .../@eslint/object-schema/dist/esm/index.js | 14 +- .../@eslint/object-schema/package.json | 21 +- node_modules/@eslint/plugin-kit/README.md | 10 +- .../@eslint/plugin-kit/dist/cjs/index.cjs | 300 +- .../@eslint/plugin-kit/dist/cjs/index.d.cts | 64 +- .../@eslint/plugin-kit/dist/esm/index.d.ts | 64 +- .../@eslint/plugin-kit/dist/esm/index.js | 300 +- node_modules/@eslint/plugin-kit/package.json | 6 +- node_modules/@types/node/README.md | 2 +- node_modules/@types/node/assert.d.ts | 419 +- node_modules/@types/node/assert/strict.d.ts | 107 +- node_modules/@types/node/async_hooks.d.ts | 16 +- node_modules/@types/node/buffer.buffer.d.ts | 17 +- node_modules/@types/node/buffer.d.ts | 224 +- node_modules/@types/node/child_process.d.ts | 199 +- node_modules/@types/node/cluster.d.ts | 573 +- node_modules/@types/node/console.d.ts | 409 +- node_modules/@types/node/constants.d.ts | 7 +- node_modules/@types/node/crypto.d.ts | 1811 +-- node_modules/@types/node/dgram.d.ts | 71 +- .../@types/node/diagnostics_channel.d.ts | 10 +- node_modules/@types/node/dns.d.ts | 265 +- node_modules/@types/node/dns/promises.d.ts | 6 +- node_modules/@types/node/domain.d.ts | 30 +- node_modules/@types/node/events.d.ts | 1548 +- node_modules/@types/node/fs.d.ts | 1133 +- node_modules/@types/node/fs/promises.d.ts | 90 +- node_modules/@types/node/globals.d.ts | 34 +- .../@types/node/globals.typedarray.d.ts | 79 + node_modules/@types/node/http.d.ts | 607 +- node_modules/@types/node/http2.d.ts | 1256 +- node_modules/@types/node/https.d.ts | 293 +- node_modules/@types/node/index.d.ts | 18 +- node_modules/@types/node/inspector.d.ts | 89 +- .../@types/node/inspector.generated.d.ts | 194 +- node_modules/@types/node/module.d.ts | 169 +- node_modules/@types/node/net.d.ts | 260 +- node_modules/@types/node/os.d.ts | 29 +- node_modules/@types/node/package.json | 6 +- node_modules/@types/node/path.d.ts | 265 +- node_modules/@types/node/perf_hooks.d.ts | 965 +- node_modules/@types/node/process.d.ts | 370 +- node_modules/@types/node/punycode.d.ts | 10 +- node_modules/@types/node/querystring.d.ts | 8 +- node_modules/@types/node/readline.d.ts | 187 +- .../@types/node/readline/promises.d.ts | 8 +- node_modules/@types/node/repl.d.ts | 173 +- node_modules/@types/node/sea.d.ts | 11 +- node_modules/@types/node/sqlite.d.ts | 258 +- node_modules/@types/node/stream.d.ts | 1082 +- .../@types/node/stream/consumers.d.ts | 20 +- node_modules/@types/node/stream/promises.d.ts | 151 +- node_modules/@types/node/stream/web.d.ts | 682 +- node_modules/@types/node/string_decoder.d.ts | 12 +- node_modules/@types/node/test.d.ts | 317 +- node_modules/@types/node/timers.d.ts | 134 +- node_modules/@types/node/timers/promises.d.ts | 8 +- node_modules/@types/node/tls.d.ts | 285 +- node_modules/@types/node/trace_events.d.ts | 18 +- .../@types/node/ts5.6/buffer.buffer.d.ts | 20 +- .../@types/node/ts5.6/globals.typedarray.d.ts | 16 + node_modules/@types/node/ts5.6/index.d.ts | 18 +- node_modules/@types/node/ts5.7/index.d.ts | 18 +- node_modules/@types/node/tty.d.ts | 74 +- node_modules/@types/node/url.d.ts | 693 +- node_modules/@types/node/util.d.ts | 943 +- node_modules/@types/node/v8.d.ts | 84 +- node_modules/@types/node/vm.d.ts | 331 +- node_modules/@types/node/wasi.d.ts | 10 +- .../node/web-globals/abortcontroller.d.ts | 29 +- .../@types/node/web-globals/events.d.ts | 12 + .../@types/node/web-globals/fetch.d.ts | 19 + node_modules/@types/node/worker_threads.d.ts | 656 +- node_modules/@types/node/zlib.d.ts | 134 +- .../async_event_emitter/CHANGELOG.md | 6 + .../async_event_emitter/dist/index.cjs | 2249 ++- .../async_event_emitter/dist/index.cjs.map | 2 +- .../async_event_emitter/dist/index.d.mts | 2 + .../async_event_emitter/dist/index.d.ts | 2 + .../async_event_emitter/dist/index.global.js | 2237 ++- .../dist/index.global.js.map | 2 +- .../async_event_emitter/dist/index.mjs | 2246 ++- .../async_event_emitter/dist/index.mjs.map | 2 +- .../async_event_emitter/package.json | 7 +- node_modules/discord-api-types/CHANGELOG.md | 111 + .../_generated_/rest/v10/interfaces.d.ts | 9 + .../_generated_/rest/v10/interfaces.d.ts.map | 2 +- .../_generated_/rest/v9/interfaces.d.ts | 2 + .../_generated_/rest/v9/interfaces.d.ts.map | 2 +- .../discord-api-types/gateway/v10.d.ts.map | 2 +- .../discord-api-types/gateway/v10.js.map | 2 +- .../discord-api-types/gateway/v9.d.ts.map | 2 +- .../discord-api-types/gateway/v9.js.map | 2 +- .../discord-api-types/globals.d.ts.map | 2 +- node_modules/discord-api-types/globals.js | 9 +- node_modules/discord-api-types/globals.js.map | 2 +- node_modules/discord-api-types/package.json | 20 +- .../discord-api-types/payloads/common.d.ts | 6 + .../payloads/common.d.ts.map | 2 +- .../discord-api-types/payloads/common.js | 6 + .../discord-api-types/payloads/common.js.map | 2 +- .../_chatInput/channel.d.ts.map | 2 +- .../_chatInput/integer.d.ts.map | 2 +- .../_chatInput/number.d.ts.map | 2 +- .../_chatInput/string.d.ts.map | 2 +- .../_chatInput/subcommand.d.ts.map | 2 +- .../_chatInput/subcommandGroup.d.ts.map | 2 +- .../_applicationCommands/chatInput.d.ts.map | 2 +- .../_applicationCommands/contextMenu.d.ts.map | 2 +- .../payloads/v10/_interactions/base.d.ts.map | 2 +- .../_interactions/messageComponents.d.ts.map | 2 +- .../v10/_interactions/modalSubmit.d.ts | 15 +- .../v10/_interactions/modalSubmit.d.ts.map | 2 +- .../payloads/v10/auditLog.d.ts | 12 +- .../payloads/v10/auditLog.d.ts.map | 2 +- .../payloads/v10/auditLog.js.map | 2 +- .../payloads/v10/channel.d.ts | 15 +- .../payloads/v10/channel.d.ts.map | 2 +- .../payloads/v10/channel.js.map | 2 +- .../discord-api-types/payloads/v10/guild.d.ts | 20 +- .../payloads/v10/guild.d.ts.map | 2 +- .../discord-api-types/payloads/v10/guild.js | 9 + .../payloads/v10/guild.js.map | 2 +- .../payloads/v10/guildScheduledEvent.d.ts.map | 2 +- .../payloads/v10/guildScheduledEvent.js.map | 2 +- .../payloads/v10/message.d.ts | 176 +- .../payloads/v10/message.d.ts.map | 2 +- .../discord-api-types/payloads/v10/message.js | 22 + .../payloads/v10/message.js.map | 2 +- .../payloads/v10/webhook.d.ts | 22 +- .../payloads/v10/webhook.d.ts.map | 2 +- .../discord-api-types/payloads/v10/webhook.js | 12 + .../payloads/v10/webhook.js.map | 2 +- .../_chatInput/channel.d.ts.map | 2 +- .../_chatInput/integer.d.ts.map | 2 +- .../_chatInput/number.d.ts.map | 2 +- .../_chatInput/string.d.ts.map | 2 +- .../_chatInput/subcommand.d.ts.map | 2 +- .../_chatInput/subcommandGroup.d.ts.map | 2 +- .../_applicationCommands/chatInput.d.ts.map | 2 +- .../_applicationCommands/contextMenu.d.ts.map | 2 +- .../payloads/v9/_interactions/base.d.ts.map | 2 +- .../_interactions/messageComponents.d.ts.map | 2 +- .../v9/_interactions/modalSubmit.d.ts | 15 +- .../v9/_interactions/modalSubmit.d.ts.map | 2 +- .../payloads/v9/auditLog.d.ts | 12 +- .../payloads/v9/auditLog.d.ts.map | 2 +- .../payloads/v9/auditLog.js.map | 2 +- .../payloads/v9/channel.d.ts | 15 +- .../payloads/v9/channel.d.ts.map | 2 +- .../payloads/v9/channel.js.map | 2 +- .../discord-api-types/payloads/v9/guild.d.ts | 20 +- .../payloads/v9/guild.d.ts.map | 2 +- .../discord-api-types/payloads/v9/guild.js | 9 + .../payloads/v9/guild.js.map | 2 +- .../payloads/v9/guildScheduledEvent.d.ts.map | 2 +- .../payloads/v9/guildScheduledEvent.js.map | 2 +- .../payloads/v9/message.d.ts | 176 +- .../payloads/v9/message.d.ts.map | 2 +- .../discord-api-types/payloads/v9/message.js | 22 + .../payloads/v9/message.js.map | 2 +- .../payloads/v9/webhook.d.ts | 22 +- .../payloads/v9/webhook.d.ts.map | 2 +- .../discord-api-types/payloads/v9/webhook.js | 12 + .../payloads/v9/webhook.js.map | 2 +- .../discord-api-types/rest/v10/guild.d.ts | 29 +- .../discord-api-types/rest/v10/guild.d.ts.map | 2 +- .../rest/v10/guildScheduledEvent.d.ts.map | 2 +- .../discord-api-types/rest/v10/index.d.ts.map | 2 +- .../discord-api-types/rest/v10/index.js | 11 + .../discord-api-types/rest/v10/index.js.map | 2 +- .../rest/v10/interactions.d.ts.map | 2 +- .../discord-api-types/rest/v9/guild.d.ts | 25 +- .../discord-api-types/rest/v9/guild.d.ts.map | 2 +- .../rest/v9/guildScheduledEvent.d.ts.map | 2 +- .../discord-api-types/rest/v9/index.d.ts.map | 2 +- .../discord-api-types/rest/v9/index.js | 2 + .../discord-api-types/rest/v9/index.js.map | 2 +- .../rest/v9/interactions.d.ts.map | 2 +- .../discord-api-types/rpc/v10.d.ts.map | 2 +- .../discord-api-types/utils/index.mjs | 1 + node_modules/discord-api-types/utils/v10.d.ts | 35 +- .../discord-api-types/utils/v10.d.ts.map | 2 +- node_modules/discord-api-types/utils/v10.js | 37 +- .../discord-api-types/utils/v10.js.map | 2 +- node_modules/discord-api-types/utils/v10.mjs | 1 + node_modules/discord-api-types/utils/v9.d.ts | 35 +- .../discord-api-types/utils/v9.d.ts.map | 2 +- node_modules/discord-api-types/utils/v9.js | 37 +- .../discord-api-types/utils/v9.js.map | 2 +- node_modules/discord-api-types/utils/v9.mjs | 1 + node_modules/discord.js/package.json | 10 +- .../discord.js/src/client/actions/Action.js | 21 +- .../src/client/actions/ActionsManager.js | 132 +- .../src/client/actions/MessagePollVoteAdd.js | 11 +- .../client/actions/MessagePollVoteRemove.js | 11 +- .../src/client/websocket/handlers/index.js | 11 +- .../discord.js/src/errors/ErrorCodes.js | 4 + .../discord.js/src/errors/Messages.js | 7 +- node_modules/discord.js/src/index.js | 3 + .../src/managers/GuildBanManager.js | 6 +- .../src/managers/GuildEmojiManager.js | 2 +- .../src/managers/GuildEmojiRoleManager.js | 10 +- .../discord.js/src/managers/GuildManager.js | 1 + .../src/managers/GuildMemberManager.js | 130 +- .../src/managers/GuildMemberRoleManager.js | 13 +- .../discord.js/src/managers/MessageManager.js | 18 +- .../src/structures/ApplicationCommand.js | 22 +- .../ApplicationRoleConnectionMetadata.js | 4 +- .../src/structures/ClientApplication.js | 4 +- .../src/structures/CommandInteraction.js | 11 +- .../discord.js/src/structures/Guild.js | 15 +- .../discord.js/src/structures/GuildMember.js | 24 +- .../src/structures/GuildTemplate.js | 1 + .../discord.js/src/structures/Invite.js | 12 + .../discord.js/src/structures/Message.js | 31 +- .../src/structures/ModalSubmitFields.js | 185 +- .../src/structures/ModalSubmitInteraction.js | 167 +- .../src/structures/PermissionOverwrites.js | 2 +- .../discord.js/src/structures/Poll.js | 150 +- .../discord.js/src/structures/PollAnswer.js | 53 +- .../discord.js/src/structures/Role.js | 2 +- .../src/structures/ThreadChannel.js | 2 +- .../discord.js/src/structures/User.js | 8 +- .../discord.js/src/structures/Webhook.js | 2 +- .../interfaces/InteractionResponses.js | 7 - node_modules/discord.js/src/util/APITypes.js | 20 + .../discord.js/src/util/Components.js | 66 + .../src/util/GuildMemberFlagsBitField.js | 3 +- node_modules/discord.js/src/util/Partials.js | 4 + .../src/util/ThreadMemberFlagsBitField.js | 5 +- node_modules/discord.js/typings/index.d.mts | 283 +- node_modules/discord.js/typings/index.d.ts | 283 +- node_modules/dotenv/CHANGELOG.md | 9 +- node_modules/dotenv/README-es.md | 15 +- node_modules/dotenv/README.md | 17 +- node_modules/dotenv/lib/main.d.ts | 2 +- node_modules/dotenv/package.json | 2 +- node_modules/eslint/README.md | 16 +- .../lib/cli-engine/lint-result-cache.js | 76 +- .../eslint/lib/eslint/eslint-helpers.js | 11 +- node_modules/eslint/lib/eslint/eslint.js | 206 +- node_modules/eslint/lib/eslint/worker.js | 17 +- .../languages/js/source-code/source-code.js | 4 +- node_modules/eslint/lib/linter/esquery.js | 2 +- node_modules/eslint/lib/linter/file-report.js | 2 +- node_modules/eslint/lib/linter/linter.js | 14 + .../lib/linter/source-code-traverser.js | 16 +- node_modules/eslint/lib/linter/timing.js | 39 +- .../eslint/lib/rules/array-bracket-newline.js | 2 +- .../eslint/lib/rules/array-bracket-spacing.js | 2 +- .../eslint/lib/rules/array-element-newline.js | 2 +- node_modules/eslint/lib/rules/arrow-parens.js | 2 +- .../eslint/lib/rules/arrow-spacing.js | 2 +- .../eslint/lib/rules/block-spacing.js | 2 +- node_modules/eslint/lib/rules/brace-style.js | 2 +- .../eslint/lib/rules/callback-return.js | 2 +- node_modules/eslint/lib/rules/comma-dangle.js | 2 +- .../eslint/lib/rules/comma-spacing.js | 2 +- node_modules/eslint/lib/rules/comma-style.js | 2 +- node_modules/eslint/lib/rules/complexity.js | 5 + .../lib/rules/computed-property-spacing.js | 2 +- node_modules/eslint/lib/rules/dot-location.js | 2 +- node_modules/eslint/lib/rules/eol-last.js | 2 +- .../eslint/lib/rules/for-direction.js | 5 +- .../eslint/lib/rules/func-call-spacing.js | 4 +- .../rules/function-call-argument-newline.js | 2 +- .../lib/rules/function-paren-newline.js | 2 +- .../lib/rules/generator-star-spacing.js | 2 +- .../eslint/lib/rules/global-require.js | 2 +- .../eslint/lib/rules/handle-callback-err.js | 2 +- node_modules/eslint/lib/rules/id-blacklist.js | 2 +- .../lib/rules/implicit-arrow-linebreak.js | 2 +- .../eslint/lib/rules/indent-legacy.js | 1 + node_modules/eslint/lib/rules/indent.js | 2 +- node_modules/eslint/lib/rules/jsx-quotes.js | 2 +- node_modules/eslint/lib/rules/key-spacing.js | 2 +- .../eslint/lib/rules/keyword-spacing.js | 2 +- .../eslint/lib/rules/line-comment-position.js | 2 +- .../eslint/lib/rules/linebreak-style.js | 2 +- .../eslint/lib/rules/lines-around-comment.js | 2 +- .../lib/rules/lines-around-directive.js | 2 +- .../lib/rules/lines-between-class-members.js | 2 +- node_modules/eslint/lib/rules/max-len.js | 2 +- .../lib/rules/max-statements-per-line.js | 2 +- .../lib/rules/multiline-comment-style.js | 2 +- .../eslint/lib/rules/multiline-ternary.js | 2 +- node_modules/eslint/lib/rules/new-parens.js | 2 +- .../eslint/lib/rules/newline-after-var.js | 2 +- .../eslint/lib/rules/newline-before-return.js | 2 +- .../lib/rules/newline-per-chained-call.js | 2 +- .../eslint/lib/rules/no-buffer-constructor.js | 2 +- .../eslint/lib/rules/no-catch-shadow.js | 2 +- .../eslint/lib/rules/no-confusing-arrow.js | 2 +- node_modules/eslint/lib/rules/no-dupe-args.js | 13 +- .../eslint/lib/rules/no-dupe-class-members.js | 2 +- .../eslint/lib/rules/no-extra-parens.js | 2 +- .../eslint/lib/rules/no-extra-semi.js | 2 +- .../eslint/lib/rules/no-floating-decimal.js | 2 +- .../eslint/lib/rules/no-loss-of-precision.js | 417 +- .../eslint/lib/rules/no-mixed-operators.js | 2 +- .../eslint/lib/rules/no-mixed-requires.js | 2 +- .../lib/rules/no-mixed-spaces-and-tabs.js | 2 +- .../eslint/lib/rules/no-multi-spaces.js | 2 +- .../lib/rules/no-multiple-empty-lines.js | 2 +- .../eslint/lib/rules/no-native-reassign.js | 2 +- .../eslint/lib/rules/no-negated-in-lhs.js | 2 +- .../eslint/lib/rules/no-new-object.js | 2 +- .../eslint/lib/rules/no-new-require.js | 2 +- .../eslint/lib/rules/no-new-symbol.js | 2 +- .../eslint/lib/rules/no-path-concat.js | 2 +- .../eslint/lib/rules/no-process-env.js | 2 +- .../eslint/lib/rules/no-process-exit.js | 2 +- .../eslint/lib/rules/no-restricted-imports.js | 175 +- .../eslint/lib/rules/no-restricted-modules.js | 2 +- .../eslint/lib/rules/no-spaced-func.js | 2 +- node_modules/eslint/lib/rules/no-sync.js | 2 +- node_modules/eslint/lib/rules/no-tabs.js | 2 +- .../eslint/lib/rules/no-trailing-spaces.js | 2 +- .../rules/no-whitespace-before-property.js | 2 +- .../rules/nonblock-statement-body-position.js | 2 +- .../eslint/lib/rules/object-curly-newline.js | 2 +- .../eslint/lib/rules/object-curly-spacing.js | 2 +- .../lib/rules/object-property-newline.js | 2 +- .../eslint/lib/rules/object-shorthand.js | 185 +- .../lib/rules/one-var-declaration-per-line.js | 2 +- .../eslint/lib/rules/operator-linebreak.js | 2 +- .../eslint/lib/rules/padded-blocks.js | 2 +- .../rules/padding-line-between-statements.js | 2 +- .../eslint/lib/rules/preserve-caught-error.js | 6 +- node_modules/eslint/lib/rules/quote-props.js | 2 +- node_modules/eslint/lib/rules/quotes.js | 2 +- .../eslint/lib/rules/rest-spread-spacing.js | 2 +- node_modules/eslint/lib/rules/semi-spacing.js | 2 +- node_modules/eslint/lib/rules/semi-style.js | 2 +- node_modules/eslint/lib/rules/semi.js | 2 +- .../eslint/lib/rules/space-before-blocks.js | 2 +- .../lib/rules/space-before-function-paren.js | 2 +- .../eslint/lib/rules/space-in-parens.js | 2 +- .../eslint/lib/rules/space-infix-ops.js | 2 +- .../eslint/lib/rules/space-unary-ops.js | 2 +- .../eslint/lib/rules/spaced-comment.js | 2 +- .../eslint/lib/rules/switch-colon-spacing.js | 2 +- .../lib/rules/template-curly-spacing.js | 2 +- .../eslint/lib/rules/template-tag-spacing.js | 2 +- .../eslint/lib/rules/utils/ast-utils.js | 1 + node_modules/eslint/lib/rules/wrap-iife.js | 2 +- node_modules/eslint/lib/rules/wrap-regex.js | 2 +- .../eslint/lib/rules/yield-star-spacing.js | 2 +- .../eslint/lib/services/warning-service.js | 13 + .../eslint/lib/shared/serialization.js | 2 +- node_modules/eslint/lib/types/config-api.d.ts | 8 +- node_modules/eslint/lib/types/index.d.ts | 1173 +- node_modules/eslint/lib/types/rules.d.ts | 2 + node_modules/eslint/package.json | 23 +- node_modules/esquery/README.md | 2 +- node_modules/esquery/dist/esquery.esm.js | 588 +- node_modules/esquery/dist/esquery.esm.min.js | 2 +- .../esquery/dist/esquery.esm.min.js.map | 2 +- node_modules/esquery/dist/esquery.js | 588 +- node_modules/esquery/dist/esquery.lite.js | 588 +- node_modules/esquery/dist/esquery.lite.min.js | 2 +- .../esquery/dist/esquery.lite.min.js.map | 2 +- node_modules/esquery/dist/esquery.min.js | 2 +- node_modules/esquery/dist/esquery.min.js.map | 2 +- node_modules/esquery/package.json | 2 +- node_modules/esquery/parser.js | 471 +- node_modules/iconv-lite/Changelog.md | 124 +- node_modules/iconv-lite/README.md | 112 +- .../iconv-lite/encodings/dbcs-codec.js | 919 +- .../iconv-lite/encodings/dbcs-data.js | 313 +- node_modules/iconv-lite/encodings/index.js | 31 +- node_modules/iconv-lite/encodings/internal.js | 290 +- .../iconv-lite/encodings/sbcs-codec.js | 105 +- .../iconv-lite/encodings/sbcs-data.js | 288 +- .../encodings/tables/gbk-added.json | 5 +- node_modules/iconv-lite/encodings/utf16.js | 250 +- node_modules/iconv-lite/encodings/utf32.js | 307 - node_modules/iconv-lite/encodings/utf7.js | 415 +- node_modules/iconv-lite/lib/bom-handling.js | 64 +- .../iconv-lite/lib/helpers/merge-exports.js | 13 - node_modules/iconv-lite/lib/index.d.ts | 19 +- node_modules/iconv-lite/lib/index.js | 232 +- node_modules/iconv-lite/lib/streams.js | 202 +- node_modules/iconv-lite/package.json | 49 +- node_modules/js-yaml/CHANGELOG.md | 616 - node_modules/js-yaml/README.md | 17 +- node_modules/js-yaml/dist/js-yaml.js | 38 +- node_modules/js-yaml/dist/js-yaml.min.js | 4 +- node_modules/js-yaml/dist/js-yaml.mjs | 35 +- node_modules/js-yaml/lib/loader.js | 30 +- node_modules/js-yaml/package.json | 2 +- node_modules/lodash/README.md | 4 +- node_modules/lodash/_baseUnset.js | 49 +- node_modules/lodash/core.js | 2 +- node_modules/lodash/core.min.js | 2 +- node_modules/lodash/flake.lock | 40 - node_modules/lodash/flake.nix | 20 - node_modules/lodash/lodash.js | 47 +- node_modules/lodash/lodash.min.js | 114 +- node_modules/lodash/package.json | 2 +- node_modules/lodash/release.md | 48 - node_modules/lru-cache/LICENSE | 15 - node_modules/lru-cache/README.md | 1117 -- node_modules/lru-cache/index.d.ts | 869 -- node_modules/lru-cache/index.js | 1227 -- node_modules/lru-cache/index.mjs | 1227 -- node_modules/lru-cache/package.json | 96 - node_modules/lru.min/README.md | 42 +- node_modules/lru.min/browser/lru.min.js | 2 +- node_modules/lru.min/lib/index.js | 185 +- node_modules/lru.min/lib/index.mjs | 168 +- node_modules/lru.min/package.json | 30 +- .../magic-bytes.js/dist/index.spec.js | 17 + .../dist/model/pattern-tree.d.ts.map | 2 +- .../magic-bytes.js/dist/model/pattern-tree.js | 15 +- node_modules/magic-bytes.js/package.json | 2 +- .../lib/auth_plugins/sha256_password.js | 9 + node_modules/mysql2/lib/base/connection.js | 35 +- .../mysql2/lib/commands/client_handshake.js | 2 - node_modules/mysql2/lib/commands/query.js | 7 +- .../mysql2/lib/commands/server_handshake.js | 1 - node_modules/mysql2/lib/connection_config.js | 5 +- node_modules/mysql2/lib/constants/client.js | 1 - node_modules/mysql2/lib/helpers.js | 5 +- node_modules/mysql2/lib/packets/packet.js | 3 +- node_modules/mysql2/lib/results_stream.js | 4 +- node_modules/mysql2/package.json | 52 +- node_modules/mysql2/promise.d.ts | 3 + node_modules/mysql2/typings/mysql/index.d.ts | 1 + .../mysql2/typings/mysql/lib/Connection.d.ts | 9 + node_modules/named-placeholders/README.md | 4 +- node_modules/named-placeholders/index.js | 60 +- node_modules/named-placeholders/package.json | 24 +- node_modules/undici-types/agent.d.ts | 5 +- node_modules/undici-types/client.d.ts | 2 - .../undici-types/diagnostics-channel.d.ts | 1 - node_modules/undici-types/dispatcher.d.ts | 6 - node_modules/undici-types/errors.d.ts | 20 +- node_modules/undici-types/eventsource.d.ts | 7 +- node_modules/undici-types/h2c-client.d.ts | 2 - node_modules/undici-types/index.d.ts | 7 +- node_modules/undici-types/interceptors.d.ts | 5 + .../undici-types/mock-interceptor.d.ts | 1 - node_modules/undici-types/package.json | 2 +- node_modules/undici-types/webidl.d.ts | 105 +- node_modules/ws/lib/constants.js | 1 + node_modules/ws/lib/websocket-server.js | 6 +- node_modules/ws/lib/websocket.js | 21 +- node_modules/ws/package.json | 2 +- package-lock.json | 4135 ++++-- package.json | 51 +- server/OAUTH_SETUP.md | 151 + server/README.md | 89 + server/public/style.css | 327 + server/transcript-server.js | 467 + .../2026-02-08-syxpi-PLNT-MLDPB8OF-ZM86.html | 55 + .../2026-02-08-syxpi-TECH-MLDPXDZJ-8KNS.html | 55 + transcripts/transcript.css | 274 + utils/constants.js | 70 + utils/helpers.js | 103 + 586 files changed, 58986 insertions(+), 25205 deletions(-) delete mode 100644 .idea/vcs.xml create mode 100644 VERIFIED.md create mode 100644 commands/info/adminprofil.js create mode 100644 commands/info/embed.js create mode 100644 commands/info/profil.js create mode 100644 commands/info/serverinfo.js create mode 100644 commands/info/userinfo.js create mode 100644 commands/moderation/changemute.js create mode 100644 commands/moderation/changesanction.js create mode 100644 commands/moderation/clear.js create mode 100644 commands/moderation/kick.js create mode 100644 commands/moderation/mute.js create mode 100644 commands/moderation/mysanctions.js create mode 100644 commands/moderation/purge.js create mode 100644 commands/moderation/revokesanction.js create mode 100644 commands/moderation/unmute.js create mode 100644 commands/moderation/untimeout.js create mode 100644 commands/moderation/warn.js create mode 100644 commands/ticket/ticket.js create mode 100644 commands/utility/avatar.js create mode 100644 commands/xp/bumptime.js create mode 100644 commands/xp/leaderboard.js create mode 100644 commands/xp/level.js create mode 100644 commands/xp/resetlevel.js create mode 100644 commands/xp/xpexclude.js create mode 100644 env.example create mode 100644 events/messageCreate.js create mode 100644 events/voiceStateUpdate.js create mode 100644 functions/bump/bumpReminder.js create mode 100644 functions/moderation/autoUnmute.js create mode 100644 functions/xp/xp.js delete mode 100644 node_modules/.package-lock.json delete mode 100644 node_modules/@eslint/config-array/dist/cjs/types.ts delete mode 100644 node_modules/@eslint/object-schema/dist/cjs/types.ts delete mode 100644 node_modules/iconv-lite/encodings/utf32.js delete mode 100644 node_modules/iconv-lite/lib/helpers/merge-exports.js delete mode 100644 node_modules/js-yaml/CHANGELOG.md delete mode 100644 node_modules/lodash/flake.lock delete mode 100644 node_modules/lodash/flake.nix delete mode 100644 node_modules/lodash/release.md delete mode 100644 node_modules/lru-cache/LICENSE delete mode 100644 node_modules/lru-cache/README.md delete mode 100644 node_modules/lru-cache/index.d.ts delete mode 100644 node_modules/lru-cache/index.js delete mode 100644 node_modules/lru-cache/index.mjs delete mode 100644 node_modules/lru-cache/package.json create mode 100644 server/OAUTH_SETUP.md create mode 100644 server/README.md create mode 100644 server/public/style.css create mode 100644 server/transcript-server.js create mode 100644 transcripts/plainte/2026-02-08/2026-02-08-syxpi-PLNT-MLDPB8OF-ZM86.html create mode 100644 transcripts/problème-technique/2026-02-08/2026-02-08-syxpi-TECH-MLDPXDZJ-8KNS.html create mode 100644 transcripts/transcript.css create mode 100644 utils/constants.js create mode 100644 utils/helpers.js diff --git a/.env b/.env index 0bccaf2..dea7890 100644 --- a/.env +++ b/.env @@ -1,2 +1,16 @@ -TOKEN=MTQwNzE2NDE4NDM3Mzg4NzAzOA.GTKr90.U2ootmaOWuycn4ZqbE4kqSpQqeVGvw7Zj5vHgM -CLIENT_ID=1407164184373887038 \ No newline at end of file +# --- Discord --- +TOKEN=MTQ1MjQxMzYyMjczODM1ODMyMw.GRRuIh.Cm--nT3CJuGgGZZoq8-70mL9GPMVlMFUzgDzGs +CLIENT_ID=1452413622738358323 +GUILD_ID=1452413993841856544 +CLIENT_SECRET=hNpxmzNWwVaRGCYVquKNGuNi7Z6CnX7t +DISCORD_CALLBACK_URL=http://localhost:3000/auth/discord/callback +DISCORD_PUBLIC_CALLBACK_URL=https://transcript.syxpi.fr/auth/discord/callback + +# --- Base de Données --- +DB_HOST=192.168.1.6 +DB_USER=bot +DB_PASSWORD='NxKr63LJB65pHv%t7E$JqgxKRsZMw%VIHEZAjq%^O0KYKjW#cRc^ebIH@%S9kaTh*GIg^D3ai4KBjMeXEh6xwv#9afQIR2$!2UB8C3ToXjnYFmzR%$lfpshnf8g@8229' +DB_NAME=bot + +# --- Autres --- +MODERATOR_IDS=361526553940721684,1013868393218183268,929793784093495306 \ No newline at end of file diff --git a/.gitignore b/.gitignore index d344ba6..2d7ec5c 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ -config.json +.env +node_modules/ diff --git a/.idea/dataSources.xml b/.idea/dataSources.xml index 9fb3f76..3e0e071 100644 --- a/.idea/dataSources.xml +++ b/.idea/dataSources.xml @@ -1,27 +1,13 @@ - - sqlite.xerial + + mysql.8 true - org.sqlite.JDBC - jdbc:sqlite:bans.db + true + com.mysql.cj.jdbc.Driver + jdbc:mysql://192.168.1.6:3306 $ProjectFileDir$ - - sqlite.xerial - true - org.sqlite.JDBC - jdbc:sqlite:$PROJECT_DIR$/bans.db - $ProjectFileDir$ - - - file://$APPLICATION_CONFIG_DIR$/jdbc-drivers/Xerial SQLiteJDBC/3.45.1/org/xerial/sqlite-jdbc/3.45.1.0/sqlite-jdbc-3.45.1.0.jar - - - file://$APPLICATION_CONFIG_DIR$/jdbc-drivers/Xerial SQLiteJDBC/3.45.1/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar - - - \ No newline at end of file diff --git a/.idea/data_source_mapping.xml b/.idea/data_source_mapping.xml index e0aa78a..8f2719f 100644 --- a/.idea/data_source_mapping.xml +++ b/.idea/data_source_mapping.xml @@ -1,7 +1,11 @@ - - + + + + + + \ No newline at end of file diff --git a/.idea/femboy-france-bot.iml b/.idea/femboy-france-bot.iml index 24643cc..9f7ba11 100644 --- a/.idea/femboy-france-bot.iml +++ b/.idea/femboy-france-bot.iml @@ -8,5 +8,6 @@ + \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml index 0de88a0..3ed4fe9 100644 --- a/.idea/inspectionProfiles/Project_Default.xml +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -1,7 +1,11 @@ \ No newline at end of file diff --git a/.idea/jsLibraryMappings.xml b/.idea/jsLibraryMappings.xml index d23208f..544bde3 100644 --- a/.idea/jsLibraryMappings.xml +++ b/.idea/jsLibraryMappings.xml @@ -1,6 +1,7 @@ + \ No newline at end of file diff --git a/.idea/sqldialects.xml b/.idea/sqldialects.xml index 479ef58..ba4e51f 100644 --- a/.idea/sqldialects.xml +++ b/.idea/sqldialects.xml @@ -1,12 +1,13 @@ - - - + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index 94a25f7..0000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/README.md b/README.md index f544e00..57cb757 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,90 @@ -Temps de Projet Femboy-France-Bot (Ancien nom): [![wakatime](https://wakatime.com/badge/user/82e1aed9-c281-4a7b-9909-1dfb8022b027/project/30e19ddc-4559-496e-8632-68eebdbc5450.svg)](https://wakatime.com/badge/user/82e1aed9-c281-4a7b-9909-1dfb8022b027/project/30e19ddc-4559-496e-8632-68eebdbc5450) +# 🥐 Femboy Croissant Bot -Temps de Projet France-Femboy-Bot (Actuel): [![wakatime](https://wakatime.com/badge/user/82e1aed9-c281-4a7b-9909-1dfb8022b027/project/e30f3a7a-bda3-4fcf-9580-e57b6463ccab.svg)](https://wakatime.com/badge/user/82e1aed9-c281-4a7b-9909-1dfb8022b027/project/e30f3a7a-bda3-4fcf-9580-e57b6463ccab) +Un bot Discord complet et moderne pour la gestion de communauté, incluant modération, système d'XP, tickets avec transcription web, et plus encore. + +## 🌟 Fonctionnalités + +### 🛡️ Modération +- **Sanctions complètes :** Ban, Kick, Mute (Timeout), Warn. +- **Gestion des sanctions :** `unban`, `unmute`, `untimeout`, `changesanction`, `revokesanction`. +- **Logs détaillés :** Toutes les actions sont enregistrées en base de données et dans un salon de logs. +- **Casier judiciaire :** Visualisez l'historique des sanctions d'un membre avec `/casier`. +- **Auto-Unban/Unmute :** Gestion automatique des expirations de sanctions. + +### 🎫 Système de Tickets +- **Types multiples :** Support, Plainte, Candidature, etc. +- **Transcriptions Web :** Génération automatique de pages HTML pour les archives de tickets. +- **Dashboard Web :** Interface pour visualiser et gérer les transcripts (avec authentification Discord). +- **Candidatures :** Formulaire intégré avec questions personnalisées. + +### 📈 Système d'XP +- **Progression :** Gain d'XP par message et en vocal. +- **Niveaux :** Annonces de level-up personnalisées. +- **Classement :** Leaderboard global avec `/leaderboard`. +- **Exclusion :** Possibilité d'exclure certains salons du gain d'XP. +- **Bumps :** Récompenses d'XP pour les bumps (Disboard) et rappels automatiques. + +### 🛠️ Utilitaires +- **Info :** `/userinfo`, `/serverinfo`, `/profil`. +- **Profils personnalisables :** Signature, anniversaire, badges (détection automatique Nitro/Boost). +- **Dev :** Commandes de maintenance (`/reload`, `/infra`). + +## 🚀 Installation + +### Prérequis +- Node.js v16.9.0 ou supérieur. +- Une base de données MySQL/MariaDB. +- Un bot Discord créé sur le [Developer Portal](https://discord.com/developers/applications). + +### Configuration +1. Clonez le dépôt. +2. Installez les dépendances : + ```bash + npm install + ``` +3. Configurez le fichier `.env` (voir `.env.example` ou ci-dessous) : + ```env + TOKEN=votre_token_bot + CLIENT_ID=votre_client_id + GUILD_ID=id_serveur_principal + + DB_HOST=localhost + DB_USER=root + DB_PASSWORD=votre_mot_de_passe + DB_NAME=bot + + DISCORD_CLIENT_SECRET=votre_secret_oauth + DISCORD_CALLBACK_URL=http://localhost:3000/auth/discord/callback + TRANSCRIPT_PORT=3000 + MODERATOR_IDS=id1,id2 + ``` + +### Démarrage +1. Déployez les commandes Slash : + ```bash + npm run deploy + ``` +2. Lancez le bot : + ```bash + npm start + ``` +3. (Optionnel) Lancez le serveur de transcripts : + ```bash + npm run server + ``` + +## 📂 Structure du Projet + +- `/commands` : Commandes Slash organisées par catégorie. +- `/events` : Gestionnaires d'événements Discord (message, interaction, vocal...). +- `/functions` : Logique métier (DB, XP, Modération). +- `/server` : Serveur web Express pour les transcripts. +- `/utils` : Constantes et fonctions utilitaires. + +## 🔒 Sécurité +- Les tokens et mots de passe ne doivent **jamais** être partagés. +- Le fichier `.env` est ignoré par Git. +- Le serveur web utilise l'authentification OAuth2 Discord pour protéger les transcripts. + +--- +*Développé avec ❤️ par Syxpi* \ No newline at end of file diff --git a/VERIFIED.md b/VERIFIED.md new file mode 100644 index 0000000..12e8e9c --- /dev/null +++ b/VERIFIED.md @@ -0,0 +1,94 @@ +# État de Vérification du Projet + +Ce fichier recense les fichiers du projet et leur état de vérification/correction. + +## Légende +- ✅ : Vérifié et corrigé (si nécessaire) +- ❌ : Non vérifié ou nécessite attention +- ⚠️ : Vérifié mais des améliorations sont possibles + +## Structure du Projet + +### Racine +- ✅ `index.js` : Gestion des erreurs de chargement ajoutée. +- ✅ `VERIFIED.md` : Ce fichier. +- ✅ `deploy-commands.js` : Vérifié, script robuste. +- ✅ `eslint.config.js` : Vérifié. +- ✅ `package.json` : Vérifié. +- ✅ `README.md` : Documentation complète ajoutée. +- ✅ `.env.example` : Vérifié (et `.env` configuré manuellement). +- ✅ `.gitignore` : Vérifié. + +### Events (`/events`) +- ✅ `interactionCreate.js` : Gestion des erreurs globale + correction imports + MessageFlags. +- ✅ `messageCreate.js` : Refactorisation, nettoyage logique XP/Bump/Tickets. +- ✅ `ready.js` : Vérifié, RAS. +- ✅ `voiceStateUpdate.js` : Refonte complète de la logique des timers. + +### Commands (`/commands`) + +#### Ticket (`/commands/ticket`) +- ✅ `ticket.js` : Imports corrigés, timestamp SQL ajouté, MessageFlags, suppression modal delete, fix timestamp candidature, embed amélioré, transcript auto, fix chemin DB. + +#### Utility (`/commands/utility`) +- ✅ `ping.js` : Correction warning `fetchReply`. +- ✅ `avatar.js` : Vérifié, RAS. + +#### XP (`/commands/xp`) +- ✅ `bumptime.js` : Nettoyage, MessageFlags. +- ✅ `leaderboard.js` : Nettoyage, optimisation. +- ✅ `level.js` : Nettoyage, MessageFlags, formatage temps vocal. +- ✅ `resetlevel.js` : Nettoyage, MessageFlags. +- ✅ `xpexclude.js` : Nettoyage, MessageFlags. + +#### Moderation (`/commands/moderation`) +- ✅ `ban.js` : Nettoyage, MessageFlags, gestion erreurs. +- ✅ `casier.js` : Nettoyage, MessageFlags, pagination. +- ✅ `changemute.js` : Nettoyage, MessageFlags. +- ✅ `changesanction.js` : Nettoyage, MessageFlags. +- ✅ `clear.js` : Nettoyage, MessageFlags. +- ✅ `kick.js` : Nettoyage, MessageFlags. +- ✅ `mute.js` : Nettoyage, MessageFlags. +- ✅ `mysanctions.js` : Nettoyage, MessageFlags. +- ✅ `purge.js` : Nettoyage, MessageFlags. +- ✅ `revokesanction.js` : Nettoyage, MessageFlags. +- ✅ `unban.js` : Nettoyage, MessageFlags. +- ✅ `unmute.js` : Nettoyage, MessageFlags. +- ✅ `untimeout.js` : Nettoyage, MessageFlags. +- ✅ `warn.js` : Nettoyage, MessageFlags. + +#### Info (`/commands/info`) +- ✅ `adminprofil.js` : Nettoyage, MessageFlags. +- ✅ `embed.js` : Nettoyage. +- ✅ `info.js` : Nettoyage. +- ✅ `profil.js` : Nettoyage, MessageFlags, optimisation badges, nouveaux champs (anniversaire, couleur, etc.), validation dates. +- ✅ `serverinfo.js` : Nettoyage, traduction statuts. +- ✅ `userinfo.js` : Nettoyage, optimisation rôles. + +#### Dev (`/commands/dev`) +- ✅ `infra.js` : Nettoyage. +- ✅ `reload.js` : Nettoyage, MessageFlags. + +### Functions (`/functions`) + +#### Database (`/functions/database`) +- ✅ `db.js` : Nettoyage, sécurisation mot de passe (via env), migrations robustes (sans IF NOT EXISTS), nouvelles colonnes profil. + +#### XP (`/functions/xp`) +- ✅ `xp.js` : Vérifié, logique OK. + +#### Moderation (`/functions/moderation`) +- ✅ `autoUnban.js` : Nettoyage. +- ✅ `autoUnmute.js` : Nettoyage. + +#### Bump (`/functions/bump`) +- ✅ `bumpReminder.js` : Nettoyage, correction requête SQL. + +### Server (`/server`) +- ✅ `transcript-server.js` : Nettoyage, fix CSS (routes wildcard), logs debug, design moderne Dark Theme, filtrage JS. +- ✅ `README.md` : Vérifié. +- ✅ `public/transcript.css` : Design moderne Dark Theme. + +### Utils (`/utils`) +- ✅ `constants.js` : Vérifié. +- ✅ `helpers.js` : Vérifié. diff --git a/commands/dev/infra.js b/commands/dev/infra.js index 96fcfd7..0fcef7e 100644 --- a/commands/dev/infra.js +++ b/commands/dev/infra.js @@ -1,65 +1,54 @@ const os = require('os'); const fs = require('fs'); - - -const cpuInfo = os.cpus()[0].model; // modèle du CPU -const cpuCores = os.cpus().length; // nombre de coeurs - -const totalRAM = (os.totalmem() / (1024 ** 3)).toFixed(2); // en Go -const freeRAM = (os.freemem() / (1024 ** 3)).toFixed(2); // en Go +const { SlashCommandBuilder, EmbedBuilder, PermissionFlagsBits } = require('discord.js'); +const { formatUptime } = require('../../utils/helpers'); +const { colors } = require('../../utils/constants'); function getOS() { - const platform = os.platform(); // ex: win32, linux - const release = os.release(); // version du kernel / OS + const platform = os.platform(); + const release = os.release(); switch (platform) { - case "win32": - return `Windows ${release}`; - case "darwin": - return `macOS ${release}`; - case "linux": + case 'win32': return `Windows ${release}`; + case 'darwin': return `macOS ${release}`; + case 'linux': try { - const data = fs.readFileSync("/etc/os-release", "utf8"); + const data = fs.readFileSync('/etc/os-release', 'utf8'); const match = data.match(/PRETTY_NAME="(.+)"/); if (match) return `${match[1]} (kernel ${release})`; - } catch { - return `Linux ${release}`; - } - default: - return `${platform} ${release}`; + } catch { return `Linux ${release}`; } + default: return `${platform} ${release}`; } } -const uptime = os.uptime(); // en secondes - -function formatUptime(seconds) { - const days = Math.floor(seconds / 86400); - const hours = Math.floor((seconds % 86400) / 3600); - const minutes = Math.floor((seconds % 3600) / 60); - const secs = Math.floor(seconds % 60); - - return `${days}j ${hours}h ${minutes}m ${secs}s`; -} - - -const { SlashCommandBuilder, EmbedBuilder } = require('discord.js'); - module.exports = { category: 'dev', data: new SlashCommandBuilder() .setName('infra') - .setDescription('Voir l’infrastructure du bot'), + .setDescription('Voir l\'infrastructure du bot') + .setDefaultMemberPermissions(PermissionFlagsBits.Administrator), async execute(interaction) { + const cpuInfo = os.cpus()[0].model; + const cpuCores = os.cpus().length; + const totalRAM = (os.totalmem() / (1024 ** 3)).toFixed(2); + const freeRAM = (os.freemem() / (1024 ** 3)).toFixed(2); + const usedRAM = (totalRAM - freeRAM).toFixed(2); + const ramUsagePercent = ((usedRAM / totalRAM) * 100).toFixed(1); + const uptime = os.uptime(); + const embed = new EmbedBuilder() - .setTitle('Infrastructure du bot') - .setColor('Blue') + .setTitle('🖥️ Infrastructure du Bot') + .setColor(colors.info) .addFields( - { name: 'CPU', value: `${cpuInfo} (${cpuCores} coeurs)`, inline: true }, - { name: 'RAM', value: `${freeRAM} Go libres / ${totalRAM} Go totaux`, inline: true }, - { name: 'OS', value: getOS(), inline: true }, - { name: 'Uptime', value: formatUptime(uptime), inline: true } + { name: '💻 CPU', value: `${cpuInfo}\n${cpuCores} cœurs`, inline: true }, + { name: '💾 RAM', value: `${usedRAM} Go / ${totalRAM} Go\n${ramUsagePercent}% utilisée`, inline: true }, + { name: '🖥️ OS', value: getOS(), inline: true }, + { name: '⏱️ Uptime Système', value: formatUptime(uptime), inline: true }, + { name: '📊 Node.js', value: process.version, inline: true }, + { name: '📦 Architecture', value: os.arch(), inline: true } ) + .setFooter({ text: interaction.client.user.username, iconURL: interaction.client.user.displayAvatarURL() }) .setTimestamp(); await interaction.reply({ embeds: [embed] }); - } -}; + }, +}; \ No newline at end of file diff --git a/commands/dev/reload.js b/commands/dev/reload.js index 8f11931..fffdab2 100644 --- a/commands/dev/reload.js +++ b/commands/dev/reload.js @@ -1,37 +1,40 @@ -const { SlashCommandBuilder, PermissionFlagsBits } = require('discord.js'); +const { SlashCommandBuilder, PermissionFlagsBits, MessageFlags } = require('discord.js'); module.exports = { category: 'dev', data: new SlashCommandBuilder() .setName('reload') - .setDescription('Reloads a command.') + .setDescription('Recharge une commande.') .setDefaultMemberPermissions(PermissionFlagsBits.Administrator) .addStringOption(option => option.setName('command') - .setDescription('The command to reload.') + .setDescription('La commande à recharger.') .setRequired(true)), async execute(interaction) { if (!interaction.member.permissions.has(PermissionFlagsBits.Administrator)) { - return interaction.reply({ content: '❌ Only administrators can use this command.', embeds: [embed] }); + return interaction.reply({ content: '❌ Seuls les administrateurs peuvent utiliser cette commande.', flags: MessageFlags.Ephemeral }); } - const commandName = interaction.options.getString('command', true).toLowerCase(); const command = interaction.client.commands.get(commandName); if (!command) { - return interaction.reply({ content: `There is no command with name \`${commandName}\`!`, embeds: [embed] }); + return interaction.reply({ content: `❌ Aucune commande nommée \`${commandName}\` n'a été trouvée !`, flags: MessageFlags.Ephemeral }); } - delete require.cache[require.resolve(`../${command.category}/${command.data.name}.js`)]; - try { - const newCommand = require(`../${command.category}/${command.data.name}.js`); + // Supprimer du cache + const commandPath = `../${command.category}/${command.data.name}.js`; + delete require.cache[require.resolve(commandPath)]; + + // Recharger + const newCommand = require(commandPath); interaction.client.commands.set(newCommand.data.name, newCommand); - await interaction.reply({ content: `✅ Command \`${newCommand.data.name}\` was reloaded!`, }); + + await interaction.reply({ content: `✅ Commande \`${newCommand.data.name}\` rechargée avec succès !`, flags: MessageFlags.Ephemeral }); } catch (error) { console.error(error); - await interaction.reply({ content: `❌ Error while reloading \`${command.data.name}\`:\n\`${error.message}\``, embeds: [embed] }); + await interaction.reply({ content: `❌ Erreur lors du rechargement de \`${command.data.name}\`:\n\`${error.message}\``, flags: MessageFlags.Ephemeral }); } }, -}; +}; \ No newline at end of file diff --git a/commands/info/adminprofil.js b/commands/info/adminprofil.js new file mode 100644 index 0000000..ee19afc --- /dev/null +++ b/commands/info/adminprofil.js @@ -0,0 +1,119 @@ +const { SlashCommandBuilder, EmbedBuilder, PermissionFlagsBits, MessageFlags } = require('discord.js'); +const db = require('../../functions/database/db.js'); +const { colors } = require('../../utils/constants'); +const { sendLog } = require('../../utils/helpers'); + +module.exports = { + category: 'info', + data: new SlashCommandBuilder() + .setName('adminprofil') + .setDescription('Administrer les profils utilisateurs (Admin uniquement)') + .addSubcommand(subcommand => + subcommand + .setName('reset') + .setDescription('Réinitialiser le profil d\'un utilisateur') + .addUserOption(option => + option.setName('user') + .setDescription('L\'utilisateur dont tu veux réinitialiser le profil') + .setRequired(true)) + .addStringOption(option => + option.setName('type') + .setDescription('Ce qui doit être réinitialisé') + .setRequired(true) + .addChoices( + { name: 'Signature', value: 'signature' }, + { name: 'Tout le profil', value: 'all' } + )) + .addStringOption(option => + option.setName('reason') + .setDescription('Raison de la réinitialisation') + .setRequired(false))), + async execute(interaction) { + await interaction.deferReply({ flags: MessageFlags.Ephemeral }); + + if (!interaction.member.permissions.has(PermissionFlagsBits.Administrator)) { + return interaction.editReply({ + content: '❌ Tu n\'as pas la permission d\'utiliser cette commande. (Administrateur requis)' + }); + } + + const subcommand = interaction.options.getSubcommand(); + + if (subcommand === 'reset') { + const target = interaction.options.getUser('user'); + const resetType = interaction.options.getString('type'); + const reason = interaction.options.getString('reason') || 'Aucune raison fournie'; + + if (!target) return interaction.editReply({ content: '❌ Aucun utilisateur spécifié !' }); + + try { + const [profiles] = await db.query( + 'SELECT * FROM user_profiles WHERE userId = ? AND guildId = ?', + [target.id, interaction.guild.id] + ); + + if (profiles.length === 0) { + return interaction.editReply({ + content: `❌ ${target.tag} n'a pas de profil à réinitialiser.` + }); + } + + if (resetType === 'signature') { + await db.query( + 'UPDATE user_profiles SET signature = NULL, updatedAt = ? WHERE userId = ? AND guildId = ?', + [Date.now(), target.id, interaction.guild.id] + ); + + const embed = new EmbedBuilder() + .setTitle('✅ Signature Réinitialisée') + .setColor(colors.success) + .setDescription(`La signature de ${target.toString()} a été réinitialisée.`) + .addFields( + { name: '👤 Utilisateur', value: `${target.tag}`, inline: true }, + { name: '📝 Raison', value: reason, inline: false } + ) + .setTimestamp(); + + await interaction.editReply({ embeds: [embed] }); + + } else if (resetType === 'all') { + await db.query( + 'DELETE FROM user_profiles WHERE userId = ? AND guildId = ?', + [target.id, interaction.guild.id] + ); + + const embed = new EmbedBuilder() + .setTitle('✅ Profil Réinitialisé') + .setColor(colors.success) + .setDescription(`Le profil de ${target.toString()} a été complètement réinitialisé.`) + .addFields( + { name: '👤 Utilisateur', value: `${target.tag}`, inline: true }, + { name: '📝 Raison', value: reason, inline: false } + ) + .setTimestamp(); + + await interaction.editReply({ embeds: [embed] }); + } + + const logEmbed = new EmbedBuilder() + .setTitle('🔄 Profil Réinitialisé (Admin)') + .setColor(colors.warning) + .setDescription(`Le profil de ${target.toString()} a été réinitialisé.`) + .addFields( + { name: '👤 Utilisateur', value: `${target.tag} (${target.id})`, inline: true }, + { name: '⚙️ Admin', value: `${interaction.user.tag} (${interaction.user.id})`, inline: true }, + { name: '🔄 Type', value: resetType === 'signature' ? 'Signature' : 'Tout le profil', inline: true }, + { name: '📝 Raison', value: reason, inline: false } + ) + .setFooter({ text: 'France Femboy Bot • Administration' }) + .setTimestamp(); + + await sendLog(interaction.guild, { embeds: [logEmbed] }); + + } catch (err) { + console.error('Erreur adminprofil:', err); + await interaction.editReply({ content: `❌ Erreur: ${err.message}` }); + } + } + }, +}; \ No newline at end of file diff --git a/commands/info/embed.js b/commands/info/embed.js new file mode 100644 index 0000000..e1fca46 --- /dev/null +++ b/commands/info/embed.js @@ -0,0 +1,43 @@ +const { SlashCommandBuilder, EmbedBuilder, PermissionFlagsBits } = require('discord.js'); + +module.exports = { + category: 'info', + data: new SlashCommandBuilder() + .setName('embed') + .setDescription('Créer un embed personnalisé.') + .addStringOption(option => + option.setName('title') + .setDescription('Titre de l\'embed') + .setRequired(true)) + .addStringOption(option => + option.setName('description') + .setDescription('Description de l\'embed') + .setRequired(true)) + .addStringOption(option => + option.setName('color') + .setDescription('Couleur de l\'embed (hex, ex: #FF0000)') + .setRequired(false)) + .setDefaultMemberPermissions(PermissionFlagsBits.ManageMessages), + async execute(interaction) { + const title = interaction.options.getString('title'); + const description = interaction.options.getString('description'); + const colorInput = interaction.options.getString('color'); + + let color = 0x5865F2; + if (colorInput) { + const hexMatch = colorInput.match(/^#?([0-9A-Fa-f]{6})$/); + if (hexMatch) { + color = parseInt(hexMatch[1], 16); + } + } + + const embed = new EmbedBuilder() + .setTitle(title) + .setDescription(description) + .setColor(color) + .setFooter({ text: `Créé par ${interaction.user.tag}`, iconURL: interaction.user.displayAvatarURL() }) + .setTimestamp(); + + await interaction.reply({ embeds: [embed] }); + }, +}; \ No newline at end of file diff --git a/commands/info/info.js b/commands/info/info.js index c2915d9..20fd042 100644 --- a/commands/info/info.js +++ b/commands/info/info.js @@ -1,4 +1,6 @@ -const {SlashCommandBuilder, EmbedBuilder} = require("discord.js"); +const { SlashCommandBuilder, EmbedBuilder } = require('discord.js'); +const { formatUptime } = require('../../utils/helpers'); +const { colors } = require('../../utils/constants'); module.exports = { category: 'info', @@ -6,42 +8,55 @@ module.exports = { .setName('info') .setDescription('Obtenir les informations du bot'), async execute(interaction) { + const uptime = formatUptime(process.uptime()); const embed = new EmbedBuilder() - .setTitle('📝 Informations du Bot') - .setColor('DarkVividPink') - .addFields( - { - name:'👩‍💻 Développeuse Principale', - value:'<@361526553940721684>', - inline: true - }, - - { - name: '🧠 Langages et environnement', - value: [ - '• **Langage :** <:javascript:1425179797692092506> JavaScript (ECMAScript 2024)', - '• **Backend :** <:nodejs:1425179878252089435> Node.js v22.20.0', - '• **Librairies :** <:discordjs:1425179852536938670> Discord.js v14.22', - '• **IDE :** <:webstorm:1429190717066055841> JetBrains WebStorm 2025.2.3', - ].join('\n'), - inline: false - }, - { - name: '💡 Date de création', - value: '20 Août 2025' - }, - { - name: '⏱️ Uptime', - value: `${Math.floor(process.uptime()/3600)}h ${Math.floor(process.uptime()%3600/60)}m`, - inline: true - } - ) - .setFooter({ - text: 'Fembot • Made with love by Syxpi 💞', + .setAuthor({ + name: `Système d'Information • ${interaction.client.user.username}`, iconURL: interaction.client.user.displayAvatarURL() }) + .setColor(colors.info) + .setThumbnail(interaction.client.user.displayAvatarURL({dynamic: true, size: 256})) + .setDescription('Voici les détails techniques et statistiques concernant mon fonctionnement actuel.') + .addFields( + { + name: '👑 Propriétaire', + value: `> <@361526553940721684> (Lumi)`, + inline: true + }, + { + name: '⌛ En ligne depuis', + value: `> \`${uptime}\``, + inline: true + }, + { + name: '🛠️ Stack Technique', + value: [ + '```yml', + 'Langage: JavaScript (ES2024)', + 'Runtime: Node.js v25.2.1', + 'Library: Discord.js v14.22.1', + 'IDE: JetBrains WebStorm', + '```' + ].join('\n'), + inline: false + }, + { + name: '📈 Statistiques Globales', + value: [ + `• **Guildes:** \`${interaction.client.guilds.cache.size}\``, + `• **Membres:** \`${interaction.client.guilds.cache.reduce((acc, guild) => acc + guild.memberCount, 0)}\``, + `• **Commandes:** \`${interaction.client.commands.size}\``, + ].join('\n'), + inline: true + } + ) + .setFooter({ + text: `France Femboy Bot • Développé avec passion par Lumi 💞`, + iconURL: interaction.client.user.displayAvatarURL() + }) + .setTimestamp(); - await interaction.reply({ embeds: [embed] }); + await interaction.reply({embeds: [embed]}); }, -}; +}; \ No newline at end of file diff --git a/commands/info/profil.js b/commands/info/profil.js new file mode 100644 index 0000000..a0d9855 --- /dev/null +++ b/commands/info/profil.js @@ -0,0 +1,334 @@ +const { SlashCommandBuilder, EmbedBuilder, MessageFlags } = require('discord.js'); +const db = require('../../functions/database/db.js'); +const { getUserXP, getUserRank } = require('../../functions/xp/xp.js'); +const { colors } = require('../../utils/constants'); + +const BADGE_EMOJIS = { + 'staff': '👨‍💼', + 'partner': '<:discord_partener:1437046788916904097>', + 'hypesquad': '<:hypesquad_balance:1437046792922464337>', + 'hypesquad_bravery': '<:hypesquad_bravery:1437046793899872467>', + 'hypesquad_brilliance': '<:hypesquad_brilliance:1437046794868756550>', + 'hypesquad_balance': '<:hypesquad_balance:1437046792922464337>', + 'hypesquad_events': '<:hypesquad_events:1437046795778920448>', + 'early_supporter': '<:early_supporter:1437046790087250071>', + 'bug_hunter_level_1': '🐛', + 'bug_hunter_level_2': '🐛', + 'verified_developer': '✅', + 'active_developer': '<:active_developer:1437049369936531587>', + 'certified_moderator': '🛡️', + 'bot_http_interactions': '🤖', + 'quests': '<:quests:1437046809464934492>', + 'slash_commands': '<:slash_commands:1437046810458984553>', + 'orbs': '<:orbs:1437046808185540628>', + 'nitro': '<:nitro:1437046796810715136>', + 'nitro_1_month': '<:nitro_1_month:1437046798685442241>', + 'nitro_3_months': '<:nitro_3_months:1437046801550278757>', + 'nitro_6_months': '<:nitro_6_months:1437046805102723143>', + 'nitro_1_year': '<:nitro_1_year:1437046799515783198>', + 'nitro_2_years': '<:nitro_2_years:1437046800522416138>', + 'nitro_3_years': '<:nitro_3_years:1437046802519035924>', + 'nitro_5_years': '<:nitro_5_years:1437046803747967016>', + 'nitro_6_years': '<:nitro_6_years:1437046806747021514>', + 'boost': '<:boost:1437046778083016745>', + 'boost_2_months': '<:boost_2_months:1437046780322779266>', + 'boost_3_months': '<:boost_3_months:1437046781375414383>', + 'boost_6_months': '<:boost_6_months:1437046782247829616>', + 'boost_9_months': '<:boost_9_months:1437046783070044200>', + 'boost_12_months': '<:boost_12_months:1437046784445644930>', + 'boost_15_months': '<:boost_15_months:1437046785402081281>', + 'boost_18_months': '<:boost_18_months:1437046786643722342>', + 'boost_24_months': '<:boost_24_months:1437046787667136612>', +}; + +function getDiscordBadges(user, member) { + const badgeEmojis = []; + + if (user.flags) { + try { + const flagsArray = user.flags.toArray(); + const flagToBadgeMap = { + 'Staff': 'staff', 'Partner': 'partner', 'HypeSquad': 'hypesquad', + 'HypeSquadOnlineHouse1': 'hypesquad_bravery', 'HypeSquadOnlineHouse2': 'hypesquad_brilliance', 'HypeSquadOnlineHouse3': 'hypesquad_balance', + 'HypeSquadEvents': 'hypesquad_events', 'BugHunterLevel1': 'bug_hunter_level_1', 'BugHunterLevel2': 'bug_hunter_level_2', + 'PremiumEarlySupporter': 'early_supporter', 'VerifiedDeveloper': 'verified_developer', 'ActiveDeveloper': 'active_developer', + 'CertifiedModerator': 'certified_moderator', 'BotHTTPInteractions': 'bot_http_interactions', + 'Quests': 'quests', 'QuestsEarly': 'quests', 'SlashCommands': 'slash_commands', + }; + + for (const flag of flagsArray) { + const flagLower = flag.toLowerCase(); + const badgeKey = flagToBadgeMap[flag]; + + if (badgeKey && BADGE_EMOJIS[badgeKey]) { + badgeEmojis.push(BADGE_EMOJIS[badgeKey]); + continue; + } + + if (flagLower.includes('nitro')) { + if (flagLower.match(/6.*year|year.*6|emerald/)) badgeEmojis.push(BADGE_EMOJIS.nitro_6_years); + else if (flagLower.match(/5.*year|year.*5/)) badgeEmojis.push(BADGE_EMOJIS.nitro_5_years); + else if (flagLower.match(/3.*year|year.*3/)) badgeEmojis.push(BADGE_EMOJIS.nitro_3_years); + else if (flagLower.match(/2.*year|year.*2/)) badgeEmojis.push(BADGE_EMOJIS.nitro_2_years); + else if (flagLower.match(/1.*year|year.*1/) && !flagLower.includes('month')) badgeEmojis.push(BADGE_EMOJIS.nitro_1_year); + else if (flagLower.match(/6.*month|month.*6/)) badgeEmojis.push(BADGE_EMOJIS.nitro_6_months); + else if (flagLower.match(/3.*month|month.*3/)) badgeEmojis.push(BADGE_EMOJIS.nitro_3_months); + else if (flagLower.match(/1.*month|month.*1/)) badgeEmojis.push(BADGE_EMOJIS.nitro_1_month); + else badgeEmojis.push(BADGE_EMOJIS.nitro); + } + else if (flagLower.includes('boost') && !flagLower.includes('server')) { + if (flagLower.match(/24|two.*four|twenty.*four/i)) badgeEmojis.push(BADGE_EMOJIS.boost_24_months); + else if (flagLower.match(/18|eighteen/i)) badgeEmojis.push(BADGE_EMOJIS.boost_18_months); + else if (flagLower.match(/15|fifteen/i)) badgeEmojis.push(BADGE_EMOJIS.boost_15_months); + else if (flagLower.match(/12|twelve|one.*year|1.*year/) && !flagLower.match(/18|15|24|128|112/i)) badgeEmojis.push(BADGE_EMOJIS.boost_12_months); + else if (flagLower.match(/9|nine/) && !flagLower.match(/19|29|90|99/i)) badgeEmojis.push(BADGE_EMOJIS.boost_9_months); + else if (flagLower.match(/6|six/) && !flagLower.match(/16|26|60|66|68|69/i)) badgeEmojis.push(BADGE_EMOJIS.boost_6_months); + else if (flagLower.match(/3|three/) && !flagLower.match(/13|23|30|33|34|35|36|37|38|39/i)) badgeEmojis.push(BADGE_EMOJIS.boost_3_months); + else if (flagLower.match(/2|two/) && !flagLower.match(/12|20|21|22|23|24|25|26|27|28|29/i)) badgeEmojis.push(BADGE_EMOJIS.boost_2_months); + else badgeEmojis.push(BADGE_EMOJIS.boost); + } + else if (flagLower.includes('orb')) badgeEmojis.push(BADGE_EMOJIS.orbs); + else if (flagLower.includes('quest')) badgeEmojis.push(BADGE_EMOJIS.quests); + else if (flagLower.includes('slash')) badgeEmojis.push(BADGE_EMOJIS.slash_commands); + } + } catch (err) { console.warn('Erreur flags:', err.message); } + } + + const hasNitroBadge = badgeEmojis.some(e => typeof e === 'string' && e.includes('nitro')); + const hasPremiumType = user.premiumType && user.premiumType !== 0; + const hasBanner = user.banner; + const hasAccentColor = user.accentColor; + const hasAnimatedAvatar = user.avatar && user.avatar.startsWith('a_'); + const hasNitro = hasPremiumType || hasBanner || (hasAnimatedAvatar && hasAccentColor); + + if (!hasNitroBadge && hasNitro) badgeEmojis.push(BADGE_EMOJIS.nitro); + + if (member && member.premiumSince) { + const hasBoostBadge = badgeEmojis.some(e => typeof e === 'string' && e.includes('boost')); + if (!hasBoostBadge) { + const boostDurationMs = Date.now() - member.premiumSince.getTime(); + const boostDurationMonths = Math.floor(boostDurationMs / (1000 * 60 * 60 * 24 * 30)); + + let boostBadge = BADGE_EMOJIS.boost; + if (boostDurationMonths >= 24) boostBadge = BADGE_EMOJIS.boost_24_months; + else if (boostDurationMonths >= 18) boostBadge = BADGE_EMOJIS.boost_18_months; + else if (boostDurationMonths >= 15) boostBadge = BADGE_EMOJIS.boost_15_months; + else if (boostDurationMonths >= 12) boostBadge = BADGE_EMOJIS.boost_12_months; + else if (boostDurationMonths >= 9) boostBadge = BADGE_EMOJIS.boost_9_months; + else if (boostDurationMonths >= 6) boostBadge = BADGE_EMOJIS.boost_6_months; + else if (boostDurationMonths >= 3) boostBadge = BADGE_EMOJIS.boost_3_months; + else if (boostDurationMonths >= 2) boostBadge = BADGE_EMOJIS.boost_2_months; + + badgeEmojis.push(boostBadge); + } + } + + return [...new Set(badgeEmojis)]; +} + +function getStatusFrench(presence) { + if (!presence || !presence.status) return { text: 'Hors ligne', emoji: '⚫' }; + switch (presence.status) { + case 'online': return { text: 'En ligne', emoji: '🟢' }; + case 'idle': return { text: 'Absent', emoji: '🟡' }; + case 'dnd': return { text: 'Ne pas déranger', emoji: '🔴' }; + default: return { text: 'Hors ligne', emoji: '⚫' }; + } +} + +module.exports = { + category: 'info', + data: new SlashCommandBuilder() + .setName('profil') + .setDescription('Afficher le profil d\'un utilisateur') + .addSubcommand(subcommand => + subcommand.setName('view').setDescription('Voir le profil d\'un utilisateur') + .addUserOption(option => option.setName('user').setDescription('L\'utilisateur dont tu veux voir le profil').setRequired(false))) + .addSubcommand(subcommand => + subcommand.setName('set').setDescription('Modifier ton profil') + .addStringOption(option => option.setName('signature').setDescription('Ta signature personnalisée (max 200 caractères)').setRequired(false).setMaxLength(200)) + .addStringOption(option => option.setName('birthday').setDescription('Ta date d\'anniversaire (JJ/MM/AAAA)').setRequired(false)) + .addStringOption(option => option.setName('color').setDescription('Couleur de ton profil (Hex: #RRGGBB)').setRequired(false)) + .addStringOption(option => option.setName('gender').setDescription('Ton genre/pronoms').setRequired(false).setMaxLength(50)) + .addStringOption(option => option.setName('location').setDescription('Ta localisation').setRequired(false).setMaxLength(100))) + .addSubcommand(subcommand => + subcommand.setName('reset').setDescription('Réinitialiser ton profil')), + async execute(interaction) { + const subcommand = interaction.options.getSubcommand(); + + if (subcommand === 'view') { + await interaction.deferReply(); + + const target = interaction.options.getUser('user') || interaction.user; + const fetchedUser = await interaction.client.users.fetch(target.id, { force: true, cache: false }).catch(() => target); + const member = await interaction.guild.members.fetch(target.id).catch(() => null); + + if (!member) return interaction.editReply({ content: '❌ Cet utilisateur n\'est pas sur ce serveur.' }); + + try { + const userXP = await getUserXP(target.id, interaction.guild.id); + const [profiles] = await db.query('SELECT * FROM user_profiles WHERE userId = ? AND guildId = ?', [target.id, interaction.guild.id]); + const profile = profiles[0] || null; + + const badgeEmojis = getDiscordBadges(fetchedUser, member); + const badgesText = badgeEmojis.length > 0 ? badgeEmojis.join(' ') : 'Aucun badge'; + const status = getStatusFrench(member.presence); + + const accountAge = Math.floor((Date.now() - target.createdTimestamp) / (1000 * 60 * 60 * 24)); + const accountAgeYears = Math.floor(accountAge / 365); + const accountAgeMonths = Math.floor((accountAge % 365) / 30); + const accountAgeDays = accountAge % 30; + + let accountAgeText = accountAgeYears > 0 ? `${accountAgeYears} an${accountAgeYears > 1 ? 's' : ''}` : ''; + if (accountAgeMonths > 0) accountAgeText += (accountAgeText ? ' ' : '') + `${accountAgeMonths} mois`; + if (!accountAgeText) accountAgeText = `${accountAgeDays} jour${accountAgeDays > 1 ? 's' : ''}`; + + const creationDate = ``; + const voiceTimeMinutes = userXP?.totalVoiceTime || 0; + const voiceTimeText = `${Math.floor(voiceTimeMinutes / 60)}h ${voiceTimeMinutes % 60}min`; + + const rank = userXP ? await getUserRank(target.id, interaction.guild.id) : 0; + + const [bumps] = await db.query('SELECT COUNT(*) as count FROM bumps WHERE userId = ? AND guildId = ?', [target.id, interaction.guild.id]); + const [welcomeLogs] = await db.query('SELECT COUNT(*) as count FROM xp_logs WHERE userId = ? AND guildId = ? AND source = ?', [target.id, interaction.guild.id, 'welcome']); + const [totalMessages] = await db.query('SELECT SUM(totalMessages) as total FROM user_xp WHERE userId = ?', [target.id]); + + const embedColor = profile?.color && /^#[0-9A-F]{6}$/i.test(profile.color) ? profile.color : colors.primary; + + const embed = new EmbedBuilder() + .setAuthor({ name: `Profil de ${target.username}`, iconURL: target.displayAvatarURL({ dynamic: true }) }) + .setColor(embedColor) + .setThumbnail(target.displayAvatarURL({ dynamic: true, size: 256 })) + .setDescription(profile?.signature ? `\`\`\`${profile.signature}\`\`\`` : '*Aucune signature définie.*') + .addFields( + { name: '👤 Informations', value: `• **Identifiant:** \`${target.id}\`\n• **Badges:** ${badgesText}\n• **Âge Compte:** \`${accountAgeText}\`\n• **Statut:** ${status.emoji} \`${status.text}\``, inline: false }, + { name: '📊 Statistiques XP', value: `• **Niveau:** \`${userXP?.level || 0}\`\n• **XP Total:** \`${userXP?.xp || 0}\`\n• **Rang:** \`#${rank}\``, inline: true }, + { name: '🎙️ Activité Vocal', value: `• **Temps:** \`${voiceTimeText}\`\n• **Bumps:** \`${bumps[0]?.count || 0}\`\n• **Messages:** \`${totalMessages[0]?.total || userXP?.totalMessages || 0}\``, inline: true }, + { name: '🤝 Engagement', value: `• **Bienvenues:** \`${welcomeLogs[0]?.count || 0}\`\n• **Création:** ${creationDate}`, inline: false } + ) + .setFooter({ text: `Demandé par ${interaction.user.tag}`, iconURL: interaction.user.displayAvatarURL() }) + .setTimestamp(); + + const personalInfos = []; + if (profile?.gender) personalInfos.push(`• **Genre/Pronoms:** ${profile.gender}`); + if (profile?.location) personalInfos.push(`• **Localisation:** ${profile.location}`); + if (profile?.birthday) { + const birthday = new Date(profile.birthday); + const today = new Date(); + let age = today.getFullYear() - birthday.getFullYear(); + const monthDiff = today.getMonth() - birthday.getMonth(); + if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthday.getDate())) age--; + personalInfos.push(`• **Anniversaire:** ${birthday.toLocaleDateString('fr-FR')} (${age} ans)`); + } + + if (personalInfos.length > 0) { + embed.addFields({ name: '📝 Infos Personnelles', value: personalInfos.join('\n'), inline: false }); + } + + await interaction.editReply({ embeds: [embed] }); + + } catch (err) { + console.error('Erreur profil:', err); + await interaction.editReply({ content: '❌ Erreur lors de l\'affichage du profil.' }); + } + + } else if (subcommand === 'set') { + await interaction.deferReply({ flags: MessageFlags.Ephemeral }); + + const signature = interaction.options.getString('signature'); + const birthdayInput = interaction.options.getString('birthday'); + const color = interaction.options.getString('color'); + const gender = interaction.options.getString('gender'); + const location = interaction.options.getString('location'); + + if (!signature && !birthdayInput && !color && !gender && !location) { + return interaction.editReply({ content: '❌ Tu dois modifier au moins un élément.' }); + } + + try { + let birthdayDate = null; + if (birthdayInput) { + const parts = birthdayInput.split('/'); + if (parts.length === 3) { + const day = parseInt(parts[0], 10); + const month = parseInt(parts[1], 10) - 1; + const year = parseInt(parts[2], 10); + + const currentYear = new Date().getFullYear(); + if (year < 1900 || year > currentYear) { + return interaction.editReply({ content: '❌ Année invalide. Doit être entre 1900 et aujourd\'hui.' }); + } + + const date = new Date(year, month, day); + if (date.getFullYear() === year && date.getMonth() === month && date.getDate() === day) { + // Vérifier si la date est dans le futur + if (date > new Date()) { + return interaction.editReply({ content: '❌ Tu ne peux pas être né dans le futur !' }); + } + birthdayDate = `${year}-${month + 1}-${day}`; + } else { + return interaction.editReply({ content: '❌ Date invalide. Format: JJ/MM/AAAA' }); + } + } else { + return interaction.editReply({ content: '❌ Format de date invalide. Utilise JJ/MM/AAAA' }); + } + } + + if (color && !/^#[0-9A-F]{6}$/i.test(color)) { + return interaction.editReply({ content: '❌ Couleur invalide. Utilise le format Hex (ex: #FF0000).' }); + } + + const [profiles] = await db.query('SELECT * FROM user_profiles WHERE userId = ? AND guildId = ?', [interaction.user.id, interaction.guild.id]); + + if (profiles.length > 0) { + const updates = []; + const params = []; + + if (signature) { updates.push('signature = ?'); params.push(signature); } + if (birthdayDate) { updates.push('birthday = ?'); params.push(birthdayDate); } + if (color) { updates.push('color = ?'); params.push(color); } + if (gender) { updates.push('gender = ?'); params.push(gender); } + if (location) { updates.push('location = ?'); params.push(location); } + + updates.push('updatedAt = ?'); + params.push(Date.now()); + params.push(interaction.user.id); + params.push(interaction.guild.id); + + await db.query(`UPDATE user_profiles SET ${updates.join(', ')} WHERE userId = ? AND guildId = ?`, params); + } else { + await db.query( + 'INSERT INTO user_profiles (userId, guildId, signature, birthday, color, gender, location, updatedAt) VALUES (?, ?, ?, ?, ?, ?, ?, ?)', + [ + interaction.user.id, + interaction.guild.id, + signature || null, + birthdayDate || null, + color || null, + gender || null, + location || null, + Date.now() + ] + ); + } + + const embed = new EmbedBuilder().setTitle('✅ Profil Modifié').setColor(colors.success).setDescription('Ton profil a été mis à jour avec succès !').setTimestamp(); + await interaction.editReply({ embeds: [embed] }); + } catch (err) { + console.error('Erreur set profil:', err); + await interaction.editReply({ content: '❌ Erreur lors de la modification du profil.' }); + } + + } else if (subcommand === 'reset') { + await interaction.deferReply({ flags: MessageFlags.Ephemeral }); + try { + await db.query('DELETE FROM user_profiles WHERE userId = ? AND guildId = ?', [interaction.user.id, interaction.guild.id]); + const embed = new EmbedBuilder().setTitle('✅ Profil Réinitialisé').setColor(colors.success).setDescription('Ton profil a été entièrement réinitialisé.').setTimestamp(); + await interaction.editReply({ embeds: [embed] }); + } catch (err) { + console.error('Erreur reset profil:', err); + await interaction.editReply({ content: '❌ Erreur lors de la réinitialisation du profil.' }); + } + } + }, +}; \ No newline at end of file diff --git a/commands/info/serverinfo.js b/commands/info/serverinfo.js new file mode 100644 index 0000000..a850771 --- /dev/null +++ b/commands/info/serverinfo.js @@ -0,0 +1,53 @@ +const { SlashCommandBuilder, EmbedBuilder, GuildVerificationLevel } = require('discord.js'); +const { colors, emojis } = require('../../utils/constants'); + +const verificationLevels = { + [GuildVerificationLevel.None]: 'Aucune', + [GuildVerificationLevel.Low]: 'Faible', + [GuildVerificationLevel.Medium]: 'Moyenne', + [GuildVerificationLevel.High]: 'Élevée', + [GuildVerificationLevel.VeryHigh]: 'Très Élevée' +}; + +module.exports = { + category: 'info', + data: new SlashCommandBuilder() + .setName('serverinfo') + .setDescription('Affiche les informations du serveur.'), + async execute(interaction) { + const guild = interaction.guild; + const owner = await guild.fetchOwner(); + + const embed = new EmbedBuilder() + .setAuthor({ + name: guild.name, + iconURL: guild.iconURL({ dynamic: true }) || undefined + }) + .setTitle(`${emojis.server} Informations du Serveur`) + .setColor(colors.info) + .setThumbnail(guild.iconURL({ dynamic: true, size: 256 }) || null) + .addFields( + { name: '👑 Propriétaire', value: `${owner.user.toString()}\n\`${owner.user.tag}\``, inline: true }, + { name: `${emojis.id} ID`, value: `\`${guild.id}\``, inline: true }, + { name: `${emojis.calendar} Créé le`, value: ``, inline: true }, + { name: '👥 Membres', value: `\`${guild.memberCount.toLocaleString()}\``, inline: true }, + { name: '💬 Canaux', value: `\`${guild.channels.cache.size}\``, inline: true }, + { name: '😀 Emojis', value: `\`${guild.emojis.cache.size}\``, inline: true }, + { name: '🎭 Rôles', value: `\`${guild.roles.cache.size}\``, inline: true }, + { name: '✅ Vérification', value: `\`${verificationLevels[guild.verificationLevel] || 'Inconnue'}\``, inline: true }, + { name: '🔒 Sécurité', value: guild.mfaLevel === 1 ? '`Élevé (2FA)`' : '`Normal`', inline: true } + ) + .setFooter({ text: `${guild.name} • ${interaction.client.user.username}`, iconURL: interaction.client.user.displayAvatarURL() }) + .setTimestamp(); + + if (guild.description) { + embed.setDescription(guild.description); + } + + if (guild.banner) { + embed.setImage(guild.bannerURL({ dynamic: true, size: 1024 })); + } + + await interaction.reply({ embeds: [embed] }); + }, +}; \ No newline at end of file diff --git a/commands/info/userinfo.js b/commands/info/userinfo.js new file mode 100644 index 0000000..46440fd --- /dev/null +++ b/commands/info/userinfo.js @@ -0,0 +1,70 @@ +const { SlashCommandBuilder, EmbedBuilder } = require('discord.js'); +const { colors, emojis } = require('../../utils/constants'); + +function getStatusFrench(presence) { + if (!presence || !presence.status) return { text: 'Hors ligne', emoji: '⚫' }; + switch (presence.status) { + case 'online': return { text: 'En ligne', emoji: '🟢' }; + case 'idle': return { text: 'Absent', emoji: '🟡' }; + case 'dnd': return { text: 'Ne pas déranger', emoji: '🔴' }; + default: return { text: 'Hors ligne', emoji: '⚫' }; + } +} + +module.exports = { + category: 'info', + data: new SlashCommandBuilder() + .setName('userinfo') + .setDescription('Affiche les informations d\'un utilisateur.') + .addUserOption(option => + option.setName('user') + .setDescription('L\'utilisateur dont tu veux voir les informations') + .setRequired(false)), + async execute(interaction) { + const target = interaction.options.getUser('user') || interaction.user; + const member = await interaction.guild.members.fetch(target.id).catch(() => null); + + const embed = new EmbedBuilder() + .setAuthor({ + name: target.displayName, + iconURL: target.displayAvatarURL({ dynamic: true }) + }) + .setTitle(`${emojis.user} Informations Utilisateur`) + .setColor(colors.info) + .setThumbnail(target.displayAvatarURL({ dynamic: true, size: 256 })) + .addFields( + { name: `${emojis.id} ID`, value: `\`${target.id}\``, inline: true }, + { name: `${emojis.calendar} Compte créé`, value: ``, inline: true }, + { name: '🤖 Bot', value: target.bot ? '`Oui`' : '`Non`', inline: true } + ) + .setFooter({ text: `${interaction.guild.name} • ${interaction.client.user.username}`, iconURL: interaction.client.user.displayAvatarURL() }) + .setTimestamp(); + + if (member) { + const status = getStatusFrench(member.presence); + const roles = member.roles.cache.filter(r => r.id !== interaction.guild.id); + const rolesDisplay = roles.size > 0 ? roles.sort((a, b) => b.position - a.position).map(r => r.toString()).slice(0, 10).join(', ') : '`Aucun`'; + + embed.addFields( + { name: '📥 A rejoint le', value: ``, inline: true }, + { name: '⏰ Statut', value: `${status.emoji} \`${status.text}\``, inline: true }, + { name: '👑 Rôle le plus élevé', value: member.roles.highest.toString(), inline: true }, + { name: '🎭 Rôles', value: rolesDisplay, inline: false } + ); + + if (member.nickname) { + embed.addFields({ name: '📝 Surnom', value: `\`${member.nickname}\``, inline: true }); + } + + if (roles.size > 10) { + embed.addFields({ name: '📊 Total de rôles', value: `\`${roles.size}\``, inline: true }); + } + } + + if (target.banner) { + embed.setImage(target.bannerURL({ dynamic: true, size: 1024 })); + } + + await interaction.reply({ embeds: [embed] }); + }, +}; \ No newline at end of file diff --git a/commands/moderation/ban.js b/commands/moderation/ban.js index 8fac5bb..d2fcc34 100644 --- a/commands/moderation/ban.js +++ b/commands/moderation/ban.js @@ -1,121 +1,119 @@ -const { SlashCommandBuilder, PermissionFlagsBits, EmbedBuilder } = require('discord.js'); -const db = require('../../functions/database/db.js'); // instance mysql2/promise +const { SlashCommandBuilder, PermissionFlagsBits, EmbedBuilder, MessageFlags } = require('discord.js'); +const db = require('../../functions/database/db.js'); +const { parseDuration, formatDuration, sendLog } = require('../../utils/helpers'); +const { colors, emojis } = require('../../utils/constants'); module.exports = { category: 'moderation', data: new SlashCommandBuilder() .setName('ban') - .setDescription('Select a member and ban them.') + .setDescription('Bannir un membre du serveur.') .addUserOption(option => option.setName('target') - .setDescription('The member to ban') + .setDescription('Le membre à bannir') .setRequired(true)) .addStringOption(option => option.setName('reason') - .setDescription('Reason') + .setDescription('Raison du bannissement') .setRequired(false)) .addStringOption(option => option.setName('duration') - .setDescription('Ban duration (ex: 1h, 2d, leave empty for permanent)') + .setDescription('Durée du ban (ex: 1h, 2d, laisser vide pour permanent)') .setRequired(false)) .setDefaultMemberPermissions(PermissionFlagsBits.BanMembers), async execute(interaction) { const target = interaction.options.getUser('target'); - const reason = interaction.options.getString('reason') || 'No reason provided'; + const reason = interaction.options.getString('reason') || 'Aucune raison fournie'; const durationInput = interaction.options.getString('duration'); - await interaction.deferReply() + await interaction.deferReply({ flags: MessageFlags.Ephemeral }); - if (!target) return interaction.editReply({ content: 'No user specified!' }); - await interaction.guild.bans.create(target.id, { reason: `Banned by ${interaction.user.tag}: ${reason}` }); + if (!target) return interaction.editReply({ content: '❌ Aucun utilisateur spécifié !' }); + + const member = await interaction.guild.members.fetch(target.id).catch(() => null); + if (member) { + if (member.roles.highest.position >= interaction.member.roles.highest.position && interaction.guild.ownerId !== interaction.user.id) { + return interaction.editReply({ content: '❌ Tu ne peux pas bannir cet utilisateur car il a un rôle supérieur ou égal au tien.' }); + } + if (member.id === interaction.guild.ownerId) { + return interaction.editReply({ content: '❌ Tu ne peux pas bannir le propriétaire du serveur.' }); + } + if (!member.bannable) { + return interaction.editReply({ content: '❌ Je ne peux pas bannir cet utilisateur (rôle supérieur au mien ?).' }); + } + } let type = 'Permanent'; let unbanDate = null; + let durationText = 'Permanent'; if (durationInput) { - const regex = /^(\d+)(s|m|h|d|mo|y)$/; - const match = durationInput.match(regex); - if (match) { - const value = parseInt(match[1]); - const unit = match[2]; - let multiplier = 1000; - if (unit === 's') multiplier *= 60 / 60; - if (unit === 'm') multiplier *= 60; - if (unit === 'h') multiplier *= 60 * 60; - if (unit === 'd') multiplier *= 60 * 60 * 24; - if (unit === 'mo') multiplier *= 60 * 60 * 24 * 30; - if (unit === 'y') multiplier *= 60 * 60 * 24 * 365; - unbanDate = Date.now() + value * multiplier; + const durationMs = parseDuration(durationInput); + if (durationMs) { + unbanDate = Date.now() + durationMs; type = 'Temporary'; + durationText = formatDuration(durationMs); + } else { + return interaction.editReply({ content: '❌ Format de durée invalide (ex: 1h, 2d).' }); } } -// juste avant la création de l'embed - let durationText = type; - if (type === 'Temporary' && unbanDate) { - const initialDurationMs = unbanDate - Date.now() + (Date.now() - Date.now()); // ça reste l'unbanDate - timestamp original - function formatInitialDuration(ms) { - const seconds = Math.floor(ms / 1000) % 60; - const minutes = Math.floor(ms / (1000 * 60)) % 60; - const hours = Math.floor(ms / (1000 * 60 * 60)) % 24; - const days = Math.floor(ms / (1000 * 60 * 60 * 24)); - const months = Math.floor(ms / (1000 * 60 * 60 * 24 * 30)); - const years = Math.floor(ms / (1000 * 60 * 60 * 24 * 365)); - - if (years) return `${years} Année${years > 1 ? 's' : ''}`; - if (months) return `${months} Mois`; - if (days) return `${days} Jour${days > 1 ? 's' : ''}`; - if (hours) return `${hours} Heure${hours > 1 ? 's' : ''}`; - if (minutes) return `${minutes} Minute${minutes > 1 ? 's' : ''}`; - if (seconds) return `${seconds} Seconde${seconds > 1 ? 's' : ''}`; - return 'Instantané'; - } - - durationText = formatInitialDuration(initialDurationMs); - } try { - // Bannissement - interaction.guild.bans.create(target.id, { reason: `Banned by ${interaction.user.tag}: ${reason}` }); + await interaction.guild.bans.create(target.id, { reason: `Banni par ${interaction.user.tag}: ${reason}` }); - // Stockage dans MySQL (bans) await db.query( `INSERT INTO bans (userId, reason, modId, timestamp, type, unbanDate, guildId) VALUES (?, ?, ?, ?, ?, ?, ?) - ON DUPLICATE KEY UPDATE reason=VALUES(reason), modId=VALUES(modId), timestamp=VALUES(timestamp), type=VALUES(type), unbanDate=VALUES(unbanDate)`, + ON DUPLICATE KEY UPDATE reason=VALUES(reason), modId=VALUES(modId), timestamp=VALUES(timestamp), type=VALUES(type), unbanDate=VALUES(unbanDate)`, [target.id, reason, interaction.user.id, Date.now(), type, unbanDate, interaction.guild.id] ); - await db.query( `INSERT INTO logs (userId, userTag, modId, modTag, action, reason, type, guildId, timestamp) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`, [target.id, target.tag, interaction.user.id, interaction.user.tag, 'Bannissement', reason, type, interaction.guild.id, Date.now()] ); - await interaction.editReply(`✅ Successfully banned ${target.tag} (${type})`); + const embed = new EmbedBuilder() + .setAuthor({ name: target.displayName, iconURL: target.displayAvatarURL({ dynamic: true }) }) + .setTitle(`${emojis.ban} Utilisateur Banni`) + .setColor(colors.ban) + .setThumbnail(target.displayAvatarURL({ dynamic: true })) + .setDescription(`${target.toString()} a été banni du serveur.`) + .addFields( + { name: '👤 Utilisateur', value: `${target.toString()}\n\`${target.tag}\``, inline: true }, + { name: '👮 Modérateur', value: `${interaction.user.toString()}\n\`${interaction.user.tag}\``, inline: true }, + { name: '⏱️ Durée', value: `\`${durationText}\``, inline: true }, + { name: '📝 Raison', value: reason, inline: false }, + { name: '📅 Date', value: ``, inline: true }, + { name: '🏷️ Type', value: `\`${type}\``, inline: true } + ) + .setFooter({ text: `ID: ${target.id} • ${interaction.guild.name}` }) + .setTimestamp(); - // Embed log - const logChannel = interaction.guild.channels.cache.find(ch => ch.name === 'logs'); - if (logChannel) { - const embed = new EmbedBuilder() - .setTitle('User Banned') - .setColor('Red') - .addFields( - { name: 'Banned User', value: `<@${target.id}> (${target.tag})`, inline: true }, - { name: 'Banned By', value: `<@${interaction.user.id}> (${interaction.user.tag})`, inline: true }, - { name: 'Reason', value: reason, inline: false }, - { name: 'Duration', value: durationText, inline: true }, - { name: 'Date', value: new Date().toLocaleString(), inline: true }, - { name: 'Guild', value: interaction.guild.name, inline: true } - ) - .setTimestamp(); - logChannel.send({ embeds: [embed] }); - } + await interaction.editReply({ embeds: [embed] }); + + const logEmbed = new EmbedBuilder() + .setAuthor({ name: interaction.user.displayName, iconURL: interaction.user.displayAvatarURL({ dynamic: true }) }) + .setTitle(`${emojis.ban} Bannissement`) + .setColor(colors.ban) + .setThumbnail(target.displayAvatarURL({ dynamic: true })) + .setDescription(`${target.toString()} a été banni du serveur.`) + .addFields( + { name: '👤 Utilisateur', value: `${target.toString()}\n\`${target.tag}\``, inline: true }, + { name: '👮 Modérateur', value: `${interaction.user.toString()}\n\`${interaction.user.tag}\``, inline: true }, + { name: '⏱️ Durée', value: `\`${durationText}\``, inline: true }, + { name: '📝 Raison', value: reason, inline: false } + ) + .setFooter({ text: `ID: ${target.id} • ${interaction.guild.name}` }) + .setTimestamp(); + + await sendLog(interaction.guild, { embeds: [logEmbed] }); } catch (err) { - console.error(err); - await interaction.editReply({ content: `❌ Failed to ban ${target.tag}` }); + console.error('Erreur ban:', err); + await interaction.editReply({ content: `❌ Erreur: ${err.message}` }); } - } -}; + }, +}; \ No newline at end of file diff --git a/commands/moderation/casier.js b/commands/moderation/casier.js index 47f9033..73e3c01 100644 --- a/commands/moderation/casier.js +++ b/commands/moderation/casier.js @@ -1,56 +1,69 @@ -const { SlashCommandBuilder, EmbedBuilder, ActionRowBuilder, ButtonBuilder, ButtonStyle } = require('discord.js'); +const { SlashCommandBuilder, EmbedBuilder, ActionRowBuilder, ButtonBuilder, ButtonStyle, MessageFlags } = require('discord.js'); const db = require('../../functions/database/db.js'); +const { colors } = require('../../utils/constants'); module.exports = { category: 'moderation', data: new SlashCommandBuilder() .setName('casier') - .setDescription('Voir toutes les sanctions d’un membre.') + .setDescription('Voir toutes les sanctions d\'un membre.') .addUserOption(option => option.setName('membre') .setDescription('Le membre dont tu veux voir le casier') .setRequired(true)), async execute(interaction) { - await interaction.deferReply(); + await interaction.deferReply({ flags: MessageFlags.Ephemeral }); const member = interaction.options.getUser('membre'); try { const [rows] = await db.query( - 'SELECT * FROM logs WHERE userId = ? ORDER BY timestamp DESC', - [member.id] + 'SELECT * FROM logs WHERE userId = ? AND guildId = ? ORDER BY timestamp DESC', + [member.id, interaction.guild.id] ); - if (!rows.length) return interaction.editReply(`❌ ${member.tag} n’a aucune sanction.`); + const sanctions = rows.filter(row => + row.action !== 'Modification de sanction' && + row.action !== 'Révocation de sanction' && + row.action !== 'Modification de mute' + ); + + if (!sanctions.length) { + return interaction.editReply({ content: `✅ ${member.tag} n'a aucune sanction sur ce serveur.` }); + } - // Découpe les sanctions en pages de 25 const pages = []; - for (let i = 0; i < rows.length; i += 10) { - pages.push(rows.slice(i, i + 10)); + for (let i = 0; i < sanctions.length; i += 10) { + pages.push(sanctions.slice(i, i + 10)); } const embeds = pages.map((page, pageIndex) => { const embed = new EmbedBuilder() - .setTitle(`Casier de ${member.tag} - Page ${pageIndex + 1}/${pages.length}`) - .setColor('Orange') + .setAuthor({ name: member.displayName, iconURL: member.displayAvatarURL({ dynamic: true }) }) + .setTitle(`📋 Casier Judiciaire - Page ${pageIndex + 1}/${pages.length}`) + .setColor(colors.warning) + .setThumbnail(member.displayAvatarURL({ dynamic: true, size: 256 })) + .setDescription(`**${member.toString()}** • \`${member.tag}\``) + .setFooter({ text: `Total: ${sanctions.length} sanction(s) • ${interaction.guild.name}` }) .setTimestamp(); page.forEach((row, index) => { - const date = new Date(row.timestamp).toLocaleString(); + const date = ``; const actionCapitalized = row.action.charAt(0).toUpperCase() + row.action.slice(1); - const action = row.action || 'N/A'; const guildName = row.guildId - ? interaction.client.guilds.cache.get(row.guildId)?.name || 'Unknown Server' - : 'Unknown Server'; + ? interaction.client.guilds.cache.get(row.guildId)?.name || 'Serveur inconnu' + : 'Serveur inconnu'; + + const displayNumber = index + 1 + pageIndex * 10; embed.addFields({ - name: `#${index + 1 + pageIndex * 10} - ${actionCapitalized}`, - value: `**Modérateur:** <@${row.modId}> (${row.modTag || 'N/A'})\n` + - `**Raison:** ${row.reason || 'N/A'}\n` + - `**Serveur:** ${guildName}\n` + + name: `#${displayNumber} (ID: \`${row.id}\`) - ${actionCapitalized}`, + value: `**Modérateur:** <@${row.modId}> (\`${row.modTag || 'N/A'}\`)\n` + + `**Raison:** ${row.reason || '`N/A`'}\n` + + `**Serveur:** \`${guildName}\`\n` + `**Date:** ${date}\n` + - `**Type:** ${action}`, + `**Type:** \`${row.type || 'N/A'}\``, inline: false }); }); @@ -58,28 +71,36 @@ module.exports = { return embed; }); - // Composants pour naviguer const row = new ActionRowBuilder().addComponents( - new ButtonBuilder().setCustomId('prev').setLabel('⬅️').setStyle(ButtonStyle.Primary), - new ButtonBuilder().setCustomId('next').setLabel('➡️').setStyle(ButtonStyle.Primary) + new ButtonBuilder().setCustomId('prev').setLabel('⬅️ Précédent').setStyle(ButtonStyle.Primary).setDisabled(pages.length === 1), + new ButtonBuilder().setCustomId('next').setLabel('Suivant ➡️').setStyle(ButtonStyle.Primary).setDisabled(pages.length === 1) ); let currentPage = 0; - const message = await interaction.editReply({ embeds: [embeds[currentPage]], components: [row] }); + const message = await interaction.editReply({ embeds: [embeds[currentPage]], components: pages.length > 1 ? [row] : [] }); - // Collecteur de boutons const collector = message.createMessageComponentCollector({ time: 60_000 }); - collector.on('collect', i => { - if (i.user.id !== interaction.user.id) return i.reply({ content: 'Ce n’est pas ton menu !', embeds: [embed] }); - if (i.customId === 'next') currentPage = (currentPage + 1) % embeds.length; - if (i.customId === 'prev') currentPage = (currentPage - 1 + embeds.length) % embeds.length; + collector.on('collect', async i => { + if (i.user.id !== interaction.user.id) { + return i.reply({ content: '❌ Ce n\'est pas ton menu !', flags: MessageFlags.Ephemeral }); + } + if (i.customId === 'next') { + currentPage = (currentPage + 1) % embeds.length; + } + if (i.customId === 'prev') { + currentPage = (currentPage - 1 + embeds.length) % embeds.length; + } - i.update({ embeds: [embeds[currentPage]] }); + await i.update({ embeds: [embeds[currentPage]] }); + }); + + collector.on('end', () => { + message.edit({ components: [] }).catch(() => null); }); } catch (err) { - console.error(err); - await interaction.editReply('❌ Une erreur est survenue lors de la récupération du casier.'); + console.error('Erreur casier:', err); + await interaction.editReply({ content: '❌ Une erreur est survenue lors de la récupération du casier.' }); } }, -}; +}; \ No newline at end of file diff --git a/commands/moderation/changemute.js b/commands/moderation/changemute.js new file mode 100644 index 0000000..4a52595 --- /dev/null +++ b/commands/moderation/changemute.js @@ -0,0 +1,149 @@ +const { SlashCommandBuilder, PermissionFlagsBits, EmbedBuilder, MessageFlags } = require('discord.js'); +const db = require('../../functions/database/db.js'); +const { parseDuration, formatDuration, sendLog } = require('../../utils/helpers'); +const { colors, emojis } = require('../../utils/constants'); + +module.exports = { + category: 'moderation', + data: new SlashCommandBuilder() + .setName('changemute') + .setDescription('Changer le temps ou la raison d\'un mute.') + .addUserOption(option => + option.setName('user') + .setDescription('Le membre concerné') + .setRequired(true)) + .addStringOption(option => + option.setName('time') + .setDescription('Nouvelle durée du mute (ex: 5m, 1h, 1d)') + .setRequired(false)) + .addStringOption(option => + option.setName('reason') + .setDescription('Nouvelle raison du mute') + .setRequired(false)) + .setDefaultMemberPermissions(PermissionFlagsBits.ModerateMembers), + + async execute(interaction) { + const target = interaction.options.getUser('user'); + const newTime = interaction.options.getString('time'); + const newReason = interaction.options.getString('reason'); + + await interaction.deferReply({ flags: MessageFlags.Ephemeral }); + + if (!target) return interaction.editReply({ content: '❌ Aucun utilisateur spécifié !' }); + + const member = await interaction.guild.members.fetch(target.id).catch(() => null); + if (!member) return interaction.editReply({ content: '❌ Cet utilisateur n\'est pas sur le serveur.' }); + + if (!newTime && !newReason) return interaction.editReply({ content: '❌ Tu dois spécifier au moins une nouvelle durée ou une nouvelle raison.' }); + + const [muteRows] = await db.query( + 'SELECT * FROM mutes WHERE userId = ? AND guildId = ?', + [target.id, interaction.guild.id] + ); + + if (!muteRows.length && (!member.communicationDisabledUntilTimestamp || member.communicationDisabledUntilTimestamp < Date.now())) { + return interaction.editReply({ content: '❌ Cet utilisateur n\'est pas muté.' }); + } + + const currentMute = muteRows[0]; + const oldReason = currentMute?.reason || 'N/A'; + const oldUnmuteDate = currentMute?.unmuteDate || null; + + try { + let newUnmuteDate = oldUnmuteDate; + let newDurationMs = null; + let durationText = 'Non modifié'; + + if (newTime) { + newDurationMs = parseDuration(newTime); + if (!newDurationMs) return interaction.editReply({ content: '❌ Durée invalide. Utilise un format comme: 5m, 1h, 2d (max 28 jours).' }); + + const maxDuration = 28 * 24 * 60 * 60 * 1000; + if (newDurationMs > maxDuration) return interaction.editReply({ content: '❌ La durée maximum est de 28 jours.' }); + + newUnmuteDate = Date.now() + newDurationMs; + durationText = formatDuration(newDurationMs); + + await member.timeout(newDurationMs, `Mute modifié par ${interaction.user.tag}: ${newReason || oldReason}`); + } + + const finalReason = newReason || oldReason; + const type = 'Temporary'; + + if (currentMute) { + await db.query( + 'UPDATE mutes SET reason = ?, modId = ?, modTag = ?, timestamp = ?, unmuteDate = ?, type = ? WHERE userId = ? AND guildId = ?', + [finalReason, interaction.user.id, interaction.user.tag, Date.now(), newUnmuteDate, type, target.id, interaction.guild.id] + ); + } else { + await db.query( + `INSERT INTO mutes (userId, guildId, reason, modId, modTag, timestamp, unmuteDate, type) + VALUES (?, ?, ?, ?, ?, ?, ?, ?)`, + [target.id, interaction.guild.id, finalReason, interaction.user.id, interaction.user.tag, Date.now(), newUnmuteDate, type] + ); + } + + const changeLog = []; + if (newTime) changeLog.push(`Durée: ${formatDuration(newDurationMs)}`); + if (newReason) changeLog.push(`Raison: ${oldReason} → ${newReason}`); + const changeReason = changeLog.join(', '); + + await db.query( + `INSERT INTO logs (userId, userTag, modId, modTag, action, reason, type, guildId, timestamp) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`, + [target.id, target.tag, interaction.user.id, interaction.user.tag, 'Modification de mute', changeReason, type, interaction.guild.id, Date.now()] + ); + + const embed = new EmbedBuilder() + .setTitle(`${emojis.success} Mute Modifié`) + .setColor(colors.success) + .setThumbnail(target.displayAvatarURL({ dynamic: true })) + .addFields( + { name: '👤 Utilisateur', value: `<@${target.id}> (${target.tag})`, inline: true }, + { name: '🔧 Modérateur', value: `<@${interaction.user.id}> (${interaction.user.tag})`, inline: true }, + { name: '⏰ Nouvelle durée', value: durationText, inline: true }, + { name: '📝 Ancienne raison', value: oldReason, inline: false }, + { name: '📝 Nouvelle raison', value: finalReason, inline: false } + ) + .setFooter({ text: `ID: ${target.id}` }) + .setTimestamp(); + + if (newUnmuteDate) { + embed.addFields({ name: '📅 Démute le', value: ``, inline: true }); + } + + await interaction.editReply({ embeds: [embed] }); + + try { + const dmEmbed = new EmbedBuilder() + .setTitle(`${emojis.info} Ton mute a été modifié`) + .setColor(colors.info) + .setDescription(`Ton mute sur **${interaction.guild.name}** a été modifié`) + .addFields( + { name: '⏰ Durée', value: durationText, inline: true }, + { name: '📝 Raison', value: finalReason, inline: false } + ) + .setFooter({ text: interaction.guild.name, iconURL: interaction.guild.iconURL({ dynamic: true }) }) + .setTimestamp(); + await target.send({ embeds: [dmEmbed] }); + } catch { /* DMs fermés */ } + + const logEmbed = new EmbedBuilder() + .setTitle(`${emojis.success} Modification de Mute`) + .setColor(colors.success) + .addFields( + { name: '👤 Utilisateur', value: `<@${target.id}> (${target.tag})`, inline: true }, + { name: '🔧 Modérateur', value: `<@${interaction.user.id}> (${interaction.user.tag})`, inline: true }, + { name: '📝 Modifications', value: changeReason, inline: false }, + { name: '📅 Date', value: ``, inline: true } + ) + .setFooter({ text: `ID: ${target.id} | Serveur: ${interaction.guild.name}` }) + .setTimestamp(); + await sendLog(interaction.guild, { embeds: [logEmbed] }); + + } catch (err) { + console.error('Erreur changemute:', err); + await interaction.editReply({ content: `❌ Échec de la modification du mute: ${err.message}` }); + } + }, +}; \ No newline at end of file diff --git a/commands/moderation/changesanction.js b/commands/moderation/changesanction.js new file mode 100644 index 0000000..b86fd60 --- /dev/null +++ b/commands/moderation/changesanction.js @@ -0,0 +1,114 @@ +const { SlashCommandBuilder, PermissionFlagsBits, EmbedBuilder, MessageFlags } = require('discord.js'); +const db = require('../../functions/database/db.js'); +const { sendLog } = require('../../utils/helpers'); +const { colors, emojis } = require('../../utils/constants'); + +module.exports = { + category: 'moderation', + data: new SlashCommandBuilder() + .setName('changesanction') + .setDescription('Changer la raison d\'une sanction.') + .addUserOption(option => + option.setName('user') + .setDescription('L\'utilisateur concerné') + .setRequired(true)) + .addIntegerOption(option => + option.setName('sanction_id') + .setDescription('L\'ID DB de la sanction (visible dans /casier, ex: ID: 123)') + .setRequired(true)) + .addStringOption(option => + option.setName('new_reason') + .setDescription('La nouvelle raison') + .setRequired(true)) + .setDefaultMemberPermissions(PermissionFlagsBits.ModerateMembers), + + async execute(interaction) { + const target = interaction.options.getUser('user'); + const sanctionId = interaction.options.getInteger('sanction_id'); + const newReason = interaction.options.getString('new_reason'); + + await interaction.deferReply({ flags: MessageFlags.Ephemeral }); + + try { + const [sanctionRows] = await db.query( + 'SELECT * FROM logs WHERE id = ? AND userId = ? AND guildId = ?', + [sanctionId, target.id, interaction.guild.id] + ); + + if (!sanctionRows.length) { + const [allUserLogs] = await db.query( + 'SELECT id, action, guildId FROM logs WHERE id = ? AND userId = ?', + [sanctionId, target.id] + ); + + if (allUserLogs.length > 0) { + const log = allUserLogs[0]; + const guildName = interaction.client.guilds.cache.get(log.guildId)?.name || 'Serveur inconnu'; + return interaction.editReply({ + content: `❌ La sanction avec l'ID ${sanctionId} existe, mais elle appartient au serveur "${guildName}" (guildId: ${log.guildId}), pas à "${interaction.guild.name}" (guildId: ${interaction.guild.id}).` + }); + } + + return interaction.editReply({ + content: `❌ Aucune sanction trouvée avec l'ID ${sanctionId} pour ${target.tag}.\n\n💡 **Astuce:** Utilise l'ID DB visible dans \`/casier\` (ex: \`#1 (ID: 123)\` → utilise \`123\`).` + }); + } + + const sanction = sanctionRows[0]; + + if (sanction.action === 'Modification de sanction' || + sanction.action === 'Révocation de sanction' || + sanction.action === 'Modification de mute') { + return interaction.editReply({ content: `❌ Cette entrée est une modification, pas une sanction. Utilise l'ID d'une vraie sanction.` }); + } + const oldReason = sanction.reason; + + await db.query( + 'UPDATE logs SET reason = ?, modId = ?, modTag = ? WHERE id = ?', + [newReason, interaction.user.id, interaction.user.tag, sanction.id] + ); + + await db.query( + `INSERT INTO logs (userId, userTag, modId, modTag, action, reason, type, guildId, timestamp) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`, + [target.id, target.tag, interaction.user.id, interaction.user.tag, 'Modification de sanction', `Ancienne raison: ${oldReason} → Nouvelle raison: ${newReason}`, null, interaction.guild.id, Date.now()] + ); + + const embed = new EmbedBuilder() + .setTitle(`${emojis.success} Sanction Modifiée`) + .setColor(colors.success) + .setThumbnail(target.displayAvatarURL({ dynamic: true })) + .addFields( + { name: '👤 Utilisateur', value: `<@${target.id}> (${target.tag})`, inline: true }, + { name: '🔧 Modérateur', value: `<@${interaction.user.id}> (${interaction.user.tag})`, inline: true }, + { name: '📝 Ancienne raison', value: oldReason || 'N/A', inline: false }, + { name: '📝 Nouvelle raison', value: newReason, inline: false }, + { name: '🆔 ID Sanction', value: `${sanction.id}`, inline: true }, + { name: '📅 Date', value: ``, inline: true } + ) + .setFooter({ text: `ID: ${target.id}` }) + .setTimestamp(); + + await interaction.editReply({ embeds: [embed] }); + + const logEmbed = new EmbedBuilder() + .setTitle(`${emojis.success} Modification de Sanction`) + .setColor(colors.success) + .addFields( + { name: '👤 Utilisateur', value: `<@${target.id}> (${target.tag})`, inline: true }, + { name: '🔧 Modérateur', value: `<@${interaction.user.id}> (${interaction.user.tag})`, inline: true }, + { name: '📝 Ancienne raison', value: oldReason || 'N/A', inline: false }, + { name: '📝 Nouvelle raison', value: newReason, inline: false }, + { name: '🆔 ID Sanction', value: `${sanction.id}`, inline: true }, + { name: '📅 Date', value: ``, inline: true } + ) + .setFooter({ text: `ID: ${target.id} | Serveur: ${interaction.guild.name}` }) + .setTimestamp(); + await sendLog(interaction.guild, { embeds: [logEmbed] }); + + } catch (err) { + console.error('Erreur changesanction:', err); + await interaction.editReply({ content: `❌ Échec de la modification de la sanction: ${err.message}` }); + } + }, +}; \ No newline at end of file diff --git a/commands/moderation/clear.js b/commands/moderation/clear.js new file mode 100644 index 0000000..eb37743 --- /dev/null +++ b/commands/moderation/clear.js @@ -0,0 +1,74 @@ +const { SlashCommandBuilder, PermissionFlagsBits, EmbedBuilder, MessageFlags } = require('discord.js'); +const { colors, emojis } = require('../../utils/constants'); + +module.exports = { + category: 'moderation', + data: new SlashCommandBuilder() + .setName('clear') + .setDescription('Supprimer plusieurs messages d\'un coup.') + .addIntegerOption(option => + option.setName('amount') + .setDescription('Nombre de messages à supprimer (1-100)') + .setRequired(true) + .setMinValue(1) + .setMaxValue(100)) + .addUserOption(option => + option.setName('target') + .setDescription('Supprimer uniquement les messages de cet utilisateur') + .setRequired(false)) + .setDefaultMemberPermissions(PermissionFlagsBits.ManageMessages), + + async execute(interaction) { + const amount = interaction.options.getInteger('amount'); + const target = interaction.options.getUser('target'); + + await interaction.deferReply({ flags: MessageFlags.Ephemeral }); + + if (!interaction.channel.isTextBased()) { + return interaction.editReply({ content: '❌ Cette commande ne peut être utilisée que dans un canal texte.' }); + } + + try { + const messages = await interaction.channel.messages.fetch({ limit: amount }); + let messagesToDelete = messages; + + if (target) { + messagesToDelete = messages.filter(msg => msg.author.id === target.id); + } + + const filteredMessages = messagesToDelete.filter(msg => { + const msgAge = Date.now() - msg.createdTimestamp; + return msgAge < 14 * 24 * 60 * 60 * 1000; + }); + + if (filteredMessages.size === 0) { + return interaction.editReply({ content: '❌ Aucun message à supprimer (les messages de plus de 14 jours ne peuvent pas être supprimés).' }); + } + + await interaction.channel.bulkDelete(filteredMessages, true); + + const embed = new EmbedBuilder() + .setAuthor({ name: interaction.user.displayName, iconURL: interaction.user.displayAvatarURL({ dynamic: true }) }) + .setTitle(`${emojis.success} Messages Supprimés`) + .setColor(colors.success) + .setDescription(`**${filteredMessages.size}** message(s) supprimé(s)${target ? ` de ${target.toString()}` : ''}.`) + .addFields( + { name: '👮 Modérateur', value: `${interaction.user.toString()}\n\`${interaction.user.tag}\``, inline: true }, + { name: '📊 Messages supprimés', value: `\`${filteredMessages.size}\``, inline: true }, + { name: '📅 Date', value: ``, inline: true } + ) + .setFooter({ text: `${interaction.guild.name} • ${interaction.channel.name}` }) + .setTimestamp(); + + await interaction.editReply({ embeds: [embed] }); + + } catch (err) { + console.error('Erreur clear:', err); + if (err.code === 50034) { + await interaction.editReply({ content: '❌ Les messages de plus de 14 jours ne peuvent pas être supprimés.' }); + } else { + await interaction.editReply({ content: `❌ Échec de la suppression: ${err.message}` }); + } + } + }, +}; \ No newline at end of file diff --git a/commands/moderation/kick.js b/commands/moderation/kick.js new file mode 100644 index 0000000..8231994 --- /dev/null +++ b/commands/moderation/kick.js @@ -0,0 +1,89 @@ +const { SlashCommandBuilder, PermissionFlagsBits, EmbedBuilder, MessageFlags } = require('discord.js'); +const db = require('../../functions/database/db.js'); +const { sendLog } = require('../../utils/helpers'); +const { colors, emojis } = require('../../utils/constants'); + +module.exports = { + category: 'moderation', + data: new SlashCommandBuilder() + .setName('kick') + .setDescription('Expulser un membre du serveur.') + .addUserOption(option => + option.setName('target') + .setDescription('Le membre à expulser') + .setRequired(true)) + .addStringOption(option => + option.setName('reason') + .setDescription('Raison de l\'expulsion') + .setRequired(false)) + .setDefaultMemberPermissions(PermissionFlagsBits.KickMembers), + + async execute(interaction) { + const target = interaction.options.getUser('target'); + const reason = interaction.options.getString('reason') || 'Aucune raison fournie'; + + await interaction.deferReply({ flags: MessageFlags.Ephemeral }); + + if (!target) return interaction.editReply({ content: '❌ Aucun utilisateur spécifié !' }); + + const member = await interaction.guild.members.fetch(target.id).catch(() => null); + if (!member) return interaction.editReply({ content: '❌ Cet utilisateur n\'est pas sur le serveur.' }); + + if (member.id === interaction.guild.ownerId) return interaction.editReply({ content: '❌ Tu ne peux pas expulser le propriétaire du serveur.' }); + if (member.id === interaction.user.id) return interaction.editReply({ content: '❌ Tu ne peux pas t\'expulser toi-même.' }); + + if (member.roles.highest.position >= interaction.member.roles.highest.position && interaction.guild.ownerId !== interaction.user.id) { + return interaction.editReply({ content: '❌ Tu ne peux pas expulser cet utilisateur car il a un rôle supérieur ou égal au tien.' }); + } + if (!member.kickable) { + return interaction.editReply({ content: '❌ Je n\'ai pas les permissions nécessaires pour expulser cet utilisateur.' }); + } + + try { + await member.kick(`Expulsé par ${interaction.user.tag}: ${reason}`); + + await db.query( + `INSERT INTO logs (userId, userTag, modId, modTag, action, reason, type, guildId, timestamp) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`, + [target.id, target.tag, interaction.user.id, interaction.user.tag, 'Expulsion', reason, null, interaction.guild.id, Date.now()] + ); + + const embed = new EmbedBuilder() + .setAuthor({ name: target.displayName, iconURL: target.displayAvatarURL({ dynamic: true }) }) + .setTitle(`${emojis.kick} Utilisateur Expulsé`) + .setColor(colors.kick) + .setThumbnail(target.displayAvatarURL({ dynamic: true })) + .setDescription(`${target.toString()} a été expulsé du serveur.`) + .addFields( + { name: '👤 Utilisateur', value: `${target.toString()}\n\`${target.tag}\``, inline: true }, + { name: '👮 Modérateur', value: `${interaction.user.toString()}\n\`${interaction.user.tag}\``, inline: true }, + { name: '📝 Raison', value: reason, inline: false }, + { name: '📅 Date', value: ``, inline: true } + ) + .setFooter({ text: `ID: ${target.id} • ${interaction.guild.name}` }) + .setTimestamp(); + + await interaction.editReply({ embeds: [embed] }); + + const logEmbed = new EmbedBuilder() + .setAuthor({ name: interaction.user.displayName, iconURL: interaction.user.displayAvatarURL({ dynamic: true }) }) + .setTitle(`${emojis.kick} Expulsion`) + .setColor(colors.kick) + .setThumbnail(target.displayAvatarURL({ dynamic: true })) + .setDescription(`${target.toString()} a été expulsé du serveur.`) + .addFields( + { name: '👤 Utilisateur', value: `${target.toString()}\n\`${target.tag}\``, inline: true }, + { name: '👮 Modérateur', value: `${interaction.user.toString()}\n\`${interaction.user.tag}\``, inline: true }, + { name: '📝 Raison', value: reason, inline: false } + ) + .setFooter({ text: `ID: ${target.id} • ${interaction.guild.name}` }) + .setTimestamp(); + + await sendLog(interaction.guild, { embeds: [logEmbed] }); + + } catch (err) { + console.error('Erreur kick:', err); + await interaction.editReply({ content: `❌ Erreur: ${err.message}` }); + } + }, +}; \ No newline at end of file diff --git a/commands/moderation/mute.js b/commands/moderation/mute.js new file mode 100644 index 0000000..559a0e7 --- /dev/null +++ b/commands/moderation/mute.js @@ -0,0 +1,113 @@ +const { SlashCommandBuilder, PermissionFlagsBits, EmbedBuilder, MessageFlags } = require('discord.js'); +const db = require('../../functions/database/db.js'); +const { parseDuration, formatDuration, sendLog } = require('../../utils/helpers'); +const { colors, emojis } = require('../../utils/constants'); + +module.exports = { + category: 'moderation', + data: new SlashCommandBuilder() + .setName('mute') + .setDescription('Muter un membre du serveur.') + .addUserOption(option => + option.setName('user') + .setDescription('Le membre à muter') + .setRequired(true)) + .addStringOption(option => + option.setName('duration') + .setDescription('Durée du mute (ex: 5m, 1h, 1d, max 28j)') + .setRequired(true)) + .addStringOption(option => + option.setName('reason') + .setDescription('Raison du mute') + .setRequired(false)) + .setDefaultMemberPermissions(PermissionFlagsBits.ModerateMembers), + + async execute(interaction) { + const target = interaction.options.getUser('user'); + const durationInput = interaction.options.getString('duration'); + const reason = interaction.options.getString('reason') || 'Aucune raison fournie'; + + await interaction.deferReply({ flags: MessageFlags.Ephemeral }); + + if (!target) return interaction.editReply({ content: '❌ Aucun utilisateur spécifié !' }); + + const member = await interaction.guild.members.fetch(target.id).catch(() => null); + if (!member) return interaction.editReply({ content: '❌ Cet utilisateur n\'est pas sur le serveur.' }); + + if (member.id === interaction.guild.ownerId) return interaction.editReply({ content: '❌ Tu ne peux pas muter le propriétaire du serveur.' }); + if (member.id === interaction.user.id) return interaction.editReply({ content: '❌ Tu ne peux pas te muter toi-même.' }); + + if (member.roles.highest.position >= interaction.member.roles.highest.position && interaction.guild.ownerId !== interaction.user.id) { + return interaction.editReply({ content: '❌ Tu ne peux pas muter cet utilisateur car il a un rôle supérieur ou égal au tien.' }); + } + if (!member.moderatable) { + return interaction.editReply({ content: '❌ Je n\'ai pas les permissions nécessaires pour muter cet utilisateur.' }); + } + + const durationMs = parseDuration(durationInput); + if (!durationMs) return interaction.editReply({ content: '❌ Durée invalide. Utilise un format comme: 5m, 1h, 2d (max 28 jours).' }); + + const maxDuration = 28 * 24 * 60 * 60 * 1000; + if (durationMs > maxDuration) return interaction.editReply({ content: '❌ La durée maximum est de 28 jours.' }); + + const unmuteDate = Date.now() + durationMs; + const type = 'Temporary'; // Timeout est toujours temporaire + + try { + await member.timeout(durationMs, `Muté par ${interaction.user.tag}: ${reason}`); + + await db.query( + `INSERT INTO mutes (userId, guildId, reason, modId, modTag, timestamp, unmuteDate, type) + VALUES (?, ?, ?, ?, ?, ?, ?, ?) + ON DUPLICATE KEY UPDATE reason=VALUES(reason), modId=VALUES(modId), modTag=VALUES(modTag), timestamp=VALUES(timestamp), unmuteDate=VALUES(unmuteDate), type=VALUES(type)`, + [target.id, interaction.guild.id, reason, interaction.user.id, interaction.user.tag, Date.now(), unmuteDate, type] + ); + + await db.query( + `INSERT INTO logs (userId, userTag, modId, modTag, action, reason, type, guildId, timestamp) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`, + [target.id, target.tag, interaction.user.id, interaction.user.tag, 'Mute', reason, type, interaction.guild.id, Date.now()] + ); + + const embed = new EmbedBuilder() + .setAuthor({ name: target.displayName, iconURL: target.displayAvatarURL({ dynamic: true }) }) + .setTitle(`${emojis.mute} Utilisateur Muté`) + .setColor(colors.mute) + .setThumbnail(target.displayAvatarURL({ dynamic: true })) + .setDescription(`${target.toString()} a été muté.`) + .addFields( + { name: '👤 Utilisateur', value: `${target.toString()}\n\`${target.tag}\``, inline: true }, + { name: '👮 Modérateur', value: `${interaction.user.toString()}\n\`${interaction.user.tag}\``, inline: true }, + { name: '⏰ Durée', value: `\`${formatDuration(durationMs)}\``, inline: true }, + { name: '📝 Raison', value: reason, inline: false }, + { name: '📅 Jusqu\'à', value: ``, inline: true } + ) + .setFooter({ text: `ID: ${target.id} • ${interaction.guild.name}` }) + .setTimestamp(); + + await interaction.editReply({ embeds: [embed] }); + + const logEmbed = new EmbedBuilder() + .setAuthor({ name: interaction.user.displayName, iconURL: interaction.user.displayAvatarURL({ dynamic: true }) }) + .setTitle(`${emojis.mute} Mute`) + .setColor(colors.mute) + .setThumbnail(target.displayAvatarURL({ dynamic: true })) + .setDescription(`${target.toString()} a été muté.`) + .addFields( + { name: '👤 Utilisateur', value: `${target.toString()}\n\`${target.tag}\``, inline: true }, + { name: '👮 Modérateur', value: `${interaction.user.toString()}\n\`${interaction.user.tag}\``, inline: true }, + { name: '⏰ Durée', value: `\`${formatDuration(durationMs)}\``, inline: true }, + { name: '📝 Raison', value: reason, inline: false }, + { name: '📅 Jusqu\'à', value: ``, inline: true } + ) + .setFooter({ text: `ID: ${target.id} • ${interaction.guild.name}` }) + .setTimestamp(); + + await sendLog(interaction.guild, { embeds: [logEmbed] }); + + } catch (err) { + console.error('Erreur mute:', err); + await interaction.editReply({ content: `❌ Erreur: ${err.message}` }); + } + }, +}; \ No newline at end of file diff --git a/commands/moderation/mysanctions.js b/commands/moderation/mysanctions.js new file mode 100644 index 0000000..a9d39ad --- /dev/null +++ b/commands/moderation/mysanctions.js @@ -0,0 +1,97 @@ +const { SlashCommandBuilder, EmbedBuilder, ActionRowBuilder, ButtonBuilder, ButtonStyle, MessageFlags } = require('discord.js'); +const db = require('../../functions/database/db.js'); +const { colors } = require('../../utils/constants'); + +module.exports = { + category: 'moderation', + data: new SlashCommandBuilder() + .setName('mysanctions') + .setDescription('Voir tes propres sanctions sur ce serveur.'), + async execute(interaction) { + await interaction.deferReply({ flags: MessageFlags.Ephemeral }); + + const userId = interaction.user.id; + + try { + const [rows] = await db.query( + 'SELECT * FROM logs WHERE userId = ? AND guildId = ? ORDER BY timestamp DESC', + [userId, interaction.guild.id] + ); + + const sanctions = rows.filter(row => + row.action !== 'Modification de sanction' && + row.action !== 'Révocation de sanction' && + row.action !== 'Modification de mute' + ); + + if (!sanctions.length) { + return interaction.editReply({ content: '✅ Tu n\'as aucune sanction sur ce serveur.' }); + } + + const pages = []; + for (let i = 0; i < sanctions.length; i += 10) { + pages.push(sanctions.slice(i, i + 10)); + } + + const embeds = pages.map((page, pageIndex) => { + const embed = new EmbedBuilder() + .setTitle(`📋 Mes Sanctions - Page ${pageIndex + 1}/${pages.length}`) + .setColor(colors.warning) + .setThumbnail(interaction.user.displayAvatarURL({ dynamic: true })) + .setFooter({ text: `Total: ${sanctions.length} sanction(s)` }) + .setTimestamp(); + + page.forEach((row, index) => { + const date = ``; + const actionCapitalized = row.action.charAt(0).toUpperCase() + row.action.slice(1); + + embed.addFields({ + name: `#${index + 1 + pageIndex * 10} - ${actionCapitalized}`, + value: `**Modérateur:** <@${row.modId}> (${row.modTag || 'N/A'})\n` + + `**Raison:** ${row.reason || 'N/A'}\n` + + `**Date:** ${date}\n` + + `**Type:** ${row.type || 'N/A'}`, + inline: false + }); + }); + + return embed; + }); + + if (pages.length === 1) { + return interaction.editReply({ embeds: [embeds[0]] }); + } + + const row = new ActionRowBuilder().addComponents( + new ButtonBuilder().setCustomId('prev').setLabel('⬅️ Précédent').setStyle(ButtonStyle.Primary), + new ButtonBuilder().setCustomId('next').setLabel('Suivant ➡️').setStyle(ButtonStyle.Primary) + ); + + let currentPage = 0; + const message = await interaction.editReply({ embeds: [embeds[currentPage]], components: [row] }); + + const collector = message.createMessageComponentCollector({ time: 60_000 }); + collector.on('collect', async i => { + if (i.user.id !== interaction.user.id) { + return i.reply({ content: '❌ Ce n\'est pas ton menu !', flags: MessageFlags.Ephemeral }); + } + if (i.customId === 'next') { + currentPage = (currentPage + 1) % embeds.length; + } + if (i.customId === 'prev') { + currentPage = (currentPage - 1 + embeds.length) % embeds.length; + } + + await i.update({ embeds: [embeds[currentPage]] }); + }); + + collector.on('end', () => { + message.edit({ components: [] }).catch(() => null); + }); + + } catch (err) { + console.error('Erreur mysanctions:', err); + await interaction.editReply({ content: '❌ Une erreur est survenue lors de la récupération de tes sanctions.' }); + } + }, +}; \ No newline at end of file diff --git a/commands/moderation/purge.js b/commands/moderation/purge.js new file mode 100644 index 0000000..0d8c209 --- /dev/null +++ b/commands/moderation/purge.js @@ -0,0 +1,103 @@ +const { SlashCommandBuilder, PermissionFlagsBits, EmbedBuilder, MessageFlags } = require('discord.js'); +const db = require('../../functions/database/db.js'); +const { sendLog } = require('../../utils/helpers'); +const { colors, emojis } = require('../../utils/constants'); + +module.exports = { + category: 'moderation', + data: new SlashCommandBuilder() + .setName('purge') + .setDescription('Supprimer les messages d\'un utilisateur dans un canal.') + .addUserOption(option => + option.setName('target') + .setDescription('L\'utilisateur dont supprimer les messages') + .setRequired(true)) + .addIntegerOption(option => + option.setName('amount') + .setDescription('Nombre de messages à vérifier (1-100)') + .setRequired(true) + .setMinValue(1) + .setMaxValue(100)) + .addStringOption(option => + option.setName('reason') + .setDescription('Raison de la purge') + .setRequired(false)) + .setDefaultMemberPermissions(PermissionFlagsBits.ManageMessages), + + async execute(interaction) { + const target = interaction.options.getUser('target'); + const amount = interaction.options.getInteger('amount'); + const reason = interaction.options.getString('reason') || 'Aucune raison fournie'; + + await interaction.deferReply({ flags: MessageFlags.Ephemeral }); + + if (!interaction.channel.isTextBased()) { + return interaction.editReply({ content: '❌ Cette commande ne peut être utilisée que dans un canal texte.' }); + } + + try { + const messages = await interaction.channel.messages.fetch({ limit: amount }); + const messagesToDelete = messages.filter(msg => msg.author.id === target.id); + + const filteredMessages = messagesToDelete.filter(msg => { + const msgAge = Date.now() - msg.createdTimestamp; + return msgAge < 14 * 24 * 60 * 60 * 1000; + }); + + if (filteredMessages.size === 0) { + return interaction.editReply({ content: `❌ Aucun message à supprimer de ${target.tag} (les messages de plus de 14 jours ne peuvent pas être supprimés).` }); + } + + await interaction.channel.bulkDelete(filteredMessages, true); + + await db.query( + `INSERT INTO logs (userId, userTag, modId, modTag, action, reason, type, guildId, timestamp) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`, + [target.id, target.tag, interaction.user.id, interaction.user.tag, 'Purge', reason, null, interaction.guild.id, Date.now()] + ); + + const embed = new EmbedBuilder() + .setAuthor({ name: target.displayName, iconURL: target.displayAvatarURL({ dynamic: true }) }) + .setTitle(`${emojis.success} Messages Supprimés`) + .setColor(colors.success) + .setDescription(`**${filteredMessages.size}** message(s) de ${target.toString()} supprimé(s).`) + .setThumbnail(target.displayAvatarURL({ dynamic: true })) + .addFields( + { name: '👤 Utilisateur', value: `${target.toString()}\n\`${target.tag}\``, inline: true }, + { name: '👮 Modérateur', value: `${interaction.user.toString()}\n\`${interaction.user.tag}\``, inline: true }, + { name: '📊 Messages supprimés', value: `\`${filteredMessages.size}\``, inline: true }, + { name: '📝 Raison', value: reason, inline: false }, + { name: '📅 Date', value: ``, inline: true } + ) + .setFooter({ text: `ID: ${target.id} • ${interaction.guild.name}` }) + .setTimestamp(); + + await interaction.editReply({ embeds: [embed] }); + + const logEmbed = new EmbedBuilder() + .setAuthor({ name: interaction.user.displayName, iconURL: interaction.user.displayAvatarURL({ dynamic: true }) }) + .setTitle(`${emojis.success} Purge`) + .setColor(colors.success) + .setThumbnail(target.displayAvatarURL({ dynamic: true })) + .setDescription(`**${filteredMessages.size}** message(s) de ${target.toString()} supprimé(s).`) + .addFields( + { name: '👤 Utilisateur', value: `${target.toString()}\n\`${target.tag}\``, inline: true }, + { name: '👮 Modérateur', value: `${interaction.user.toString()}\n\`${interaction.user.tag}\``, inline: true }, + { name: '📊 Messages supprimés', value: `\`${filteredMessages.size}\``, inline: true }, + { name: '📝 Raison', value: reason, inline: false }, + { name: '📅 Date', value: ``, inline: true } + ) + .setFooter({ text: `ID: ${target.id} • ${interaction.guild.name}` }) + .setTimestamp(); + await sendLog(interaction.guild, { embeds: [logEmbed] }); + + } catch (err) { + console.error('Erreur purge:', err); + if (err.code === 50034) { + await interaction.editReply({ content: '❌ Les messages de plus de 14 jours ne peuvent pas être supprimés.' }); + } else { + await interaction.editReply({ content: `❌ Échec de la purge: ${err.message}` }); + } + } + }, +}; \ No newline at end of file diff --git a/commands/moderation/revokesanction.js b/commands/moderation/revokesanction.js new file mode 100644 index 0000000..f9a8bf3 --- /dev/null +++ b/commands/moderation/revokesanction.js @@ -0,0 +1,101 @@ +const { SlashCommandBuilder, PermissionFlagsBits, EmbedBuilder, MessageFlags } = require('discord.js'); +const db = require('../../functions/database/db.js'); +const { sendLog } = require('../../utils/helpers'); +const { colors, emojis } = require('../../utils/constants'); + +module.exports = { + category: 'moderation', + data: new SlashCommandBuilder() + .setName('revokesanction') + .setDescription('Révoquer une sanction (Haut gradés, Co-Fonda/Fonda uniquement).') + .addUserOption(option => + option.setName('user') + .setDescription('L\'utilisateur concerné') + .setRequired(true)) + .addIntegerOption(option => + option.setName('sanction_id') + .setDescription('L\'ID DB de la sanction à révoquer (visible dans /casier, ex: ID: 123)') + .setRequired(true)) + .addStringOption(option => + option.setName('reason') + .setDescription('Raison de la révocation') + .setRequired(false)) + .setDefaultMemberPermissions(PermissionFlagsBits.Administrator), + async execute(interaction) { + const target = interaction.options.getUser('user'); + const sanctionId = interaction.options.getInteger('sanction_id'); + const reason = interaction.options.getString('reason') || 'Aucune raison fournie'; + + await interaction.deferReply({ flags: MessageFlags.Ephemeral }); + + if (!interaction.member.permissions.has(PermissionFlagsBits.Administrator) && interaction.user.id !== interaction.guild.ownerId) { + return interaction.editReply({ content: '❌ Seuls les administrateurs et le propriétaire du serveur peuvent révoquer une sanction.' }); + } + + try { + const [sanctionRows] = await db.query( + 'SELECT * FROM logs WHERE id = ? AND userId = ? AND guildId = ?', + [sanctionId, target.id, interaction.guild.id] + ); + + if (!sanctionRows.length) { + return interaction.editReply({ + content: `❌ Aucune sanction trouvée avec l'ID ${sanctionId} pour ${target.tag}.\n\n💡 **Astuce:** Utilise l'ID DB visible dans \`/casier\` (ex: \`#1 (ID: 123)\` → utilise \`123\`).` + }); + } + + const sanction = sanctionRows[0]; + + if (sanction.action === 'Modification de sanction' || + sanction.action === 'Révocation de sanction' || + sanction.action === 'Modification de mute') { + return interaction.editReply({ content: `❌ Cette entrée est une modification, pas une sanction. Utilise l'ID d'une vraie sanction.` }); + } + + await db.query( + 'UPDATE logs SET reason = CONCAT(reason, " [RÉVOQUÉE]") WHERE id = ?', + [sanction.id] + ); + + await db.query( + `INSERT INTO logs (userId, userTag, modId, modTag, action, reason, type, guildId, timestamp) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`, + [target.id, target.tag, interaction.user.id, interaction.user.tag, 'Révocation de sanction', `Sanction #${sanction.id} révoquée. Raison: ${reason}`, null, interaction.guild.id, Date.now()] + ); + + const embed = new EmbedBuilder() + .setTitle(`${emojis.success} Sanction Révoquée`) + .setColor(colors.success) + .setThumbnail(target.displayAvatarURL({ dynamic: true })) + .addFields( + { name: '👤 Utilisateur', value: `<@${target.id}> (${target.tag})`, inline: true }, + { name: '👑 Modérateur', value: `<@${interaction.user.id}> (${interaction.user.tag})`, inline: true }, + { name: '📝 Raison de révocation', value: reason, inline: false }, + { name: '🆔 ID Sanction révoquée', value: `${sanction.id}`, inline: true }, + { name: '📅 Date', value: ``, inline: true } + ) + .setFooter({ text: `ID: ${target.id}` }) + .setTimestamp(); + + await interaction.editReply({ embeds: [embed] }); + + const logEmbed = new EmbedBuilder() + .setTitle(`${emojis.success} Révocation de Sanction`) + .setColor(colors.success) + .addFields( + { name: '👤 Utilisateur', value: `<@${target.id}> (${target.tag})`, inline: true }, + { name: '👑 Modérateur', value: `<@${interaction.user.id}> (${interaction.user.tag})`, inline: true }, + { name: '📝 Raison de révocation', value: reason, inline: false }, + { name: '🆔 ID Sanction révoquée', value: `${sanction.id}`, inline: true }, + { name: '📅 Date', value: ``, inline: true } + ) + .setFooter({ text: `ID: ${target.id} | Serveur: ${interaction.guild.name}` }) + .setTimestamp(); + await sendLog(interaction.guild, { embeds: [logEmbed] }); + + } catch (err) { + console.error('Erreur revokesanction:', err); + await interaction.editReply({ content: `❌ Échec de la révocation de la sanction: ${err.message}` }); + } + }, +}; \ No newline at end of file diff --git a/commands/moderation/unban.js b/commands/moderation/unban.js index 96b6af5..8422d2f 100644 --- a/commands/moderation/unban.js +++ b/commands/moderation/unban.js @@ -1,19 +1,21 @@ -const { SlashCommandBuilder, EmbedBuilder, PermissionFlagsBits } = require('discord.js'); +const { SlashCommandBuilder, EmbedBuilder, PermissionFlagsBits, MessageFlags } = require('discord.js'); const db = require('../../functions/database/db.js'); +const { sendLog } = require('../../utils/helpers'); +const { colors, emojis } = require('../../utils/constants'); module.exports = { category: 'moderation', data: new SlashCommandBuilder() .setName('unban') - .setDescription('Unban a user by their ID or tag.') + .setDescription('Débannir un utilisateur par son ID ou son tag.') .addStringOption(option => option.setName('user') - .setDescription('The ID or tag (Username#1234) of the user to unban') + .setDescription('L\'ID ou le tag (Username#1234) de l\'utilisateur à débannir') .setRequired(true)) .setDefaultMemberPermissions(PermissionFlagsBits.BanMembers), async execute(interaction) { - await interaction.deferReply(); + await interaction.deferReply({ flags: MessageFlags.Ephemeral }); const input = interaction.options.getString('user').trim(); @@ -22,44 +24,57 @@ module.exports = { const bannedUser = bannedUsers.find(b => b.user.id === input || b.user.tag.toLowerCase() === input.toLowerCase() ); - if (!bannedUser) return interaction.editReply('❌ This user is not banned.'); - // Récupération depuis MySQL - const [rows] = await db.query('SELECT * FROM bans WHERE userId = ?', [bannedUser.user.id]); - const banRecord = rows[0]; + if (!bannedUser) return interaction.editReply({ content: '❌ Cet utilisateur n\'est pas banni.' }); - const reason = `Unbanned by ${interaction.user.tag}`; + const reason = `Débanni par ${interaction.user.tag}`; await interaction.guild.members.unban(bannedUser.user.id, reason); - if (banRecord) await db.query('DELETE FROM bans WHERE userId = ?', [bannedUser.user.id]); + await db.query('DELETE FROM bans WHERE userId = ? AND guildId = ?', [bannedUser.user.id, interaction.guild.id]); - await interaction.editReply(`✅ Successfully unbanned ${bannedUser.user.tag}`); + const embed = new EmbedBuilder() + .setAuthor({ name: bannedUser.user.displayName, iconURL: bannedUser.user.displayAvatarURL({ dynamic: true }) }) + .setTitle(`${emojis.unban} Utilisateur Débanni`) + .setColor(colors.unban) + .setThumbnail(bannedUser.user.displayAvatarURL({ dynamic: true })) + .setDescription(`${bannedUser.user.toString()} a été débanni du serveur.`) + .addFields( + { name: '👤 Utilisateur', value: `${bannedUser.user.toString()}\n\`${bannedUser.user.tag}\``, inline: true }, + { name: '👮 Modérateur', value: `${interaction.user.toString()}\n\`${interaction.user.tag}\``, inline: true }, + { name: '📝 Raison', value: reason, inline: false }, + { name: '📅 Date', value: ``, inline: true } + ) + .setFooter({ text: `ID: ${bannedUser.user.id} • ${interaction.guild.name}` }) + .setTimestamp(); - const logChannel = interaction.guild.channels.cache.find(ch => ch.name === 'logs'); - if (logChannel) { - const embed = new EmbedBuilder() - .setTitle('User Unbanned') - .setColor('Green') - .addFields( - { name: 'Membre Banni', value: `<@${bannedUser.user.id}> (${bannedUser.user.tag})`, inline: true }, - { name: 'Modérateur', value: `<@${interaction.user.id}> (${interaction.user.tag})`, inline: true }, - { name: 'Date', value: new Date().toLocaleString(), inline: true }, - { name: 'Guild', value: interaction.guild.name, inline: true } - ) - .setTimestamp(); - logChannel.send({ embeds: [embed] }); - } + await interaction.editReply({ embeds: [embed] }); + + const logEmbed = new EmbedBuilder() + .setAuthor({ name: interaction.user.displayName, iconURL: interaction.user.displayAvatarURL({ dynamic: true }) }) + .setTitle(`${emojis.unban} Débannissement`) + .setColor(colors.unban) + .setThumbnail(bannedUser.user.displayAvatarURL({ dynamic: true })) + .setDescription(`${bannedUser.user.toString()} a été débanni du serveur.`) + .addFields( + { name: '👤 Utilisateur', value: `${bannedUser.user.toString()}\n\`${bannedUser.user.tag}\``, inline: true }, + { name: '👮 Modérateur', value: `${interaction.user.toString()}\n\`${interaction.user.tag}\``, inline: true }, + { name: '📝 Raison', value: reason, inline: false }, + { name: '📅 Date', value: ``, inline: true } + ) + .setFooter({ text: `ID: ${bannedUser.user.id} • ${interaction.guild.name}` }) + .setTimestamp(); + + await sendLog(interaction.guild, { embeds: [logEmbed] }); - // Log dans la DB avec guildId await db.query( `INSERT INTO logs (userId, userTag, modId, modTag, action, reason, type, guildId, timestamp) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`, - [bannedUser.user.id, bannedUser.user.tag, interaction.user.id, interaction.user.tag, 'unban', reason, null, interaction.guild.id, Date.now()] + [bannedUser.user.id, bannedUser.user.tag, interaction.user.id, interaction.user.tag, 'Débannissement', reason, null, interaction.guild.id, Date.now()] ); } catch (err) { - console.error(err); - await interaction.editReply('❌ Failed to unban the user.'); + console.error('Erreur unban:', err); + await interaction.editReply({ content: `❌ Erreur: ${err.message}` }); } - } -}; + }, +}; \ No newline at end of file diff --git a/commands/moderation/unmute.js b/commands/moderation/unmute.js new file mode 100644 index 0000000..6cb9b80 --- /dev/null +++ b/commands/moderation/unmute.js @@ -0,0 +1,86 @@ +const { SlashCommandBuilder, PermissionFlagsBits, EmbedBuilder, MessageFlags } = require('discord.js'); +const db = require('../../functions/database/db.js'); +const { sendLog } = require('../../utils/helpers'); +const { colors, emojis } = require('../../utils/constants'); + +module.exports = { + category: 'moderation', + data: new SlashCommandBuilder() + .setName('unmute') + .setDescription('Démuter un membre du serveur.') + .addUserOption(option => + option.setName('user') + .setDescription('Le membre à démuter') + .setRequired(true)) + .addStringOption(option => + option.setName('reason') + .setDescription('Raison du démute') + .setRequired(false)) + .setDefaultMemberPermissions(PermissionFlagsBits.ModerateMembers), + + async execute(interaction) { + const target = interaction.options.getUser('user'); + const reason = interaction.options.getString('reason') || 'Aucune raison fournie'; + + await interaction.deferReply({ flags: MessageFlags.Ephemeral }); + + if (!target) return interaction.editReply({ content: '❌ Aucun utilisateur spécifié !' }); + + const member = await interaction.guild.members.fetch(target.id).catch(() => null); + if (!member) return interaction.editReply({ content: '❌ Cet utilisateur n\'est pas sur le serveur.' }); + + if (!member.communicationDisabledUntilTimestamp || member.communicationDisabledUntilTimestamp < Date.now()) { + return interaction.editReply({ content: '❌ Cet utilisateur n\'est pas muté.' }); + } + + try { + await member.timeout(null, `Démuté par ${interaction.user.tag}: ${reason}`); + + await db.query('DELETE FROM mutes WHERE userId = ? AND guildId = ?', [target.id, interaction.guild.id]); + + await db.query( + `INSERT INTO logs (userId, userTag, modId, modTag, action, reason, type, guildId, timestamp) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`, + [target.id, target.tag, interaction.user.id, interaction.user.tag, 'Unmute', reason, null, interaction.guild.id, Date.now()] + ); + + const embed = new EmbedBuilder() + .setAuthor({ name: target.displayName, iconURL: target.displayAvatarURL({ dynamic: true }) }) + .setTitle(`${emojis.unmute} Utilisateur Démuté`) + .setColor(colors.unmute) + .setThumbnail(target.displayAvatarURL({ dynamic: true })) + .setDescription(`${target.toString()} a été démuté.`) + .addFields( + { name: '👤 Utilisateur', value: `${target.toString()}\n\`${target.tag}\``, inline: true }, + { name: '👮 Modérateur', value: `${interaction.user.toString()}\n\`${interaction.user.tag}\``, inline: true }, + { name: '📝 Raison', value: reason, inline: false }, + { name: '📅 Date', value: ``, inline: true } + ) + .setFooter({ text: `ID: ${target.id} • ${interaction.guild.name}` }) + .setTimestamp(); + + await interaction.editReply({ embeds: [embed] }); + + const logEmbed = new EmbedBuilder() + .setAuthor({ name: interaction.user.displayName, iconURL: interaction.user.displayAvatarURL({ dynamic: true }) }) + .setTitle(`${emojis.unmute} Unmute`) + .setColor(colors.unmute) + .setThumbnail(target.displayAvatarURL({ dynamic: true })) + .setDescription(`${target.toString()} a été démuté.`) + .addFields( + { name: '👤 Utilisateur', value: `${target.toString()}\n\`${target.tag}\``, inline: true }, + { name: '👮 Modérateur', value: `${interaction.user.toString()}\n\`${interaction.user.tag}\``, inline: true }, + { name: '📝 Raison', value: reason, inline: false }, + { name: '📅 Date', value: ``, inline: true } + ) + .setFooter({ text: `ID: ${target.id} • ${interaction.guild.name}` }) + .setTimestamp(); + + await sendLog(interaction.guild, { embeds: [logEmbed] }); + + } catch (err) { + console.error('Erreur unmute:', err); + await interaction.editReply({ content: `❌ Erreur: ${err.message}` }); + } + }, +}; \ No newline at end of file diff --git a/commands/moderation/untimeout.js b/commands/moderation/untimeout.js new file mode 100644 index 0000000..7cf0abe --- /dev/null +++ b/commands/moderation/untimeout.js @@ -0,0 +1,78 @@ +const { SlashCommandBuilder, PermissionFlagsBits, EmbedBuilder, MessageFlags } = require('discord.js'); +const db = require('../../functions/database/db.js'); +const { sendLog } = require('../../utils/helpers'); +const { colors, emojis } = require('../../utils/constants'); + +module.exports = { + category: 'moderation', + data: new SlashCommandBuilder() + .setName('untimeout') + .setDescription('Retirer le timeout d\'un membre.') + .addUserOption(option => + option.setName('target') + .setDescription('Le membre à dé-timeout') + .setRequired(true)) + .addStringOption(option => + option.setName('reason') + .setDescription('Raison de la levée du timeout') + .setRequired(false)) + .setDefaultMemberPermissions(PermissionFlagsBits.ModerateMembers), + + async execute(interaction) { + const target = interaction.options.getUser('target'); + const reason = interaction.options.getString('reason') || 'Aucune raison fournie'; + + await interaction.deferReply({ flags: MessageFlags.Ephemeral }); + + if (!target) return interaction.editReply({ content: '❌ Aucun utilisateur spécifié !' }); + + const member = await interaction.guild.members.fetch(target.id).catch(() => null); + if (!member) return interaction.editReply({ content: '❌ Cet utilisateur n\'est pas sur le serveur.' }); + + if (!member.communicationDisabledUntilTimestamp || member.communicationDisabledUntilTimestamp < Date.now()) { + return interaction.editReply({ content: '❌ Cet utilisateur n\'est pas en timeout.' }); + } + + try { + await member.timeout(null, `Timeout retiré par ${interaction.user.tag}: ${reason}`); + + await db.query( + `INSERT INTO logs (userId, userTag, modId, modTag, action, reason, type, guildId, timestamp) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`, + [target.id, target.tag, interaction.user.id, interaction.user.tag, 'Timeout retiré', reason, null, interaction.guild.id, Date.now()] + ); + + const embed = new EmbedBuilder() + .setTitle(`${emojis.success} Timeout Retiré`) + .setColor(colors.success) + .setThumbnail(target.displayAvatarURL({ dynamic: true })) + .addFields( + { name: '👤 Utilisateur', value: `<@${target.id}> (${target.tag})`, inline: true }, + { name: '✅ Modérateur', value: `<@${interaction.user.id}> (${interaction.user.tag})`, inline: true }, + { name: '📝 Raison', value: reason, inline: false }, + { name: '📅 Date', value: ``, inline: true } + ) + .setFooter({ text: `ID: ${target.id}` }) + .setTimestamp(); + + await interaction.editReply({ embeds: [embed] }); + + const logEmbed = new EmbedBuilder() + .setTitle(`${emojis.success} Timeout Retiré`) + .setColor(colors.success) + .addFields( + { name: '👤 Utilisateur', value: `<@${target.id}> (${target.tag})`, inline: true }, + { name: '✅ Modérateur', value: `<@${interaction.user.id}> (${interaction.user.tag})`, inline: true }, + { name: '📝 Raison', value: reason, inline: false }, + { name: '📅 Date', value: ``, inline: true } + ) + .setFooter({ text: `ID: ${target.id} | Serveur: ${interaction.guild.name}` }) + .setTimestamp(); + await sendLog(interaction.guild, { embeds: [logEmbed] }); + + } catch (err) { + console.error('Erreur untimeout:', err); + await interaction.editReply({ content: `❌ Erreur: ${err.message}` }); + } + }, +}; \ No newline at end of file diff --git a/commands/moderation/warn.js b/commands/moderation/warn.js new file mode 100644 index 0000000..5c8689c --- /dev/null +++ b/commands/moderation/warn.js @@ -0,0 +1,101 @@ +const { SlashCommandBuilder, PermissionFlagsBits, EmbedBuilder, MessageFlags } = require('discord.js'); +const db = require('../../functions/database/db.js'); +const { sendLog } = require('../../utils/helpers'); +const { colors, emojis } = require('../../utils/constants'); + +module.exports = { + category: 'moderation', + data: new SlashCommandBuilder() + .setName('warn') + .setDescription('Avertir un membre.') + .addUserOption(option => + option.setName('target') + .setDescription('Le membre à avertir') + .setRequired(true)) + .addStringOption(option => + option.setName('reason') + .setDescription('Raison de l\'avertissement') + .setRequired(false)) + .setDefaultMemberPermissions(PermissionFlagsBits.ModerateMembers), + + async execute(interaction) { + const target = interaction.options.getUser('target'); + const reason = interaction.options.getString('reason') || 'Aucune raison fournie'; + + await interaction.deferReply({ flags: MessageFlags.Ephemeral }); + + if (!target) return interaction.editReply({ content: '❌ Aucun utilisateur spécifié !' }); + + const member = await interaction.guild.members.fetch(target.id).catch(() => null); + if (!member) return interaction.editReply({ content: '❌ Cet utilisateur n\'est pas sur le serveur.' }); + + if (member.id === interaction.user.id) return interaction.editReply({ content: '❌ Tu ne peux pas t\'avertir toi-même.' }); + + try { + const [warnRows] = await db.query( + 'SELECT COUNT(*) as count FROM logs WHERE userId = ? AND guildId = ? AND action = ?', + [target.id, interaction.guild.id, 'Avertissement'] + ); + const warnCount = warnRows[0].count + 1; + + await db.query( + `INSERT INTO logs (userId, userTag, modId, modTag, action, reason, type, guildId, timestamp) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`, + [target.id, target.tag, interaction.user.id, interaction.user.tag, 'Avertissement', reason, null, interaction.guild.id, Date.now()] + ); + + const embed = new EmbedBuilder() + .setAuthor({ name: target.displayName, iconURL: target.displayAvatarURL({ dynamic: true }) }) + .setTitle(`${emojis.warn} Utilisateur Averti`) + .setColor(colors.warn) + .setThumbnail(target.displayAvatarURL({ dynamic: true })) + .setDescription(`${target.toString()} a reçu un avertissement.`) + .addFields( + { name: '👤 Utilisateur', value: `${target.toString()}\n\`${target.tag}\``, inline: true }, + { name: '👮 Modérateur', value: `${interaction.user.toString()}\n\`${interaction.user.tag}\``, inline: true }, + { name: '🔢 Nombre d\'avertissements', value: `\`${warnCount}\``, inline: true }, + { name: '📝 Raison', value: reason, inline: false }, + { name: '📅 Date', value: ``, inline: true } + ) + .setFooter({ text: `ID: ${target.id} • ${interaction.guild.name}` }) + .setTimestamp(); + + await interaction.editReply({ embeds: [embed] }); + + try { + const dmEmbed = new EmbedBuilder() + .setTitle(`${emojis.warn} Tu as reçu un avertissement`) + .setColor(colors.warn) + .setDescription(`Tu as été averti sur **${interaction.guild.name}**`) + .addFields( + { name: '📝 Raison', value: reason, inline: false }, + { name: '🔢 Nombre d\'avertissements', value: `${warnCount}`, inline: true } + ) + .setFooter({ text: interaction.guild.name, iconURL: interaction.guild.iconURL({ dynamic: true }) }) + .setTimestamp(); + await target.send({ embeds: [dmEmbed] }); + } catch { /* DMs fermés */ } + + const logEmbed = new EmbedBuilder() + .setAuthor({ name: interaction.user.displayName, iconURL: interaction.user.displayAvatarURL({ dynamic: true }) }) + .setTitle(`${emojis.warn} Avertissement`) + .setColor(colors.warn) + .setThumbnail(target.displayAvatarURL({ dynamic: true })) + .setDescription(`${target.toString()} a reçu un avertissement.`) + .addFields( + { name: '👤 Utilisateur', value: `${target.toString()}\n\`${target.tag}\``, inline: true }, + { name: '👮 Modérateur', value: `${interaction.user.toString()}\n\`${interaction.user.tag}\``, inline: true }, + { name: '🔢 Nombre d\'avertissements', value: `\`${warnCount}\``, inline: true }, + { name: '📝 Raison', value: reason, inline: false }, + { name: '📅 Date', value: ``, inline: true } + ) + .setFooter({ text: `ID: ${target.id} • ${interaction.guild.name}` }) + .setTimestamp(); + await sendLog(interaction.guild, { embeds: [logEmbed] }); + + } catch (err) { + console.error('Erreur warn:', err); + await interaction.editReply({ content: `❌ Erreur: ${err.message}` }); + } + }, +}; \ No newline at end of file diff --git a/commands/ticket/ticket.js b/commands/ticket/ticket.js new file mode 100644 index 0000000..acfc212 --- /dev/null +++ b/commands/ticket/ticket.js @@ -0,0 +1,673 @@ +const { + SlashCommandBuilder, + PermissionFlagsBits, + EmbedBuilder, + ChannelType, + ActionRowBuilder, + ButtonBuilder, + ButtonStyle, + ModalBuilder, + TextInputBuilder, + TextInputStyle, + MessageFlags +} = require('discord.js'); +const db = require('../../functions/database/db.js'); +const { colors } = require('../../utils/constants'); +const fs = require('fs'); +const path = require('path'); + +// Questions pré-définies pour les candidatures +const CANDIDATURE_QUESTIONS = [ + 'Pourquoi souhaites-tu rejoindre le staff ?', + 'Quelles sont tes disponibilités ?', + 'As-tu déjà de l\'expérience en modération ?', + 'Comment gérerais-tu un conflit entre membres ?', + 'Qu\'est-ce qui te motive à aider la communauté ?' +]; + +// Mapping des types de tickets vers des préfixes d'ID +const TICKET_TYPE_PREFIXES = { + 'Support': 'SUPP', + 'Plainte': 'PLNT', + 'Plainte Staff': 'PLST', + 'Candidature': 'CAND', + 'Problème Technique': 'TECH' +}; + +function generateTicketId(type = 'Support') { + const prefix = TICKET_TYPE_PREFIXES[type] || 'TICK'; + const timestamp = Date.now().toString(36).toUpperCase(); + const random = Math.random().toString(36).substring(2, 6).toUpperCase(); + return `${prefix}-${timestamp}-${random}`; +} + +async function getCandidatureResponses(ticketId) { + const [responses] = await db.query( + 'SELECT * FROM candidature_responses WHERE ticketId = ? ORDER BY questionNumber ASC', + [ticketId] + ); + return responses; +} + +function generateTranscriptHTML(ticket, messages, candidatureResponses, useRelativeCss = false) { + const date = new Date(ticket.createdAt); + const dateStr = date.toLocaleDateString('fr-FR', { year: 'numeric', month: '2-digit', day: '2-digit' }); + const closedDateStr = ticket.closedAt ? new Date(ticket.closedAt).toLocaleDateString('fr-FR', { year: 'numeric', month: '2-digit', day: '2-digit' }) : null; + + const typeEmojis = { + 'Support': '💬', + 'Plainte': '📢', + 'Plainte Staff': '⚠️', + 'Candidature': '📝', + 'Problème Technique': '🔧' + }; + + const statusColors = { + 'Ouvert': '#10b981', + 'Fermé': '#ef4444', + 'En attente': '#f59e0b' + }; + + let messagesHTML = ''; + if (messages.length === 0) { + messagesHTML = '

Aucun message enregistré.

'; + } else { + messagesHTML = messages.map(msg => { + const msgDate = new Date(msg.timestamp).toLocaleString('fr-FR'); + const attachmentsHTML = msg.attachments + ? `
📎 Pièces jointes: ${msg.attachments.split(', ').map(url => `${url}`).join(', ')}
` + : ''; + + return ` +
+
+ ${escapeHtml(msg.userTag)} + ${msgDate} +
+
${escapeHtml(msg.content || '*Message vide*').replace(/\n/g, '
')}
+ ${attachmentsHTML} +
+ `; + }).join(''); + } + + let candidatureHTML = ''; + if (candidatureResponses && candidatureResponses.length > 0) { + candidatureHTML = ` +
+

📝 Réponses aux Questions de Candidature

+ ${candidatureResponses.map(response => ` +
+
Question ${response.questionNumber}
+
${escapeHtml(response.question)}
+
${escapeHtml(response.response || '*Pas de réponse*').replace(/\n/g, '
')}
+
+ `).join('')} +
+ `; + } + + // Déterminer l'URL du CSS + let cssUrl; + if (useRelativeCss) { + cssUrl = '../../transcript.css'; + } else { + const webUrl = process.env.TRANSCRIPT_WEB_URL || 'transcript.syxpi.fr'; + cssUrl = `https://${webUrl}/static/transcript.css`; + } + + return ` + + + + + Transcription - ${ticket.ticketId} + + + +
+
+

${typeEmojis[ticket.type] || '🎫'} Transcription du Ticket

+
${ticket.ticketId}
+
+ +
+
+
+
Type
+
${typeEmojis[ticket.type] || '🎫'} ${ticket.type}
+
+
+
Créé par
+
${escapeHtml(ticket.userTag)}
+
+
+
Créé le
+
${dateStr}
+
+
+
Statut
+
+ + ${ticket.status} + +
+
+ ${closedDateStr ? ` +
+
Fermé le
+
${closedDateStr}
+
+ ` : ''} +
+
+ +
+

💬 Messages

+ ${messagesHTML} +
+ + ${candidatureHTML} + + +
+ +`; +} + +function escapeHtml(text) { + if (!text) return ''; + const map = { '&': '&', '<': '<', '>': '>', '"': '"', "'": ''' }; + return text.replace(/[&<>"']/g, m => map[m]); +} + +const commandModule = { + category: 'ticket', + data: new SlashCommandBuilder() + .setName('ticket') + .setDescription('Gérer les tickets') + .addSubcommand(subcommand => subcommand.setName('setup').setDescription('Configurer (Admin)').addChannelOption(o => o.setName('channel').setDescription('Salon'))) + .addSubcommand(subcommand => subcommand.setName('close').setDescription('Fermer un ticket').addStringOption(o => o.setName('reason').setDescription('Raison'))) + .addSubcommand(subcommand => subcommand.setName('transcript').setDescription('Générer transcript')) + .addSubcommand(subcommand => subcommand.setName('reopen').setDescription('Rouvrir un ticket')) + .addSubcommand(subcommand => subcommand.setName('add').setDescription('Ajouter utilisateur').addUserOption(o => o.setName('user').setDescription('Utilisateur').setRequired(true))) + .addSubcommand(subcommand => subcommand.setName('claim').setDescription('Réclamer un ticket')), + + async execute(interaction) { + const subcommand = interaction.options.getSubcommand(); + if (subcommand === 'setup') await handleSetup(interaction); + else if (subcommand === 'close') await handleClose(interaction); + else if (subcommand === 'transcript') await handleTranscript(interaction); + else if (subcommand === 'reopen') await handleReopen(interaction); + else if (subcommand === 'add') await handleAdd(interaction); + else if (subcommand === 'claim') await handleClaim(interaction); + }, +}; + +async function handleCreate(interaction, ticketType) { + // Si l'interaction est un ModalSubmit, on a déjà répondu dans interactionCreate ? Non, on va defer ici. + // Attention : handleCreate est appelé après le ModalSubmit. + await interaction.deferReply({ flags: MessageFlags.Ephemeral }); + + const type = ticketType || 'Support'; + + // Récupérer le sujet s'il vient d'un modal + let subject = 'Aucun sujet précisé'; + if (interaction.isModalSubmit() && interaction.fields) { + try { + subject = interaction.fields.getTextInputValue('ticket_subject'); + } catch (e) { /* Pas de champ subject (ex: commande slash sans modal) */ } + } + + try { + const [existingTickets] = await db.query( + 'SELECT * FROM tickets WHERE userId = ? AND guildId = ? AND status = ?', + [interaction.user.id, interaction.guild.id, 'Ouvert'] + ); + + if (existingTickets.length > 0) { + const existingTicket = existingTickets[0]; + const channel = interaction.guild.channels.cache.get(existingTicket.channelId); + return interaction.editReply({ + content: `❌ Tu as déjà un ticket ouvert : ${channel ? channel.toString() : `ID: ${existingTicket.ticketId}`}` + }); + } + + let ticketCategory = interaction.guild.channels.cache.find( + ch => ch.type === ChannelType.GuildCategory && ch.name.toLowerCase().includes('ticket') + ); + + if (!ticketCategory) { + try { + ticketCategory = await interaction.guild.channels.create({ + name: '🎫 Tickets', + type: ChannelType.GuildCategory, + permissionOverwrites: [ + { id: interaction.guild.id, deny: [PermissionFlagsBits.ViewChannel] }, + { id: interaction.client.user.id, allow: [PermissionFlagsBits.ViewChannel, PermissionFlagsBits.ManageChannels, PermissionFlagsBits.SendMessages] }, + ], + }); + } catch (err) { ticketCategory = null; } + } + + const ticketId = generateTicketId(type); + const cleanUsername = interaction.user.username.toLowerCase().replace(/[^a-z0-9-]/g, '').substring(0, 20); + const typeName = type.toLowerCase().replace(/\s+/g, '-').substring(0, 20); + const channelName = `${typeName}-${cleanUsername}`.substring(0, 100); + + let channel; + // Permissions initiales : Le user voit le salon + const userPerms = [ + { id: interaction.guild.id, deny: [PermissionFlagsBits.ViewChannel] }, + { id: interaction.user.id, allow: [PermissionFlagsBits.ViewChannel, PermissionFlagsBits.SendMessages, PermissionFlagsBits.AttachFiles] }, + { id: interaction.client.user.id, allow: [PermissionFlagsBits.ViewChannel, PermissionFlagsBits.SendMessages, PermissionFlagsBits.ManageMessages, PermissionFlagsBits.EmbedLinks, PermissionFlagsBits.AttachFiles] }, + ]; + + try { + channel = await interaction.guild.channels.create({ + name: channelName, + type: ChannelType.GuildText, + parent: ticketCategory?.id, + permissionOverwrites: userPerms, + }); + } catch (createErr) { + channel = await interaction.guild.channels.create({ + name: channelName, + type: ChannelType.GuildText, + permissionOverwrites: userPerms, + }); + } + + const modRoles = interaction.guild.roles.cache.filter(role => role.permissions.has(PermissionFlagsBits.ManageMessages) && !role.managed); + for (const role of modRoles.values()) { + await channel.permissionOverwrites.edit(role.id, { ViewChannel: true, SendMessages: true, ReadMessageHistory: true }); + } + + await db.query( + `INSERT INTO tickets (ticketId, channelId, userId, userTag, guildId, type, status, createdAt) + VALUES (?, ?, ?, ?, ?, ?, ?, ?)`, + [ticketId, channel.id, interaction.user.id, interaction.user.tag, interaction.guild.id, type, 'Ouvert', Date.now()] + ); + + const typeEmojis = { 'Support': '💬', 'Plainte': '📢', 'Plainte Staff': '⚠️', 'Candidature': '📝', 'Problème Technique': '🔧' }; + + const welcomeEmbed = new EmbedBuilder() + .setColor(colors.success) + .setTitle(`${typeEmojis[type] || '🎫'} Ticket Ouvert : ${type}`) + .setDescription(`👋 Bonjour ${interaction.user.toString()} !\n\nUn membre de l'équipe va prendre en charge votre demande.`) + .addFields( + { name: '📋 Sujet de la demande', value: `\`\`\`${subject}\`\`\``, inline: false }, + { name: '🆔 ID', value: `\`${ticketId}\``, inline: true }, + { name: '📅 Date', value: ``, inline: true } + ) + .setThumbnail(interaction.user.displayAvatarURL({ dynamic: true })) + .setFooter({ text: 'France Femboy Bot • Support', iconURL: interaction.client.user.displayAvatarURL() }) + .setTimestamp(); + + const row = new ActionRowBuilder().addComponents( + new ButtonBuilder().setCustomId(`ticket_close_${ticketId}`).setLabel('Fermer').setStyle(ButtonStyle.Danger).setEmoji('🔒'), + new ButtonBuilder().setCustomId(`ticket_claim_${ticketId}`).setLabel('Réclamer').setStyle(ButtonStyle.Secondary).setEmoji('👋') + ); + + await channel.send({ content: `${interaction.user} <@&${modRoles.first()?.id || interaction.user.id}>`, embeds: [welcomeEmbed], components: [row] }); + await interaction.editReply({ content: `✅ Ticket créé avec succès ! ${channel.toString()}` }); + + } catch (err) { + console.error('Erreur creation ticket:', err); + await interaction.editReply({ content: `❌ Erreur: ${err.message}` }); + } +} + +// 1. Point d'entrée pour la fermeture (Bouton ou Slash) +async function handleClose(interaction) { + // 1. Vérification Permissions (User ne doit pas pouvoir fermer) + if (!interaction.member.permissions.has(PermissionFlagsBits.ManageMessages)) { + return interaction.reply({ content: '❌ Seuls les membres du staff peuvent fermer un ticket.', flags: MessageFlags.Ephemeral }); + } + + if (interaction.isButton()) { + const modal = new ModalBuilder().setCustomId('ticket_close_reason_modal').setTitle('Fermeture du Ticket'); + const input = new TextInputBuilder().setCustomId('reason').setLabel('Raison').setStyle(TextInputStyle.Paragraph).setRequired(true); + modal.addComponents(new ActionRowBuilder().addComponents(input)); + await interaction.showModal(modal); + return; + } + await interaction.deferReply({ flags: MessageFlags.Ephemeral }); + let reason = interaction.options?.getString('reason') || 'Aucune raison fournie'; + await processTicketClose(interaction, reason); +} + +async function handleCloseModal(interaction) { + await interaction.deferReply({ flags: MessageFlags.Ephemeral }); + // Check permission again for security + if (!interaction.member.permissions.has(PermissionFlagsBits.ManageMessages)) { + return interaction.editReply({ content: '❌ Action non autorisée.' }); + } + const reason = interaction.fields.getTextInputValue('reason') || 'Aucune raison fournie'; + await processTicketClose(interaction, reason); +} + +// 3. Logique commune de fermeture +async function processTicketClose(interaction, reason) { + try { + const [tickets] = await db.query('SELECT * FROM tickets WHERE channelId = ?', [interaction.channel.id]); + if (!tickets.length) return interaction.editReply({ content: '❌ Erreur ticket.' }); + const ticket = tickets[0]; + + await db.query('UPDATE tickets SET status = ?, closedAt = ?, closedBy = ? WHERE ticketId = ?', ['Fermé', Date.now(), interaction.user.id, ticket.ticketId]); + + // --- GENERATION TRANSCRIPT AUTO --- + try { + const [messages] = await db.query('SELECT * FROM ticket_messages WHERE ticketId = ? ORDER BY timestamp', [ticket.ticketId]); + const candidatureResponses = ticket.type === 'Candidature' ? await getCandidatureResponses(ticket.ticketId) : null; + + const htmlContent = generateTranscriptHTML(ticket, messages, candidatureResponses, true); + + // Structure dossiers + const date = new Date(ticket.createdAt); + const dateFolder = date.toISOString().split('T')[0]; + const typeFolder = ticket.type.toLowerCase().replace(/\s+/g, '-'); + const cleanUsername = ticket.userTag.replace(/[^a-zA-Z0-9-_]/g, '-').toLowerCase(); + + const transcriptsBaseDir = path.join(process.cwd(), 'transcripts'); + const dateDir = path.join(transcriptsBaseDir, typeFolder, dateFolder); + if (!fs.existsSync(dateDir)) fs.mkdirSync(dateDir, { recursive: true }); + + // Nom de fichier unique avec ID du ticket + const fileName = `${dateFolder}-${cleanUsername}-${ticket.ticketId}.html`; + const filePath = path.join(dateDir, fileName); + fs.writeFileSync(filePath, htmlContent, 'utf8'); + + // Chemin relatif pour la DB (ex: transcripts/support/2025-01-01/file.html) + const dbPath = `transcripts/${typeFolder}/${dateFolder}/${fileName}`; + + await db.query('UPDATE tickets SET transcriptPath = ? WHERE ticketId = ?', [dbPath, ticket.ticketId]); + + } catch (transcriptErr) { + console.error('Erreur génération transcript auto:', transcriptErr); + } + // ---------------------------------- + + const closeEmbed = new EmbedBuilder() + .setTitle('🔒 Ticket Fermé') + .setColor(colors.error) + .setDescription(`Ticket clôturé par ${interaction.user}.`) + .addFields( + { name: '📝 Raison', value: `\`\`\`${reason}\`\`\``, inline: false }, + { name: '👮 Géré par', value: ticket.claimedBy ? `<@${ticket.claimedBy}>` : '> *Personne*', inline: true } + ); + + // BOUTONS DE GESTION APRES FERMETURE + const row = new ActionRowBuilder().addComponents( + new ButtonBuilder().setCustomId(`ticket_reopen_${ticket.ticketId}`).setLabel('Rouvrir').setStyle(ButtonStyle.Success).setEmoji('🔓'), + new ButtonBuilder().setCustomId(`ticket_delete_${ticket.ticketId}`).setLabel('Supprimer').setStyle(ButtonStyle.Danger).setEmoji('🗑️') + ); + + const closeMsg = await interaction.channel.send({ embeds: [closeEmbed], components: [row] }); + + if (!interaction.channel.name.startsWith('🔒-')) { + await interaction.channel.setName(`🔒-${interaction.channel.name}`).catch(() => {}); + } + + // VISIBILITE : On retire la vue au membre + await interaction.channel.permissionOverwrites.edit(ticket.userId, { ViewChannel: false }); + + // Désactivation des ANCIENS boutons (Sauf le nouveau message de fermeture) + try { + const messages = await interaction.channel.messages.fetch({ limit: 20 }); + const oldMessages = messages.filter(m => m.author.id === interaction.client.user.id && m.components.length > 0 && m.id !== closeMsg.id); + for (const oldMsg of oldMessages.values()) { + const newRows = oldMsg.components.map(row => { + const newRow = new ActionRowBuilder(); + row.components.forEach(c => newRow.addComponents(ButtonBuilder.from(c).setDisabled(true))); + return newRow; + }); + await oldMsg.edit({ components: newRows }); + } + } catch (e) {} + + await interaction.editReply({ content: '✅ Ticket fermé.' }); + } catch (err) { await interaction.editReply({ content: `❌ Erreur: ${err.message}` }); } +} + +async function handleTranscript(interaction) { + await interaction.deferReply({ flags: MessageFlags.Ephemeral }); + try { + const [tickets] = await db.query('SELECT * FROM tickets WHERE channelId = ?', [interaction.channel.id]); + if (tickets.length === 0) return interaction.editReply({ content: '❌ Ce canal n\'est pas un ticket.' }); + const ticket = tickets[0]; + + const [messages] = await db.query('SELECT * FROM ticket_messages WHERE ticketId = ? ORDER BY timestamp', [ticket.ticketId]); + + // Structure dossiers + const date = new Date(ticket.createdAt); + const dateFolder = date.toISOString().split('T')[0]; + const typeFolder = ticket.type.toLowerCase().replace(/\s+/g, '-'); + const cleanUsername = ticket.userTag.replace(/[^a-zA-Z0-9-_]/g, '-').toLowerCase(); + + const transcriptsBaseDir = path.join(process.cwd(), 'transcripts'); + const dateDir = path.join(transcriptsBaseDir, typeFolder, dateFolder); + if (!fs.existsSync(dateDir)) fs.mkdirSync(dateDir, { recursive: true }); + + // Génération + const candidatureResponses = ticket.type === 'Candidature' ? await getCandidatureResponses(ticket.ticketId) : null; + const htmlContent = generateTranscriptHTML(ticket, messages, candidatureResponses, true); + + // Nom de fichier unique avec ID du ticket + const fileName = `${dateFolder}-${cleanUsername}-${ticket.ticketId}.html`; + const filePath = path.join(dateDir, fileName); + fs.writeFileSync(filePath, htmlContent, 'utf8'); + + const webPath = `transcripts/${typeFolder}/${dateFolder}/${fileName}`; + const webUrl = process.env.TRANSCRIPT_WEB_URL || 'transcript.syxpi.fr'; + + // Mise à jour DB + const dbPath = `transcripts/${typeFolder}/${dateFolder}/${fileName}`; + await db.query('UPDATE tickets SET transcriptPath = ? WHERE ticketId = ?', [dbPath, ticket.ticketId]); + + await interaction.editReply({ + content: `✅ **Transcription générée !**\n\n📄 **Fichier local:** \`${fileName}\`\n🌐 **Lien Web:** https://${webUrl}/${webPath}`, + files: [{ attachment: filePath, name: fileName }] + }); + } catch (err) { + console.error(err); + await interaction.editReply({ content: `❌ Erreur: ${err.message}` }); + } +} + +async function handleReopen(interaction) { + if (interaction.isButton()) { + const modal = new ModalBuilder().setCustomId('ticket_reopen_modal').setTitle('Réouverture du Ticket'); + const input = new TextInputBuilder().setCustomId('reason').setLabel('Raison').setStyle(TextInputStyle.Paragraph).setRequired(true); + modal.addComponents(new ActionRowBuilder().addComponents(input)); + await interaction.showModal(modal); + return; + } + await handleReopenModal(interaction, "Commande Slash"); +} + +async function handleReopenModal(interaction, slashReason = null) { + if (!slashReason) await interaction.deferReply({ flags: MessageFlags.Ephemeral }); + const reason = slashReason || interaction.fields.getTextInputValue('reason'); + + try { + const [tickets] = await db.query('SELECT * FROM tickets WHERE channelId = ?', [interaction.channel.id]); + const ticket = tickets[0]; + + await db.query('UPDATE tickets SET status = ?, closedAt = NULL, closedBy = NULL WHERE ticketId = ?', ['Ouvert', ticket.ticketId]); + + // Restituer la vue + await interaction.channel.permissionOverwrites.edit(ticket.userId, { ViewChannel: true, SendMessages: true }); + + if (interaction.channel.name.startsWith('🔒-')) { + await interaction.channel.setName(interaction.channel.name.replace('🔒-', '')); + } + + const embed = new EmbedBuilder() + .setTitle('🔓 Ticket Réouvert') + .setColor(colors.success) + .setDescription(`Le ticket a été rouvert par ${interaction.user}.`) + .addFields({ name: '📝 Raison', value: `\`\`\`${reason}\`\`\`` }); + + // IMPORTANT : On remet le bouton FERMER + const row = new ActionRowBuilder().addComponents( + new ButtonBuilder().setCustomId(`ticket_close_${ticket.ticketId}`).setLabel('Fermer').setStyle(ButtonStyle.Danger).setEmoji('🔒') + ); + + await interaction.channel.send({ embeds: [embed], components: [row] }); + + // Supprimer le message de fermeture précédent + try { + const messages = await interaction.channel.messages.fetch({ limit: 10 }); + const closeMsg = messages.find(m => m.embeds[0]?.title === '🔒 Ticket Fermé'); + if (closeMsg) await closeMsg.delete(); + } catch (e) {} + + const msg = { content: '✅ Ticket rouvert.' }; + if (interaction.replied || interaction.deferred) await interaction.editReply(msg); + else await interaction.reply({ ...msg, flags: MessageFlags.Ephemeral }); + + } catch (err) { console.error(err); } +} + +async function handleAdd(interaction) { + await interaction.deferReply({ flags: MessageFlags.Ephemeral }); + try { + const user = interaction.options.getUser('user'); + await interaction.channel.permissionOverwrites.edit(user.id, { ViewChannel: true, SendMessages: true, ReadMessageHistory: true }); + + const embed = new EmbedBuilder() + .setTitle('👤 Utilisateur Ajouté') + .setColor(colors.info) + .setDescription(`${user.toString()} a été ajouté au ticket par ${interaction.user.toString()}.`) + .setTimestamp(); + + await interaction.channel.send({ embeds: [embed] }); + await interaction.editReply({ content: `✅ ${user.tag} ajouté.` }); + } catch (err) { + await interaction.editReply({ content: `❌ Erreur: ${err.message}` }); + } +} + +async function handleClaim(interaction) { + await interaction.deferReply({ flags: MessageFlags.Ephemeral }); + if (!interaction.member.permissions.has(PermissionFlagsBits.ManageMessages)) return interaction.editReply({ content: '❌ Staff uniquement.' }); + + try { + const [tickets] = await db.query('SELECT * FROM tickets WHERE channelId = ?', [interaction.channel.id]); + if (!tickets.length) return interaction.editReply({ content: '❌ Pas un ticket.' }); + const ticket = tickets[0]; + + if (ticket.claimedBy === interaction.user.id) { + await db.query('UPDATE tickets SET claimedBy = NULL, claimedByTag = NULL WHERE ticketId = ?', [ticket.ticketId]); + await interaction.channel.send({ embeds: [new EmbedBuilder().setColor(colors.info).setDescription(`🛑 **Ticket libéré** par ${interaction.user.toString()}.`)] }); + return interaction.editReply({ content: '✅ Ticket libéré.' }); + } + + if (ticket.claimedBy) return interaction.editReply({ content: `❌ Déjà réclamé par quelqu'un d'autre.` }); + + await db.query('UPDATE tickets SET claimedBy = ?, claimedByTag = ?, claimedAt = ? WHERE ticketId = ?', [interaction.user.id, interaction.user.tag, Date.now(), ticket.ticketId]); + + const embed = new EmbedBuilder() + .setColor(colors.success) + .setTitle('👋 Ticket Pris en Charge') + .setDescription(`Ce ticket est désormais géré par ${interaction.user.toString()}.`) + .setThumbnail(interaction.user.displayAvatarURL({ dynamic: true })) + .setTimestamp(); + + await interaction.channel.send({ embeds: [embed] }); + await interaction.editReply({ content: '✅ Ticket réclamé.' }); + } catch (err) { + await interaction.editReply({ content: `❌ Erreur: ${err.message}` }); + } +} + +async function handleDelete(interaction) { + // Suppression directe sans modal + await handleDeleteModal(interaction, "Suppression demandée par l'utilisateur"); +} + +async function handleDeleteModal(interaction, slashReason = null) { + // Si l'interaction n'a pas été différée ou répondue, on le fait + if (!interaction.deferred && !interaction.replied) { + await interaction.deferReply({ flags: MessageFlags.Ephemeral }); + } + + try { + const [tickets] = await db.query('SELECT * FROM tickets WHERE channelId = ?', [interaction.channel.id]); + if (tickets.length) { + await db.query('UPDATE tickets SET status = ?, closedAt = ?, closedBy = ? WHERE ticketId = ?', ['Supprimé', Date.now(), interaction.user.id, tickets[0].ticketId]); + } + await interaction.channel.delete(); + } catch (err) { console.error(err); } +} + +// Fonction spécifique pour le submit du modal +async function handleCandidatureModalSubmit(interaction) { + const ticketId = generateTicketId('Candidature'); + const channelName = `candidature-${interaction.user.username.replace(/[^a-z0-9]/gi, '').substring(0,15)}`; + + try { + let category = interaction.guild.channels.cache.find(c => c.type === ChannelType.GuildCategory && c.name.toLowerCase().includes('ticket')); + const channel = await interaction.guild.channels.create({ + name: channelName, type: ChannelType.GuildText, parent: category?.id, + permissionOverwrites: [ + { id: interaction.guild.id, deny: [PermissionFlagsBits.ViewChannel] }, + { id: interaction.user.id, allow: [PermissionFlagsBits.ViewChannel, PermissionFlagsBits.SendMessages] }, + { id: interaction.client.user.id, allow: [PermissionFlagsBits.ViewChannel, PermissionFlagsBits.ManageChannels] } + ] + }); + + await db.query(`INSERT INTO tickets (ticketId, channelId, userId, userTag, guildId, type, status, createdAt) VALUES (?, ?, ?, ?, ?, 'Candidature', 'Ouvert', ?)`, [ticketId, channel.id, interaction.user.id, interaction.user.tag, interaction.guild.id, Date.now()]); + + const fields = []; + for (let i = 0; i < Math.min(CANDIDATURE_QUESTIONS.length, 5); i++) { + const val = interaction.fields.getTextInputValue(`cand_q${i+1}`); + // Correction: Utilisation de Date.now() au lieu de new Date() pour le timestamp + await db.query('INSERT INTO candidature_responses (ticketId, questionNumber, question, response, timestamp) VALUES (?, ?, ?, ?, ?)', [ticketId, i+1, CANDIDATURE_QUESTIONS[i], val, Date.now()]); + // Utiliser la question complète comme nom de champ + fields.push({ name: CANDIDATURE_QUESTIONS[i], value: val.substring(0, 1024) }); + } + + const embed = new EmbedBuilder() + .setTitle('📝 Nouvelle Candidature Staff') + .setColor(colors.warning) + .setDescription(`Candidature soumise par ${interaction.user.toString()} (\`${interaction.user.tag}\`)`) + .setThumbnail(interaction.user.displayAvatarURL({ dynamic: true })) + .addFields(fields) + .addFields( + { name: '━━━━━━━━━━━━━━━━', value: 'ℹ️ **Informations**' }, + { name: '🆔 ID Ticket', value: `\`${ticketId}\``, inline: true }, + { name: '📅 Soumis le', value: ``, inline: true } + ) + .setFooter({ text: 'France Femboy Bot • Recrutement', iconURL: interaction.client.user.displayAvatarURL() }) + .setTimestamp(); + + const row = new ActionRowBuilder().addComponents( + new ButtonBuilder().setCustomId(`ticket_close_${ticketId}`).setLabel('Fermer').setStyle(ButtonStyle.Danger).setEmoji('🔒'), + new ButtonBuilder().setCustomId(`ticket_claim_${ticketId}`).setLabel('Traiter').setStyle(ButtonStyle.Success).setEmoji('✅') + ); + + await channel.send({ content: '@here Nouvelle candidature', embeds: [embed], components: [row] }); + await interaction.reply({ content: `✅ Candidature envoyée : ${channel.toString()}`, flags: MessageFlags.Ephemeral }); + } catch (e) { console.error(e); } +} +// Exports +commandModule.handleCreate = handleCreate; +commandModule.handleClose = handleClose; +commandModule.handleCloseModal = handleCloseModal; +commandModule.handleReopen = handleReopen; +commandModule.handleReopenModal = handleReopenModal; +commandModule.handleDelete = handleDelete; +commandModule.handleDeleteModal = handleDeleteModal; +commandModule.handleAdd = handleAdd; +commandModule.handleClaim = handleClaim; +commandModule.handleTranscript = handleTranscript; +commandModule.handleCandidatureModalSubmit = handleCandidatureModalSubmit; + +module.exports = commandModule; +module.exports.CANDIDATURE_QUESTIONS = CANDIDATURE_QUESTIONS; +module.exports.generateTicketId = generateTicketId; \ No newline at end of file diff --git a/commands/utility/avatar.js b/commands/utility/avatar.js new file mode 100644 index 0000000..9da736e --- /dev/null +++ b/commands/utility/avatar.js @@ -0,0 +1,31 @@ +const { SlashCommandBuilder, EmbedBuilder } = require('discord.js'); + +module.exports = { + category: 'utility', + data: new SlashCommandBuilder() + .setName('avatar') + .setDescription('Affiche l\'avatar d\'un utilisateur.') + .addUserOption(option => + option.setName('user') + .setDescription('L\'utilisateur dont tu veux voir l\'avatar') + .setRequired(false)), + async execute(interaction) { + const target = interaction.options.getUser('user') || interaction.user; + const { colors, emojis } = require('../../utils/constants'); + + const embed = new EmbedBuilder() + .setAuthor({ + name: `${target.displayName}`, + iconURL: target.displayAvatarURL({ dynamic: true }) + }) + .setTitle(`${emojis.avatar} Avatar`) + .setColor(colors.utility) + .setImage(target.displayAvatarURL({ dynamic: true, size: 4096 })) + .setDescription(`[Télécharger l'avatar](${target.displayAvatarURL({ dynamic: true, size: 4096 })})`) + .setFooter({ text: `Demandé par ${interaction.user.displayName} • ${interaction.guild.name}`, iconURL: interaction.user.displayAvatarURL() }) + .setTimestamp(); + + await interaction.reply({ embeds: [embed] }); + }, +}; + diff --git a/commands/utility/ping.js b/commands/utility/ping.js index bbfc687..d32f9e5 100644 --- a/commands/utility/ping.js +++ b/commands/utility/ping.js @@ -4,20 +4,30 @@ module.exports = { category: 'utility', data: new SlashCommandBuilder() .setName('ping') - .setDescription('Replies with API latency and ICMP latency!'), + .setDescription('Affiche la latence du bot.'), async execute(interaction) { - // --- API latency Discord --- - const apiLatency = Math.round(interaction.client.ws.ping); + await interaction.deferReply(); + const sent = await interaction.fetchReply(); - // --- Reply final --- + const apiLatency = Math.round(interaction.client.ws.ping); + const roundTripLatency = sent.createdTimestamp - interaction.createdTimestamp; + + const { colors, emojis } = require('../../utils/constants'); + const embed = new EmbedBuilder() - .setColor('#00FFFF') - .setTitle('🏓 Ping Status') + .setAuthor({ + name: `${interaction.client.user.username}`, + iconURL: interaction.client.user.displayAvatarURL() + }) + .setTitle(`${emojis.ping} Statut de la Latence`) + .setColor(colors.utility) .addFields( - { name: '🌐 API Latency', value: `${apiLatency}ms`, inline: true } + { name: '🌐 Latence API', value: `\`${apiLatency}ms\``, inline: true }, + { name: '⏱️ Latence Round-Trip', value: `\`${roundTripLatency}ms\``, inline: true } ) + .setFooter({ text: `${interaction.guild.name} • ${interaction.client.user.username}`, iconURL: interaction.client.user.displayAvatarURL() }) .setTimestamp(); - await interaction.reply({ embeds: [embed] }); + await interaction.editReply({ embeds: [embed] }); }, -}; +}; \ No newline at end of file diff --git a/commands/xp/bumptime.js b/commands/xp/bumptime.js new file mode 100644 index 0000000..17edaf3 --- /dev/null +++ b/commands/xp/bumptime.js @@ -0,0 +1,79 @@ +const { SlashCommandBuilder, EmbedBuilder, MessageFlags } = require('discord.js'); +const db = require('../../functions/database/db.js'); +const { colors, emojis } = require('../../utils/constants.js'); + +module.exports = { + category: 'xp', + data: new SlashCommandBuilder() + .setName('bumptime') + .setDescription('Vérifier le dernier bump et le temps restant avant le prochain'), + async execute(interaction) { + await interaction.deferReply({ flags: MessageFlags.Ephemeral }); + + try { + const [bumps] = await db.query( + 'SELECT * FROM bumps WHERE guildId = ? ORDER BY bumpTime DESC LIMIT 1', + [interaction.guild.id] + ); + + if (bumps.length === 0) { + return interaction.editReply({ + content: '❌ Aucun bump enregistré pour ce serveur.' + }); + } + + const lastBump = bumps[0]; + const bumpTime = parseInt(lastBump.bumpTime, 10); + const now = Date.now(); + const timeSinceBump = now - bumpTime; + const twoHours = 2 * 60 * 60 * 1000; + const timeUntilNextBump = twoHours - timeSinceBump; + + const user = await interaction.client.users.fetch(lastBump.userId).catch(() => null); + const userTag = user ? user.tag : `ID: ${lastBump.userId}`; + + const embed = new EmbedBuilder() + .setAuthor({ + name: interaction.guild.name, + iconURL: interaction.guild.iconURL({ dynamic: true }) || undefined + }) + .setTimestamp(); + + if (timeUntilNextBump > 0) { + const hours = Math.floor(timeUntilNextBump / (60 * 60 * 1000)); + const minutes = Math.floor((timeUntilNextBump % (60 * 60 * 1000)) / (60 * 1000)); + const seconds = Math.floor((timeUntilNextBump % (60 * 1000)) / 1000); + + embed.setTitle('⏳ Bump en Cooldown') + .setColor(colors.warning) + .setDescription(`Le dernier bump a été effectué il y a moins de 2 heures.`) + .addFields( + { name: '👤 Dernier bump par', value: `\`${userTag}\``, inline: true }, + { name: '⏰ Il y a', value: `\`${Math.floor(timeSinceBump / (60 * 60 * 1000))}h ${Math.floor((timeSinceBump % (60 * 60 * 1000)) / (60 * 1000))}m\``, inline: true }, + { name: '🕐 Temps restant', value: `\`${hours}h ${minutes}m ${seconds}s\``, inline: true }, + { name: '📅 Prochain bump disponible', value: ``, inline: false } + ) + .setFooter({ text: 'Utilise /bump (Disboard) pour bump le serveur' }); + } else { + embed.setTitle(`${emojis.success} Bump Disponible`) + .setColor(colors.success) + .setDescription(`**Le serveur peut être bumpé maintenant !**`) + .addFields( + { name: '👤 Dernier bump par', value: `\`${userTag}\``, inline: true }, + { name: '⏰ Il y a', value: `\`${Math.floor(timeSinceBump / (60 * 60 * 1000))}h ${Math.floor((timeSinceBump % (60 * 60 * 1000)) / (60 * 1000))}m\``, inline: true }, + { name: '✅ Statut', value: '**Disponible**', inline: true }, + { name: '💡 Astuce', value: 'Utilise `/bump` (Disboard) pour bump le serveur !', inline: false } + ) + .setFooter({ text: 'Utilise /bump (Disboard) pour bump le serveur' }); + } + + await interaction.editReply({ embeds: [embed] }); + + } catch (err) { + console.error('Erreur bumptime:', err); + await interaction.editReply({ + content: '❌ Erreur lors de la vérification du bump.' + }); + } + }, +}; \ No newline at end of file diff --git a/commands/xp/leaderboard.js b/commands/xp/leaderboard.js new file mode 100644 index 0000000..0462858 --- /dev/null +++ b/commands/xp/leaderboard.js @@ -0,0 +1,65 @@ +const { SlashCommandBuilder, EmbedBuilder } = require('discord.js'); +const { getLeaderboard, getXPProgress } = require('../../functions/xp/xp.js'); +const { colors, emojis } = require('../../utils/constants'); + +module.exports = { + category: 'xp', + data: new SlashCommandBuilder() + .setName('leaderboard') + .setDescription('Affiche le classement des niveaux') + .addIntegerOption(option => + option.setName('limit') + .setDescription('Nombre d\'utilisateurs à afficher (par défaut: 10)') + .setRequired(false) + .setMinValue(1) + .setMaxValue(25)), + async execute(interaction) { + await interaction.deferReply(); + + const limit = interaction.options.getInteger('limit') || 10; + const leaderboard = await getLeaderboard(interaction.guild.id, limit); + + if (leaderboard.length === 0) { + return interaction.editReply({ + content: '❌ Aucun utilisateur trouvé dans le classement.' + }); + } + + const leaderboardData = []; + for (const user of leaderboard) { + try { + const member = await interaction.guild.members.fetch(user.userId).catch(() => null); + if (member) { + leaderboardData.push({ + user: member.user, + xp: user.xp, + level: user.level + }); + } + } catch (err) { /* Ignorer */ } + } + + const medals = ['🥇', '🥈', '🥉']; + const description = leaderboardData.map((data, index) => { + const medal = medals[index] || `\`${index + 1}.\``; + const progress = getXPProgress(data.xp, data.level); + return `${medal} **${data.user.displayName}** • ${emojis.level} Niveau \`${data.level}\` • ${emojis.xp} \`${data.xp.toLocaleString()} XP\` • \`${progress.percentage}%\``; + }).join('\n'); + + const embed = new EmbedBuilder() + .setAuthor({ + name: interaction.guild.name, + iconURL: interaction.guild.iconURL({ dynamic: true }) || undefined + }) + .setTitle(`${emojis.leaderboard} Classement des Niveaux`) + .setColor(colors.xp) + .setDescription(description || 'Aucun utilisateur dans le classement') + .setFooter({ + text: `Top ${limit} • ${interaction.guild.name}`, + iconURL: interaction.guild.iconURL({ dynamic: true }) || undefined + }) + .setTimestamp(); + + await interaction.editReply({ embeds: [embed] }); + }, +}; \ No newline at end of file diff --git a/commands/xp/level.js b/commands/xp/level.js new file mode 100644 index 0000000..23bf72d --- /dev/null +++ b/commands/xp/level.js @@ -0,0 +1,97 @@ +const { SlashCommandBuilder, EmbedBuilder } = require('discord.js'); +const { getUserXP, getXPProgress, getXPForNextLevel, getUserRank } = require('../../functions/xp/xp.js'); +const { colors, emojis } = require('../../utils/constants'); + +module.exports = { + category: 'xp', + data: new SlashCommandBuilder() + .setName('level') + .setDescription('Affiche ton niveau et ton XP') + .addUserOption(option => + option.setName('user') + .setDescription('L\'utilisateur dont tu veux voir le niveau') + .setRequired(false)), + async execute(interaction) { + await interaction.deferReply(); + + const target = interaction.options.getUser('user') || interaction.user; + const userXP = await getUserXP(target.id, interaction.guild.id); + + if (!userXP) { + return interaction.editReply({ + content: '❌ Erreur lors de la récupération des données XP.' + }); + } + + const progress = getXPProgress(userXP.xp, userXP.level); + const xpForNextLevel = getXPForNextLevel(userXP.level); + const rank = await getUserRank(target.id, interaction.guild.id); + + const barLength = 20; + let filled = 0; + let empty = barLength; + + if (progress.needed > 0 && progress.current >= 0) { + const percentage = Math.min(100, Math.max(0, (progress.current / progress.needed) * 100)); + filled = Math.max(0, Math.min(barLength, Math.floor((percentage / 100) * barLength))); + empty = Math.max(0, barLength - filled); + } + + const progressBar = '█'.repeat(filled) + '░'.repeat(empty); + + // Formatage du temps vocal + const totalMinutes = userXP.totalVoiceTime || 0; + const hours = Math.floor(totalMinutes / 60); + const minutes = totalMinutes % 60; + const voiceTimeStr = `${hours}h ${minutes}m`; + + const embed = new EmbedBuilder() + .setAuthor({ + name: target.displayName, + iconURL: target.displayAvatarURL({ dynamic: true }) + }) + .setTitle(`${emojis.level} Niveau ${userXP.level}`) + .setColor(colors.xp) + .setThumbnail(target.displayAvatarURL({ dynamic: true, size: 256 })) + .setDescription(`**${emojis.rank} Rang #${rank}** sur ${interaction.guild.name}`) + .addFields( + { + name: `${emojis.xp} XP Total`, + value: `\`${userXP.xp.toLocaleString()} XP\``, + inline: true + }, + { + name: '📈 Progression', + value: `\`${progress.current}/${progress.needed} XP\` (${progress.percentage}%)`, + inline: true + }, + { + name: '🎯 Prochain Niveau', + value: `\`${xpForNextLevel} XP\` requis`, + inline: true + }, + { + name: '📊 Barre de Progression', + value: `\`\`\`${progressBar}\`\`\``, + inline: false + }, + { + name: '💬 Messages', + value: `\`${(userXP.totalMessages || 0).toLocaleString()}\``, + inline: true + }, + { + name: '🎤 Temps Vocal', + value: `\`${voiceTimeStr}\``, + inline: true + } + ) + .setFooter({ + text: `${interaction.guild.name} • Niveau ${userXP.level}`, + iconURL: interaction.guild.iconURL({ dynamic: true }) || undefined + }) + .setTimestamp(); + + await interaction.editReply({ embeds: [embed] }); + }, +}; \ No newline at end of file diff --git a/commands/xp/resetlevel.js b/commands/xp/resetlevel.js new file mode 100644 index 0000000..398a8ff --- /dev/null +++ b/commands/xp/resetlevel.js @@ -0,0 +1,116 @@ +const { SlashCommandBuilder, EmbedBuilder, PermissionFlagsBits, MessageFlags } = require('discord.js'); +const db = require('../../functions/database/db.js'); +const { getUserXP } = require('../../functions/xp/xp.js'); +const { colors, emojis } = require('../../utils/constants'); +const { sendLog } = require('../../utils/helpers'); + +module.exports = { + category: 'xp', + data: new SlashCommandBuilder() + .setName('resetlevel') + .setDescription('Réinitialiser le niveau d\'un utilisateur (Admin/Modérateur uniquement)') + .addUserOption(option => + option.setName('user') + .setDescription('L\'utilisateur dont tu veux réinitialiser le niveau') + .setRequired(true)) + .addStringOption(option => + option.setName('reason') + .setDescription('Raison du reset (optionnel)') + .setRequired(false)) + .setDefaultMemberPermissions(PermissionFlagsBits.ManageMessages), + async execute(interaction) { + await interaction.deferReply({ flags: MessageFlags.Ephemeral }); + + const target = interaction.options.getUser('user'); + const reason = interaction.options.getString('reason') || 'Aucune raison fournie'; + + if (!target) return interaction.editReply({ content: '❌ Aucun utilisateur spécifié !' }); + if (target.id === interaction.user.id) return interaction.editReply({ content: '❌ Tu ne peux pas te reset toi-même.' }); + if (target.id === interaction.guild.ownerId) return interaction.editReply({ content: '❌ Tu ne peux pas reset le niveau du propriétaire du serveur.' }); + + const targetMember = await interaction.guild.members.fetch(target.id).catch(() => null); + if (targetMember) { + if (targetMember.roles.highest.position >= interaction.member.roles.highest.position && + interaction.guild.ownerId !== interaction.user.id) { + return interaction.editReply({ + content: '❌ Tu ne peux pas reset le niveau d\'un utilisateur avec un rôle supérieur ou égal au tien.' + }); + } + } + + try { + const userXP = await getUserXP(target.id, interaction.guild.id); + + if (!userXP || userXP.xp === 0) { + return interaction.editReply({ + content: `❌ ${target.tag} n'a aucun niveau/XP à réinitialiser.` + }); + } + + const oldLevel = userXP.level; + const oldXP = userXP.xp; + const oldMessages = userXP.totalMessages || 0; + const oldVoiceTime = userXP.totalVoiceTime || 0; + + await db.query('DELETE FROM user_xp WHERE userId = ? AND guildId = ?', [target.id, interaction.guild.id]); + await db.query('DELETE FROM xp_logs WHERE userId = ? AND guildId = ?', [target.id, interaction.guild.id]); + + await db.query( + `INSERT INTO logs (userId, userTag, modId, modTag, action, reason, type, guildId, timestamp) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`, + [ + target.id, + target.tag, + interaction.user.id, + interaction.user.tag, + 'Reset de niveau', + `Niveau ${oldLevel} (${oldXP} XP) réinitialisé. Raison: ${reason}`, + 'Permanent', + interaction.guild.id, + Date.now() + ] + ); + + const logEmbed = new EmbedBuilder() + .setAuthor({ name: interaction.user.displayName, iconURL: interaction.user.displayAvatarURL({ dynamic: true }) }) + .setTitle(`${emojis.warning} Reset de Niveau`) + .setColor(colors.warning) + .setDescription(`Le niveau de ${target.toString()} a été réinitialisé.`) + .setThumbnail(target.displayAvatarURL({ dynamic: true })) + .addFields( + { name: '👤 Utilisateur', value: `${target.toString()}\n\`${target.tag}\``, inline: true }, + { name: '👮 Modérateur', value: `${interaction.user.toString()}\n\`${interaction.user.tag}\``, inline: true }, + { name: '📊 Niveau avant', value: `\`${oldLevel}\``, inline: true }, + { name: '📈 XP avant', value: `\`${oldXP.toLocaleString()} XP\``, inline: true }, + { name: '💬 Messages', value: `\`${oldMessages.toLocaleString()}\``, inline: true }, + { name: '🎤 Temps vocal', value: `\`${Math.floor(oldVoiceTime / 60)}h\``, inline: true }, + { name: '📝 Raison', value: reason, inline: false } + ) + .setFooter({ text: `ID: ${target.id} • ${interaction.guild.name}` }) + .setTimestamp(); + + await sendLog(interaction.guild, { embeds: [logEmbed] }); + + const embed = new EmbedBuilder() + .setAuthor({ name: target.displayName, iconURL: target.displayAvatarURL({ dynamic: true }) }) + .setTitle(`${emojis.success} Niveau Réinitialisé`) + .setColor(colors.success) + .setDescription(`Le niveau de ${target.toString()} a été complètement réinitialisé.`) + .setThumbnail(target.displayAvatarURL({ dynamic: true })) + .addFields( + { name: '👤 Utilisateur', value: `\`${target.tag}\``, inline: true }, + { name: '📊 Niveau avant', value: `\`${oldLevel}\``, inline: true }, + { name: '📈 XP avant', value: `\`${oldXP.toLocaleString()} XP\``, inline: true }, + { name: '📝 Raison', value: reason, inline: false } + ) + .setFooter({ text: 'Toutes les données XP ont été supprimées de la base de données.' }) + .setTimestamp(); + + await interaction.editReply({ embeds: [embed] }); + + } catch (err) { + console.error('Erreur resetlevel:', err); + await interaction.editReply({ content: `❌ Erreur lors du reset de niveau: ${err.message}` }); + } + }, +}; \ No newline at end of file diff --git a/commands/xp/xpexclude.js b/commands/xp/xpexclude.js new file mode 100644 index 0000000..9003e96 --- /dev/null +++ b/commands/xp/xpexclude.js @@ -0,0 +1,140 @@ +const { SlashCommandBuilder, EmbedBuilder, PermissionFlagsBits, MessageFlags } = require('discord.js'); +const db = require('../../functions/database/db.js'); +const { isChannelExcluded } = require('../../functions/xp/xp.js'); +const { colors, emojis } = require('../../utils/constants'); + +module.exports = { + category: 'xp', + data: new SlashCommandBuilder() + .setName('xpexclude') + .setDescription('Gérer les salons exclus de l\'XP (Admin uniquement)') + .addSubcommand(subcommand => + subcommand + .setName('add') + .setDescription('Exclure un salon de l\'XP') + .addChannelOption(option => + option.setName('channel') + .setDescription('Le salon à exclure') + .setRequired(true)) + .addStringOption(option => + option.setName('reason') + .setDescription('Raison de l\'exclusion') + .setRequired(false))) + .addSubcommand(subcommand => + subcommand + .setName('remove') + .setDescription('Retirer un salon de l\'exclusion') + .addChannelOption(option => + option.setName('channel') + .setDescription('Le salon à retirer') + .setRequired(true))) + .addSubcommand(subcommand => + subcommand + .setName('list') + .setDescription('Liste des salons exclus')), + async execute(interaction) { + await interaction.deferReply({ flags: MessageFlags.Ephemeral }); + + if (!interaction.member.permissions.has(PermissionFlagsBits.Administrator)) { + return interaction.editReply({ + content: '❌ Tu n\'as pas la permission d\'utiliser cette commande. (Administrateur requis)' + }); + } + + const subcommand = interaction.options.getSubcommand(); + + try { + if (subcommand === 'add') { + const channel = interaction.options.getChannel('channel'); + const reason = interaction.options.getString('reason') || 'Aucune raison fournie'; + + if (!channel.isTextBased()) { + return interaction.editReply({ + content: '❌ Le salon doit être un canal texte.' + }); + } + + const excluded = await isChannelExcluded(channel.id, interaction.guild.id); + if (excluded) { + return interaction.editReply({ + content: `❌ Le salon ${channel.toString()} est déjà exclu de l'XP.` + }); + } + + await db.query( + 'INSERT INTO xp_excluded_channels (channelId, guildId, reason, addedBy, addedAt) VALUES (?, ?, ?, ?, ?)', + [channel.id, interaction.guild.id, reason, interaction.user.id, Date.now()] + ); + + const embed = new EmbedBuilder() + .setTitle(`${emojis.success} Salon Exclu`) + .setColor(colors.success) + .setDescription(`Le salon ${channel.toString()} a été exclu de l'XP.`) + .addFields( + { name: '📝 Raison', value: reason, inline: false } + ) + .setFooter({ text: `${interaction.guild.name} • Système XP` }) + .setTimestamp(); + + await interaction.editReply({ embeds: [embed] }); + + } else if (subcommand === 'remove') { + const channel = interaction.options.getChannel('channel'); + + const excluded = await isChannelExcluded(channel.id, interaction.guild.id); + if (!excluded) { + return interaction.editReply({ + content: `❌ Le salon ${channel.toString()} n'est pas exclu de l'XP.` + }); + } + + await db.query( + 'DELETE FROM xp_excluded_channels WHERE channelId = ? AND guildId = ?', + [channel.id, interaction.guild.id] + ); + + const embed = new EmbedBuilder() + .setTitle(`${emojis.success} Exclusion Retirée`) + .setColor(colors.success) + .setDescription(`Le salon ${channel.toString()} n'est plus exclu de l'XP.`) + .setFooter({ text: `${interaction.guild.name} • Système XP` }) + .setTimestamp(); + + await interaction.editReply({ embeds: [embed] }); + + } else if (subcommand === 'list') { + const [excludedChannels] = await db.query( + 'SELECT * FROM xp_excluded_channels WHERE guildId = ?', + [interaction.guild.id] + ); + + if (excludedChannels.length === 0) { + return interaction.editReply({ + content: '✅ Aucun salon n\'est exclu de l\'XP.' + }); + } + + const description = excludedChannels.map(ch => { + const channel = interaction.guild.channels.cache.get(ch.channelId); + return `• ${channel ? channel.toString() : `ID: ${ch.channelId}`} - ${ch.reason || 'Aucune raison'}`; + }).join('\n'); + + const embed = new EmbedBuilder() + .setAuthor({ + name: interaction.guild.name, + iconURL: interaction.guild.iconURL({ dynamic: true }) || undefined + }) + .setTitle('📋 Salons Exclus de l\'XP') + .setColor(colors.xp) + .setDescription(description || 'Aucun salon exclu') + .setFooter({ text: `${excludedChannels.length} salon(s) exclu(s)` }) + .setTimestamp(); + + await interaction.editReply({ embeds: [embed] }); + } + } catch (err) { + console.error('Erreur xpexclude:', err); + await interaction.editReply({ content: `❌ Erreur: ${err.message}` }); + } + }, +}; \ No newline at end of file diff --git a/deploy-commands.js b/deploy-commands.js index 192047c..34bd358 100644 --- a/deploy-commands.js +++ b/deploy-commands.js @@ -1,46 +1,142 @@ +require('dotenv').config(); const { REST, Routes } = require('discord.js'); -const { token, clientId } = process.env; +const chalk = require('chalk'); const fs = require('node:fs'); const path = require('node:path'); +const { token, clientId, CLIENT_ID, GUILD_ID } = process.env; +const finalClientId = clientId || CLIENT_ID; +const guildId = GUILD_ID; + +if (!token) { + console.error(chalk.red('❌ Le TOKEN n\'est pas défini dans les variables d\'environnement !')); + console.error(chalk.yellow('💡 Ajoute TOKEN=ton_token dans ton fichier .env')); + process.exit(1); +} + +if (!finalClientId) { + console.error(chalk.red('❌ Le CLIENT_ID n\'est pas défini dans les variables d\'environnement !')); + console.error(chalk.yellow('💡 Pour obtenir ton CLIENT_ID:')); + console.error(chalk.yellow(' 1. Va sur https://discord.com/developers/applications')); + console.error(chalk.yellow(' 2. Sélectionne ton application')); + console.error(chalk.yellow(' 3. Va dans l\'onglet "General Information"')); + console.error(chalk.yellow(' 4. Copie "Application ID"')); + console.error(chalk.yellow(' 5. Ajoute CLIENT_ID=ton_client_id dans ton fichier .env')); + process.exit(1); +} + const commands = []; -// Grab all the command folders from the commands directory you created earlier +const commandsByCategory = new Map(); // Map pour stocker les commandes par catégorie const foldersPath = path.join(__dirname, 'commands'); const commandFolders = fs.readdirSync(foldersPath); for (const folder of commandFolders) { - // Grab all the command files from the commands directory you created earlier - const commandsPath = path.join(foldersPath, folder); - const commandFiles = fs.readdirSync(commandsPath).filter(file => file.endsWith('.js')); - // Grab the SlashCommandBuilder#toJSON() output of each command's data for deployment - for (const file of commandFiles) { - const filePath = path.join(commandsPath, file); - const command = require(filePath); - if ('data' in command && 'execute' in command) { - commands.push(command.data.toJSON()); - } else { - console.log(`[WARNING] The command at ${filePath} is missing a required "data" or "execute" property.`); - } - } + const commandsPath = path.join(foldersPath, folder); + const commandFiles = fs.readdirSync(commandsPath).filter(file => file.endsWith('.js')); + for (const file of commandFiles) { + const filePath = path.join(commandsPath, file); + const command = require(filePath); + if ('data' in command && 'execute' in command) { + const commandData = command.data.toJSON(); + const category = command.category || folder || 'other'; + + // Ajouter à la liste des commandes + commands.push(commandData); + + // Ajouter à la map par catégorie + if (!commandsByCategory.has(category)) { + commandsByCategory.set(category, []); + } + commandsByCategory.get(category).push({ + name: commandData.name, + description: commandData.description, + data: commandData + }); + } else { + console.warn(chalk.yellow(`⚠️ La commande à ${filePath} manque une propriété requise "data" ou "execute".`)); + } + } } -// Construct and prepare an instance of the REST module const rest = new REST().setToken(token); -// and deploy your commands! (async () => { - try { - console.log(`Started refreshing ${commands.length} application (/) commands.`); + try { + console.log(chalk.blue(`🔄 Déploiement de ${commands.length} commande(s) application (/)...`)); + console.log(chalk.cyan('\n📋 Commandes à déployer par catégorie:')); + + // Trier les catégories par ordre alphabétique + const sortedCategories = Array.from(commandsByCategory.keys()).sort(); + + for (const category of sortedCategories) { + const categoryCommands = commandsByCategory.get(category); + console.log(chalk.magenta(`\n 📁 ${category.toUpperCase()} (${categoryCommands.length} commande(s)):`)); + categoryCommands.forEach(cmd => { + console.log(chalk.gray(` - /${cmd.name} - ${cmd.description}`)); + }); + } - // The put method is used to fully refresh all commands in the guild with the current set - const data = await rest.put( - Routes.applicationCommands(clientId), // pas de guildId ici - { body: commands }, - ); + // Déployer sur une guild spécifique si GUILD_ID est défini (plus rapide pour tester) + // Si GUILD_ID est défini, on déploie SEULEMENT sur la guild (pas de global pour éviter les doublons) + if (guildId) { + console.log(chalk.yellow(`\n📍 Déploiement sur la guild: ${guildId} (uniquement)`)); + console.log(chalk.gray(' (Pas de déploiement global pour éviter les doublons)')); + const guildData = await rest.put( + Routes.applicationGuildCommands(finalClientId, guildId), + { body: commands }, + ); + console.log(chalk.green(`✅ ${guildData.length} commande(s) déployée(s) sur la guild avec succès !`)); + console.log(chalk.cyan('💡 Les commandes sont disponibles immédiatement sur cette guild uniquement.')); + console.log(chalk.yellow('💡 Pour déployer globalement, retire GUILD_ID du .env et relance le script.')); + } else { + // Déployer globalement seulement si pas de GUILD_ID + console.log(chalk.yellow(`\n🌍 Déploiement global (tous les serveurs)...`)); + const globalData = await rest.put( + Routes.applicationCommands(finalClientId), + { body: commands }, + ); + console.log(chalk.green(`✅ ${globalData.length} commande(s) globale(s) rechargée(s) avec succès !`)); + console.log(chalk.yellow('\n💡 Note: Les commandes globales peuvent prendre 1-2h à apparaître sur Discord.')); + console.log(chalk.yellow(' Pour un déploiement plus rapide sur une guild, ajoute GUILD_ID=ton_guild_id dans .env')); + console.log(chalk.yellow(' Si elles n\'apparaissent pas après 2h, redémarre Discord (Ctrl+R).')); + } - console.log(`Successfully reloaded ${data.length} application (/) commands.`); - } catch (error) { - // And of course, make sure you catch and log any errors! - console.error(error); - } + // Afficher les commandes déployées par catégorie + console.log(chalk.blue('\n📝 Commandes déployées par catégorie:')); + + for (const category of sortedCategories) { + const categoryCommands = commandsByCategory.get(category); + console.log(chalk.magenta(`\n 📁 ${category.toUpperCase()} (${categoryCommands.length} commande(s)):`)); + categoryCommands.forEach((cmd, index) => { + console.log(chalk.gray(` ${index + 1}. /${cmd.name} - ${cmd.description}`)); + }); + } + + } catch (error) { + console.error(chalk.red('\n❌ Erreur lors du déploiement des commandes:')); + console.error(chalk.red(` Code: ${error.code || 'N/A'}`)); + console.error(chalk.red(` Message: ${error.message || error}`)); + + if (error.code === 50001) { + console.error(chalk.red('\n Le bot n\'a pas été trouvé. Vérifie que CLIENT_ID est correct dans .env')); + } else if (error.code === 50013) { + console.error(chalk.red('\n Le bot n\'a pas les permissions nécessaires dans cette guild.')); + } else if (error.code === 50035) { + console.error(chalk.red('\n Erreur de validation. Une commande a un format invalide.')); + if (error.body?.errors) { + console.error(chalk.red(' Détails:')); + console.error(JSON.stringify(error.body.errors, null, 2)); + } + } else if (error.rawError) { + console.error(chalk.red('\n Détails complets:')); + console.error(JSON.stringify(error.rawError, null, 2)); + } + + if (error.requestBody) { + console.error(chalk.yellow('\n Corps de la requête:')); + console.error(JSON.stringify(error.requestBody, null, 2)); + } + + process.exit(1); + } })(); \ No newline at end of file diff --git a/env.example b/env.example new file mode 100644 index 0000000..b3b001c --- /dev/null +++ b/env.example @@ -0,0 +1,74 @@ + =========================================== +# Discord Bot Configuration +# =========================================== + +# Token du bot Discord (obligatoire) +TOKEN=ton_token_discord_ici + +# ID de l'application Discord (obligatoire pour déployer les commandes) +CLIENT_ID=ton_client_id_ici + +# ID du serveur Discord pour tester les commandes (optionnel, pour déployer uniquement sur un serveur) +GUILD_ID=1407161683117609071 + +# =========================================== +# Database Configuration +# =========================================== + +# Host de la base de données MySQL +DB_HOST=192.168.1.6 + +# Utilisateur de la base de données +DB_USER=bot + +# Mot de passe de la base de données +DB_PASSWORD=ton_password_db_ici + +# Nom de la base de données +DB_NAME=bot + +# =========================================== +# Discord OAuth (pour le serveur de transcripts) +# =========================================== + +# Client ID Discord (peut être le même que CLIENT_ID ci-dessus) +# Le serveur accepte aussi CLIENT_ID comme fallback +DISCORD_CLIENT_ID=ton_client_id_oauth_ici + +# Client Secret Discord (récupéré depuis le Discord Developer Portal) +# Le serveur accepte aussi CLIENT_SECRET comme fallback +DISCORD_CLIENT_SECRET=ton_client_secret_oauth_ici + +# URL de callback pour l'OAuth Discord +# Pour le développement local : +DISCORD_CALLBACK_URL=http://localhost:3000/auth/discord/callback +# Pour la production (décommente et modifie quand tu déploies) : +# DISCORD_CALLBACK_URL=https://transcripts.syxpi.fr/auth/discord/callback + +# 💡 Astuce : Dans le Discord Developer Portal, tu peux ajouter LES DEUX URLs dans les Redirects +# Mais dans .env, tu mets seulement celle que tu utilises actuellement + +# =========================================== +# Transcript Server Configuration +# =========================================== + +# Port du serveur web pour les transcripts +TRANSCRIPT_PORT=3000 + +# URL du domaine pour les transcripts (pour la production) +TRANSCRIPT_WEB_URL=transcript.syxpi.fr + +# Secret de session (génère une valeur aléatoire pour la production) +SESSION_SECRET=change-me-in-production-use-random-string-here + +# IDs des modérateurs Discord (séparés par des virgules) +# Ces utilisateurs auront accès à tous les transcripts +MODERATOR_IDS=361526553940721684 + +# =========================================== +# GitHub Configuration (optionnel, pour les scripts d'extraction) +# =========================================== + +# Token GitHub pour accéder aux repositories privés +GITHUB_TOKEN=ton_token_github_ici + diff --git a/events/interactionCreate.js b/events/interactionCreate.js index 6df5ce0..a4137bf 100644 --- a/events/interactionCreate.js +++ b/events/interactionCreate.js @@ -1,25 +1,118 @@ -const { Events, MessageFlags } = require('discord.js'); +const { Events, ModalBuilder, TextInputBuilder, TextInputStyle, ActionRowBuilder, MessageFlags } = require('discord.js'); +const chalk = require('chalk'); module.exports = { name: Events.InteractionCreate, async execute(interaction) { - if (!interaction.isChatInputCommand()) return; - - const command = interaction.client.commands.get(interaction.commandName); - - if (!command) { - console.error(`No command matching ${interaction.commandName} was found.`); - return; - } - try { + // --- 1. GESTION DES MODALS (Soumission) --- + if (interaction.isModalSubmit()) { + const ticketModule = require('../commands/ticket/ticket.js'); + + // 1.A - Création de Ticket (Support, Plainte, etc.) + if (interaction.customId.startsWith('ticket_create_modal_')) { + // On récupère le type depuis l'ID (ex: ticket_create_modal_Support) + const type = interaction.customId.replace('ticket_create_modal_', ''); + await ticketModule.handleCreate(interaction, type); + return; + } + + // 1.B - Candidature Spécifique + if (interaction.customId === 'candidature_modal') { + await ticketModule.handleCandidatureModalSubmit(interaction); + return; + } + + // 1.C - Raison Fermeture + if (interaction.customId === 'ticket_close_reason_modal') { + await ticketModule.handleCloseModal(interaction); + return; + } + + // 1.D - Raison Réouverture + if (interaction.customId === 'ticket_reopen_modal') { + await ticketModule.handleReopenModal(interaction); + return; + } + + // 1.E - Raison Suppression + if (interaction.customId === 'ticket_delete_modal') { + await ticketModule.handleDeleteModal(interaction); + return; + } + } + + // --- 2. GESTION DES BOUTONS (Ouverture des Modals) --- + if (interaction.isButton()) { + const ticketModule = require('../commands/ticket/ticket.js'); + + // 2.A - Bouton Création : On ouvre un MODAL pour tout le monde + if (interaction.customId.startsWith('ticket_create_')) { + + // Cas Spécial : Candidature (Déjà géré avec ses questions spécifiques) + if (interaction.customId === 'ticket_create_candidature') { + const questions = require('../commands/ticket/ticket.js').CANDIDATURE_QUESTIONS; + const modal = new ModalBuilder().setCustomId('candidature_modal').setTitle('Recrutement Staff'); + for(let i=0; i support) + let typeKey = interaction.customId.replace('ticket_create_', ''); + // On remet en joli format (support -> Support, plainte_staff -> Plainte Staff) + const typeMapping = { + 'support': 'Support', + 'plainte': 'Plainte', + 'plainte_staff': 'Plainte Staff', + 'probleme_technique': 'Problème Technique' + }; + const prettyType = typeMapping[typeKey] || 'Support'; + + // On passe le type dans l'ID du modal pour le récupérer au submit + const modal = new ModalBuilder() + .setCustomId(`ticket_create_modal_${prettyType}`) + .setTitle(`Nouveau ticket : ${prettyType}`); + + const subjectInput = new TextInputBuilder() + .setCustomId('ticket_subject') + .setLabel("Sujet / Raison de la demande") + .setStyle(TextInputStyle.Paragraph) + .setRequired(true) + .setMaxLength(1000) + .setPlaceholder("Décrivez brièvement votre problème..."); + + modal.addComponents(new ActionRowBuilder().addComponents(subjectInput)); + await interaction.showModal(modal); + return; + } + + // 2.B - Autres actions (Fermer, Réouvrir, etc.) + if (interaction.customId.startsWith('ticket_close_')) return await ticketModule.handleClose(interaction); + if (interaction.customId.startsWith('ticket_delete_')) return await ticketModule.handleDelete(interaction); + if (interaction.customId.startsWith('ticket_reopen_')) return await ticketModule.handleReopen(interaction); + if (interaction.customId.startsWith('ticket_claim_')) return await ticketModule.handleClaim(interaction); + } + + // --- 3. COMMANDES SLASH --- + if (!interaction.isChatInputCommand()) return; + const command = interaction.client.commands.get(interaction.commandName); + if (!command) { + console.error(chalk.red(`Aucune commande correspondant à ${interaction.commandName} n'a été trouvée.`)); + return; + } await command.execute(interaction); + } catch (error) { - console.error(error); + console.error(chalk.red(`Erreur lors de l'exécution d'une interaction :`), error); if (interaction.replied || interaction.deferred) { - await interaction.followUp({ content: 'There was an error while executing this command!', flags: MessageFlags.Ephemeral }); + await interaction.followUp({ content: 'Une erreur est survenue lors de l\'exécution de cette interaction !', flags: MessageFlags.Ephemeral }); } else { - await interaction.reply({ content: 'There was an error while executing this command!', flags: MessageFlags.Ephemeral }); + await interaction.reply({ content: 'Une erreur est survenue lors de l\'exécution de cette interaction !', flags: MessageFlags.Ephemeral }); } } }, diff --git a/events/messageCreate.js b/events/messageCreate.js new file mode 100644 index 0000000..ca11499 --- /dev/null +++ b/events/messageCreate.js @@ -0,0 +1,162 @@ +const { Events, EmbedBuilder } = require('discord.js'); +const db = require('../functions/database/db.js'); +const { addXP, isChannelExcluded, getUserXP, getXPMultiplier, getXPProgress } = require('../functions/xp/xp.js'); +const { colors } = require('../utils/constants'); + +// --- FONCTIONS UTILITAIRES --- + +async function detectBump(message) { + const bumpBots = ['302050872383242240']; // Disboard bot ID + if (!message.author.bot || !bumpBots.includes(message.author.id)) return null; + + const content = message.content?.toLowerCase() || ''; + const embed = message.embeds[0]; + if (!embed) return null; + + const embedDescription = embed.description?.toLowerCase() || ''; + const embedTitle = embed.title?.toLowerCase() || ''; + const bumpKeywords = ['bump done', 'bump réussi', 'bump réalisé', 'bump effectué', 'serv bump', 'server bump']; + + const isBumpMessage = bumpKeywords.some(keyword => + embedDescription.includes(keyword) || + embedTitle.includes(keyword) || + content.includes(keyword) + ); + + if (!isBumpMessage) return null; + + // Tentative de récupération de l'ID utilisateur + if (message.mentions.users.size > 0) return message.mentions.users.first().id; + + const userIdMatch = embedDescription.match(/<@!?(\d+)>/); + if (userIdMatch) return userIdMatch[1]; + + if (embed.footer) { + const footerMatch = embed.footer.text?.match(/<@!?(\d+)>/); + if (footerMatch) return footerMatch[1]; + } + + return null; +} + +function detectWelcomeMessage(message) { + if (message.author.bot) return false; + const welcomeKeywords = ['bienvenue', 'welcome', 'bvn', 'salut', 'hey', 'bonjour']; + const content = message.content.toLowerCase(); + + return welcomeKeywords.some(k => content.includes(k)) && + message.mentions.users.size > 0 && + message.content.length < 100; +} + +async function handleLevelUp(message, result, member) { + if (!result || !result.levelUp) return; + + const progress = getXPProgress(result.newXP, result.newLevel); + const embed = new EmbedBuilder() + .setTitle('🎉 Level Up !') + .setDescription(`Félicitations ${member.toString()} ! Tu as atteint le niveau **${result.newLevel}** !`) + .setColor(colors.success) + .addFields( + { name: '📊 XP', value: `${result.newXP} XP`, inline: true }, + { name: '⭐ Niveau', value: `${result.newLevel}`, inline: true }, + { name: '📈 Progression', value: `${progress.current}/${progress.needed} XP (${progress.percentage}%)`, inline: true } + ) + .setThumbnail(member.user.displayAvatarURL({ dynamic: true })) + .setTimestamp(); + + await message.channel.send({ embeds: [embed] }); +} + +// --- LOGIQUE PRINCIPALE --- + +module.exports = { + name: Events.MessageCreate, + async execute(message) { + if (!message.channel.isTextBased() || message.channel.isDMBased()) return; + + try { + // 1. GESTION DES BUMPS + const bumpedUserId = await detectBump(message); + if (bumpedUserId) { + try { + await db.query('INSERT INTO bumps (userId, guildId, bumpTime, reminderSent) VALUES (?, ?, ?, ?)', [bumpedUserId, message.guild.id, Date.now(), false]); + + const member = await message.guild.members.fetch(bumpedUserId).catch(() => null); + if (member) { + const xpGained = Math.floor(Math.random() * 51) + 50; // 50-100 XP + const result = await addXP(bumpedUserId, message.guild.id, xpGained, 'bump', getXPMultiplier(member)); + await handleLevelUp(message, result, member); + } + } catch (err) { console.error('Erreur bump:', err); } + return; + } + + // 2. IGNORER LES BOTS (Sauf pour les bumps traités au-dessus) + if (message.author.bot) return; + + // 3. GESTION DES TICKETS + const [tickets] = await db.query('SELECT * FROM tickets WHERE channelId = ? AND status = ?', [message.channel.id, 'Ouvert']); + if (tickets.length > 0) { + const ticket = tickets[0]; + const attachments = message.attachments.size > 0 ? message.attachments.map(a => a.url).join(', ') : null; + + const maxTag = 100; + const maxText = 65535; + const safeUserTag = (message.author.tag && message.author.tag.length > maxTag) ? message.author.tag.substring(0, maxTag) : message.author.tag; + const safeContent = (message.content && message.content.length > maxText) ? message.content.substring(0, maxText) : message.content; + const safeAttachments = (attachments && attachments.length > maxText) ? attachments.substring(0, maxText) : attachments; + + await db.query( + `INSERT INTO ticket_messages (ticketId, messageId, userId, userTag, content, attachments, timestamp) VALUES (?, ?, ?, ?, ?, ?, ?)`, + [ticket.ticketId, message.id, message.author.id, safeUserTag, safeContent || null, safeAttachments, message.createdTimestamp] + ); + return; // Pas d'XP dans les tickets + } + + // 4. SYSTÈME D'XP (Messages normaux) + const excluded = await isChannelExcluded(message.channel.id, message.guild.id); + if (!excluded) { + const userXP = await getUserXP(message.author.id, message.guild.id); + const now = Date.now(); + const cooldown = 15000; // 15s + + let lastMessageTime = parseInt(userXP.lastMessageTime || 0, 10); + // Reset si date invalide + if (lastMessageTime > now || lastMessageTime < (now - 31536000000)) lastMessageTime = 0; + + if (lastMessageTime === 0 || (now - lastMessageTime) >= cooldown) { + const member = await message.guild.members.fetch(message.author.id).catch(() => null); + const xpGained = Math.floor(Math.random() * 11) + 15; // 15-25 XP + + const result = await addXP(message.author.id, message.guild.id, xpGained, 'message', member ? getXPMultiplier(member) : 1.0); + if (member) await handleLevelUp(message, result, member); + + // Mise à jour stats + timestamp + await db.query('UPDATE user_xp SET lastMessageTime = ?, totalMessages = totalMessages + 1 WHERE userId = ? AND guildId = ?', [now, message.author.id, message.guild.id]); + } else { + // Juste incrémenter le compteur de messages (Cooldown actif) + await db.query('UPDATE user_xp SET totalMessages = totalMessages + 1 WHERE userId = ? AND guildId = ?', [message.author.id, message.guild.id]); + } + } + + // 5. MESSAGES DE BIENVENUE + if (detectWelcomeMessage(message)) { + try { + await message.react('👋').catch(() => null); + await message.react('🎉').catch(() => null); + + const member = await message.guild.members.fetch(message.author.id).catch(() => null); + if (member) { + const xpGained = Math.floor(Math.random() * 21) + 20; // 20-40 XP + const result = await addXP(message.author.id, message.guild.id, xpGained, 'welcome', getXPMultiplier(member)); + await handleLevelUp(message, result, member); + } + } catch (err) { console.error('Erreur bienvenue:', err); } + } + + } catch (err) { + console.error('Erreur globale messageCreate:', err); + } + }, +}; \ No newline at end of file diff --git a/events/ready.js b/events/ready.js index 67eb531..f13aa0c 100644 --- a/events/ready.js +++ b/events/ready.js @@ -1,9 +1,15 @@ -const { Events } = require('discord.js'); +const { Events, ActivityType } = require('discord.js'); +const chalk = require('chalk'); module.exports = { - name: Events.ClientReady, - once: true, - execute(client) { - console.log(`Ready! Connectée en tant que ${client.user.tag}`); - }, + name: Events.ClientReady, + once: true, + execute(client) { + console.log(chalk.green(`✅ Connectée en tant que ${client.user.tag}`)); + console.log(chalk.cyan(`📊 ${client.guilds.cache.size} serveur(s) | ${client.users.cache.size} utilisateur(s)`)); + console.log(chalk.blue(`🔧 ${client.commands.size} commande(s) chargée(s)`)); + + // Statut du bot + client.user.setActivity('France Femboy', { type: ActivityType.Watching }); + }, }; \ No newline at end of file diff --git a/events/voiceStateUpdate.js b/events/voiceStateUpdate.js new file mode 100644 index 0000000..99ba83e --- /dev/null +++ b/events/voiceStateUpdate.js @@ -0,0 +1,143 @@ +/** + * Gestion de l'XP vocal + * Gain d'XP toutes les 10 minutes en vocal (5-25 XP) + * - Timer ne démarre QUE si au moins 2 personnes dans le salon + * - Timer s'arrête si l'utilisateur est mute/deafen + * - totalVoiceTime est incrémenté chaque minute + */ + +const { Events, EmbedBuilder } = require('discord.js'); +const db = require('../functions/database/db.js'); +const { addXP, getXPMultiplier, getXPProgress } = require('../functions/xp/xp.js'); +const { colors } = require('../utils/constants'); + +// Map +const voiceUsers = new Map(); + +function canGainXP(member) { + if (!member || !member.voice.channelId) return false; + const voiceChannel = member.voice.channel; + if (!voiceChannel) return false; + + // Compter les humains + const membersInChannel = voiceChannel.members.filter(m => !m.user.bot).size; + + // Conditions : Pas tout seul, pas mute, pas deaf + const isAlone = membersInChannel < 2; + const isMuted = member.voice.serverMute || member.voice.selfMute; + const isDeafened = member.voice.serverDeaf || member.voice.selfDeaf; + + return !isAlone && !isMuted && !isDeafened; +} + +async function startTimers(key, member, guildId, userId) { + // Si déjà des timers, on ne fait rien + if (voiceUsers.has(key)) return; + + // 1. Timer XP (10 min) + const xpInterval = setInterval(async () => { + try { + // Re-vérification dynamique + const currentMember = await member.guild.members.fetch(userId).catch(() => null); + if (!currentMember || !canGainXP(currentMember)) return; + + const multiplier = getXPMultiplier(currentMember, 'voice'); + const xpGained = Math.floor(Math.random() * 21) + 5; // 5-25 XP + const result = await addXP(userId, guildId, xpGained, 'voice', multiplier); + + if (result && result.levelUp) { + const progress = getXPProgress(result.newXP, result.newLevel); + const embed = new EmbedBuilder() + .setTitle('🎉 Level Up !') + .setDescription(`Félicitations ${currentMember.toString()} ! Tu as atteint le niveau **${result.newLevel}** en vocal !`) + .setColor(colors.success) + .addFields( + { name: '📊 XP', value: `${result.newXP} XP`, inline: true }, + { name: '⭐ Niveau', value: `${result.newLevel}`, inline: true }, + { name: '📈 Progression', value: `${progress.current}/${progress.needed} XP (${progress.percentage}%)`, inline: true } + ) + .setThumbnail(currentMember.user.displayAvatarURL({ dynamic: true })) + .setTimestamp(); + + const systemChannel = member.guild.systemChannel; + if (systemChannel) await systemChannel.send({ embeds: [embed] }).catch(() => null); + } + } catch (err) { console.error('Erreur Timer XP:', err); } + }, 10 * 60 * 1000); + + // 2. Timer Temps (1 min) + const timeInterval = setInterval(async () => { + try { + const currentMember = await member.guild.members.fetch(userId).catch(() => null); + if (currentMember && canGainXP(currentMember)) { + await db.query('UPDATE user_xp SET totalVoiceTime = totalVoiceTime + 1 WHERE userId = ? AND guildId = ?', [userId, guildId]); + } + } catch (err) { console.error('Erreur Timer Temps:', err); } + }, 60 * 1000); + + voiceUsers.set(key, { xpInterval, timeInterval }); + + // Mise à jour lastVoiceJoin + await db.query('UPDATE user_xp SET lastVoiceJoin = ? WHERE userId = ? AND guildId = ?', [Date.now(), userId, guildId]).catch(() => {}); +} + +function stopTimers(key) { + const userData = voiceUsers.get(key); + if (userData) { + clearInterval(userData.xpInterval); + clearInterval(userData.timeInterval); + voiceUsers.delete(key); + } +} + +async function updateState(member) { + if (!member || member.user.bot) return; + + const guildId = member.guild.id; + const userId = member.id; + const key = `${guildId}_${userId}`; + + if (canGainXP(member)) { + await startTimers(key, member, guildId, userId); + } else { + stopTimers(key); + } +} + +async function checkChannel(channel) { + if (!channel) return; + // Vérifier tous les membres du salon car l'arrivée/départ de quelqu'un change le statut "isAlone" + for (const [id, member] of channel.members) { + await updateState(member); + } +} + +module.exports = { + name: Events.VoiceStateUpdate, + async execute(oldState, newState) { + try { + // Cas 1: Join + if (!oldState.channelId && newState.channelId) { + await checkChannel(newState.channel); + } + // Cas 2: Leave + else if (oldState.channelId && !newState.channelId) { + const member = oldState.member; + const key = `${member.guild.id}_${member.id}`; + stopTimers(key); // Arrêt immédiat pour celui qui part + await checkChannel(oldState.channel); // Vérif pour ceux qui restent + } + // Cas 3: Move + else if (oldState.channelId && newState.channelId && oldState.channelId !== newState.channelId) { + await checkChannel(oldState.channel); + await checkChannel(newState.channel); + } + // Cas 4: Mute/Deaf update (Même channel) + else if (oldState.channelId === newState.channelId) { + await updateState(newState.member); + } + } catch (err) { + console.error('Erreur VoiceStateUpdate:', err); + } + }, +}; \ No newline at end of file diff --git a/functions/bump/bumpReminder.js b/functions/bump/bumpReminder.js new file mode 100644 index 0000000..5760e21 --- /dev/null +++ b/functions/bump/bumpReminder.js @@ -0,0 +1,56 @@ +/** + * Système de reminder pour les bumps + * Vérifie toutes les minutes les bumps qui doivent avoir un reminder 2h après + */ + +const chalk = require('chalk'); +const { EmbedBuilder } = require('discord.js'); +const { colors } = require('../../utils/constants'); + +module.exports = (client, db) => { + setInterval(async () => { + try { + const now = Date.now(); + const twoHours = 2 * 60 * 60 * 1000; + + // Récupérer tous les bumps de plus de 2h qui n'ont pas encore eu de rappel + const [bumps] = await db.query( + 'SELECT * FROM bumps WHERE reminderSent = ? AND bumpTime <= ?', + [false, now - twoHours] + ); + + if (!bumps.length) return; + + for (const bump of bumps) { + try { + const guild = client.guilds.cache.get(bump.guildId); + if (!guild) continue; + + const member = await guild.members.fetch(bump.userId).catch(() => null); + if (!member) continue; + + const [bumpChannels] = await db.query('SELECT * FROM bump_channels WHERE guildId = ?', [bump.guildId]); + let channel = bumpChannels.length > 0 ? guild.channels.cache.get(bumpChannels[0].channelId) : guild.systemChannel; + + if (!channel) continue; + + const reminderEmbed = new EmbedBuilder() + .setTitle('⏰ Rappel de Bump') + .setDescription(`${member.toString()}, tu peux maintenant refaire un bump !`) + .setColor(colors.info) + .setFooter({ text: 'Utilise /bump (Disboard) pour bump le serveur • /bumptime pour vérifier' }) + .setTimestamp(); + + await channel.send({ embeds: [reminderEmbed] }); + + await db.query('UPDATE bumps SET reminderSent = ? WHERE id = ?', [true, bump.id]); + console.log(chalk.green(`✅ Reminder de bump envoyé à ${member.user.tag} dans la guild ${guild.name}`)); + } catch (err) { + console.error(chalk.red(`❌ Erreur reminder bump ${bump.id}:`), err); + } + } + } catch (err) { + console.error(chalk.red('❌ Erreur vérification reminders bump:'), err); + } + }, 60 * 1000); +}; \ No newline at end of file diff --git a/functions/database/db.js b/functions/database/db.js index 494c9bb..894c088 100644 --- a/functions/database/db.js +++ b/functions/database/db.js @@ -1,11 +1,10 @@ const mysql = require('mysql2/promise'); - const pool = mysql.createPool({ - host: '192.168.1.6', - user: 'bot', - password: 'NxKr63LJB65pHv%t7E$JqgxKRsZMw%VIHEZAjq%^O0KYKjW#cRc^ebIH@%S9kaTh*GIg^D3ai4KBjMeXEh6xwv#9afQIR2$!2UB8C3ToXjnYFmzR%$lfpshnf8g@8229', - database: 'bot', + host: process.env.DB_HOST || '192.168.1.6', + user: process.env.DB_USER || 'bot', + password: process.env.DB_PASSWORD || 'NxKr63LJB65pHv%t7E$JqgxKRsZMw%VIHEZAjq%^O0KYKjW#cRc^ebIH@%S9kaTh*GIg^D3ai4KBjMeXEh6xwv#9afQIR2$!2UB8C3ToXjnYFmzR%$lfpshnf8g@8229', + database: process.env.DB_NAME || 'bot', waitForConnections: true, connectionLimit: 10, queueLimit: 0 @@ -14,30 +13,219 @@ const pool = mysql.createPool({ async function initDB() { const conn = await pool.getConnection(); try { + // Tables de modération await conn.query(` CREATE TABLE IF NOT EXISTS bans ( - userId VARCHAR(32) PRIMARY KEY, + userId VARCHAR(32), + guildId VARCHAR(32), reason TEXT, modId VARCHAR(32), timestamp BIGINT, type VARCHAR(20) NOT NULL, - unbanDate BIGINT - ) + unbanDate BIGINT, + PRIMARY KEY (userId, guildId) + ) `); await conn.query(` CREATE TABLE IF NOT EXISTS logs ( - id INT AUTO_INCREMENT PRIMARY KEY, - userId VARCHAR(32), + id INT AUTO_INCREMENT PRIMARY KEY, + userId VARCHAR(32), userTag VARCHAR(100), modId VARCHAR(32), modTag VARCHAR(100), - action VARCHAR(20), + action VARCHAR(50), reason TEXT, type ENUM('Permanent','Temporary') DEFAULT 'Permanent', + guildId VARCHAR(32), timestamp BIGINT - ) + ) `); + + await conn.query(` + CREATE TABLE IF NOT EXISTS mutes ( + userId VARCHAR(32), + guildId VARCHAR(32), + reason TEXT, + modId VARCHAR(32), + modTag VARCHAR(100), + timestamp BIGINT, + unmuteDate BIGINT, + type VARCHAR(20) NOT NULL, + PRIMARY KEY (userId, guildId) + ) + `); + + await conn.query(` + CREATE TABLE IF NOT EXISTS staffbanmessages ( + userId VARCHAR(32) PRIMARY KEY, + userTag VARCHAR(100), + message TEXT, + timestamp BIGINT + ) + `); + + // Tables de tickets + await conn.query(` + CREATE TABLE IF NOT EXISTS tickets ( + id INT AUTO_INCREMENT PRIMARY KEY, + ticketId VARCHAR(20) UNIQUE NOT NULL, + channelId VARCHAR(32) UNIQUE NOT NULL, + userId VARCHAR(32) NOT NULL, + userTag VARCHAR(100), + guildId VARCHAR(32) NOT NULL, + type ENUM('Support', 'Plainte', 'Plainte Staff', 'Candidature', 'Problème Technique') NOT NULL, + status ENUM('Ouvert', 'Fermé', 'En attente', 'Supprimé') DEFAULT 'Ouvert', + createdAt BIGINT NOT NULL, + closedAt BIGINT, + closedBy VARCHAR(32), + transcript TEXT, + transcriptPath VARCHAR(255), + claimedBy VARCHAR(32), + claimedAt BIGINT, + claimedByTag VARCHAR(100), + INDEX idx_userId (userId), + INDEX idx_guildId (guildId), + INDEX idx_status (status), + INDEX idx_claimedBy (claimedBy) + ) + `); + + await conn.query(` + CREATE TABLE IF NOT EXISTS ticket_messages ( + id INT AUTO_INCREMENT PRIMARY KEY, + ticketId VARCHAR(20) NOT NULL, + messageId VARCHAR(32) NOT NULL, + userId VARCHAR(32) NOT NULL, + userTag VARCHAR(100), + content TEXT, + attachments TEXT, + timestamp BIGINT NOT NULL, + INDEX idx_ticketId (ticketId), + INDEX idx_messageId (messageId) + ) + `); + + await conn.query(` + CREATE TABLE IF NOT EXISTS candidature_responses ( + id INT AUTO_INCREMENT PRIMARY KEY, + ticketId VARCHAR(20) NOT NULL, + questionNumber INT NOT NULL, + question TEXT NOT NULL, + response TEXT, + timestamp BIGINT NOT NULL, + INDEX idx_ticketId (ticketId) + ) + `); + + // Tables XP + await conn.query(` + CREATE TABLE IF NOT EXISTS user_xp ( + userId VARCHAR(32) NOT NULL, + guildId VARCHAR(32) NOT NULL, + xp INT DEFAULT 0, + level INT DEFAULT 0, + lastMessageTime BIGINT DEFAULT 0, + totalMessages INT DEFAULT 0, + totalVoiceTime INT DEFAULT 0, + lastVoiceJoin BIGINT DEFAULT 0, + lastBumpTime BIGINT DEFAULT 0, + PRIMARY KEY (userId, guildId), + INDEX idx_guildId (guildId), + INDEX idx_xp (xp), + INDEX idx_level (level) + ) + `); + + await conn.query(` + CREATE TABLE IF NOT EXISTS xp_excluded_channels ( + channelId VARCHAR(32) NOT NULL, + guildId VARCHAR(32) NOT NULL, + reason VARCHAR(255), + addedBy VARCHAR(32), + addedAt BIGINT, + PRIMARY KEY (channelId, guildId), + INDEX idx_guildId (guildId) + ) + `); + + await conn.query(` + CREATE TABLE IF NOT EXISTS xp_logs ( + id INT AUTO_INCREMENT PRIMARY KEY, + userId VARCHAR(32) NOT NULL, + guildId VARCHAR(32) NOT NULL, + xpGained INT NOT NULL, + source VARCHAR(50) NOT NULL, + multiplier DECIMAL(3,2) DEFAULT 1.00, + timestamp BIGINT NOT NULL, + INDEX idx_userId (userId), + INDEX idx_guildId (guildId), + INDEX idx_timestamp (timestamp) + ) + `); + + // Tables Bump + await conn.query(` + CREATE TABLE IF NOT EXISTS bumps ( + id INT AUTO_INCREMENT PRIMARY KEY, + userId VARCHAR(32) NOT NULL, + guildId VARCHAR(32) NOT NULL, + bumpTime BIGINT NOT NULL, + reminderSent BOOLEAN DEFAULT FALSE, + INDEX idx_userId (userId), + INDEX idx_guildId (guildId), + INDEX idx_bumpTime (bumpTime) + ) + `); + + await conn.query(` + CREATE TABLE IF NOT EXISTS bump_channels ( + channelId VARCHAR(32) NOT NULL, + guildId VARCHAR(32) NOT NULL, + bumpBotId VARCHAR(32), + addedBy VARCHAR(32), + addedAt BIGINT, + PRIMARY KEY (channelId, guildId), + INDEX idx_guildId (guildId) + ) + `); + + // Tables Profils + await conn.query(` + CREATE TABLE IF NOT EXISTS user_profiles ( + userId VARCHAR(32) NOT NULL, + guildId VARCHAR(32) NOT NULL, + signature TEXT, + birthday DATE, + color VARCHAR(7), + gender VARCHAR(50), + location VARCHAR(100), + updatedAt BIGINT, + PRIMARY KEY (userId, guildId), + INDEX idx_guildId (guildId) + ) + `); + + // Migrations (pour compatibilité existante) + // On utilise la syntaxe standard sans IF NOT EXISTS pour compatibilité maximale + try { + await conn.query('ALTER TABLE bans ADD COLUMN guildId VARCHAR(32)'); + await conn.query('ALTER TABLE bans DROP PRIMARY KEY'); + await conn.query('ALTER TABLE bans ADD PRIMARY KEY (userId, guildId)'); + } catch {} + + try { await conn.query('ALTER TABLE logs ADD COLUMN guildId VARCHAR(32)'); } catch {} + try { await conn.query('ALTER TABLE logs MODIFY COLUMN action VARCHAR(50)'); } catch {} + try { await conn.query('ALTER TABLE tickets ADD COLUMN transcriptPath VARCHAR(255)'); } catch {} + try { await conn.query('ALTER TABLE tickets ADD COLUMN claimedBy VARCHAR(32)'); } catch {} + try { await conn.query('ALTER TABLE tickets ADD COLUMN claimedAt BIGINT'); } catch {} + try { await conn.query('ALTER TABLE tickets ADD COLUMN claimedByTag VARCHAR(100)'); } catch {} + + // Migrations Profils (Sans IF NOT EXISTS) + try { await conn.query('ALTER TABLE user_profiles ADD COLUMN color VARCHAR(7)'); } catch {} + try { await conn.query('ALTER TABLE user_profiles ADD COLUMN gender VARCHAR(50)'); } catch {} + try { await conn.query('ALTER TABLE user_profiles ADD COLUMN location VARCHAR(100)'); } catch {} + } finally { conn.release(); } @@ -45,4 +233,4 @@ async function initDB() { initDB().catch(console.error); -module.exports = pool; +module.exports = pool; \ No newline at end of file diff --git a/functions/moderation/autoUnban.js b/functions/moderation/autoUnban.js index 4d135de..9f6f406 100644 --- a/functions/moderation/autoUnban.js +++ b/functions/moderation/autoUnban.js @@ -1,3 +1,5 @@ +const chalk = require('chalk'); + module.exports = (client, db) => { setInterval(async () => { try { @@ -7,36 +9,33 @@ module.exports = (client, db) => { ['Temporary', now] ); - if (!expiredBans.length) return; // rien à faire + if (!expiredBans.length) return; for (const ban of expiredBans) { const guild = client.guilds.cache.get(ban.guildId); if (!guild) { - console.warn(`Cannot unban ${ban.userId}: bot is not in guild ${ban.guildId}`); + console.warn(chalk.yellow(`⚠️ Impossible de débannir ${ban.userId}: le bot n'est pas dans la guild ${ban.guildId}`)); continue; } try { - await guild.members.unban(ban.userId, 'Temporary ban expired'); - console.log(`Auto-unbanned ${ban.userId} from guild ${guild.id}`); + await guild.members.unban(ban.userId, 'Bannissement temporaire expiré'); + console.log(chalk.green(`✅ Auto-débanni ${ban.userId} de la guild ${guild.name} (${guild.id})`)); } catch (err) { - // Si l’utilisateur n’est pas ban ou autre erreur - console.error(`Failed to unban ${ban.userId} from guild ${guild.id}:`, err.message); + console.error(chalk.red(`❌ Échec du débannissement de ${ban.userId} de la guild ${guild.id}:`), err.message); } - // Supprime uniquement le ban correspondant à cette guild await db.query('DELETE FROM bans WHERE userId = ? AND guildId = ?', [ban.userId, ban.guildId]); - // Log automatique await db.query( `INSERT INTO logs (userId, userTag, modId, modTag, action, reason, type, timestamp, guildId) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`, - [ban.userId, null, client.user.id, 'Mod-Bot', 'auto-unban', 'Temporary ban expired', 'Temporary', Date.now(), ban.guildId] + [ban.userId, null, client.user.id, client.user.tag, 'Débannissement automatique', 'Bannissement temporaire expiré', 'Temporary', Date.now(), ban.guildId] ); } } catch (err) { - console.error('Error during auto-unban:', err); + console.error(chalk.red('❌ Erreur lors de l\'auto-débannissement:'), err); } }, 60_000); -}; +}; \ No newline at end of file diff --git a/functions/moderation/autoUnmute.js b/functions/moderation/autoUnmute.js new file mode 100644 index 0000000..0a2f6b9 --- /dev/null +++ b/functions/moderation/autoUnmute.js @@ -0,0 +1,47 @@ +const chalk = require('chalk'); + +module.exports = (client, db) => { + setInterval(async () => { + try { + const now = Date.now(); + const [expiredMutes] = await db.query( + 'SELECT * FROM mutes WHERE type = ? AND unmuteDate <= ?', + ['Temporary', now] + ); + + if (!expiredMutes.length) return; + + for (const mute of expiredMutes) { + const guild = client.guilds.cache.get(mute.guildId); + if (!guild) { + console.warn(chalk.yellow(`⚠️ Impossible de démuter ${mute.userId}: le bot n'est pas dans la guild ${mute.guildId}`)); + continue; + } + + const member = await guild.members.fetch(mute.userId).catch(() => null); + if (!member) { + await db.query('DELETE FROM mutes WHERE userId = ? AND guildId = ?', [mute.userId, mute.guildId]); + continue; + } + + try { + await member.timeout(null, 'Mute temporaire expiré'); + console.log(chalk.green(`✅ Auto-démuté ${mute.userId} de la guild ${guild.name} (${guild.id})`)); + } catch (err) { + console.error(chalk.red(`❌ Échec du démute de ${mute.userId} de la guild ${guild.id}:`), err.message); + } + + await db.query('DELETE FROM mutes WHERE userId = ? AND guildId = ?', [mute.userId, mute.guildId]); + + await db.query( + `INSERT INTO logs (userId, userTag, modId, modTag, action, reason, type, timestamp, guildId) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`, + [mute.userId, null, client.user.id, client.user.tag, 'Unmute automatique', 'Mute temporaire expiré', 'Temporary', Date.now(), mute.guildId] + ); + } + + } catch (err) { + console.error(chalk.red('❌ Erreur lors de l\'auto-unmute:'), err); + } + }, 60_000); +}; \ No newline at end of file diff --git a/functions/xp/xp.js b/functions/xp/xp.js new file mode 100644 index 0000000..9d87565 --- /dev/null +++ b/functions/xp/xp.js @@ -0,0 +1,177 @@ +/** + * Fonctions utilitaires pour le système XP + */ + +const db = require('../database/db.js'); + +// Formule de calcul de l'XP nécessaire pour atteindre un niveau +function getXPForLevel(level) { + if (level <= 0) return 0; + return Math.floor(5 * Math.pow(level, 2) + 50 * level + 100); +} + +// Calculer le niveau à partir de l'XP total +function getLevelFromXP(xp) { + if (xp < 0) return 0; + + let level = 0; + let requiredXP = getXPForLevel(level + 1); + + while (xp >= requiredXP) { + level++; + requiredXP = getXPForLevel(level + 1); + } + + return level; +} + +// Calculer l'XP nécessaire pour le prochain niveau +function getXPForNextLevel(level) { + return getXPForLevel(level + 1); +} + +// Calculer l'XP progress dans le niveau actuel +function getXPProgress(xp, level) { + const xpForCurrentLevel = getXPForLevel(level); + const xpForNextLevel = getXPForLevel(level + 1); + + const xpInLevel = Math.max(0, xp - xpForCurrentLevel); + const xpNeeded = xpForNextLevel - xpForCurrentLevel; + + if (xpNeeded <= 0) { + return { current: xpInLevel, needed: 100, percentage: 0 }; + } + + const percentage = Math.max(0, Math.min(100, Math.floor((xpInLevel / xpNeeded) * 100))); + + return { current: xpInLevel, needed: xpNeeded, percentage }; +} + +// Obtenir ou créer un utilisateur dans la table XP +async function getUserXP(userId, guildId) { + try { + const [rows] = await db.query( + 'SELECT * FROM user_xp WHERE userId = ? AND guildId = ?', + [userId, guildId] + ); + + if (rows.length === 0) { + await db.query( + 'INSERT INTO user_xp (userId, guildId, xp, level) VALUES (?, ?, 0, 0)', + [userId, guildId] + ); + return { + userId, guildId, xp: 0, level: 0, + lastMessageTime: 0, totalMessages: 0, + totalVoiceTime: 0, lastVoiceJoin: 0, lastBumpTime: 0 + }; + } + + return rows[0]; + } catch (err) { + console.error('Erreur getUserXP:', err); + return null; + } +} + +// Ajouter de l'XP à un utilisateur +async function addXP(userId, guildId, xpGained, source = 'message', multiplier = 1.0) { + try { + const userXP = await getUserXP(userId, guildId); + if (!userXP) return null; + + const finalXP = Math.floor(xpGained * multiplier); + const newXP = userXP.xp + finalXP; + const newLevel = getLevelFromXP(newXP); + + await db.query( + 'UPDATE user_xp SET xp = ?, level = ? WHERE userId = ? AND guildId = ?', + [newXP, newLevel, userId, guildId] + ); + + try { + await db.query( + 'INSERT INTO xp_logs (userId, guildId, xpGained, source, multiplier, timestamp) VALUES (?, ?, ?, ?, ?, ?)', + [userId, guildId, finalXP, source, multiplier, Date.now()] + ); + } catch {} + + return { + oldXP: userXP.xp, + newXP, + oldLevel: userXP.level, + newLevel, + xpGained: finalXP, + levelUp: newLevel > userXP.level + }; + } catch (err) { + console.error('Erreur addXP:', err); + return null; + } +} + +// Vérifier si un salon est exclus de l'XP +async function isChannelExcluded(channelId, guildId) { + try { + const [rows] = await db.query( + 'SELECT * FROM xp_excluded_channels WHERE channelId = ? AND guildId = ?', + [channelId, guildId] + ); + return rows.length > 0; + } catch (err) { + console.error('Erreur isChannelExcluded:', err); + return false; + } +} + +// Obtenir le multiplicateur XP d'un utilisateur +function getXPMultiplier(member, source = 'message') { + let multiplier = 1.0; + if (member.premiumSince) multiplier *= 1.2; + return multiplier; +} + +// Obtenir le classement des utilisateurs par XP +async function getLeaderboard(guildId, limit = 10) { + try { + const [rows] = await db.query( + 'SELECT * FROM user_xp WHERE guildId = ? ORDER BY xp DESC LIMIT ?', + [guildId, limit] + ); + return rows; + } catch (err) { + console.error('Erreur getLeaderboard:', err); + return []; + } +} + +// Obtenir la position d'un utilisateur dans le classement +async function getUserRank(userId, guildId) { + try { + const userXP = await getUserXP(userId, guildId); + if (!userXP) return 0; + + const [rows] = await db.query( + 'SELECT COUNT(*) as count FROM user_xp WHERE guildId = ? AND xp > ?', + [guildId, userXP.xp] + ); + + return (rows[0]?.count || 0) + 1; + } catch (err) { + console.error('Erreur getUserRank:', err); + return 0; + } +} + +module.exports = { + getXPForLevel, + getLevelFromXP, + getXPForNextLevel, + getXPProgress, + getUserXP, + addXP, + isChannelExcluded, + getXPMultiplier, + getLeaderboard, + getUserRank, +}; \ No newline at end of file diff --git a/index.js b/index.js index 3360544..d208576 100644 --- a/index.js +++ b/index.js @@ -3,13 +3,33 @@ require('dotenv').config(); const fs = require('node:fs'); const path = require('node:path'); const { Client, Collection, GatewayIntentBits } = require('discord.js'); -const token = process.env.TOKEN; +const chalk = require('chalk'); -const client = new Client({ intents: [GatewayIntentBits.Guilds] }); +const token = process.env.TOKEN; -const db = require ('./functions/database/db.js'); +if (!token) { + console.error(chalk.red('❌ Le token Discord n\'est pas défini dans les variables d\'environnement !')); + process.exit(1); +} + +const client = new Client({ + intents: [ + GatewayIntentBits.Guilds, + GatewayIntentBits.GuildMembers, + GatewayIntentBits.GuildPresences, + GatewayIntentBits.GuildMessages, + GatewayIntentBits.MessageContent, + GatewayIntentBits.GuildVoiceStates, + ], +}); + +const db = require('./functions/database/db.js'); const autoUnban = require('./functions/moderation/autoUnban.js'); +const autoUnmute = require('./functions/moderation/autoUnmute.js'); +const bumpReminder = require('./functions/bump/bumpReminder.js'); autoUnban(client, db); +autoUnmute(client, db); +bumpReminder(client, db); client.commands = new Collection(); const foldersPath = path.join(__dirname, 'commands'); @@ -20,11 +40,15 @@ for (const folder of commandFolders) { const commandFiles = fs.readdirSync(commandsPath).filter(file => file.endsWith('.js')); for (const file of commandFiles) { const filePath = path.join(commandsPath, file); - const command = require(filePath); - if ('data' in command && 'execute' in command) { - client.commands.set(command.data.name, command); - } else { - console.log(`[WARNING] The command at ${filePath} is missing a required "data" or "execute" property.`); + try { + const command = require(filePath); + if ('data' in command && 'execute' in command) { + client.commands.set(command.data.name, command); + } else { + console.warn(chalk.yellow(`⚠️ La commande à ${filePath} manque une propriété requise "data" ou "execute".`)); + } + } catch (error) { + console.error(chalk.red(`❌ Erreur lors du chargement de la commande à ${filePath}:`), error); } } } @@ -34,12 +58,19 @@ const eventFiles = fs.readdirSync(eventsPath).filter(file => file.endsWith('.js' for (const file of eventFiles) { const filePath = path.join(eventsPath, file); - const event = require(filePath); - if (event.once) { - client.once(event.name, (...args) => event.execute(...args)); - } else { - client.on(event.name, (...args) => event.execute(...args)); + try { + const event = require(filePath); + if (event.once) { + client.once(event.name, (...args) => event.execute(...args)); + } else { + client.on(event.name, (...args) => event.execute(...args)); + } + } catch (error) { + console.error(chalk.red(`❌ Erreur lors du chargement de l'événement à ${filePath}:`), error); } } -client.login(token); \ No newline at end of file +client.login(token).catch(err => { + console.error(chalk.red('❌ Erreur lors de la connexion:'), err); + process.exit(1); +}); \ No newline at end of file diff --git a/node_modules/.package-lock.json b/node_modules/.package-lock.json deleted file mode 100644 index a2d7c20..0000000 --- a/node_modules/.package-lock.json +++ /dev/null @@ -1,1497 +0,0 @@ -{ - "name": "femboy-france-bot", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "node_modules/@discordjs/builders": { - "version": "1.11.3", - "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-1.11.3.tgz", - "integrity": "sha512-p3kf5eV49CJiRTfhtutUCeivSyQ/l2JlKodW1ZquRwwvlOWmG9+6jFShX6x8rUiYhnP6wKI96rgN/SXMy5e5aw==", - "license": "Apache-2.0", - "dependencies": { - "@discordjs/formatters": "^0.6.1", - "@discordjs/util": "^1.1.1", - "@sapphire/shapeshift": "^4.0.0", - "discord-api-types": "^0.38.16", - "fast-deep-equal": "^3.1.3", - "ts-mixer": "^6.0.4", - "tslib": "^2.6.3" - }, - "engines": { - "node": ">=16.11.0" - }, - "funding": { - "url": "https://github.com/discordjs/discord.js?sponsor" - } - }, - "node_modules/@discordjs/collection": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-1.5.3.tgz", - "integrity": "sha512-SVb428OMd3WO1paV3rm6tSjM4wC+Kecaa1EUGX7vc6/fddvw/6lg90z4QtCqm21zvVe92vMMDt9+DkIvjXImQQ==", - "license": "Apache-2.0", - "engines": { - "node": ">=16.11.0" - } - }, - "node_modules/@discordjs/formatters": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/@discordjs/formatters/-/formatters-0.6.1.tgz", - "integrity": "sha512-5cnX+tASiPCqCWtFcFslxBVUaCetB0thvM/JyavhbXInP1HJIEU+Qv/zMrnuwSsX3yWH2lVXNJZeDK3EiP4HHg==", - "license": "Apache-2.0", - "dependencies": { - "discord-api-types": "^0.38.1" - }, - "engines": { - "node": ">=16.11.0" - }, - "funding": { - "url": "https://github.com/discordjs/discord.js?sponsor" - } - }, - "node_modules/@discordjs/rest": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-2.6.0.tgz", - "integrity": "sha512-RDYrhmpB7mTvmCKcpj+pc5k7POKszS4E2O9TYc+U+Y4iaCP+r910QdO43qmpOja8LRr1RJ0b3U+CqVsnPqzf4w==", - "license": "Apache-2.0", - "dependencies": { - "@discordjs/collection": "^2.1.1", - "@discordjs/util": "^1.1.1", - "@sapphire/async-queue": "^1.5.3", - "@sapphire/snowflake": "^3.5.3", - "@vladfrangu/async_event_emitter": "^2.4.6", - "discord-api-types": "^0.38.16", - "magic-bytes.js": "^1.10.0", - "tslib": "^2.6.3", - "undici": "6.21.3" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/discordjs/discord.js?sponsor" - } - }, - "node_modules/@discordjs/rest/node_modules/@discordjs/collection": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-2.1.1.tgz", - "integrity": "sha512-LiSusze9Tc7qF03sLCujF5iZp7K+vRNEDBZ86FT9aQAv3vxMLihUvKvpsCWiQ2DJq1tVckopKm1rxomgNUc9hg==", - "license": "Apache-2.0", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/discordjs/discord.js?sponsor" - } - }, - "node_modules/@discordjs/util": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@discordjs/util/-/util-1.1.1.tgz", - "integrity": "sha512-eddz6UnOBEB1oITPinyrB2Pttej49M9FZQY8NxgEvc3tq6ZICZ19m70RsmzRdDHk80O9NoYN/25AqJl8vPVf/g==", - "license": "Apache-2.0", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/discordjs/discord.js?sponsor" - } - }, - "node_modules/@discordjs/ws": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@discordjs/ws/-/ws-1.2.3.tgz", - "integrity": "sha512-wPlQDxEmlDg5IxhJPuxXr3Vy9AjYq5xCvFWGJyD7w7Np8ZGu+Mc+97LCoEc/+AYCo2IDpKioiH0/c/mj5ZR9Uw==", - "license": "Apache-2.0", - "dependencies": { - "@discordjs/collection": "^2.1.0", - "@discordjs/rest": "^2.5.1", - "@discordjs/util": "^1.1.0", - "@sapphire/async-queue": "^1.5.2", - "@types/ws": "^8.5.10", - "@vladfrangu/async_event_emitter": "^2.2.4", - "discord-api-types": "^0.38.1", - "tslib": "^2.6.2", - "ws": "^8.17.0" - }, - "engines": { - "node": ">=16.11.0" - }, - "funding": { - "url": "https://github.com/discordjs/discord.js?sponsor" - } - }, - "node_modules/@discordjs/ws/node_modules/@discordjs/collection": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-2.1.1.tgz", - "integrity": "sha512-LiSusze9Tc7qF03sLCujF5iZp7K+vRNEDBZ86FT9aQAv3vxMLihUvKvpsCWiQ2DJq1tVckopKm1rxomgNUc9hg==", - "license": "Apache-2.0", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/discordjs/discord.js?sponsor" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", - "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", - "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/config-array": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz", - "integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/object-schema": "^2.1.6", - "debug": "^4.3.1", - "minimatch": "^3.1.2" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/config-helpers": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.1.tgz", - "integrity": "sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/core": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.2.tgz", - "integrity": "sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@types/json-schema": "^7.0.15" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", - "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^10.0.1", - "globals": "^14.0.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/js": { - "version": "9.36.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.36.0.tgz", - "integrity": "sha512-uhCbYtYynH30iZErszX78U+nR3pJU3RHGQ57NXy5QupD4SBVwDeU8TNBy+MjMngc1UyIW9noKqsRqfjQTBU2dw==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://eslint.org/donate" - } - }, - "node_modules/@eslint/object-schema": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", - "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/plugin-kit": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.5.tgz", - "integrity": "sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^0.15.2", - "levn": "^0.4.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@humanfs/core": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", - "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanfs/node": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", - "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanfs/core": "^0.19.1", - "@humanwhocodes/retry": "^0.4.0" - }, - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/retry": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", - "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@sapphire/async-queue": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.5.5.tgz", - "integrity": "sha512-cvGzxbba6sav2zZkH8GPf2oGk9yYoD5qrNWdu9fRehifgnFZJMV+nuy2nON2roRO4yQQ+v7MK/Pktl/HgfsUXg==", - "license": "MIT", - "engines": { - "node": ">=v14.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/@sapphire/shapeshift": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-4.0.0.tgz", - "integrity": "sha512-d9dUmWVA7MMiKobL3VpLF8P2aeanRTu6ypG2OIaEv/ZHH/SUQ2iHOVyi5wAPjQ+HmnMuL0whK9ez8I/raWbtIg==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "lodash": "^4.17.21" - }, - "engines": { - "node": ">=v16" - } - }, - "node_modules/@sapphire/snowflake": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.5.3.tgz", - "integrity": "sha512-jjmJywLAFoWeBi1W7994zZyiNWPIiqRRNAmSERxyg93xRGzNYvGjlZ0gR6x0F4gPRi2+0O6S71kOZYyr3cxaIQ==", - "license": "MIT", - "engines": { - "node": ">=v14.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "24.5.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.5.2.tgz", - "integrity": "sha512-FYxk1I7wPv3K2XBaoyH2cTnocQEu8AOZ60hPbsyukMPLv5/5qr7V1i8PLHdl6Zf87I+xZXFvPCXYjiTFq+YSDQ==", - "license": "MIT", - "dependencies": { - "undici-types": "~7.12.0" - } - }, - "node_modules/@types/ws": { - "version": "8.18.1", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", - "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@vladfrangu/async_event_emitter": { - "version": "2.4.6", - "resolved": "https://registry.npmjs.org/@vladfrangu/async_event_emitter/-/async_event_emitter-2.4.6.tgz", - "integrity": "sha512-RaI5qZo6D2CVS6sTHFKg1v5Ohq/+Bo2LZ5gzUEwZ/WkHhwtGTCB/sVLw8ijOkAUxasZ+WshN/Rzj4ywsABJ5ZA==", - "license": "MIT", - "engines": { - "node": ">=v14.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, - "license": "Python-2.0" - }, - "node_modules/aws-ssl-profiles": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/aws-ssl-profiles/-/aws-ssl-profiles-1.1.2.tgz", - "integrity": "sha512-NZKeq9AfyQvEeNlN0zSYAaWrmBffJh3IELMZfRpJVWgrpEbtEpnjvzqBPf+mxoI287JohRDoa+/nsfqqiZmF6g==", - "license": "MIT", - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true, - "license": "MIT" - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/denque": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", - "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==", - "license": "Apache-2.0", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/discord-api-types": { - "version": "0.38.26", - "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.38.26.tgz", - "integrity": "sha512-xpmPviHjIJ6dFu1eNwNDIGQ3N6qmPUUYFVAx/YZ64h7ZgPkTcKjnciD8bZe8Vbeji7yS5uYljyciunpq0J5NSw==", - "license": "MIT", - "workspaces": [ - "scripts/actions/documentation" - ] - }, - "node_modules/discord.js": { - "version": "14.22.1", - "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-14.22.1.tgz", - "integrity": "sha512-3k+Kisd/v570Jr68A1kNs7qVhNehDwDJAPe4DZ2Syt+/zobf9zEcuYFvsfIaAOgCa0BiHMfOOKQY4eYINl0z7w==", - "license": "Apache-2.0", - "dependencies": { - "@discordjs/builders": "^1.11.2", - "@discordjs/collection": "1.5.3", - "@discordjs/formatters": "^0.6.1", - "@discordjs/rest": "^2.6.0", - "@discordjs/util": "^1.1.1", - "@discordjs/ws": "^1.2.3", - "@sapphire/snowflake": "3.5.3", - "discord-api-types": "^0.38.16", - "fast-deep-equal": "3.1.3", - "lodash.snakecase": "4.1.1", - "magic-bytes.js": "^1.10.0", - "tslib": "^2.6.3", - "undici": "6.21.3" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/discordjs/discord.js?sponsor" - } - }, - "node_modules/dotenv": { - "version": "17.2.3", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.2.3.tgz", - "integrity": "sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "9.36.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.36.0.tgz", - "integrity": "sha512-hB4FIzXovouYzwzECDcUkJ4OcfOEkXTv2zRY6B9bkwjx/cprAq0uvm1nl7zvQ0/TsUk0zQiN4uPfJpB9m+rPMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.8.0", - "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.21.0", - "@eslint/config-helpers": "^0.3.1", - "@eslint/core": "^0.15.2", - "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.36.0", - "@eslint/plugin-kit": "^0.3.5", - "@humanfs/node": "^0.16.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.4.2", - "@types/estree": "^1.0.6", - "@types/json-schema": "^7.0.15", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.6", - "debug": "^4.3.2", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^8.4.0", - "eslint-visitor-keys": "^4.2.1", - "espree": "^10.4.0", - "esquery": "^1.5.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^8.0.0", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "jiti": "*" - }, - "peerDependenciesMeta": { - "jiti": { - "optional": true - } - } - }, - "node_modules/eslint-scope": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", - "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/espree": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", - "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.15.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^4.2.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "license": "MIT" - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, - "license": "MIT" - }, - "node_modules/file-entry-cache": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^4.0.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.4" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/flatted": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", - "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", - "dev": true, - "license": "ISC" - }, - "node_modules/generate-function": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", - "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", - "license": "MIT", - "dependencies": { - "is-property": "^1.0.2" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/globals": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", - "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/iconv-lite": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz", - "integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/import-fresh": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", - "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-property": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", - "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==", - "license": "MIT" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "license": "MIT" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.snakecase": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", - "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==", - "license": "MIT" - }, - "node_modules/long": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", - "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", - "license": "Apache-2.0" - }, - "node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/lru.min": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/lru.min/-/lru.min-1.1.2.tgz", - "integrity": "sha512-Nv9KddBcQSlQopmBHXSsZVY5xsdlZkdH/Iey0BlcBYggMd4two7cZnKOK9vmy3nY0O5RGH99z1PCeTpPqszUYg==", - "license": "MIT", - "engines": { - "bun": ">=1.0.0", - "deno": ">=1.30.0", - "node": ">=8.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wellwelwel" - } - }, - "node_modules/magic-bytes.js": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/magic-bytes.js/-/magic-bytes.js-1.12.1.tgz", - "integrity": "sha512-ThQLOhN86ZkJ7qemtVRGYM+gRgR8GEXNli9H/PMvpnZsE44Xfh3wx9kGJaldg314v85m+bFW6WBMaVHJc/c3zA==", - "license": "MIT" - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/mysql2": { - "version": "3.15.1", - "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.15.1.tgz", - "integrity": "sha512-WZMIRZstT2MFfouEaDz/AGFnGi1A2GwaDe7XvKTdRJEYiAHbOrh4S3d8KFmQeh11U85G+BFjIvS1Di5alusZsw==", - "license": "MIT", - "dependencies": { - "aws-ssl-profiles": "^1.1.1", - "denque": "^2.1.0", - "generate-function": "^2.3.1", - "iconv-lite": "^0.7.0", - "long": "^5.2.1", - "lru.min": "^1.0.0", - "named-placeholders": "^1.1.3", - "seq-queue": "^0.0.5", - "sqlstring": "^2.3.2" - }, - "engines": { - "node": ">= 8.0" - } - }, - "node_modules/named-placeholders": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.3.tgz", - "integrity": "sha512-eLoBxg6wE/rZkJPhU/xRX1WTpkFEwDJEN96oxFrTsqBdbT5ec295Q+CoHrL9IT0DipqKhmGcaZmwOt8OON5x1w==", - "license": "MIT", - "dependencies": { - "lru-cache": "^7.14.1" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true, - "license": "MIT" - }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "license": "MIT" - }, - "node_modules/seq-queue": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz", - "integrity": "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==" - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/sqlstring": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz", - "integrity": "sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ts-mixer": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.4.tgz", - "integrity": "sha512-ufKpbmrugz5Aou4wcr5Wc1UUFWOLhq+Fm6qa6P0w0K5Qw2yhaUoiWszhCVuNQyNwrlGiscHOmqYoAox1PtvgjA==", - "license": "MIT" - }, - "node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/undici": { - "version": "6.21.3", - "resolved": "https://registry.npmjs.org/undici/-/undici-6.21.3.tgz", - "integrity": "sha512-gBLkYIlEnSp8pFbT64yFgGE6UIB9tAkhukC23PmMDCe5Nd+cRqKxSjw5y54MK2AZMgZfJWMaNE4nYUHgi1XEOw==", - "license": "MIT", - "engines": { - "node": ">=18.17" - } - }, - "node_modules/undici-types": { - "version": "7.12.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.12.0.tgz", - "integrity": "sha512-goOacqME2GYyOZZfb5Lgtu+1IDmAlAEu5xnD3+xTzS10hT0vzpf0SPjkXwAw9Jm+4n/mQGDP3LO8CPbYROeBfQ==", - "license": "MIT" - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ws": { - "version": "8.18.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", - "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } -} diff --git a/node_modules/@discordjs/builders/README.md b/node_modules/@discordjs/builders/README.md index dc88b7f..626d709 100644 --- a/node_modules/@discordjs/builders/README.md +++ b/node_modules/@discordjs/builders/README.md @@ -9,7 +9,8 @@ npm version npm downloads Build status - Code coverage + Last commit. + Code coverage

Vercel diff --git a/node_modules/@discordjs/builders/dist/index.d.mts b/node_modules/@discordjs/builders/dist/index.d.mts index 428a46b..ed32ea0 100644 --- a/node_modules/@discordjs/builders/dist/index.d.mts +++ b/node_modules/@discordjs/builders/dist/index.d.mts @@ -1,5 +1,5 @@ import * as _sapphire_shapeshift from '@sapphire/shapeshift'; -import { APIEmbedField, APIEmbedAuthor, APIEmbedFooter, APIEmbedImage, APIEmbed, APISelectMenuOption, APIMessageComponentEmoji, ButtonStyle, ChannelType, APIActionRowComponent, APIComponentInActionRow, APIMessageComponent, APIBaseComponent, ComponentType, APIButtonComponent, Snowflake, APISelectMenuComponent, APIChannelSelectComponent, APIMentionableSelectComponent, APISelectMenuDefaultValue, SelectMenuDefaultValueType, APIRoleSelectComponent, APIStringSelectComponent, APIUserSelectComponent, APITextInputComponent, TextInputStyle, APIComponentInMessageActionRow, APIComponentInModalActionRow, APIFileComponent, APISeparatorComponent, SeparatorSpacingSize, APITextDisplayComponent, APIContainerComponent, APIMediaGalleryComponent, APISectionComponent, APIComponentInContainer, APIMediaGalleryItem, APIThumbnailComponent, APIModalComponent, APIModalInteractionResponseCallbackData, LocalizationMap, LocaleString, InteractionContextType, Permissions, ApplicationIntegrationType, RESTPostAPIChatInputApplicationCommandsJSONBody, ApplicationCommandOptionType, APIApplicationCommandBasicOption, APIApplicationCommandAttachmentOption, APIApplicationCommandBooleanOption, APIApplicationCommandChannelOption, APIApplicationCommandOptionChoice, APIApplicationCommandIntegerOption, APIApplicationCommandMentionableOption, APIApplicationCommandNumberOption, APIApplicationCommandRoleOption, APIApplicationCommandStringOption, APIApplicationCommandUserOption, APIApplicationCommandSubcommandGroupOption, APIApplicationCommandSubcommandOption, APIApplicationCommandOption, Locale, ApplicationCommandType, RESTPostAPIContextMenuApplicationCommandsJSONBody } from 'discord-api-types/v10'; +import { APIEmbedField, APIEmbedAuthor, APIEmbedFooter, APIEmbedImage, APIEmbed, APISelectMenuOption, APIMessageComponentEmoji, ButtonStyle, ChannelType, APIBaseComponent, ComponentType, APIActionRowComponent, APIComponentInActionRow, APIMessageComponent, APIModalComponent, APIButtonComponent, Snowflake, APISelectMenuComponent, APIChannelSelectComponent, APIMentionableSelectComponent, APISelectMenuDefaultValue, SelectMenuDefaultValueType, APIRoleSelectComponent, APIStringSelectComponent, APIUserSelectComponent, APITextInputComponent, TextInputStyle, APIComponentInMessageActionRow, APIComponentInModalActionRow, APIFileUploadComponent, APILabelComponent, APIFileComponent, APISeparatorComponent, SeparatorSpacingSize, APITextDisplayComponent, APIContainerComponent, APIMediaGalleryComponent, APISectionComponent, APIComponentInContainer, APIMediaGalleryItem, APIThumbnailComponent, APIModalInteractionResponseCallbackData, LocalizationMap, LocaleString, InteractionContextType, Permissions, ApplicationIntegrationType, RESTPostAPIChatInputApplicationCommandsJSONBody, ApplicationCommandOptionType, APIApplicationCommandBasicOption, APIApplicationCommandAttachmentOption, APIApplicationCommandBooleanOption, APIApplicationCommandChannelOption, APIApplicationCommandOptionChoice, APIApplicationCommandIntegerOption, APIApplicationCommandMentionableOption, APIApplicationCommandNumberOption, APIApplicationCommandRoleOption, APIApplicationCommandStringOption, APIApplicationCommandUserOption, APIApplicationCommandSubcommandOption, APIApplicationCommandSubcommandGroupOption, APIApplicationCommandOption, Locale, ApplicationCommandType, RESTPostAPIContextMenuApplicationCommandsJSONBody } from 'discord-api-types/v10'; export * from '@discordjs/formatters'; import { JSONEncodable, Equatable } from '@discordjs/util'; @@ -52,25 +52,25 @@ declare const embedFooterPredicate: _sapphire_shapeshift.ObjectValidator<{ declare const timestampPredicate: _sapphire_shapeshift.UnionValidator; declare const titlePredicate: _sapphire_shapeshift.UnionValidator; -declare const Assertions$6_RGBPredicate: typeof RGBPredicate; -declare const Assertions$6_authorNamePredicate: typeof authorNamePredicate; -declare const Assertions$6_colorPredicate: typeof colorPredicate; -declare const Assertions$6_embedAuthorPredicate: typeof embedAuthorPredicate; -declare const Assertions$6_embedFieldPredicate: typeof embedFieldPredicate; -declare const Assertions$6_embedFieldsArrayPredicate: typeof embedFieldsArrayPredicate; -declare const Assertions$6_embedFooterPredicate: typeof embedFooterPredicate; -declare const Assertions$6_fieldInlinePredicate: typeof fieldInlinePredicate; -declare const Assertions$6_fieldLengthPredicate: typeof fieldLengthPredicate; -declare const Assertions$6_fieldNamePredicate: typeof fieldNamePredicate; -declare const Assertions$6_fieldValuePredicate: typeof fieldValuePredicate; -declare const Assertions$6_footerTextPredicate: typeof footerTextPredicate; -declare const Assertions$6_imageURLPredicate: typeof imageURLPredicate; -declare const Assertions$6_timestampPredicate: typeof timestampPredicate; -declare const Assertions$6_titlePredicate: typeof titlePredicate; -declare const Assertions$6_urlPredicate: typeof urlPredicate; -declare const Assertions$6_validateFieldLength: typeof validateFieldLength; -declare namespace Assertions$6 { - export { Assertions$6_RGBPredicate as RGBPredicate, Assertions$6_authorNamePredicate as authorNamePredicate, Assertions$6_colorPredicate as colorPredicate, descriptionPredicate$1 as descriptionPredicate, Assertions$6_embedAuthorPredicate as embedAuthorPredicate, Assertions$6_embedFieldPredicate as embedFieldPredicate, Assertions$6_embedFieldsArrayPredicate as embedFieldsArrayPredicate, Assertions$6_embedFooterPredicate as embedFooterPredicate, Assertions$6_fieldInlinePredicate as fieldInlinePredicate, Assertions$6_fieldLengthPredicate as fieldLengthPredicate, Assertions$6_fieldNamePredicate as fieldNamePredicate, Assertions$6_fieldValuePredicate as fieldValuePredicate, Assertions$6_footerTextPredicate as footerTextPredicate, Assertions$6_imageURLPredicate as imageURLPredicate, Assertions$6_timestampPredicate as timestampPredicate, Assertions$6_titlePredicate as titlePredicate, Assertions$6_urlPredicate as urlPredicate, Assertions$6_validateFieldLength as validateFieldLength }; +declare const Assertions$9_RGBPredicate: typeof RGBPredicate; +declare const Assertions$9_authorNamePredicate: typeof authorNamePredicate; +declare const Assertions$9_colorPredicate: typeof colorPredicate; +declare const Assertions$9_embedAuthorPredicate: typeof embedAuthorPredicate; +declare const Assertions$9_embedFieldPredicate: typeof embedFieldPredicate; +declare const Assertions$9_embedFieldsArrayPredicate: typeof embedFieldsArrayPredicate; +declare const Assertions$9_embedFooterPredicate: typeof embedFooterPredicate; +declare const Assertions$9_fieldInlinePredicate: typeof fieldInlinePredicate; +declare const Assertions$9_fieldLengthPredicate: typeof fieldLengthPredicate; +declare const Assertions$9_fieldNamePredicate: typeof fieldNamePredicate; +declare const Assertions$9_fieldValuePredicate: typeof fieldValuePredicate; +declare const Assertions$9_footerTextPredicate: typeof footerTextPredicate; +declare const Assertions$9_imageURLPredicate: typeof imageURLPredicate; +declare const Assertions$9_timestampPredicate: typeof timestampPredicate; +declare const Assertions$9_titlePredicate: typeof titlePredicate; +declare const Assertions$9_urlPredicate: typeof urlPredicate; +declare const Assertions$9_validateFieldLength: typeof validateFieldLength; +declare namespace Assertions$9 { + export { Assertions$9_RGBPredicate as RGBPredicate, Assertions$9_authorNamePredicate as authorNamePredicate, Assertions$9_colorPredicate as colorPredicate, descriptionPredicate$1 as descriptionPredicate, Assertions$9_embedAuthorPredicate as embedAuthorPredicate, Assertions$9_embedFieldPredicate as embedFieldPredicate, Assertions$9_embedFieldsArrayPredicate as embedFieldsArrayPredicate, Assertions$9_embedFooterPredicate as embedFooterPredicate, Assertions$9_fieldInlinePredicate as fieldInlinePredicate, Assertions$9_fieldLengthPredicate as fieldLengthPredicate, Assertions$9_fieldNamePredicate as fieldNamePredicate, Assertions$9_fieldValuePredicate as fieldValuePredicate, Assertions$9_footerTextPredicate as footerTextPredicate, Assertions$9_imageURLPredicate as imageURLPredicate, Assertions$9_timestampPredicate as timestampPredicate, Assertions$9_titlePredicate as titlePredicate, Assertions$9_urlPredicate as urlPredicate, Assertions$9_validateFieldLength as validateFieldLength }; } /** @@ -181,7 +181,7 @@ declare class EmbedBuilder { * * @remarks * This method behaves similarly - * to {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice | Array.prototype.splice()}. + * to {@link https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/splice | Array.prototype.splice()}. * The maximum amount of fields that can be added is 25. * * It's useful for modifying and adjusting order of the already-existing fields of an embed. @@ -362,6 +362,9 @@ declare const buttonStyleValidator: _sapphire_shapeshift.NativeEnumValidator; declare const minMaxValidator: _sapphire_shapeshift.NumberValidator; declare const labelValueDescriptionValidator: _sapphire_shapeshift.StringValidator; +/** + * @deprecated Replaced with selectMenuStringOptionPredicate. + */ declare const jsonOptionValidator: _sapphire_shapeshift.ObjectValidator<{ label: string; value: string; @@ -393,32 +396,32 @@ declare const channelTypesValidator: _sapphire_shapeshift.ArrayValidator; declare function validateRequiredButtonParameters(style?: ButtonStyle, label?: string, emoji?: APIMessageComponentEmoji, customId?: string, skuId?: string, url?: string): void; -declare const Assertions$5_buttonLabelValidator: typeof buttonLabelValidator; -declare const Assertions$5_buttonStyleValidator: typeof buttonStyleValidator; -declare const Assertions$5_channelTypesValidator: typeof channelTypesValidator; -declare const Assertions$5_customIdValidator: typeof customIdValidator; -declare const Assertions$5_defaultValidator: typeof defaultValidator; -declare const Assertions$5_disabledValidator: typeof disabledValidator; -declare const Assertions$5_emojiValidator: typeof emojiValidator; -declare const Assertions$5_idValidator: typeof idValidator; -declare const Assertions$5_jsonOptionValidator: typeof jsonOptionValidator; -declare const Assertions$5_labelValueDescriptionValidator: typeof labelValueDescriptionValidator; -declare const Assertions$5_minMaxValidator: typeof minMaxValidator; -declare const Assertions$5_optionValidator: typeof optionValidator; -declare const Assertions$5_optionsLengthValidator: typeof optionsLengthValidator; -declare const Assertions$5_optionsValidator: typeof optionsValidator; -declare const Assertions$5_urlValidator: typeof urlValidator; -declare const Assertions$5_validateRequiredButtonParameters: typeof validateRequiredButtonParameters; -declare const Assertions$5_validateRequiredSelectMenuOptionParameters: typeof validateRequiredSelectMenuOptionParameters; -declare const Assertions$5_validateRequiredSelectMenuParameters: typeof validateRequiredSelectMenuParameters; -declare namespace Assertions$5 { - export { Assertions$5_buttonLabelValidator as buttonLabelValidator, Assertions$5_buttonStyleValidator as buttonStyleValidator, Assertions$5_channelTypesValidator as channelTypesValidator, Assertions$5_customIdValidator as customIdValidator, Assertions$5_defaultValidator as defaultValidator, Assertions$5_disabledValidator as disabledValidator, Assertions$5_emojiValidator as emojiValidator, Assertions$5_idValidator as idValidator, Assertions$5_jsonOptionValidator as jsonOptionValidator, Assertions$5_labelValueDescriptionValidator as labelValueDescriptionValidator, Assertions$5_minMaxValidator as minMaxValidator, Assertions$5_optionValidator as optionValidator, Assertions$5_optionsLengthValidator as optionsLengthValidator, Assertions$5_optionsValidator as optionsValidator, placeholderValidator$1 as placeholderValidator, Assertions$5_urlValidator as urlValidator, Assertions$5_validateRequiredButtonParameters as validateRequiredButtonParameters, Assertions$5_validateRequiredSelectMenuOptionParameters as validateRequiredSelectMenuOptionParameters, Assertions$5_validateRequiredSelectMenuParameters as validateRequiredSelectMenuParameters }; +declare const Assertions$8_buttonLabelValidator: typeof buttonLabelValidator; +declare const Assertions$8_buttonStyleValidator: typeof buttonStyleValidator; +declare const Assertions$8_channelTypesValidator: typeof channelTypesValidator; +declare const Assertions$8_customIdValidator: typeof customIdValidator; +declare const Assertions$8_defaultValidator: typeof defaultValidator; +declare const Assertions$8_disabledValidator: typeof disabledValidator; +declare const Assertions$8_emojiValidator: typeof emojiValidator; +declare const Assertions$8_idValidator: typeof idValidator; +declare const Assertions$8_jsonOptionValidator: typeof jsonOptionValidator; +declare const Assertions$8_labelValueDescriptionValidator: typeof labelValueDescriptionValidator; +declare const Assertions$8_minMaxValidator: typeof minMaxValidator; +declare const Assertions$8_optionValidator: typeof optionValidator; +declare const Assertions$8_optionsLengthValidator: typeof optionsLengthValidator; +declare const Assertions$8_optionsValidator: typeof optionsValidator; +declare const Assertions$8_urlValidator: typeof urlValidator; +declare const Assertions$8_validateRequiredButtonParameters: typeof validateRequiredButtonParameters; +declare const Assertions$8_validateRequiredSelectMenuOptionParameters: typeof validateRequiredSelectMenuOptionParameters; +declare const Assertions$8_validateRequiredSelectMenuParameters: typeof validateRequiredSelectMenuParameters; +declare namespace Assertions$8 { + export { Assertions$8_buttonLabelValidator as buttonLabelValidator, Assertions$8_buttonStyleValidator as buttonStyleValidator, Assertions$8_channelTypesValidator as channelTypesValidator, Assertions$8_customIdValidator as customIdValidator, Assertions$8_defaultValidator as defaultValidator, Assertions$8_disabledValidator as disabledValidator, Assertions$8_emojiValidator as emojiValidator, Assertions$8_idValidator as idValidator, Assertions$8_jsonOptionValidator as jsonOptionValidator, Assertions$8_labelValueDescriptionValidator as labelValueDescriptionValidator, Assertions$8_minMaxValidator as minMaxValidator, Assertions$8_optionValidator as optionValidator, Assertions$8_optionsLengthValidator as optionsLengthValidator, Assertions$8_optionsValidator as optionsValidator, placeholderValidator$1 as placeholderValidator, Assertions$8_urlValidator as urlValidator, Assertions$8_validateRequiredButtonParameters as validateRequiredButtonParameters, Assertions$8_validateRequiredSelectMenuOptionParameters as validateRequiredSelectMenuOptionParameters, Assertions$8_validateRequiredSelectMenuParameters as validateRequiredSelectMenuParameters }; } /** * Any action row component data represented as an object. */ -type AnyAPIActionRowComponent = APIActionRowComponent | APIComponentInActionRow | APIMessageComponent; +type AnyAPIActionRowComponent = APIActionRowComponent | APIComponentInActionRow | APIMessageComponent | APIModalComponent; /** * The base component builder that contains common symbols for all sorts of components. * @@ -561,9 +564,9 @@ declare abstract class BaseSelectMenuBuilder i * ```ts * const textInput = new TextInputBuilder({ * custom_id: 'a cool text input', - * label: 'Type something', + * placeholder: 'Type something', * style: TextInputStyle.Short, * }); * ``` @@ -884,7 +894,7 @@ declare class TextInputBuilder extends ComponentBuilder i * Creating a text input using setters and API data: * ```ts * const textInput = new TextInputBuilder({ - * label: 'Type something else', + * placeholder: 'Type something else', * }) * .setCustomId('woah') * .setStyle(TextInputStyle.Paragraph); @@ -903,6 +913,7 @@ declare class TextInputBuilder extends ComponentBuilder i * Sets the label for this text input. * * @param label - The label to use + * @deprecated Use a label builder to create a label (and optionally a description) instead. */ setLabel(label: string): this; /** @@ -1030,6 +1041,169 @@ declare class ActionRowBuilder extend toJSON(): APIActionRowComponent>; } +/** + * A builder that creates API-compatible JSON data for file uploads. + */ +declare class FileUploadBuilder extends ComponentBuilder { + /** + * Creates a new file upload. + * + * @param data - The API data to create this file upload with + * @example + * Creating a file upload from an API data object: + * ```ts + * const fileUpload = new FileUploadBuilder({ + * custom_id: "file_upload", + * min_values: 2, + * max_values: 5, + * }); + * ``` + * @example + * Creating a file upload using setters and API data: + * ```ts + * const fileUpload = new FileUploadBuilder({ + * custom_id: "file_upload", + * min_values: 2, + * max_values: 5, + * }).setRequired(); + * ``` + */ + constructor(data?: Partial); + /** + * Sets the custom id for this file upload. + * + * @param customId - The custom id to use + */ + setCustomId(customId: string): this; + /** + * Sets the minimum number of file uploads required. + * + * @param minValues - The minimum values that must be uploaded + */ + setMinValues(minValues: number): this; + /** + * Clears the minimum values. + */ + clearMinValues(): this; + /** + * Sets the maximum number of file uploads required. + * + * @param maxValues - The maximum values that can be uploaded + */ + setMaxValues(maxValues: number): this; + /** + * Clears the maximum values. + */ + clearMaxValues(): this; + /** + * Sets whether this file upload is required. + * + * @param required - Whether this file upload is required + */ + setRequired(required?: boolean): this; + /** + * {@inheritDoc ComponentBuilder.toJSON} + */ + toJSON(): APIFileUploadComponent; +} + +interface LabelBuilderData extends Partial> { + component?: ChannelSelectMenuBuilder | FileUploadBuilder | MentionableSelectMenuBuilder | RoleSelectMenuBuilder | StringSelectMenuBuilder | TextInputBuilder | UserSelectMenuBuilder; +} +/** + * A builder that creates API-compatible JSON data for labels. + */ +declare class LabelBuilder extends ComponentBuilder { + /** + * @internal + */ + readonly data: LabelBuilderData; + /** + * Creates a new label. + * + * @param data - The API data to create this label with + * @example + * Creating a label from an API data object: + * ```ts + * const label = new LabelBuilder({ + * label: "label", + * component, + * }); + * ``` + * @example + * Creating a label using setters and API data: + * ```ts + * const label = new LabelBuilder({ + * label: 'label', + * component, + * }).setLabel('new text'); + * ``` + */ + constructor(data?: Partial); + /** + * Sets the label for this label. + * + * @param label - The label to use + */ + setLabel(label: string): this; + /** + * Sets the description for this label. + * + * @param description - The description to use + */ + setDescription(description: string): this; + /** + * Clears the description for this label. + */ + clearDescription(): this; + /** + * Sets a string select menu component to this label. + * + * @param input - A function that returns a component builder or an already built builder + */ + setStringSelectMenuComponent(input: APIStringSelectComponent | StringSelectMenuBuilder | ((builder: StringSelectMenuBuilder) => StringSelectMenuBuilder)): this; + /** + * Sets a user select menu component to this label. + * + * @param input - A function that returns a component builder or an already built builder + */ + setUserSelectMenuComponent(input: APIUserSelectComponent | UserSelectMenuBuilder | ((builder: UserSelectMenuBuilder) => UserSelectMenuBuilder)): this; + /** + * Sets a role select menu component to this label. + * + * @param input - A function that returns a component builder or an already built builder + */ + setRoleSelectMenuComponent(input: APIRoleSelectComponent | RoleSelectMenuBuilder | ((builder: RoleSelectMenuBuilder) => RoleSelectMenuBuilder)): this; + /** + * Sets a mentionable select menu component to this label. + * + * @param input - A function that returns a component builder or an already built builder + */ + setMentionableSelectMenuComponent(input: APIMentionableSelectComponent | MentionableSelectMenuBuilder | ((builder: MentionableSelectMenuBuilder) => MentionableSelectMenuBuilder)): this; + /** + * Sets a channel select menu component to this label. + * + * @param input - A function that returns a component builder or an already built builder + */ + setChannelSelectMenuComponent(input: APIChannelSelectComponent | ChannelSelectMenuBuilder | ((builder: ChannelSelectMenuBuilder) => ChannelSelectMenuBuilder)): this; + /** + * Sets a text input component to this label. + * + * @param input - A function that returns a component builder or an already built builder + */ + setTextInputComponent(input: APITextInputComponent | TextInputBuilder | ((builder: TextInputBuilder) => TextInputBuilder)): this; + /** + * Sets a file upload component to this label. + * + * @param input - A function that returns a component builder or an already built builder + */ + setFileUploadComponent(input: APIFileUploadComponent | FileUploadBuilder | ((builder: FileUploadBuilder) => FileUploadBuilder)): this; + /** + * {@inheritDoc ComponentBuilder.toJSON} + */ + toJSON(): APILabelComponent; +} + declare class FileBuilder extends ComponentBuilder { /** * Creates a new file from API data. @@ -1193,7 +1367,8 @@ declare class ContainerBuilder extends ComponentBuilder { * }, * ], * }) - * .addComponents(separator, section); + * .addSeparatorComponents(separator) + * .addSectionComponents(section); * ``` */ constructor({ components, ...data }?: Partial); @@ -1592,6 +1767,14 @@ interface MappedComponentTypes { * The media gallery component type is associated with a {@link MediaGalleryBuilder}. */ [ComponentType.MediaGallery]: MediaGalleryBuilder; + /** + * The label component type is associated with a {@link LabelBuilder}. + */ + [ComponentType.Label]: LabelBuilder; + /** + * The file upload component type is associated with a {@link FileUploadBuilder}. + */ + [ComponentType.FileUpload]: FileUploadBuilder; } /** * Factory for creating components from API data. @@ -1618,17 +1801,39 @@ declare const requiredValidator: _sapphire_shapeshift.BooleanValidator; declare const valueValidator: _sapphire_shapeshift.StringValidator; declare const placeholderValidator: _sapphire_shapeshift.StringValidator; declare const labelValidator: _sapphire_shapeshift.StringValidator; -declare function validateRequiredParameters$3(customId?: string, style?: TextInputStyle, label?: string): void; +declare const textInputPredicate: _sapphire_shapeshift.ObjectValidator<{ + type: ComponentType; + custom_id: string; + style: TextInputStyle; + id: number | undefined; + min_length: number | undefined; + max_length: number | undefined; + placeholder: string | undefined; + value: string | undefined; + required: boolean | undefined; +}, _sapphire_shapeshift.UndefinedToOptional<{ + type: ComponentType; + custom_id: string; + style: TextInputStyle; + id: number | undefined; + min_length: number | undefined; + max_length: number | undefined; + placeholder: string | undefined; + value: string | undefined; + required: boolean | undefined; +}>>; +declare function validateRequiredParameters$3(customId?: string, style?: TextInputStyle): void; -declare const Assertions$4_labelValidator: typeof labelValidator; -declare const Assertions$4_maxLengthValidator: typeof maxLengthValidator; -declare const Assertions$4_minLengthValidator: typeof minLengthValidator; -declare const Assertions$4_placeholderValidator: typeof placeholderValidator; -declare const Assertions$4_requiredValidator: typeof requiredValidator; -declare const Assertions$4_textInputStyleValidator: typeof textInputStyleValidator; -declare const Assertions$4_valueValidator: typeof valueValidator; -declare namespace Assertions$4 { - export { Assertions$4_labelValidator as labelValidator, Assertions$4_maxLengthValidator as maxLengthValidator, Assertions$4_minLengthValidator as minLengthValidator, Assertions$4_placeholderValidator as placeholderValidator, Assertions$4_requiredValidator as requiredValidator, Assertions$4_textInputStyleValidator as textInputStyleValidator, validateRequiredParameters$3 as validateRequiredParameters, Assertions$4_valueValidator as valueValidator }; +declare const Assertions$7_labelValidator: typeof labelValidator; +declare const Assertions$7_maxLengthValidator: typeof maxLengthValidator; +declare const Assertions$7_minLengthValidator: typeof minLengthValidator; +declare const Assertions$7_placeholderValidator: typeof placeholderValidator; +declare const Assertions$7_requiredValidator: typeof requiredValidator; +declare const Assertions$7_textInputPredicate: typeof textInputPredicate; +declare const Assertions$7_textInputStyleValidator: typeof textInputStyleValidator; +declare const Assertions$7_valueValidator: typeof valueValidator; +declare namespace Assertions$7 { + export { Assertions$7_labelValidator as labelValidator, Assertions$7_maxLengthValidator as maxLengthValidator, Assertions$7_minLengthValidator as minLengthValidator, Assertions$7_placeholderValidator as placeholderValidator, Assertions$7_requiredValidator as requiredValidator, Assertions$7_textInputPredicate as textInputPredicate, Assertions$7_textInputStyleValidator as textInputStyleValidator, validateRequiredParameters$3 as validateRequiredParameters, Assertions$7_valueValidator as valueValidator }; } /** @@ -1642,7 +1847,7 @@ declare class ModalBuilder implements JSONEncodable[]; + readonly components: (ActionRowBuilder | LabelBuilder | TextDisplayBuilder)[]; /** * Creates a new modal from API data. * @@ -1665,14 +1870,71 @@ declare class ModalBuilder implements JSONEncodable | APIActionRowComponent>): this; + addComponents(...components: RestOrArray | APIActionRowComponent | APILabelComponent | APITextDisplayComponent | APITextInputComponent | LabelBuilder | TextDisplayBuilder | TextInputBuilder>): this; + /** + * Adds label components to this modal. + * + * @param components - The components to add + */ + addLabelComponents(...components: RestOrArray LabelBuilder)>): this; + /** + * Adds text display components to this modal. + * + * @param components - The components to add + */ + addTextDisplayComponents(...components: RestOrArray TextDisplayBuilder)>): this; + /** + * Adds action rows to this modal. + * + * @param components - The components to add + * @deprecated Use {@link ModalBuilder.addLabelComponents} instead + */ + addActionRowComponents(...components: RestOrArray | APIActionRowComponent | ((builder: ActionRowBuilder) => ActionRowBuilder)>): this; + /** + * Sets the labels for this modal. + * + * @param components - The components to set + */ + setLabelComponents(...components: RestOrArray LabelBuilder)>): this; + /** + * Removes, replaces, or inserts labels for this modal. + * + * @remarks + * This method behaves similarly + * to {@link https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/splice | Array.prototype.splice()}. + * The maximum amount of labels that can be added is 5. + * + * It's useful for modifying and adjusting order of the already-existing labels of a modal. + * @example + * Remove the first label: + * ```ts + * modal.spliceLabelComponents(0, 1); + * ``` + * @example + * Remove the first n labels: + * ```ts + * const n = 4; + * modal.spliceLabelComponents(0, n); + * ``` + * @example + * Remove the last label: + * ```ts + * modal.spliceLabelComponents(-1, 1); + * ``` + * @param index - The index to start at + * @param deleteCount - The number of labels to remove + * @param labels - The replacing label objects + */ + spliceLabelComponents(index: number, deleteCount: number, ...labels: (APILabelComponent | LabelBuilder | ((builder: LabelBuilder) => LabelBuilder))[]): this; /** * Sets components for this modal. * * @param components - The components to set + * @deprecated Use {@link ModalBuilder.setLabelComponents} instead */ - setComponents(...components: RestOrArray>): this; + setComponents(...components: RestOrArray | LabelBuilder | TextDisplayBuilder>): this; /** * {@inheritDoc ComponentBuilder.toJSON} */ @@ -1680,13 +1942,11966 @@ declare class ModalBuilder implements JSONEncodable; -declare const componentsValidator: _sapphire_shapeshift.ArrayValidator<[ActionRowBuilder, ...ActionRowBuilder[]], ActionRowBuilder>; -declare function validateRequiredParameters$2(customId?: string, title?: string, components?: ActionRowBuilder[]): void; +declare const componentsValidator: _sapphire_shapeshift.ArrayValidator<[LabelBuilder | ActionRowBuilder | TextDisplayBuilder, ...(LabelBuilder | ActionRowBuilder | TextDisplayBuilder)[]], LabelBuilder | ActionRowBuilder | TextDisplayBuilder>; +declare function validateRequiredParameters$2(customId?: string, title?: string, components?: (ActionRowBuilder | LabelBuilder | TextDisplayBuilder)[]): void; -declare const Assertions$3_componentsValidator: typeof componentsValidator; -declare const Assertions$3_titleValidator: typeof titleValidator; +declare const Assertions$6_componentsValidator: typeof componentsValidator; +declare const Assertions$6_titleValidator: typeof titleValidator; +declare namespace Assertions$6 { + export { Assertions$6_componentsValidator as componentsValidator, Assertions$6_titleValidator as titleValidator, validateRequiredParameters$2 as validateRequiredParameters }; +} + +declare const selectMenuChannelPredicate: _sapphire_shapeshift.ObjectValidator<{ + id: number | undefined; + placeholder: string | undefined; + min_values: number | undefined; + max_values: number | undefined; + custom_id: string; + disabled: boolean | undefined; +} & { + type: ComponentType; + channel_types: ChannelType[] | undefined; + default_values: [] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | undefined; +}, _sapphire_shapeshift.UndefinedToOptional<{ + id: number | undefined; + placeholder: string | undefined; + min_values: number | undefined; + max_values: number | undefined; + custom_id: string; + disabled: boolean | undefined; +} & { + type: ComponentType; + channel_types: ChannelType[] | undefined; + default_values: [] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | undefined; +}>>; +declare const selectMenuMentionablePredicate: _sapphire_shapeshift.ObjectValidator<{ + id: number | undefined; + placeholder: string | undefined; + min_values: number | undefined; + max_values: number | undefined; + custom_id: string; + disabled: boolean | undefined; +} & { + type: ComponentType; + default_values: [] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | undefined; +}, _sapphire_shapeshift.UndefinedToOptional<{ + id: number | undefined; + placeholder: string | undefined; + min_values: number | undefined; + max_values: number | undefined; + custom_id: string; + disabled: boolean | undefined; +} & { + type: ComponentType; + default_values: [] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | undefined; +}>>; +declare const selectMenuRolePredicate: _sapphire_shapeshift.ObjectValidator<{ + id: number | undefined; + placeholder: string | undefined; + min_values: number | undefined; + max_values: number | undefined; + custom_id: string; + disabled: boolean | undefined; +} & { + type: ComponentType; + default_values: [] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | undefined; +}, _sapphire_shapeshift.UndefinedToOptional<{ + id: number | undefined; + placeholder: string | undefined; + min_values: number | undefined; + max_values: number | undefined; + custom_id: string; + disabled: boolean | undefined; +} & { + type: ComponentType; + default_values: [] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | undefined; +}>>; +declare const selectMenuUserPredicate: _sapphire_shapeshift.ObjectValidator<{ + id: number | undefined; + placeholder: string | undefined; + min_values: number | undefined; + max_values: number | undefined; + custom_id: string; + disabled: boolean | undefined; +} & { + type: ComponentType; + default_values: [] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | undefined; +}, _sapphire_shapeshift.UndefinedToOptional<{ + id: number | undefined; + placeholder: string | undefined; + min_values: number | undefined; + max_values: number | undefined; + custom_id: string; + disabled: boolean | undefined; +} & { + type: ComponentType; + default_values: [] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | undefined; +}>>; +declare const selectMenuStringOptionPredicate: _sapphire_shapeshift.ObjectValidator<{ + label: string; + value: string; + description: string | undefined; + emoji: _sapphire_shapeshift.UndefinedToOptional<{ + name?: string | undefined; + id?: string | undefined; + animated?: boolean | undefined; + }> | undefined; + default: boolean | undefined; +}, _sapphire_shapeshift.UndefinedToOptional<{ + label: string; + value: string; + description: string | undefined; + emoji: _sapphire_shapeshift.UndefinedToOptional<{ + name?: string | undefined; + id?: string | undefined; + animated?: boolean | undefined; + }> | undefined; + default: boolean | undefined; +}>>; +declare const selectMenuStringPredicate: _sapphire_shapeshift.ObjectValidator<{ + id: number | undefined; + placeholder: string | undefined; + min_values: number | undefined; + max_values: number | undefined; + custom_id: string; + disabled: boolean | undefined; +} & { + type: ComponentType; + options: [] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>]; +}, _sapphire_shapeshift.UndefinedToOptional<{ + id: number | undefined; + placeholder: string | undefined; + min_values: number | undefined; + max_values: number | undefined; + custom_id: string; + disabled: boolean | undefined; +} & { + type: ComponentType; + options: [] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>]; +}>>; + +declare const Assertions$5_selectMenuChannelPredicate: typeof selectMenuChannelPredicate; +declare const Assertions$5_selectMenuMentionablePredicate: typeof selectMenuMentionablePredicate; +declare const Assertions$5_selectMenuRolePredicate: typeof selectMenuRolePredicate; +declare const Assertions$5_selectMenuStringOptionPredicate: typeof selectMenuStringOptionPredicate; +declare const Assertions$5_selectMenuStringPredicate: typeof selectMenuStringPredicate; +declare const Assertions$5_selectMenuUserPredicate: typeof selectMenuUserPredicate; +declare namespace Assertions$5 { + export { Assertions$5_selectMenuChannelPredicate as selectMenuChannelPredicate, Assertions$5_selectMenuMentionablePredicate as selectMenuMentionablePredicate, Assertions$5_selectMenuRolePredicate as selectMenuRolePredicate, Assertions$5_selectMenuStringOptionPredicate as selectMenuStringOptionPredicate, Assertions$5_selectMenuStringPredicate as selectMenuStringPredicate, Assertions$5_selectMenuUserPredicate as selectMenuUserPredicate }; +} + +declare const fileUploadPredicate: _sapphire_shapeshift.ObjectValidator<{ + type: ComponentType; + id: number | undefined; + custom_id: string; + min_values: number | undefined; + max_values: number | undefined; + required: boolean | undefined; +}, _sapphire_shapeshift.UndefinedToOptional<{ + type: ComponentType; + id: number | undefined; + custom_id: string; + min_values: number | undefined; + max_values: number | undefined; + required: boolean | undefined; +}>>; + +declare const Assertions$4_fileUploadPredicate: typeof fileUploadPredicate; +declare namespace Assertions$4 { + export { Assertions$4_fileUploadPredicate as fileUploadPredicate }; +} + +declare const labelPredicate: _sapphire_shapeshift.ObjectValidator<{ + id: number | undefined; + type: ComponentType; + label: string; + description: string | undefined; + component: _sapphire_shapeshift.UndefinedToOptional<{ + type: any; + id: any; + custom_id: any; + min_values: any; + max_values: any; + required: any; + }> | _sapphire_shapeshift.UndefinedToOptional<{ + type: any; + custom_id: any; + style: any; + id: any; + min_length: any; + max_length: any; + placeholder: any; + value: any; + required: any; + }> | _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + placeholder: any; + min_values: any; + max_values: any; + custom_id: any; + disabled: any; + } & { + type: any; + default_values: any; + }> | _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + placeholder: any; + min_values: any; + max_values: any; + custom_id: any; + disabled: any; + } & { + type: any; + options: any; + }>; +}, _sapphire_shapeshift.UndefinedToOptional<{ + id: number | undefined; + type: ComponentType; + label: string; + description: string | undefined; + component: _sapphire_shapeshift.UndefinedToOptional<{ + type: any; + id: any; + custom_id: any; + min_values: any; + max_values: any; + required: any; + }> | _sapphire_shapeshift.UndefinedToOptional<{ + type: any; + custom_id: any; + style: any; + id: any; + min_length: any; + max_length: any; + placeholder: any; + value: any; + required: any; + }> | _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + placeholder: any; + min_values: any; + max_values: any; + custom_id: any; + disabled: any; + } & { + type: any; + default_values: any; + }> | _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + placeholder: any; + min_values: any; + max_values: any; + custom_id: any; + disabled: any; + } & { + type: any; + options: any; + }>; +}>>; + +declare const Assertions$3_labelPredicate: typeof labelPredicate; declare namespace Assertions$3 { - export { Assertions$3_componentsValidator as componentsValidator, Assertions$3_titleValidator as titleValidator, validateRequiredParameters$2 as validateRequiredParameters }; + export { Assertions$3_labelPredicate as labelPredicate }; } declare const unfurledMediaItemPredicate: _sapphire_shapeshift.ObjectValidator<{ @@ -2608,4 +14823,4 @@ declare function isValidationEnabled(): boolean; */ declare const version: string; -export { ActionRowBuilder, type AnyAPIActionRowComponent, type AnyComponentBuilder, ApplicationCommandNumericOptionMinMaxValueMixin, type ApplicationCommandOptionAllowedChannelTypes, ApplicationCommandOptionBase, ApplicationCommandOptionChannelTypesMixin, ApplicationCommandOptionWithAutocompleteMixin, ApplicationCommandOptionWithChoicesMixin, BaseSelectMenuBuilder, ButtonBuilder, ChannelSelectMenuBuilder, Assertions$5 as ComponentAssertions, ComponentBuilder, Assertions$2 as ComponentsV2Assertions, ContainerBuilder, type ContainerComponentBuilder, Assertions as ContextMenuCommandAssertions, ContextMenuCommandBuilder, type ContextMenuCommandType, Assertions$6 as EmbedAssertions, type EmbedAuthorData, type EmbedAuthorOptions, EmbedBuilder, type EmbedFooterData, type EmbedFooterOptions, type EmbedImageData, FileBuilder, type IconData, type MappedComponentTypes, MediaGalleryBuilder, MediaGalleryItemBuilder, MentionableSelectMenuBuilder, type MessageActionRowComponentBuilder, type MessageComponentBuilder, type ModalActionRowComponentBuilder, Assertions$3 as ModalAssertions, ModalBuilder, type ModalComponentBuilder, type RGBTuple, type RestOrArray, RoleSelectMenuBuilder, SectionBuilder, StringSelectMenuBuilder as SelectMenuBuilder, StringSelectMenuOptionBuilder as SelectMenuOptionBuilder, SeparatorBuilder, SharedNameAndDescription, SharedSlashCommand, SharedSlashCommandOptions, SharedSlashCommandSubcommands, Assertions$1 as SlashCommandAssertions, SlashCommandAttachmentOption, SlashCommandBooleanOption, SlashCommandBuilder, SlashCommandChannelOption, SlashCommandIntegerOption, SlashCommandMentionableOption, SlashCommandNumberOption, type SlashCommandOptionsOnlyBuilder, SlashCommandRoleOption, SlashCommandStringOption, SlashCommandSubcommandBuilder, SlashCommandSubcommandGroupBuilder, type SlashCommandSubcommandsOnlyBuilder, SlashCommandUserOption, StringSelectMenuBuilder, StringSelectMenuOptionBuilder, TextDisplayBuilder, Assertions$4 as TextInputAssertions, TextInputBuilder, ThumbnailBuilder, type ToAPIApplicationCommandOptions, UserSelectMenuBuilder, createComponentBuilder, disableValidators, embedLength, enableValidators, isValidationEnabled, normalizeArray, resolveBuilder, version }; +export { ActionRowBuilder, type AnyAPIActionRowComponent, type AnyComponentBuilder, ApplicationCommandNumericOptionMinMaxValueMixin, type ApplicationCommandOptionAllowedChannelTypes, ApplicationCommandOptionBase, ApplicationCommandOptionChannelTypesMixin, ApplicationCommandOptionWithAutocompleteMixin, ApplicationCommandOptionWithChoicesMixin, BaseSelectMenuBuilder, ButtonBuilder, ChannelSelectMenuBuilder, Assertions$8 as ComponentAssertions, ComponentBuilder, Assertions$2 as ComponentsV2Assertions, ContainerBuilder, type ContainerComponentBuilder, Assertions as ContextMenuCommandAssertions, ContextMenuCommandBuilder, type ContextMenuCommandType, Assertions$9 as EmbedAssertions, type EmbedAuthorData, type EmbedAuthorOptions, EmbedBuilder, type EmbedFooterData, type EmbedFooterOptions, type EmbedImageData, FileBuilder, Assertions$4 as FileUploadAssertions, FileUploadBuilder, type IconData, Assertions$3 as LabelAssertions, LabelBuilder, type LabelBuilderData, type MappedComponentTypes, MediaGalleryBuilder, MediaGalleryItemBuilder, MentionableSelectMenuBuilder, type MessageActionRowComponentBuilder, type MessageComponentBuilder, type ModalActionRowComponentBuilder, Assertions$6 as ModalAssertions, ModalBuilder, type ModalComponentBuilder, type RGBTuple, type RestOrArray, RoleSelectMenuBuilder, SectionBuilder, Assertions$5 as SelectMenuAssertions, StringSelectMenuBuilder as SelectMenuBuilder, StringSelectMenuOptionBuilder as SelectMenuOptionBuilder, SeparatorBuilder, SharedNameAndDescription, SharedSlashCommand, SharedSlashCommandOptions, SharedSlashCommandSubcommands, Assertions$1 as SlashCommandAssertions, SlashCommandAttachmentOption, SlashCommandBooleanOption, SlashCommandBuilder, SlashCommandChannelOption, SlashCommandIntegerOption, SlashCommandMentionableOption, SlashCommandNumberOption, type SlashCommandOptionsOnlyBuilder, SlashCommandRoleOption, SlashCommandStringOption, SlashCommandSubcommandBuilder, SlashCommandSubcommandGroupBuilder, type SlashCommandSubcommandsOnlyBuilder, SlashCommandUserOption, StringSelectMenuBuilder, StringSelectMenuOptionBuilder, TextDisplayBuilder, Assertions$7 as TextInputAssertions, TextInputBuilder, ThumbnailBuilder, type ToAPIApplicationCommandOptions, UserSelectMenuBuilder, createComponentBuilder, disableValidators, embedLength, enableValidators, isValidationEnabled, normalizeArray, resolveBuilder, version }; diff --git a/node_modules/@discordjs/builders/dist/index.d.ts b/node_modules/@discordjs/builders/dist/index.d.ts index 428a46b..ed32ea0 100644 --- a/node_modules/@discordjs/builders/dist/index.d.ts +++ b/node_modules/@discordjs/builders/dist/index.d.ts @@ -1,5 +1,5 @@ import * as _sapphire_shapeshift from '@sapphire/shapeshift'; -import { APIEmbedField, APIEmbedAuthor, APIEmbedFooter, APIEmbedImage, APIEmbed, APISelectMenuOption, APIMessageComponentEmoji, ButtonStyle, ChannelType, APIActionRowComponent, APIComponentInActionRow, APIMessageComponent, APIBaseComponent, ComponentType, APIButtonComponent, Snowflake, APISelectMenuComponent, APIChannelSelectComponent, APIMentionableSelectComponent, APISelectMenuDefaultValue, SelectMenuDefaultValueType, APIRoleSelectComponent, APIStringSelectComponent, APIUserSelectComponent, APITextInputComponent, TextInputStyle, APIComponentInMessageActionRow, APIComponentInModalActionRow, APIFileComponent, APISeparatorComponent, SeparatorSpacingSize, APITextDisplayComponent, APIContainerComponent, APIMediaGalleryComponent, APISectionComponent, APIComponentInContainer, APIMediaGalleryItem, APIThumbnailComponent, APIModalComponent, APIModalInteractionResponseCallbackData, LocalizationMap, LocaleString, InteractionContextType, Permissions, ApplicationIntegrationType, RESTPostAPIChatInputApplicationCommandsJSONBody, ApplicationCommandOptionType, APIApplicationCommandBasicOption, APIApplicationCommandAttachmentOption, APIApplicationCommandBooleanOption, APIApplicationCommandChannelOption, APIApplicationCommandOptionChoice, APIApplicationCommandIntegerOption, APIApplicationCommandMentionableOption, APIApplicationCommandNumberOption, APIApplicationCommandRoleOption, APIApplicationCommandStringOption, APIApplicationCommandUserOption, APIApplicationCommandSubcommandGroupOption, APIApplicationCommandSubcommandOption, APIApplicationCommandOption, Locale, ApplicationCommandType, RESTPostAPIContextMenuApplicationCommandsJSONBody } from 'discord-api-types/v10'; +import { APIEmbedField, APIEmbedAuthor, APIEmbedFooter, APIEmbedImage, APIEmbed, APISelectMenuOption, APIMessageComponentEmoji, ButtonStyle, ChannelType, APIBaseComponent, ComponentType, APIActionRowComponent, APIComponentInActionRow, APIMessageComponent, APIModalComponent, APIButtonComponent, Snowflake, APISelectMenuComponent, APIChannelSelectComponent, APIMentionableSelectComponent, APISelectMenuDefaultValue, SelectMenuDefaultValueType, APIRoleSelectComponent, APIStringSelectComponent, APIUserSelectComponent, APITextInputComponent, TextInputStyle, APIComponentInMessageActionRow, APIComponentInModalActionRow, APIFileUploadComponent, APILabelComponent, APIFileComponent, APISeparatorComponent, SeparatorSpacingSize, APITextDisplayComponent, APIContainerComponent, APIMediaGalleryComponent, APISectionComponent, APIComponentInContainer, APIMediaGalleryItem, APIThumbnailComponent, APIModalInteractionResponseCallbackData, LocalizationMap, LocaleString, InteractionContextType, Permissions, ApplicationIntegrationType, RESTPostAPIChatInputApplicationCommandsJSONBody, ApplicationCommandOptionType, APIApplicationCommandBasicOption, APIApplicationCommandAttachmentOption, APIApplicationCommandBooleanOption, APIApplicationCommandChannelOption, APIApplicationCommandOptionChoice, APIApplicationCommandIntegerOption, APIApplicationCommandMentionableOption, APIApplicationCommandNumberOption, APIApplicationCommandRoleOption, APIApplicationCommandStringOption, APIApplicationCommandUserOption, APIApplicationCommandSubcommandOption, APIApplicationCommandSubcommandGroupOption, APIApplicationCommandOption, Locale, ApplicationCommandType, RESTPostAPIContextMenuApplicationCommandsJSONBody } from 'discord-api-types/v10'; export * from '@discordjs/formatters'; import { JSONEncodable, Equatable } from '@discordjs/util'; @@ -52,25 +52,25 @@ declare const embedFooterPredicate: _sapphire_shapeshift.ObjectValidator<{ declare const timestampPredicate: _sapphire_shapeshift.UnionValidator; declare const titlePredicate: _sapphire_shapeshift.UnionValidator; -declare const Assertions$6_RGBPredicate: typeof RGBPredicate; -declare const Assertions$6_authorNamePredicate: typeof authorNamePredicate; -declare const Assertions$6_colorPredicate: typeof colorPredicate; -declare const Assertions$6_embedAuthorPredicate: typeof embedAuthorPredicate; -declare const Assertions$6_embedFieldPredicate: typeof embedFieldPredicate; -declare const Assertions$6_embedFieldsArrayPredicate: typeof embedFieldsArrayPredicate; -declare const Assertions$6_embedFooterPredicate: typeof embedFooterPredicate; -declare const Assertions$6_fieldInlinePredicate: typeof fieldInlinePredicate; -declare const Assertions$6_fieldLengthPredicate: typeof fieldLengthPredicate; -declare const Assertions$6_fieldNamePredicate: typeof fieldNamePredicate; -declare const Assertions$6_fieldValuePredicate: typeof fieldValuePredicate; -declare const Assertions$6_footerTextPredicate: typeof footerTextPredicate; -declare const Assertions$6_imageURLPredicate: typeof imageURLPredicate; -declare const Assertions$6_timestampPredicate: typeof timestampPredicate; -declare const Assertions$6_titlePredicate: typeof titlePredicate; -declare const Assertions$6_urlPredicate: typeof urlPredicate; -declare const Assertions$6_validateFieldLength: typeof validateFieldLength; -declare namespace Assertions$6 { - export { Assertions$6_RGBPredicate as RGBPredicate, Assertions$6_authorNamePredicate as authorNamePredicate, Assertions$6_colorPredicate as colorPredicate, descriptionPredicate$1 as descriptionPredicate, Assertions$6_embedAuthorPredicate as embedAuthorPredicate, Assertions$6_embedFieldPredicate as embedFieldPredicate, Assertions$6_embedFieldsArrayPredicate as embedFieldsArrayPredicate, Assertions$6_embedFooterPredicate as embedFooterPredicate, Assertions$6_fieldInlinePredicate as fieldInlinePredicate, Assertions$6_fieldLengthPredicate as fieldLengthPredicate, Assertions$6_fieldNamePredicate as fieldNamePredicate, Assertions$6_fieldValuePredicate as fieldValuePredicate, Assertions$6_footerTextPredicate as footerTextPredicate, Assertions$6_imageURLPredicate as imageURLPredicate, Assertions$6_timestampPredicate as timestampPredicate, Assertions$6_titlePredicate as titlePredicate, Assertions$6_urlPredicate as urlPredicate, Assertions$6_validateFieldLength as validateFieldLength }; +declare const Assertions$9_RGBPredicate: typeof RGBPredicate; +declare const Assertions$9_authorNamePredicate: typeof authorNamePredicate; +declare const Assertions$9_colorPredicate: typeof colorPredicate; +declare const Assertions$9_embedAuthorPredicate: typeof embedAuthorPredicate; +declare const Assertions$9_embedFieldPredicate: typeof embedFieldPredicate; +declare const Assertions$9_embedFieldsArrayPredicate: typeof embedFieldsArrayPredicate; +declare const Assertions$9_embedFooterPredicate: typeof embedFooterPredicate; +declare const Assertions$9_fieldInlinePredicate: typeof fieldInlinePredicate; +declare const Assertions$9_fieldLengthPredicate: typeof fieldLengthPredicate; +declare const Assertions$9_fieldNamePredicate: typeof fieldNamePredicate; +declare const Assertions$9_fieldValuePredicate: typeof fieldValuePredicate; +declare const Assertions$9_footerTextPredicate: typeof footerTextPredicate; +declare const Assertions$9_imageURLPredicate: typeof imageURLPredicate; +declare const Assertions$9_timestampPredicate: typeof timestampPredicate; +declare const Assertions$9_titlePredicate: typeof titlePredicate; +declare const Assertions$9_urlPredicate: typeof urlPredicate; +declare const Assertions$9_validateFieldLength: typeof validateFieldLength; +declare namespace Assertions$9 { + export { Assertions$9_RGBPredicate as RGBPredicate, Assertions$9_authorNamePredicate as authorNamePredicate, Assertions$9_colorPredicate as colorPredicate, descriptionPredicate$1 as descriptionPredicate, Assertions$9_embedAuthorPredicate as embedAuthorPredicate, Assertions$9_embedFieldPredicate as embedFieldPredicate, Assertions$9_embedFieldsArrayPredicate as embedFieldsArrayPredicate, Assertions$9_embedFooterPredicate as embedFooterPredicate, Assertions$9_fieldInlinePredicate as fieldInlinePredicate, Assertions$9_fieldLengthPredicate as fieldLengthPredicate, Assertions$9_fieldNamePredicate as fieldNamePredicate, Assertions$9_fieldValuePredicate as fieldValuePredicate, Assertions$9_footerTextPredicate as footerTextPredicate, Assertions$9_imageURLPredicate as imageURLPredicate, Assertions$9_timestampPredicate as timestampPredicate, Assertions$9_titlePredicate as titlePredicate, Assertions$9_urlPredicate as urlPredicate, Assertions$9_validateFieldLength as validateFieldLength }; } /** @@ -181,7 +181,7 @@ declare class EmbedBuilder { * * @remarks * This method behaves similarly - * to {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice | Array.prototype.splice()}. + * to {@link https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/splice | Array.prototype.splice()}. * The maximum amount of fields that can be added is 25. * * It's useful for modifying and adjusting order of the already-existing fields of an embed. @@ -362,6 +362,9 @@ declare const buttonStyleValidator: _sapphire_shapeshift.NativeEnumValidator; declare const minMaxValidator: _sapphire_shapeshift.NumberValidator; declare const labelValueDescriptionValidator: _sapphire_shapeshift.StringValidator; +/** + * @deprecated Replaced with selectMenuStringOptionPredicate. + */ declare const jsonOptionValidator: _sapphire_shapeshift.ObjectValidator<{ label: string; value: string; @@ -393,32 +396,32 @@ declare const channelTypesValidator: _sapphire_shapeshift.ArrayValidator; declare function validateRequiredButtonParameters(style?: ButtonStyle, label?: string, emoji?: APIMessageComponentEmoji, customId?: string, skuId?: string, url?: string): void; -declare const Assertions$5_buttonLabelValidator: typeof buttonLabelValidator; -declare const Assertions$5_buttonStyleValidator: typeof buttonStyleValidator; -declare const Assertions$5_channelTypesValidator: typeof channelTypesValidator; -declare const Assertions$5_customIdValidator: typeof customIdValidator; -declare const Assertions$5_defaultValidator: typeof defaultValidator; -declare const Assertions$5_disabledValidator: typeof disabledValidator; -declare const Assertions$5_emojiValidator: typeof emojiValidator; -declare const Assertions$5_idValidator: typeof idValidator; -declare const Assertions$5_jsonOptionValidator: typeof jsonOptionValidator; -declare const Assertions$5_labelValueDescriptionValidator: typeof labelValueDescriptionValidator; -declare const Assertions$5_minMaxValidator: typeof minMaxValidator; -declare const Assertions$5_optionValidator: typeof optionValidator; -declare const Assertions$5_optionsLengthValidator: typeof optionsLengthValidator; -declare const Assertions$5_optionsValidator: typeof optionsValidator; -declare const Assertions$5_urlValidator: typeof urlValidator; -declare const Assertions$5_validateRequiredButtonParameters: typeof validateRequiredButtonParameters; -declare const Assertions$5_validateRequiredSelectMenuOptionParameters: typeof validateRequiredSelectMenuOptionParameters; -declare const Assertions$5_validateRequiredSelectMenuParameters: typeof validateRequiredSelectMenuParameters; -declare namespace Assertions$5 { - export { Assertions$5_buttonLabelValidator as buttonLabelValidator, Assertions$5_buttonStyleValidator as buttonStyleValidator, Assertions$5_channelTypesValidator as channelTypesValidator, Assertions$5_customIdValidator as customIdValidator, Assertions$5_defaultValidator as defaultValidator, Assertions$5_disabledValidator as disabledValidator, Assertions$5_emojiValidator as emojiValidator, Assertions$5_idValidator as idValidator, Assertions$5_jsonOptionValidator as jsonOptionValidator, Assertions$5_labelValueDescriptionValidator as labelValueDescriptionValidator, Assertions$5_minMaxValidator as minMaxValidator, Assertions$5_optionValidator as optionValidator, Assertions$5_optionsLengthValidator as optionsLengthValidator, Assertions$5_optionsValidator as optionsValidator, placeholderValidator$1 as placeholderValidator, Assertions$5_urlValidator as urlValidator, Assertions$5_validateRequiredButtonParameters as validateRequiredButtonParameters, Assertions$5_validateRequiredSelectMenuOptionParameters as validateRequiredSelectMenuOptionParameters, Assertions$5_validateRequiredSelectMenuParameters as validateRequiredSelectMenuParameters }; +declare const Assertions$8_buttonLabelValidator: typeof buttonLabelValidator; +declare const Assertions$8_buttonStyleValidator: typeof buttonStyleValidator; +declare const Assertions$8_channelTypesValidator: typeof channelTypesValidator; +declare const Assertions$8_customIdValidator: typeof customIdValidator; +declare const Assertions$8_defaultValidator: typeof defaultValidator; +declare const Assertions$8_disabledValidator: typeof disabledValidator; +declare const Assertions$8_emojiValidator: typeof emojiValidator; +declare const Assertions$8_idValidator: typeof idValidator; +declare const Assertions$8_jsonOptionValidator: typeof jsonOptionValidator; +declare const Assertions$8_labelValueDescriptionValidator: typeof labelValueDescriptionValidator; +declare const Assertions$8_minMaxValidator: typeof minMaxValidator; +declare const Assertions$8_optionValidator: typeof optionValidator; +declare const Assertions$8_optionsLengthValidator: typeof optionsLengthValidator; +declare const Assertions$8_optionsValidator: typeof optionsValidator; +declare const Assertions$8_urlValidator: typeof urlValidator; +declare const Assertions$8_validateRequiredButtonParameters: typeof validateRequiredButtonParameters; +declare const Assertions$8_validateRequiredSelectMenuOptionParameters: typeof validateRequiredSelectMenuOptionParameters; +declare const Assertions$8_validateRequiredSelectMenuParameters: typeof validateRequiredSelectMenuParameters; +declare namespace Assertions$8 { + export { Assertions$8_buttonLabelValidator as buttonLabelValidator, Assertions$8_buttonStyleValidator as buttonStyleValidator, Assertions$8_channelTypesValidator as channelTypesValidator, Assertions$8_customIdValidator as customIdValidator, Assertions$8_defaultValidator as defaultValidator, Assertions$8_disabledValidator as disabledValidator, Assertions$8_emojiValidator as emojiValidator, Assertions$8_idValidator as idValidator, Assertions$8_jsonOptionValidator as jsonOptionValidator, Assertions$8_labelValueDescriptionValidator as labelValueDescriptionValidator, Assertions$8_minMaxValidator as minMaxValidator, Assertions$8_optionValidator as optionValidator, Assertions$8_optionsLengthValidator as optionsLengthValidator, Assertions$8_optionsValidator as optionsValidator, placeholderValidator$1 as placeholderValidator, Assertions$8_urlValidator as urlValidator, Assertions$8_validateRequiredButtonParameters as validateRequiredButtonParameters, Assertions$8_validateRequiredSelectMenuOptionParameters as validateRequiredSelectMenuOptionParameters, Assertions$8_validateRequiredSelectMenuParameters as validateRequiredSelectMenuParameters }; } /** * Any action row component data represented as an object. */ -type AnyAPIActionRowComponent = APIActionRowComponent | APIComponentInActionRow | APIMessageComponent; +type AnyAPIActionRowComponent = APIActionRowComponent | APIComponentInActionRow | APIMessageComponent | APIModalComponent; /** * The base component builder that contains common symbols for all sorts of components. * @@ -561,9 +564,9 @@ declare abstract class BaseSelectMenuBuilder i * ```ts * const textInput = new TextInputBuilder({ * custom_id: 'a cool text input', - * label: 'Type something', + * placeholder: 'Type something', * style: TextInputStyle.Short, * }); * ``` @@ -884,7 +894,7 @@ declare class TextInputBuilder extends ComponentBuilder i * Creating a text input using setters and API data: * ```ts * const textInput = new TextInputBuilder({ - * label: 'Type something else', + * placeholder: 'Type something else', * }) * .setCustomId('woah') * .setStyle(TextInputStyle.Paragraph); @@ -903,6 +913,7 @@ declare class TextInputBuilder extends ComponentBuilder i * Sets the label for this text input. * * @param label - The label to use + * @deprecated Use a label builder to create a label (and optionally a description) instead. */ setLabel(label: string): this; /** @@ -1030,6 +1041,169 @@ declare class ActionRowBuilder extend toJSON(): APIActionRowComponent>; } +/** + * A builder that creates API-compatible JSON data for file uploads. + */ +declare class FileUploadBuilder extends ComponentBuilder { + /** + * Creates a new file upload. + * + * @param data - The API data to create this file upload with + * @example + * Creating a file upload from an API data object: + * ```ts + * const fileUpload = new FileUploadBuilder({ + * custom_id: "file_upload", + * min_values: 2, + * max_values: 5, + * }); + * ``` + * @example + * Creating a file upload using setters and API data: + * ```ts + * const fileUpload = new FileUploadBuilder({ + * custom_id: "file_upload", + * min_values: 2, + * max_values: 5, + * }).setRequired(); + * ``` + */ + constructor(data?: Partial); + /** + * Sets the custom id for this file upload. + * + * @param customId - The custom id to use + */ + setCustomId(customId: string): this; + /** + * Sets the minimum number of file uploads required. + * + * @param minValues - The minimum values that must be uploaded + */ + setMinValues(minValues: number): this; + /** + * Clears the minimum values. + */ + clearMinValues(): this; + /** + * Sets the maximum number of file uploads required. + * + * @param maxValues - The maximum values that can be uploaded + */ + setMaxValues(maxValues: number): this; + /** + * Clears the maximum values. + */ + clearMaxValues(): this; + /** + * Sets whether this file upload is required. + * + * @param required - Whether this file upload is required + */ + setRequired(required?: boolean): this; + /** + * {@inheritDoc ComponentBuilder.toJSON} + */ + toJSON(): APIFileUploadComponent; +} + +interface LabelBuilderData extends Partial> { + component?: ChannelSelectMenuBuilder | FileUploadBuilder | MentionableSelectMenuBuilder | RoleSelectMenuBuilder | StringSelectMenuBuilder | TextInputBuilder | UserSelectMenuBuilder; +} +/** + * A builder that creates API-compatible JSON data for labels. + */ +declare class LabelBuilder extends ComponentBuilder { + /** + * @internal + */ + readonly data: LabelBuilderData; + /** + * Creates a new label. + * + * @param data - The API data to create this label with + * @example + * Creating a label from an API data object: + * ```ts + * const label = new LabelBuilder({ + * label: "label", + * component, + * }); + * ``` + * @example + * Creating a label using setters and API data: + * ```ts + * const label = new LabelBuilder({ + * label: 'label', + * component, + * }).setLabel('new text'); + * ``` + */ + constructor(data?: Partial); + /** + * Sets the label for this label. + * + * @param label - The label to use + */ + setLabel(label: string): this; + /** + * Sets the description for this label. + * + * @param description - The description to use + */ + setDescription(description: string): this; + /** + * Clears the description for this label. + */ + clearDescription(): this; + /** + * Sets a string select menu component to this label. + * + * @param input - A function that returns a component builder or an already built builder + */ + setStringSelectMenuComponent(input: APIStringSelectComponent | StringSelectMenuBuilder | ((builder: StringSelectMenuBuilder) => StringSelectMenuBuilder)): this; + /** + * Sets a user select menu component to this label. + * + * @param input - A function that returns a component builder or an already built builder + */ + setUserSelectMenuComponent(input: APIUserSelectComponent | UserSelectMenuBuilder | ((builder: UserSelectMenuBuilder) => UserSelectMenuBuilder)): this; + /** + * Sets a role select menu component to this label. + * + * @param input - A function that returns a component builder or an already built builder + */ + setRoleSelectMenuComponent(input: APIRoleSelectComponent | RoleSelectMenuBuilder | ((builder: RoleSelectMenuBuilder) => RoleSelectMenuBuilder)): this; + /** + * Sets a mentionable select menu component to this label. + * + * @param input - A function that returns a component builder or an already built builder + */ + setMentionableSelectMenuComponent(input: APIMentionableSelectComponent | MentionableSelectMenuBuilder | ((builder: MentionableSelectMenuBuilder) => MentionableSelectMenuBuilder)): this; + /** + * Sets a channel select menu component to this label. + * + * @param input - A function that returns a component builder or an already built builder + */ + setChannelSelectMenuComponent(input: APIChannelSelectComponent | ChannelSelectMenuBuilder | ((builder: ChannelSelectMenuBuilder) => ChannelSelectMenuBuilder)): this; + /** + * Sets a text input component to this label. + * + * @param input - A function that returns a component builder or an already built builder + */ + setTextInputComponent(input: APITextInputComponent | TextInputBuilder | ((builder: TextInputBuilder) => TextInputBuilder)): this; + /** + * Sets a file upload component to this label. + * + * @param input - A function that returns a component builder or an already built builder + */ + setFileUploadComponent(input: APIFileUploadComponent | FileUploadBuilder | ((builder: FileUploadBuilder) => FileUploadBuilder)): this; + /** + * {@inheritDoc ComponentBuilder.toJSON} + */ + toJSON(): APILabelComponent; +} + declare class FileBuilder extends ComponentBuilder { /** * Creates a new file from API data. @@ -1193,7 +1367,8 @@ declare class ContainerBuilder extends ComponentBuilder { * }, * ], * }) - * .addComponents(separator, section); + * .addSeparatorComponents(separator) + * .addSectionComponents(section); * ``` */ constructor({ components, ...data }?: Partial); @@ -1592,6 +1767,14 @@ interface MappedComponentTypes { * The media gallery component type is associated with a {@link MediaGalleryBuilder}. */ [ComponentType.MediaGallery]: MediaGalleryBuilder; + /** + * The label component type is associated with a {@link LabelBuilder}. + */ + [ComponentType.Label]: LabelBuilder; + /** + * The file upload component type is associated with a {@link FileUploadBuilder}. + */ + [ComponentType.FileUpload]: FileUploadBuilder; } /** * Factory for creating components from API data. @@ -1618,17 +1801,39 @@ declare const requiredValidator: _sapphire_shapeshift.BooleanValidator; declare const valueValidator: _sapphire_shapeshift.StringValidator; declare const placeholderValidator: _sapphire_shapeshift.StringValidator; declare const labelValidator: _sapphire_shapeshift.StringValidator; -declare function validateRequiredParameters$3(customId?: string, style?: TextInputStyle, label?: string): void; +declare const textInputPredicate: _sapphire_shapeshift.ObjectValidator<{ + type: ComponentType; + custom_id: string; + style: TextInputStyle; + id: number | undefined; + min_length: number | undefined; + max_length: number | undefined; + placeholder: string | undefined; + value: string | undefined; + required: boolean | undefined; +}, _sapphire_shapeshift.UndefinedToOptional<{ + type: ComponentType; + custom_id: string; + style: TextInputStyle; + id: number | undefined; + min_length: number | undefined; + max_length: number | undefined; + placeholder: string | undefined; + value: string | undefined; + required: boolean | undefined; +}>>; +declare function validateRequiredParameters$3(customId?: string, style?: TextInputStyle): void; -declare const Assertions$4_labelValidator: typeof labelValidator; -declare const Assertions$4_maxLengthValidator: typeof maxLengthValidator; -declare const Assertions$4_minLengthValidator: typeof minLengthValidator; -declare const Assertions$4_placeholderValidator: typeof placeholderValidator; -declare const Assertions$4_requiredValidator: typeof requiredValidator; -declare const Assertions$4_textInputStyleValidator: typeof textInputStyleValidator; -declare const Assertions$4_valueValidator: typeof valueValidator; -declare namespace Assertions$4 { - export { Assertions$4_labelValidator as labelValidator, Assertions$4_maxLengthValidator as maxLengthValidator, Assertions$4_minLengthValidator as minLengthValidator, Assertions$4_placeholderValidator as placeholderValidator, Assertions$4_requiredValidator as requiredValidator, Assertions$4_textInputStyleValidator as textInputStyleValidator, validateRequiredParameters$3 as validateRequiredParameters, Assertions$4_valueValidator as valueValidator }; +declare const Assertions$7_labelValidator: typeof labelValidator; +declare const Assertions$7_maxLengthValidator: typeof maxLengthValidator; +declare const Assertions$7_minLengthValidator: typeof minLengthValidator; +declare const Assertions$7_placeholderValidator: typeof placeholderValidator; +declare const Assertions$7_requiredValidator: typeof requiredValidator; +declare const Assertions$7_textInputPredicate: typeof textInputPredicate; +declare const Assertions$7_textInputStyleValidator: typeof textInputStyleValidator; +declare const Assertions$7_valueValidator: typeof valueValidator; +declare namespace Assertions$7 { + export { Assertions$7_labelValidator as labelValidator, Assertions$7_maxLengthValidator as maxLengthValidator, Assertions$7_minLengthValidator as minLengthValidator, Assertions$7_placeholderValidator as placeholderValidator, Assertions$7_requiredValidator as requiredValidator, Assertions$7_textInputPredicate as textInputPredicate, Assertions$7_textInputStyleValidator as textInputStyleValidator, validateRequiredParameters$3 as validateRequiredParameters, Assertions$7_valueValidator as valueValidator }; } /** @@ -1642,7 +1847,7 @@ declare class ModalBuilder implements JSONEncodable[]; + readonly components: (ActionRowBuilder | LabelBuilder | TextDisplayBuilder)[]; /** * Creates a new modal from API data. * @@ -1665,14 +1870,71 @@ declare class ModalBuilder implements JSONEncodable | APIActionRowComponent>): this; + addComponents(...components: RestOrArray | APIActionRowComponent | APILabelComponent | APITextDisplayComponent | APITextInputComponent | LabelBuilder | TextDisplayBuilder | TextInputBuilder>): this; + /** + * Adds label components to this modal. + * + * @param components - The components to add + */ + addLabelComponents(...components: RestOrArray LabelBuilder)>): this; + /** + * Adds text display components to this modal. + * + * @param components - The components to add + */ + addTextDisplayComponents(...components: RestOrArray TextDisplayBuilder)>): this; + /** + * Adds action rows to this modal. + * + * @param components - The components to add + * @deprecated Use {@link ModalBuilder.addLabelComponents} instead + */ + addActionRowComponents(...components: RestOrArray | APIActionRowComponent | ((builder: ActionRowBuilder) => ActionRowBuilder)>): this; + /** + * Sets the labels for this modal. + * + * @param components - The components to set + */ + setLabelComponents(...components: RestOrArray LabelBuilder)>): this; + /** + * Removes, replaces, or inserts labels for this modal. + * + * @remarks + * This method behaves similarly + * to {@link https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/splice | Array.prototype.splice()}. + * The maximum amount of labels that can be added is 5. + * + * It's useful for modifying and adjusting order of the already-existing labels of a modal. + * @example + * Remove the first label: + * ```ts + * modal.spliceLabelComponents(0, 1); + * ``` + * @example + * Remove the first n labels: + * ```ts + * const n = 4; + * modal.spliceLabelComponents(0, n); + * ``` + * @example + * Remove the last label: + * ```ts + * modal.spliceLabelComponents(-1, 1); + * ``` + * @param index - The index to start at + * @param deleteCount - The number of labels to remove + * @param labels - The replacing label objects + */ + spliceLabelComponents(index: number, deleteCount: number, ...labels: (APILabelComponent | LabelBuilder | ((builder: LabelBuilder) => LabelBuilder))[]): this; /** * Sets components for this modal. * * @param components - The components to set + * @deprecated Use {@link ModalBuilder.setLabelComponents} instead */ - setComponents(...components: RestOrArray>): this; + setComponents(...components: RestOrArray | LabelBuilder | TextDisplayBuilder>): this; /** * {@inheritDoc ComponentBuilder.toJSON} */ @@ -1680,13 +1942,11966 @@ declare class ModalBuilder implements JSONEncodable; -declare const componentsValidator: _sapphire_shapeshift.ArrayValidator<[ActionRowBuilder, ...ActionRowBuilder[]], ActionRowBuilder>; -declare function validateRequiredParameters$2(customId?: string, title?: string, components?: ActionRowBuilder[]): void; +declare const componentsValidator: _sapphire_shapeshift.ArrayValidator<[LabelBuilder | ActionRowBuilder | TextDisplayBuilder, ...(LabelBuilder | ActionRowBuilder | TextDisplayBuilder)[]], LabelBuilder | ActionRowBuilder | TextDisplayBuilder>; +declare function validateRequiredParameters$2(customId?: string, title?: string, components?: (ActionRowBuilder | LabelBuilder | TextDisplayBuilder)[]): void; -declare const Assertions$3_componentsValidator: typeof componentsValidator; -declare const Assertions$3_titleValidator: typeof titleValidator; +declare const Assertions$6_componentsValidator: typeof componentsValidator; +declare const Assertions$6_titleValidator: typeof titleValidator; +declare namespace Assertions$6 { + export { Assertions$6_componentsValidator as componentsValidator, Assertions$6_titleValidator as titleValidator, validateRequiredParameters$2 as validateRequiredParameters }; +} + +declare const selectMenuChannelPredicate: _sapphire_shapeshift.ObjectValidator<{ + id: number | undefined; + placeholder: string | undefined; + min_values: number | undefined; + max_values: number | undefined; + custom_id: string; + disabled: boolean | undefined; +} & { + type: ComponentType; + channel_types: ChannelType[] | undefined; + default_values: [] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | undefined; +}, _sapphire_shapeshift.UndefinedToOptional<{ + id: number | undefined; + placeholder: string | undefined; + min_values: number | undefined; + max_values: number | undefined; + custom_id: string; + disabled: boolean | undefined; +} & { + type: ComponentType; + channel_types: ChannelType[] | undefined; + default_values: [] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | undefined; +}>>; +declare const selectMenuMentionablePredicate: _sapphire_shapeshift.ObjectValidator<{ + id: number | undefined; + placeholder: string | undefined; + min_values: number | undefined; + max_values: number | undefined; + custom_id: string; + disabled: boolean | undefined; +} & { + type: ComponentType; + default_values: [] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | undefined; +}, _sapphire_shapeshift.UndefinedToOptional<{ + id: number | undefined; + placeholder: string | undefined; + min_values: number | undefined; + max_values: number | undefined; + custom_id: string; + disabled: boolean | undefined; +} & { + type: ComponentType; + default_values: [] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | undefined; +}>>; +declare const selectMenuRolePredicate: _sapphire_shapeshift.ObjectValidator<{ + id: number | undefined; + placeholder: string | undefined; + min_values: number | undefined; + max_values: number | undefined; + custom_id: string; + disabled: boolean | undefined; +} & { + type: ComponentType; + default_values: [] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | undefined; +}, _sapphire_shapeshift.UndefinedToOptional<{ + id: number | undefined; + placeholder: string | undefined; + min_values: number | undefined; + max_values: number | undefined; + custom_id: string; + disabled: boolean | undefined; +} & { + type: ComponentType; + default_values: [] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | undefined; +}>>; +declare const selectMenuUserPredicate: _sapphire_shapeshift.ObjectValidator<{ + id: number | undefined; + placeholder: string | undefined; + min_values: number | undefined; + max_values: number | undefined; + custom_id: string; + disabled: boolean | undefined; +} & { + type: ComponentType; + default_values: [] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | undefined; +}, _sapphire_shapeshift.UndefinedToOptional<{ + id: number | undefined; + placeholder: string | undefined; + min_values: number | undefined; + max_values: number | undefined; + custom_id: string; + disabled: boolean | undefined; +} & { + type: ComponentType; + default_values: [] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + type: any; + }>] | undefined; +}>>; +declare const selectMenuStringOptionPredicate: _sapphire_shapeshift.ObjectValidator<{ + label: string; + value: string; + description: string | undefined; + emoji: _sapphire_shapeshift.UndefinedToOptional<{ + name?: string | undefined; + id?: string | undefined; + animated?: boolean | undefined; + }> | undefined; + default: boolean | undefined; +}, _sapphire_shapeshift.UndefinedToOptional<{ + label: string; + value: string; + description: string | undefined; + emoji: _sapphire_shapeshift.UndefinedToOptional<{ + name?: string | undefined; + id?: string | undefined; + animated?: boolean | undefined; + }> | undefined; + default: boolean | undefined; +}>>; +declare const selectMenuStringPredicate: _sapphire_shapeshift.ObjectValidator<{ + id: number | undefined; + placeholder: string | undefined; + min_values: number | undefined; + max_values: number | undefined; + custom_id: string; + disabled: boolean | undefined; +} & { + type: ComponentType; + options: [] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>]; +}, _sapphire_shapeshift.UndefinedToOptional<{ + id: number | undefined; + placeholder: string | undefined; + min_values: number | undefined; + max_values: number | undefined; + custom_id: string; + disabled: boolean | undefined; +} & { + type: ComponentType; + options: [] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>] | [_sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>, _sapphire_shapeshift.UndefinedToOptional<{ + label: any; + value: any; + description: any; + emoji: any; + default: any; + }>]; +}>>; + +declare const Assertions$5_selectMenuChannelPredicate: typeof selectMenuChannelPredicate; +declare const Assertions$5_selectMenuMentionablePredicate: typeof selectMenuMentionablePredicate; +declare const Assertions$5_selectMenuRolePredicate: typeof selectMenuRolePredicate; +declare const Assertions$5_selectMenuStringOptionPredicate: typeof selectMenuStringOptionPredicate; +declare const Assertions$5_selectMenuStringPredicate: typeof selectMenuStringPredicate; +declare const Assertions$5_selectMenuUserPredicate: typeof selectMenuUserPredicate; +declare namespace Assertions$5 { + export { Assertions$5_selectMenuChannelPredicate as selectMenuChannelPredicate, Assertions$5_selectMenuMentionablePredicate as selectMenuMentionablePredicate, Assertions$5_selectMenuRolePredicate as selectMenuRolePredicate, Assertions$5_selectMenuStringOptionPredicate as selectMenuStringOptionPredicate, Assertions$5_selectMenuStringPredicate as selectMenuStringPredicate, Assertions$5_selectMenuUserPredicate as selectMenuUserPredicate }; +} + +declare const fileUploadPredicate: _sapphire_shapeshift.ObjectValidator<{ + type: ComponentType; + id: number | undefined; + custom_id: string; + min_values: number | undefined; + max_values: number | undefined; + required: boolean | undefined; +}, _sapphire_shapeshift.UndefinedToOptional<{ + type: ComponentType; + id: number | undefined; + custom_id: string; + min_values: number | undefined; + max_values: number | undefined; + required: boolean | undefined; +}>>; + +declare const Assertions$4_fileUploadPredicate: typeof fileUploadPredicate; +declare namespace Assertions$4 { + export { Assertions$4_fileUploadPredicate as fileUploadPredicate }; +} + +declare const labelPredicate: _sapphire_shapeshift.ObjectValidator<{ + id: number | undefined; + type: ComponentType; + label: string; + description: string | undefined; + component: _sapphire_shapeshift.UndefinedToOptional<{ + type: any; + id: any; + custom_id: any; + min_values: any; + max_values: any; + required: any; + }> | _sapphire_shapeshift.UndefinedToOptional<{ + type: any; + custom_id: any; + style: any; + id: any; + min_length: any; + max_length: any; + placeholder: any; + value: any; + required: any; + }> | _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + placeholder: any; + min_values: any; + max_values: any; + custom_id: any; + disabled: any; + } & { + type: any; + default_values: any; + }> | _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + placeholder: any; + min_values: any; + max_values: any; + custom_id: any; + disabled: any; + } & { + type: any; + options: any; + }>; +}, _sapphire_shapeshift.UndefinedToOptional<{ + id: number | undefined; + type: ComponentType; + label: string; + description: string | undefined; + component: _sapphire_shapeshift.UndefinedToOptional<{ + type: any; + id: any; + custom_id: any; + min_values: any; + max_values: any; + required: any; + }> | _sapphire_shapeshift.UndefinedToOptional<{ + type: any; + custom_id: any; + style: any; + id: any; + min_length: any; + max_length: any; + placeholder: any; + value: any; + required: any; + }> | _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + placeholder: any; + min_values: any; + max_values: any; + custom_id: any; + disabled: any; + } & { + type: any; + default_values: any; + }> | _sapphire_shapeshift.UndefinedToOptional<{ + id: any; + placeholder: any; + min_values: any; + max_values: any; + custom_id: any; + disabled: any; + } & { + type: any; + options: any; + }>; +}>>; + +declare const Assertions$3_labelPredicate: typeof labelPredicate; declare namespace Assertions$3 { - export { Assertions$3_componentsValidator as componentsValidator, Assertions$3_titleValidator as titleValidator, validateRequiredParameters$2 as validateRequiredParameters }; + export { Assertions$3_labelPredicate as labelPredicate }; } declare const unfurledMediaItemPredicate: _sapphire_shapeshift.ObjectValidator<{ @@ -2608,4 +14823,4 @@ declare function isValidationEnabled(): boolean; */ declare const version: string; -export { ActionRowBuilder, type AnyAPIActionRowComponent, type AnyComponentBuilder, ApplicationCommandNumericOptionMinMaxValueMixin, type ApplicationCommandOptionAllowedChannelTypes, ApplicationCommandOptionBase, ApplicationCommandOptionChannelTypesMixin, ApplicationCommandOptionWithAutocompleteMixin, ApplicationCommandOptionWithChoicesMixin, BaseSelectMenuBuilder, ButtonBuilder, ChannelSelectMenuBuilder, Assertions$5 as ComponentAssertions, ComponentBuilder, Assertions$2 as ComponentsV2Assertions, ContainerBuilder, type ContainerComponentBuilder, Assertions as ContextMenuCommandAssertions, ContextMenuCommandBuilder, type ContextMenuCommandType, Assertions$6 as EmbedAssertions, type EmbedAuthorData, type EmbedAuthorOptions, EmbedBuilder, type EmbedFooterData, type EmbedFooterOptions, type EmbedImageData, FileBuilder, type IconData, type MappedComponentTypes, MediaGalleryBuilder, MediaGalleryItemBuilder, MentionableSelectMenuBuilder, type MessageActionRowComponentBuilder, type MessageComponentBuilder, type ModalActionRowComponentBuilder, Assertions$3 as ModalAssertions, ModalBuilder, type ModalComponentBuilder, type RGBTuple, type RestOrArray, RoleSelectMenuBuilder, SectionBuilder, StringSelectMenuBuilder as SelectMenuBuilder, StringSelectMenuOptionBuilder as SelectMenuOptionBuilder, SeparatorBuilder, SharedNameAndDescription, SharedSlashCommand, SharedSlashCommandOptions, SharedSlashCommandSubcommands, Assertions$1 as SlashCommandAssertions, SlashCommandAttachmentOption, SlashCommandBooleanOption, SlashCommandBuilder, SlashCommandChannelOption, SlashCommandIntegerOption, SlashCommandMentionableOption, SlashCommandNumberOption, type SlashCommandOptionsOnlyBuilder, SlashCommandRoleOption, SlashCommandStringOption, SlashCommandSubcommandBuilder, SlashCommandSubcommandGroupBuilder, type SlashCommandSubcommandsOnlyBuilder, SlashCommandUserOption, StringSelectMenuBuilder, StringSelectMenuOptionBuilder, TextDisplayBuilder, Assertions$4 as TextInputAssertions, TextInputBuilder, ThumbnailBuilder, type ToAPIApplicationCommandOptions, UserSelectMenuBuilder, createComponentBuilder, disableValidators, embedLength, enableValidators, isValidationEnabled, normalizeArray, resolveBuilder, version }; +export { ActionRowBuilder, type AnyAPIActionRowComponent, type AnyComponentBuilder, ApplicationCommandNumericOptionMinMaxValueMixin, type ApplicationCommandOptionAllowedChannelTypes, ApplicationCommandOptionBase, ApplicationCommandOptionChannelTypesMixin, ApplicationCommandOptionWithAutocompleteMixin, ApplicationCommandOptionWithChoicesMixin, BaseSelectMenuBuilder, ButtonBuilder, ChannelSelectMenuBuilder, Assertions$8 as ComponentAssertions, ComponentBuilder, Assertions$2 as ComponentsV2Assertions, ContainerBuilder, type ContainerComponentBuilder, Assertions as ContextMenuCommandAssertions, ContextMenuCommandBuilder, type ContextMenuCommandType, Assertions$9 as EmbedAssertions, type EmbedAuthorData, type EmbedAuthorOptions, EmbedBuilder, type EmbedFooterData, type EmbedFooterOptions, type EmbedImageData, FileBuilder, Assertions$4 as FileUploadAssertions, FileUploadBuilder, type IconData, Assertions$3 as LabelAssertions, LabelBuilder, type LabelBuilderData, type MappedComponentTypes, MediaGalleryBuilder, MediaGalleryItemBuilder, MentionableSelectMenuBuilder, type MessageActionRowComponentBuilder, type MessageComponentBuilder, type ModalActionRowComponentBuilder, Assertions$6 as ModalAssertions, ModalBuilder, type ModalComponentBuilder, type RGBTuple, type RestOrArray, RoleSelectMenuBuilder, SectionBuilder, Assertions$5 as SelectMenuAssertions, StringSelectMenuBuilder as SelectMenuBuilder, StringSelectMenuOptionBuilder as SelectMenuOptionBuilder, SeparatorBuilder, SharedNameAndDescription, SharedSlashCommand, SharedSlashCommandOptions, SharedSlashCommandSubcommands, Assertions$1 as SlashCommandAssertions, SlashCommandAttachmentOption, SlashCommandBooleanOption, SlashCommandBuilder, SlashCommandChannelOption, SlashCommandIntegerOption, SlashCommandMentionableOption, SlashCommandNumberOption, type SlashCommandOptionsOnlyBuilder, SlashCommandRoleOption, SlashCommandStringOption, SlashCommandSubcommandBuilder, SlashCommandSubcommandGroupBuilder, type SlashCommandSubcommandsOnlyBuilder, SlashCommandUserOption, StringSelectMenuBuilder, StringSelectMenuOptionBuilder, TextDisplayBuilder, Assertions$7 as TextInputAssertions, TextInputBuilder, ThumbnailBuilder, type ToAPIApplicationCommandOptions, UserSelectMenuBuilder, createComponentBuilder, disableValidators, embedLength, enableValidators, isValidationEnabled, normalizeArray, resolveBuilder, version }; diff --git a/node_modules/@discordjs/builders/dist/index.js b/node_modules/@discordjs/builders/dist/index.js index 7c929c3..4d6d43e 100644 --- a/node_modules/@discordjs/builders/dist/index.js +++ b/node_modules/@discordjs/builders/dist/index.js @@ -38,8 +38,8 @@ var __decorateClass = (decorators, target, key, kind) => { }; // src/index.ts -var src_exports = {}; -__export(src_exports, { +var index_exports = {}; +__export(index_exports, { ActionRowBuilder: () => ActionRowBuilder, ApplicationCommandNumericOptionMinMaxValueMixin: () => ApplicationCommandNumericOptionMinMaxValueMixin, ApplicationCommandOptionBase: () => ApplicationCommandOptionBase, @@ -51,20 +51,25 @@ __export(src_exports, { ChannelSelectMenuBuilder: () => ChannelSelectMenuBuilder, ComponentAssertions: () => Assertions_exports2, ComponentBuilder: () => ComponentBuilder, - ComponentsV2Assertions: () => Assertions_exports4, + ComponentsV2Assertions: () => Assertions_exports7, ContainerBuilder: () => ContainerBuilder, - ContextMenuCommandAssertions: () => Assertions_exports7, + ContextMenuCommandAssertions: () => Assertions_exports10, ContextMenuCommandBuilder: () => ContextMenuCommandBuilder, EmbedAssertions: () => Assertions_exports, EmbedBuilder: () => EmbedBuilder, FileBuilder: () => FileBuilder, + FileUploadAssertions: () => Assertions_exports3, + FileUploadBuilder: () => FileUploadBuilder, + LabelAssertions: () => Assertions_exports6, + LabelBuilder: () => LabelBuilder, MediaGalleryBuilder: () => MediaGalleryBuilder, MediaGalleryItemBuilder: () => MediaGalleryItemBuilder, MentionableSelectMenuBuilder: () => MentionableSelectMenuBuilder, - ModalAssertions: () => Assertions_exports5, + ModalAssertions: () => Assertions_exports8, ModalBuilder: () => ModalBuilder, RoleSelectMenuBuilder: () => RoleSelectMenuBuilder, SectionBuilder: () => SectionBuilder, + SelectMenuAssertions: () => Assertions_exports5, SelectMenuBuilder: () => StringSelectMenuBuilder, SelectMenuOptionBuilder: () => StringSelectMenuOptionBuilder, SeparatorBuilder: () => SeparatorBuilder, @@ -72,7 +77,7 @@ __export(src_exports, { SharedSlashCommand: () => SharedSlashCommand, SharedSlashCommandOptions: () => SharedSlashCommandOptions, SharedSlashCommandSubcommands: () => SharedSlashCommandSubcommands, - SlashCommandAssertions: () => Assertions_exports6, + SlashCommandAssertions: () => Assertions_exports9, SlashCommandAttachmentOption: () => SlashCommandAttachmentOption, SlashCommandBooleanOption: () => SlashCommandBooleanOption, SlashCommandBuilder: () => SlashCommandBuilder, @@ -88,7 +93,7 @@ __export(src_exports, { StringSelectMenuBuilder: () => StringSelectMenuBuilder, StringSelectMenuOptionBuilder: () => StringSelectMenuOptionBuilder, TextDisplayBuilder: () => TextDisplayBuilder, - TextInputAssertions: () => Assertions_exports3, + TextInputAssertions: () => Assertions_exports4, TextInputBuilder: () => TextInputBuilder, ThumbnailBuilder: () => ThumbnailBuilder, UserSelectMenuBuilder: () => UserSelectMenuBuilder, @@ -101,7 +106,7 @@ __export(src_exports, { resolveBuilder: () => resolveBuilder, version: () => version }); -module.exports = __toCommonJS(src_exports); +module.exports = __toCommonJS(index_exports); // src/messages/embed/Assertions.ts var Assertions_exports = {}; @@ -242,7 +247,7 @@ var EmbedBuilder = class { * * @remarks * This method behaves similarly - * to {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice | Array.prototype.splice()}. + * to {@link https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/splice | Array.prototype.splice()}. * The maximum amount of fields that can be added is 25. * * It's useful for modifying and adjusting order of the already-existing fields of an embed. @@ -403,7 +408,7 @@ var EmbedBuilder = class { }; // src/index.ts -__reExport(src_exports, require("@discordjs/formatters"), module.exports); +__reExport(index_exports, require("@discordjs/formatters"), module.exports); // src/components/Assertions.ts var Assertions_exports2 = {}; @@ -586,7 +591,7 @@ function validateRequiredButtonParameters(style, label, emoji, customId, skuId, __name(validateRequiredButtonParameters, "validateRequiredButtonParameters"); // src/components/ActionRow.ts -var import_v1019 = require("discord-api-types/v10"); +var import_v1024 = require("discord-api-types/v10"); // src/components/Component.ts var ComponentBuilder = class { @@ -624,7 +629,7 @@ var ComponentBuilder = class { }; // src/components/Components.ts -var import_v1018 = require("discord-api-types/v10"); +var import_v1023 = require("discord-api-types/v10"); // src/components/button/Button.ts var import_v102 = require("discord-api-types/v10"); @@ -750,8 +755,159 @@ var ButtonBuilder = class extends ComponentBuilder { } }; -// src/components/selectMenu/ChannelSelectMenu.ts +// src/components/fileUpload/FileUpload.ts +var import_v104 = require("discord-api-types/v10"); + +// src/components/fileUpload/Assertions.ts +var Assertions_exports3 = {}; +__export(Assertions_exports3, { + fileUploadPredicate: () => fileUploadPredicate +}); +var import_shapeshift3 = require("@sapphire/shapeshift"); var import_v103 = require("discord-api-types/v10"); +var fileUploadPredicate = import_shapeshift3.s.object({ + type: import_shapeshift3.s.literal(import_v103.ComponentType.FileUpload), + id: idValidator.optional(), + custom_id: customIdValidator, + min_values: import_shapeshift3.s.number().greaterThanOrEqual(0).lessThanOrEqual(10).optional(), + max_values: import_shapeshift3.s.number().greaterThanOrEqual(1).lessThanOrEqual(10).optional(), + required: import_shapeshift3.s.boolean().optional() +}); + +// src/components/fileUpload/FileUpload.ts +var FileUploadBuilder = class extends ComponentBuilder { + static { + __name(this, "FileUploadBuilder"); + } + /** + * Creates a new file upload. + * + * @param data - The API data to create this file upload with + * @example + * Creating a file upload from an API data object: + * ```ts + * const fileUpload = new FileUploadBuilder({ + * custom_id: "file_upload", + * min_values: 2, + * max_values: 5, + * }); + * ``` + * @example + * Creating a file upload using setters and API data: + * ```ts + * const fileUpload = new FileUploadBuilder({ + * custom_id: "file_upload", + * min_values: 2, + * max_values: 5, + * }).setRequired(); + * ``` + */ + constructor(data = {}) { + super({ type: import_v104.ComponentType.FileUpload, ...data }); + } + /** + * Sets the custom id for this file upload. + * + * @param customId - The custom id to use + */ + setCustomId(customId) { + this.data.custom_id = customId; + return this; + } + /** + * Sets the minimum number of file uploads required. + * + * @param minValues - The minimum values that must be uploaded + */ + setMinValues(minValues) { + this.data.min_values = minValues; + return this; + } + /** + * Clears the minimum values. + */ + clearMinValues() { + this.data.min_values = void 0; + return this; + } + /** + * Sets the maximum number of file uploads required. + * + * @param maxValues - The maximum values that can be uploaded + */ + setMaxValues(maxValues) { + this.data.max_values = maxValues; + return this; + } + /** + * Clears the maximum values. + */ + clearMaxValues() { + this.data.max_values = void 0; + return this; + } + /** + * Sets whether this file upload is required. + * + * @param required - Whether this file upload is required + */ + setRequired(required = true) { + this.data.required = required; + return this; + } + /** + * {@inheritDoc ComponentBuilder.toJSON} + */ + toJSON() { + fileUploadPredicate.parse(this.data); + return this.data; + } +}; + +// src/components/label/Label.ts +var import_v1014 = require("discord-api-types/v10"); + +// src/components/selectMenu/ChannelSelectMenu.ts +var import_v106 = require("discord-api-types/v10"); + +// src/components/textInput/Assertions.ts +var Assertions_exports4 = {}; +__export(Assertions_exports4, { + labelValidator: () => labelValidator, + maxLengthValidator: () => maxLengthValidator, + minLengthValidator: () => minLengthValidator, + placeholderValidator: () => placeholderValidator2, + requiredValidator: () => requiredValidator, + textInputPredicate: () => textInputPredicate, + textInputStyleValidator: () => textInputStyleValidator, + validateRequiredParameters: () => validateRequiredParameters, + valueValidator: () => valueValidator +}); +var import_shapeshift4 = require("@sapphire/shapeshift"); +var import_v105 = require("discord-api-types/v10"); +var textInputStyleValidator = import_shapeshift4.s.nativeEnum(import_v105.TextInputStyle).setValidationEnabled(isValidationEnabled); +var minLengthValidator = import_shapeshift4.s.number().int().greaterThanOrEqual(0).lessThanOrEqual(4e3).setValidationEnabled(isValidationEnabled); +var maxLengthValidator = import_shapeshift4.s.number().int().greaterThanOrEqual(1).lessThanOrEqual(4e3).setValidationEnabled(isValidationEnabled); +var requiredValidator = import_shapeshift4.s.boolean().setValidationEnabled(isValidationEnabled); +var valueValidator = import_shapeshift4.s.string().lengthLessThanOrEqual(4e3).setValidationEnabled(isValidationEnabled); +var placeholderValidator2 = import_shapeshift4.s.string().lengthLessThanOrEqual(100).setValidationEnabled(isValidationEnabled); +var labelValidator = import_shapeshift4.s.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(45).setValidationEnabled(isValidationEnabled); +var textInputPredicate = import_shapeshift4.s.object({ + type: import_shapeshift4.s.literal(import_v105.ComponentType.TextInput), + custom_id: customIdValidator, + style: textInputStyleValidator, + id: idValidator.optional(), + min_length: minLengthValidator.optional(), + max_length: maxLengthValidator.optional(), + placeholder: placeholderValidator2.optional(), + value: valueValidator.optional(), + required: requiredValidator.optional() +}).setValidationEnabled(isValidationEnabled); +function validateRequiredParameters(customId, style) { + customIdValidator.parse(customId); + textInputStyleValidator.parse(style); +} +__name(validateRequiredParameters, "validateRequiredParameters"); // src/components/selectMenu/BaseSelectMenu.ts var BaseSelectMenuBuilder = class extends ComponentBuilder { @@ -777,9 +933,9 @@ var BaseSelectMenuBuilder = class extends ComponentBuilder { return this; } /** - * Sets the maximum values that must be selected in the select menu. + * Sets the maximum values that can be selected in the select menu. * - * @param maxValues - The maximum values that must be selected + * @param maxValues - The maximum values that can be selected */ setMaxValues(maxValues) { this.data.max_values = minMaxValidator.parse(maxValues); @@ -803,6 +959,16 @@ var BaseSelectMenuBuilder = class extends ComponentBuilder { this.data.disabled = disabledValidator.parse(disabled); return this; } + /** + * Sets whether this select menu is required. + * + * @remarks Only for use in modals. + * @param required - Whether this select menu is required + */ + setRequired(required = true) { + this.data.required = requiredValidator.parse(required); + return this; + } /** * {@inheritDoc ComponentBuilder.toJSON} */ @@ -843,7 +1009,7 @@ var ChannelSelectMenuBuilder = class extends BaseSelectMenuBuilder { * ``` */ constructor(data) { - super({ ...data, type: import_v103.ComponentType.ChannelSelect }); + super({ ...data, type: import_v106.ComponentType.ChannelSelect }); } /** * Adds channel types to this select menu. @@ -879,7 +1045,7 @@ var ChannelSelectMenuBuilder = class extends BaseSelectMenuBuilder { this.data.default_values.push( ...normalizedValues.map((id) => ({ id, - type: import_v103.SelectMenuDefaultValueType.Channel + type: import_v106.SelectMenuDefaultValueType.Channel })) ); return this; @@ -894,7 +1060,7 @@ var ChannelSelectMenuBuilder = class extends BaseSelectMenuBuilder { optionsLengthValidator.parse(normalizedValues.length); this.data.default_values = normalizedValues.map((id) => ({ id, - type: import_v103.SelectMenuDefaultValueType.Channel + type: import_v106.SelectMenuDefaultValueType.Channel })); return this; } @@ -910,7 +1076,7 @@ var ChannelSelectMenuBuilder = class extends BaseSelectMenuBuilder { }; // src/components/selectMenu/MentionableSelectMenu.ts -var import_v104 = require("discord-api-types/v10"); +var import_v107 = require("discord-api-types/v10"); var MentionableSelectMenuBuilder = class extends BaseSelectMenuBuilder { static { __name(this, "MentionableSelectMenuBuilder"); @@ -938,7 +1104,7 @@ var MentionableSelectMenuBuilder = class extends BaseSelectMenuBuilder { * ``` */ constructor(data) { - super({ ...data, type: import_v104.ComponentType.MentionableSelect }); + super({ ...data, type: import_v107.ComponentType.MentionableSelect }); } /** * Adds default roles to this auto populated select menu. @@ -952,7 +1118,7 @@ var MentionableSelectMenuBuilder = class extends BaseSelectMenuBuilder { this.data.default_values.push( ...normalizedValues.map((id) => ({ id, - type: import_v104.SelectMenuDefaultValueType.Role + type: import_v107.SelectMenuDefaultValueType.Role })) ); return this; @@ -969,7 +1135,7 @@ var MentionableSelectMenuBuilder = class extends BaseSelectMenuBuilder { this.data.default_values.push( ...normalizedValues.map((id) => ({ id, - type: import_v104.SelectMenuDefaultValueType.User + type: import_v107.SelectMenuDefaultValueType.User })) ); return this; @@ -1000,7 +1166,7 @@ var MentionableSelectMenuBuilder = class extends BaseSelectMenuBuilder { }; // src/components/selectMenu/RoleSelectMenu.ts -var import_v105 = require("discord-api-types/v10"); +var import_v108 = require("discord-api-types/v10"); var RoleSelectMenuBuilder = class extends BaseSelectMenuBuilder { static { __name(this, "RoleSelectMenuBuilder"); @@ -1028,7 +1194,7 @@ var RoleSelectMenuBuilder = class extends BaseSelectMenuBuilder { * ``` */ constructor(data) { - super({ ...data, type: import_v105.ComponentType.RoleSelect }); + super({ ...data, type: import_v108.ComponentType.RoleSelect }); } /** * Adds default roles to this auto populated select menu. @@ -1042,7 +1208,7 @@ var RoleSelectMenuBuilder = class extends BaseSelectMenuBuilder { this.data.default_values.push( ...normalizedValues.map((id) => ({ id, - type: import_v105.SelectMenuDefaultValueType.Role + type: import_v108.SelectMenuDefaultValueType.Role })) ); return this; @@ -1057,14 +1223,78 @@ var RoleSelectMenuBuilder = class extends BaseSelectMenuBuilder { optionsLengthValidator.parse(normalizedValues.length); this.data.default_values = normalizedValues.map((id) => ({ id, - type: import_v105.SelectMenuDefaultValueType.Role + type: import_v108.SelectMenuDefaultValueType.Role })); return this; } }; // src/components/selectMenu/StringSelectMenu.ts -var import_v106 = require("discord-api-types/v10"); +var import_v1010 = require("discord-api-types/v10"); + +// src/components/selectMenu/Assertions.ts +var Assertions_exports5 = {}; +__export(Assertions_exports5, { + selectMenuChannelPredicate: () => selectMenuChannelPredicate, + selectMenuMentionablePredicate: () => selectMenuMentionablePredicate, + selectMenuRolePredicate: () => selectMenuRolePredicate, + selectMenuStringOptionPredicate: () => selectMenuStringOptionPredicate, + selectMenuStringPredicate: () => selectMenuStringPredicate, + selectMenuUserPredicate: () => selectMenuUserPredicate +}); +var import_shapeshift5 = require("@sapphire/shapeshift"); +var import_v109 = require("discord-api-types/v10"); +var selectMenuBasePredicate = import_shapeshift5.s.object({ + id: idValidator.optional(), + placeholder: import_shapeshift5.s.string().lengthLessThanOrEqual(150).optional(), + min_values: import_shapeshift5.s.number().greaterThanOrEqual(0).lessThanOrEqual(25).optional(), + max_values: import_shapeshift5.s.number().greaterThanOrEqual(0).lessThanOrEqual(25).optional(), + custom_id: customIdValidator, + disabled: import_shapeshift5.s.boolean().optional() +}); +var selectMenuChannelPredicate = selectMenuBasePredicate.extend({ + type: import_shapeshift5.s.literal(import_v109.ComponentType.ChannelSelect), + channel_types: import_shapeshift5.s.nativeEnum(import_v109.ChannelType).array().optional(), + default_values: import_shapeshift5.s.object({ id: import_shapeshift5.s.string(), type: import_shapeshift5.s.literal(import_v109.SelectMenuDefaultValueType.Channel) }).array().lengthLessThanOrEqual(25).optional() +}).setValidationEnabled(isValidationEnabled); +var selectMenuMentionablePredicate = selectMenuBasePredicate.extend({ + type: import_shapeshift5.s.literal(import_v109.ComponentType.MentionableSelect), + default_values: import_shapeshift5.s.object({ + id: import_shapeshift5.s.string(), + type: import_shapeshift5.s.union([import_shapeshift5.s.literal(import_v109.SelectMenuDefaultValueType.Role), import_shapeshift5.s.literal(import_v109.SelectMenuDefaultValueType.User)]) + }).array().lengthLessThanOrEqual(25).optional() +}).setValidationEnabled(isValidationEnabled); +var selectMenuRolePredicate = selectMenuBasePredicate.extend({ + type: import_shapeshift5.s.literal(import_v109.ComponentType.RoleSelect), + default_values: import_shapeshift5.s.object({ id: import_shapeshift5.s.string(), type: import_shapeshift5.s.literal(import_v109.SelectMenuDefaultValueType.Role) }).array().lengthLessThanOrEqual(25).optional() +}).setValidationEnabled(isValidationEnabled); +var selectMenuUserPredicate = selectMenuBasePredicate.extend({ + type: import_shapeshift5.s.literal(import_v109.ComponentType.UserSelect), + default_values: import_shapeshift5.s.object({ id: import_shapeshift5.s.string(), type: import_shapeshift5.s.literal(import_v109.SelectMenuDefaultValueType.User) }).array().lengthLessThanOrEqual(25).optional() +}).setValidationEnabled(isValidationEnabled); +var selectMenuStringOptionPredicate = import_shapeshift5.s.object({ + label: import_shapeshift5.s.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(100), + value: import_shapeshift5.s.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(100), + description: import_shapeshift5.s.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(100).optional(), + emoji: emojiValidator.optional(), + default: import_shapeshift5.s.boolean().optional() +}).setValidationEnabled(isValidationEnabled); +var selectMenuStringPredicate = selectMenuBasePredicate.extend({ + type: import_shapeshift5.s.literal(import_v109.ComponentType.StringSelect), + options: selectMenuStringOptionPredicate.array().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(25) +}).reshape((value) => { + if (value.min_values !== void 0 && value.options.length < value.min_values) { + return import_shapeshift5.Result.err(new RangeError(`The number of options must be greater than or equal to min_values`)); + } + if (value.min_values !== void 0 && value.max_values !== void 0 && value.min_values > value.max_values) { + return import_shapeshift5.Result.err( + new RangeError(`The maximum amount of options must be greater than or equal to the minimum amount of options`) + ); + } + return import_shapeshift5.Result.ok(value); +}).setValidationEnabled(isValidationEnabled); + +// src/components/selectMenu/StringSelectMenu.ts var StringSelectMenuBuilder = class extends BaseSelectMenuBuilder { static { __name(this, "StringSelectMenuBuilder"); @@ -1106,7 +1336,7 @@ var StringSelectMenuBuilder = class extends BaseSelectMenuBuilder { */ constructor(data) { const { options, ...initData } = data ?? {}; - super({ ...initData, type: import_v106.ComponentType.StringSelect }); + super({ ...initData, type: import_v1010.ComponentType.StringSelect }); this.options = options?.map((option) => new StringSelectMenuOptionBuilder(option)) ?? []; } /** @@ -1119,7 +1349,7 @@ var StringSelectMenuBuilder = class extends BaseSelectMenuBuilder { optionsLengthValidator.parse(this.options.length + normalizedOptions.length); this.options.push( ...normalizedOptions.map( - (normalizedOption) => normalizedOption instanceof StringSelectMenuOptionBuilder ? normalizedOption : new StringSelectMenuOptionBuilder(jsonOptionValidator.parse(normalizedOption)) + (normalizedOption) => normalizedOption instanceof StringSelectMenuOptionBuilder ? normalizedOption : new StringSelectMenuOptionBuilder(selectMenuStringOptionPredicate.parse(normalizedOption)) ) ); return this; @@ -1166,7 +1396,7 @@ var StringSelectMenuBuilder = class extends BaseSelectMenuBuilder { index, deleteCount, ...normalizedOptions.map( - (normalizedOption) => normalizedOption instanceof StringSelectMenuOptionBuilder ? normalizedOption : new StringSelectMenuOptionBuilder(jsonOptionValidator.parse(normalizedOption)) + (normalizedOption) => normalizedOption instanceof StringSelectMenuOptionBuilder ? normalizedOption : new StringSelectMenuOptionBuilder(selectMenuStringOptionPredicate.parse(normalizedOption)) ) ); optionsLengthValidator.parse(clone.length); @@ -1186,7 +1416,7 @@ var StringSelectMenuBuilder = class extends BaseSelectMenuBuilder { }; // src/components/selectMenu/UserSelectMenu.ts -var import_v107 = require("discord-api-types/v10"); +var import_v1011 = require("discord-api-types/v10"); var UserSelectMenuBuilder = class extends BaseSelectMenuBuilder { static { __name(this, "UserSelectMenuBuilder"); @@ -1214,7 +1444,7 @@ var UserSelectMenuBuilder = class extends BaseSelectMenuBuilder { * ``` */ constructor(data) { - super({ ...data, type: import_v107.ComponentType.UserSelect }); + super({ ...data, type: import_v1011.ComponentType.UserSelect }); } /** * Adds default users to this auto populated select menu. @@ -1228,7 +1458,7 @@ var UserSelectMenuBuilder = class extends BaseSelectMenuBuilder { this.data.default_values.push( ...normalizedValues.map((id) => ({ id, - type: import_v107.SelectMenuDefaultValueType.User + type: import_v1011.SelectMenuDefaultValueType.User })) ); return this; @@ -1243,7 +1473,7 @@ var UserSelectMenuBuilder = class extends BaseSelectMenuBuilder { optionsLengthValidator.parse(normalizedValues.length); this.data.default_values = normalizedValues.map((id) => ({ id, - type: import_v107.SelectMenuDefaultValueType.User + type: import_v1011.SelectMenuDefaultValueType.User })); return this; } @@ -1251,38 +1481,8 @@ var UserSelectMenuBuilder = class extends BaseSelectMenuBuilder { // src/components/textInput/TextInput.ts var import_util = require("@discordjs/util"); -var import_v109 = require("discord-api-types/v10"); +var import_v1012 = require("discord-api-types/v10"); var import_fast_deep_equal = __toESM(require("fast-deep-equal")); - -// src/components/textInput/Assertions.ts -var Assertions_exports3 = {}; -__export(Assertions_exports3, { - labelValidator: () => labelValidator, - maxLengthValidator: () => maxLengthValidator, - minLengthValidator: () => minLengthValidator, - placeholderValidator: () => placeholderValidator2, - requiredValidator: () => requiredValidator, - textInputStyleValidator: () => textInputStyleValidator, - validateRequiredParameters: () => validateRequiredParameters, - valueValidator: () => valueValidator -}); -var import_shapeshift3 = require("@sapphire/shapeshift"); -var import_v108 = require("discord-api-types/v10"); -var textInputStyleValidator = import_shapeshift3.s.nativeEnum(import_v108.TextInputStyle); -var minLengthValidator = import_shapeshift3.s.number().int().greaterThanOrEqual(0).lessThanOrEqual(4e3).setValidationEnabled(isValidationEnabled); -var maxLengthValidator = import_shapeshift3.s.number().int().greaterThanOrEqual(1).lessThanOrEqual(4e3).setValidationEnabled(isValidationEnabled); -var requiredValidator = import_shapeshift3.s.boolean(); -var valueValidator = import_shapeshift3.s.string().lengthLessThanOrEqual(4e3).setValidationEnabled(isValidationEnabled); -var placeholderValidator2 = import_shapeshift3.s.string().lengthLessThanOrEqual(100).setValidationEnabled(isValidationEnabled); -var labelValidator = import_shapeshift3.s.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(45).setValidationEnabled(isValidationEnabled); -function validateRequiredParameters(customId, style, label) { - customIdValidator.parse(customId); - textInputStyleValidator.parse(style); - labelValidator.parse(label); -} -__name(validateRequiredParameters, "validateRequiredParameters"); - -// src/components/textInput/TextInput.ts var TextInputBuilder = class extends ComponentBuilder { static { __name(this, "TextInputBuilder"); @@ -1296,7 +1496,7 @@ var TextInputBuilder = class extends ComponentBuilder { * ```ts * const textInput = new TextInputBuilder({ * custom_id: 'a cool text input', - * label: 'Type something', + * placeholder: 'Type something', * style: TextInputStyle.Short, * }); * ``` @@ -1304,14 +1504,14 @@ var TextInputBuilder = class extends ComponentBuilder { * Creating a text input using setters and API data: * ```ts * const textInput = new TextInputBuilder({ - * label: 'Type something else', + * placeholder: 'Type something else', * }) * .setCustomId('woah') * .setStyle(TextInputStyle.Paragraph); * ``` */ constructor(data) { - super({ type: import_v109.ComponentType.TextInput, ...data }); + super({ type: import_v1012.ComponentType.TextInput, ...data }); } /** * Sets the custom id for this text input. @@ -1326,6 +1526,7 @@ var TextInputBuilder = class extends ComponentBuilder { * Sets the label for this text input. * * @param label - The label to use + * @deprecated Use a label builder to create a label (and optionally a description) instead. */ setLabel(label) { this.data.label = labelValidator.parse(label); @@ -1389,7 +1590,7 @@ var TextInputBuilder = class extends ComponentBuilder { * {@inheritDoc ComponentBuilder.toJSON} */ toJSON() { - validateRequiredParameters(this.data.custom_id, this.data.style, this.data.label); + validateRequiredParameters(this.data.custom_id, this.data.style); return { ...this.data }; @@ -1405,12 +1606,177 @@ var TextInputBuilder = class extends ComponentBuilder { } }; +// src/components/label/Assertions.ts +var Assertions_exports6 = {}; +__export(Assertions_exports6, { + labelPredicate: () => labelPredicate +}); +var import_shapeshift6 = require("@sapphire/shapeshift"); +var import_v1013 = require("discord-api-types/v10"); +var labelPredicate = import_shapeshift6.s.object({ + id: idValidator.optional(), + type: import_shapeshift6.s.literal(import_v1013.ComponentType.Label), + label: import_shapeshift6.s.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(45), + description: import_shapeshift6.s.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(100).optional(), + component: import_shapeshift6.s.union([ + textInputPredicate, + selectMenuUserPredicate, + selectMenuRolePredicate, + selectMenuMentionablePredicate, + selectMenuChannelPredicate, + selectMenuStringPredicate, + fileUploadPredicate + ]) +}).setValidationEnabled(isValidationEnabled); + +// src/components/label/Label.ts +var LabelBuilder = class extends ComponentBuilder { + static { + __name(this, "LabelBuilder"); + } + /** + * @internal + */ + data; + /** + * Creates a new label. + * + * @param data - The API data to create this label with + * @example + * Creating a label from an API data object: + * ```ts + * const label = new LabelBuilder({ + * label: "label", + * component, + * }); + * ``` + * @example + * Creating a label using setters and API data: + * ```ts + * const label = new LabelBuilder({ + * label: 'label', + * component, + * }).setLabel('new text'); + * ``` + */ + constructor(data = {}) { + super({ type: import_v1014.ComponentType.Label }); + const { component, ...rest } = data; + this.data = { + ...rest, + component: component ? createComponentBuilder(component) : void 0, + type: import_v1014.ComponentType.Label + }; + } + /** + * Sets the label for this label. + * + * @param label - The label to use + */ + setLabel(label) { + this.data.label = label; + return this; + } + /** + * Sets the description for this label. + * + * @param description - The description to use + */ + setDescription(description) { + this.data.description = description; + return this; + } + /** + * Clears the description for this label. + */ + clearDescription() { + this.data.description = void 0; + return this; + } + /** + * Sets a string select menu component to this label. + * + * @param input - A function that returns a component builder or an already built builder + */ + setStringSelectMenuComponent(input) { + this.data.component = resolveBuilder(input, StringSelectMenuBuilder); + return this; + } + /** + * Sets a user select menu component to this label. + * + * @param input - A function that returns a component builder or an already built builder + */ + setUserSelectMenuComponent(input) { + this.data.component = resolveBuilder(input, UserSelectMenuBuilder); + return this; + } + /** + * Sets a role select menu component to this label. + * + * @param input - A function that returns a component builder or an already built builder + */ + setRoleSelectMenuComponent(input) { + this.data.component = resolveBuilder(input, RoleSelectMenuBuilder); + return this; + } + /** + * Sets a mentionable select menu component to this label. + * + * @param input - A function that returns a component builder or an already built builder + */ + setMentionableSelectMenuComponent(input) { + this.data.component = resolveBuilder(input, MentionableSelectMenuBuilder); + return this; + } + /** + * Sets a channel select menu component to this label. + * + * @param input - A function that returns a component builder or an already built builder + */ + setChannelSelectMenuComponent(input) { + this.data.component = resolveBuilder(input, ChannelSelectMenuBuilder); + return this; + } + /** + * Sets a text input component to this label. + * + * @param input - A function that returns a component builder or an already built builder + */ + setTextInputComponent(input) { + this.data.component = resolveBuilder(input, TextInputBuilder); + return this; + } + /** + * Sets a file upload component to this label. + * + * @param input - A function that returns a component builder or an already built builder + */ + setFileUploadComponent(input) { + this.data.component = resolveBuilder(input, FileUploadBuilder); + return this; + } + /** + * {@inheritDoc ComponentBuilder.toJSON} + */ + toJSON() { + const { component, ...rest } = this.data; + const data = { + ...rest, + // The label predicate validates the component. + component: component?.toJSON() + }; + labelPredicate.parse(data); + return data; + } +}; + // src/components/v2/Container.ts -var import_v1015 = require("discord-api-types/v10"); +var import_v1020 = require("discord-api-types/v10"); // src/components/v2/Assertions.ts -var Assertions_exports4 = {}; -__export(Assertions_exports4, { +var Assertions_exports7 = {}; +__export(Assertions_exports7, { accessoryPredicate: () => accessoryPredicate, assertReturnOfBuilder: () => assertReturnOfBuilder, containerColorPredicate: () => containerColorPredicate, @@ -1423,11 +1789,11 @@ __export(Assertions_exports4, { unfurledMediaItemPredicate: () => unfurledMediaItemPredicate, validateComponentArray: () => validateComponentArray }); -var import_shapeshift4 = require("@sapphire/shapeshift"); -var import_v1011 = require("discord-api-types/v10"); +var import_shapeshift7 = require("@sapphire/shapeshift"); +var import_v1016 = require("discord-api-types/v10"); // src/components/v2/Thumbnail.ts -var import_v1010 = require("discord-api-types/v10"); +var import_v1015 = require("discord-api-types/v10"); var ThumbnailBuilder = class extends ComponentBuilder { static { __name(this, "ThumbnailBuilder"); @@ -1459,7 +1825,7 @@ var ThumbnailBuilder = class extends ComponentBuilder { */ constructor(data = {}) { super({ - type: import_v1010.ComponentType.Thumbnail, + type: import_v1015.ComponentType.Thumbnail, ...data, media: data.media ? { url: data.media.url } : void 0 }); @@ -1508,33 +1874,33 @@ var ThumbnailBuilder = class extends ComponentBuilder { }; // src/components/v2/Assertions.ts -var unfurledMediaItemPredicate = import_shapeshift4.s.object({ - url: import_shapeshift4.s.string().url( +var unfurledMediaItemPredicate = import_shapeshift7.s.object({ + url: import_shapeshift7.s.string().url( { allowedProtocols: ["http:", "https:", "attachment:"] }, { message: "Invalid protocol for media URL. Must be http:, https:, or attachment:" } ) }).setValidationEnabled(isValidationEnabled); -var descriptionPredicate2 = import_shapeshift4.s.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(1024).setValidationEnabled(isValidationEnabled); -var filePredicate = import_shapeshift4.s.object({ - url: import_shapeshift4.s.string().url({ allowedProtocols: ["attachment:"] }, { message: "Invalid protocol for file URL. Must be attachment:" }) +var descriptionPredicate2 = import_shapeshift7.s.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(1024).setValidationEnabled(isValidationEnabled); +var filePredicate = import_shapeshift7.s.object({ + url: import_shapeshift7.s.string().url({ allowedProtocols: ["attachment:"] }, { message: "Invalid protocol for file URL. Must be attachment:" }) }).setValidationEnabled(isValidationEnabled); -var spoilerPredicate = import_shapeshift4.s.boolean(); -var dividerPredicate = import_shapeshift4.s.boolean(); -var spacingPredicate = import_shapeshift4.s.nativeEnum(import_v1011.SeparatorSpacingSize); -var textDisplayContentPredicate = import_shapeshift4.s.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(4e3).setValidationEnabled(isValidationEnabled); -var accessoryPredicate = import_shapeshift4.s.instance(ButtonBuilder).or(import_shapeshift4.s.instance(ThumbnailBuilder)).setValidationEnabled(isValidationEnabled); +var spoilerPredicate = import_shapeshift7.s.boolean(); +var dividerPredicate = import_shapeshift7.s.boolean(); +var spacingPredicate = import_shapeshift7.s.nativeEnum(import_v1016.SeparatorSpacingSize); +var textDisplayContentPredicate = import_shapeshift7.s.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(4e3).setValidationEnabled(isValidationEnabled); +var accessoryPredicate = import_shapeshift7.s.instance(ButtonBuilder).or(import_shapeshift7.s.instance(ThumbnailBuilder)).setValidationEnabled(isValidationEnabled); var containerColorPredicate = colorPredicate.nullish(); function assertReturnOfBuilder(input, ExpectedInstanceOf) { - import_shapeshift4.s.instance(ExpectedInstanceOf).setValidationEnabled(isValidationEnabled).parse(input); + import_shapeshift7.s.instance(ExpectedInstanceOf).setValidationEnabled(isValidationEnabled).parse(input); } __name(assertReturnOfBuilder, "assertReturnOfBuilder"); function validateComponentArray(input, min, max, ExpectedInstanceOf) { - (ExpectedInstanceOf ? import_shapeshift4.s.instance(ExpectedInstanceOf) : import_shapeshift4.s.instance(ComponentBuilder)).array().lengthGreaterThanOrEqual(min).lengthLessThanOrEqual(max).setValidationEnabled(isValidationEnabled).parse(input); + (ExpectedInstanceOf ? import_shapeshift7.s.instance(ExpectedInstanceOf) : import_shapeshift7.s.instance(ComponentBuilder)).array().lengthGreaterThanOrEqual(min).lengthLessThanOrEqual(max).setValidationEnabled(isValidationEnabled).parse(input); } __name(validateComponentArray, "validateComponentArray"); // src/components/v2/File.ts -var import_v1012 = require("discord-api-types/v10"); +var import_v1017 = require("discord-api-types/v10"); var FileBuilder = class extends ComponentBuilder { static { __name(this, "FileBuilder"); @@ -1565,7 +1931,7 @@ var FileBuilder = class extends ComponentBuilder { * ``` */ constructor(data = {}) { - super({ type: import_v1012.ComponentType.File, ...data, file: data.file ? { url: data.file.url } : void 0 }); + super({ type: import_v1017.ComponentType.File, ...data, file: data.file ? { url: data.file.url } : void 0 }); } /** * Sets the spoiler status of this file. @@ -1595,7 +1961,7 @@ var FileBuilder = class extends ComponentBuilder { }; // src/components/v2/Separator.ts -var import_v1013 = require("discord-api-types/v10"); +var import_v1018 = require("discord-api-types/v10"); var SeparatorBuilder = class extends ComponentBuilder { static { __name(this, "SeparatorBuilder"); @@ -1623,7 +1989,7 @@ var SeparatorBuilder = class extends ComponentBuilder { */ constructor(data = {}) { super({ - type: import_v1013.ComponentType.Separator, + type: import_v1018.ComponentType.Separator, ...data }); } @@ -1661,7 +2027,7 @@ var SeparatorBuilder = class extends ComponentBuilder { }; // src/components/v2/TextDisplay.ts -var import_v1014 = require("discord-api-types/v10"); +var import_v1019 = require("discord-api-types/v10"); var TextDisplayBuilder = class extends ComponentBuilder { static { __name(this, "TextDisplayBuilder"); @@ -1688,7 +2054,7 @@ var TextDisplayBuilder = class extends ComponentBuilder { */ constructor(data = {}) { super({ - type: import_v1014.ComponentType.TextDisplay, + type: import_v1019.ComponentType.TextDisplay, ...data }); } @@ -1746,11 +2112,12 @@ var ContainerBuilder = class extends ComponentBuilder { * }, * ], * }) - * .addComponents(separator, section); + * .addSeparatorComponents(separator) + * .addSectionComponents(section); * ``` */ constructor({ components, ...data } = {}) { - super({ type: import_v1015.ComponentType.Container, ...data }); + super({ type: import_v1020.ComponentType.Container, ...data }); this.components = components?.map((component) => createComponentBuilder(component)) ?? []; } /** @@ -1873,7 +2240,7 @@ var ContainerBuilder = class extends ComponentBuilder { }; // src/components/v2/MediaGallery.ts -var import_v1016 = require("discord-api-types/v10"); +var import_v1021 = require("discord-api-types/v10"); // src/components/v2/MediaGalleryItem.ts var MediaGalleryItemBuilder = class { @@ -2003,7 +2370,7 @@ var MediaGalleryBuilder = class extends ComponentBuilder { * ``` */ constructor({ items, ...data } = {}) { - super({ type: import_v1016.ComponentType.MediaGallery, ...data }); + super({ type: import_v1021.ComponentType.MediaGallery, ...data }); this.items = items?.map((item) => new MediaGalleryItemBuilder(item)) ?? []; } /** @@ -2053,7 +2420,7 @@ var MediaGalleryBuilder = class extends ComponentBuilder { }; // src/components/v2/Section.ts -var import_v1017 = require("discord-api-types/v10"); +var import_v1022 = require("discord-api-types/v10"); var SectionBuilder = class extends ComponentBuilder { static { __name(this, "SectionBuilder"); @@ -2102,7 +2469,7 @@ var SectionBuilder = class extends ComponentBuilder { * ``` */ constructor({ components, accessory, ...data } = {}) { - super({ type: import_v1017.ComponentType.Section, ...data }); + super({ type: import_v1022.ComponentType.Section, ...data }); this.components = components?.map((component) => createComponentBuilder(component)) ?? []; this.accessory = accessory ? createComponentBuilder(accessory) : void 0; } @@ -2177,36 +2544,40 @@ function createComponentBuilder(data) { return data; } switch (data.type) { - case import_v1018.ComponentType.ActionRow: + case import_v1023.ComponentType.ActionRow: return new ActionRowBuilder(data); - case import_v1018.ComponentType.Button: + case import_v1023.ComponentType.Button: return new ButtonBuilder(data); - case import_v1018.ComponentType.StringSelect: + case import_v1023.ComponentType.StringSelect: return new StringSelectMenuBuilder(data); - case import_v1018.ComponentType.TextInput: + case import_v1023.ComponentType.TextInput: return new TextInputBuilder(data); - case import_v1018.ComponentType.UserSelect: + case import_v1023.ComponentType.UserSelect: return new UserSelectMenuBuilder(data); - case import_v1018.ComponentType.RoleSelect: + case import_v1023.ComponentType.RoleSelect: return new RoleSelectMenuBuilder(data); - case import_v1018.ComponentType.MentionableSelect: + case import_v1023.ComponentType.MentionableSelect: return new MentionableSelectMenuBuilder(data); - case import_v1018.ComponentType.ChannelSelect: + case import_v1023.ComponentType.ChannelSelect: return new ChannelSelectMenuBuilder(data); - case import_v1018.ComponentType.File: + case import_v1023.ComponentType.File: return new FileBuilder(data); - case import_v1018.ComponentType.Container: + case import_v1023.ComponentType.Container: return new ContainerBuilder(data); - case import_v1018.ComponentType.Section: + case import_v1023.ComponentType.Section: return new SectionBuilder(data); - case import_v1018.ComponentType.Separator: + case import_v1023.ComponentType.Separator: return new SeparatorBuilder(data); - case import_v1018.ComponentType.TextDisplay: + case import_v1023.ComponentType.TextDisplay: return new TextDisplayBuilder(data); - case import_v1018.ComponentType.Thumbnail: + case import_v1023.ComponentType.Thumbnail: return new ThumbnailBuilder(data); - case import_v1018.ComponentType.MediaGallery: + case import_v1023.ComponentType.MediaGallery: return new MediaGalleryBuilder(data); + case import_v1023.ComponentType.Label: + return new LabelBuilder(data); + case import_v1023.ComponentType.FileUpload: + return new FileUploadBuilder(data); default: throw new Error(`Cannot properly serialize component type: ${data.type}`); } @@ -2271,7 +2642,7 @@ var ActionRowBuilder = class extends ComponentBuilder { * ``` */ constructor({ components, ...data } = {}) { - super({ type: import_v1019.ComponentType.ActionRow, ...data }); + super({ type: import_v1024.ComponentType.ActionRow, ...data }); this.components = components?.map((component) => createComponentBuilder(component)) ?? []; } /** @@ -2303,16 +2674,19 @@ var ActionRowBuilder = class extends ComponentBuilder { } }; +// src/interactions/modals/Modal.ts +var import_v1025 = require("discord-api-types/v10"); + // src/interactions/modals/Assertions.ts -var Assertions_exports5 = {}; -__export(Assertions_exports5, { +var Assertions_exports8 = {}; +__export(Assertions_exports8, { componentsValidator: () => componentsValidator, titleValidator: () => titleValidator, validateRequiredParameters: () => validateRequiredParameters2 }); -var import_shapeshift5 = require("@sapphire/shapeshift"); -var titleValidator = import_shapeshift5.s.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(45).setValidationEnabled(isValidationEnabled); -var componentsValidator = import_shapeshift5.s.instance(ActionRowBuilder).array().lengthGreaterThanOrEqual(1).setValidationEnabled(isValidationEnabled); +var import_shapeshift8 = require("@sapphire/shapeshift"); +var titleValidator = import_shapeshift8.s.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(45).setValidationEnabled(isValidationEnabled); +var componentsValidator = import_shapeshift8.s.union([import_shapeshift8.s.instance(ActionRowBuilder), import_shapeshift8.s.instance(LabelBuilder), import_shapeshift8.s.instance(TextDisplayBuilder)]).array().lengthGreaterThanOrEqual(1).setValidationEnabled(isValidationEnabled); function validateRequiredParameters2(customId, title, components) { customIdValidator.parse(customId); titleValidator.parse(title); @@ -2364,19 +2738,121 @@ var ModalBuilder = class { * Adds components to this modal. * * @param components - The components to add + * @deprecated Use {@link ModalBuilder.addLabelComponents} or {@link ModalBuilder.addTextDisplayComponents} instead */ addComponents(...components) { this.components.push( - ...normalizeArray(components).map( - (component) => component instanceof ActionRowBuilder ? component : new ActionRowBuilder(component) - ) + ...normalizeArray(components).map((component, idx) => { + if (component instanceof ActionRowBuilder || component instanceof LabelBuilder || component instanceof TextDisplayBuilder) { + return component; + } + if (component instanceof TextInputBuilder) { + return new ActionRowBuilder().addComponents(component); + } + if ("type" in component) { + if (component.type === import_v1025.ComponentType.ActionRow) { + return new ActionRowBuilder(component); + } + if (component.type === import_v1025.ComponentType.Label) { + return new LabelBuilder(component); + } + if (component.type === import_v1025.ComponentType.TextDisplay) { + return new TextDisplayBuilder(component); + } + if (component.type === import_v1025.ComponentType.TextInput) { + return new ActionRowBuilder().addComponents( + new TextInputBuilder(component) + ); + } + } + throw new TypeError(`Invalid component passed in ModalBuilder.addComponents at index ${idx}!`); + }) ); return this; } + /** + * Adds label components to this modal. + * + * @param components - The components to add + */ + addLabelComponents(...components) { + const normalized = normalizeArray(components); + const resolved = normalized.map((label) => resolveBuilder(label, LabelBuilder)); + this.components.push(...resolved); + return this; + } + /** + * Adds text display components to this modal. + * + * @param components - The components to add + */ + addTextDisplayComponents(...components) { + const normalized = normalizeArray(components); + const resolved = normalized.map((row) => resolveBuilder(row, TextDisplayBuilder)); + this.components.push(...resolved); + return this; + } + /** + * Adds action rows to this modal. + * + * @param components - The components to add + * @deprecated Use {@link ModalBuilder.addLabelComponents} instead + */ + addActionRowComponents(...components) { + const normalized = normalizeArray(components); + const resolved = normalized.map((row) => resolveBuilder(row, ActionRowBuilder)); + this.components.push(...resolved); + return this; + } + /** + * Sets the labels for this modal. + * + * @param components - The components to set + */ + setLabelComponents(...components) { + const normalized = normalizeArray(components); + this.spliceLabelComponents(0, this.components.length, ...normalized); + return this; + } + /** + * Removes, replaces, or inserts labels for this modal. + * + * @remarks + * This method behaves similarly + * to {@link https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/splice | Array.prototype.splice()}. + * The maximum amount of labels that can be added is 5. + * + * It's useful for modifying and adjusting order of the already-existing labels of a modal. + * @example + * Remove the first label: + * ```ts + * modal.spliceLabelComponents(0, 1); + * ``` + * @example + * Remove the first n labels: + * ```ts + * const n = 4; + * modal.spliceLabelComponents(0, n); + * ``` + * @example + * Remove the last label: + * ```ts + * modal.spliceLabelComponents(-1, 1); + * ``` + * @param index - The index to start at + * @param deleteCount - The number of labels to remove + * @param labels - The replacing label objects + */ + spliceLabelComponents(index, deleteCount, ...labels) { + const resolved = labels.map((label) => resolveBuilder(label, LabelBuilder)); + this.components.splice(index, deleteCount, ...resolved); + return this; + } /** * Sets components for this modal. * * @param components - The components to set + * @deprecated Use {@link ModalBuilder.setLabelComponents} instead */ setComponents(...components) { this.components.splice(0, this.components.length, ...normalizeArray(components)); @@ -2395,8 +2871,8 @@ var ModalBuilder = class { }; // src/interactions/slashCommands/Assertions.ts -var Assertions_exports6 = {}; -__export(Assertions_exports6, { +var Assertions_exports9 = {}; +__export(Assertions_exports9, { assertReturnOfBuilder: () => assertReturnOfBuilder2, contextsPredicate: () => contextsPredicate, integrationTypesPredicate: () => integrationTypesPredicate, @@ -2414,20 +2890,20 @@ __export(Assertions_exports6, { validateRequired: () => validateRequired, validateRequiredParameters: () => validateRequiredParameters3 }); -var import_shapeshift6 = require("@sapphire/shapeshift"); -var import_v1020 = require("discord-api-types/v10"); -var namePredicate = import_shapeshift6.s.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(32).regex(/^[\p{Ll}\p{Lm}\p{Lo}\p{N}\p{sc=Devanagari}\p{sc=Thai}_-]+$/u).setValidationEnabled(isValidationEnabled); +var import_shapeshift9 = require("@sapphire/shapeshift"); +var import_v1026 = require("discord-api-types/v10"); +var namePredicate = import_shapeshift9.s.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(32).regex(/^[\p{Ll}\p{Lm}\p{Lo}\p{N}\p{sc=Devanagari}\p{sc=Thai}_-]+$/u).setValidationEnabled(isValidationEnabled); function validateName(name) { namePredicate.parse(name); } __name(validateName, "validateName"); -var descriptionPredicate3 = import_shapeshift6.s.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(100).setValidationEnabled(isValidationEnabled); -var localePredicate = import_shapeshift6.s.nativeEnum(import_v1020.Locale); +var descriptionPredicate3 = import_shapeshift9.s.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(100).setValidationEnabled(isValidationEnabled); +var localePredicate = import_shapeshift9.s.nativeEnum(import_v1026.Locale); function validateDescription(description) { descriptionPredicate3.parse(description); } __name(validateDescription, "validateDescription"); -var maxArrayLengthPredicate = import_shapeshift6.s.unknown().array().lengthLessThanOrEqual(25).setValidationEnabled(isValidationEnabled); +var maxArrayLengthPredicate = import_shapeshift9.s.unknown().array().lengthLessThanOrEqual(25).setValidationEnabled(isValidationEnabled); function validateLocale(locale) { return localePredicate.parse(locale); } @@ -2442,7 +2918,7 @@ function validateRequiredParameters3(name, description, options) { validateMaxOptionsLength(options); } __name(validateRequiredParameters3, "validateRequiredParameters"); -var booleanPredicate = import_shapeshift6.s.boolean(); +var booleanPredicate = import_shapeshift9.s.boolean(); function validateDefaultPermission(value) { booleanPredicate.parse(value); } @@ -2451,29 +2927,29 @@ function validateRequired(required) { booleanPredicate.parse(required); } __name(validateRequired, "validateRequired"); -var choicesLengthPredicate = import_shapeshift6.s.number().lessThanOrEqual(25).setValidationEnabled(isValidationEnabled); +var choicesLengthPredicate = import_shapeshift9.s.number().lessThanOrEqual(25).setValidationEnabled(isValidationEnabled); function validateChoicesLength(amountAdding, choices) { choicesLengthPredicate.parse((choices?.length ?? 0) + amountAdding); } __name(validateChoicesLength, "validateChoicesLength"); function assertReturnOfBuilder2(input, ExpectedInstanceOf) { - import_shapeshift6.s.instance(ExpectedInstanceOf).parse(input); + import_shapeshift9.s.instance(ExpectedInstanceOf).parse(input); } __name(assertReturnOfBuilder2, "assertReturnOfBuilder"); -var localizationMapPredicate = import_shapeshift6.s.object(Object.fromEntries(Object.values(import_v1020.Locale).map((locale) => [locale, import_shapeshift6.s.string().nullish()]))).strict().nullish().setValidationEnabled(isValidationEnabled); +var localizationMapPredicate = import_shapeshift9.s.object(Object.fromEntries(Object.values(import_v1026.Locale).map((locale) => [locale, import_shapeshift9.s.string().nullish()]))).strict().nullish().setValidationEnabled(isValidationEnabled); function validateLocalizationMap(value) { localizationMapPredicate.parse(value); } __name(validateLocalizationMap, "validateLocalizationMap"); -var dmPermissionPredicate = import_shapeshift6.s.boolean().nullish(); +var dmPermissionPredicate = import_shapeshift9.s.boolean().nullish(); function validateDMPermission(value) { dmPermissionPredicate.parse(value); } __name(validateDMPermission, "validateDMPermission"); -var memberPermissionPredicate = import_shapeshift6.s.union([ - import_shapeshift6.s.bigint().transform((value) => value.toString()), - import_shapeshift6.s.number().safeInt().transform((value) => value.toString()), - import_shapeshift6.s.string().regex(/^\d+$/) +var memberPermissionPredicate = import_shapeshift9.s.union([ + import_shapeshift9.s.bigint().transform((value) => value.toString()), + import_shapeshift9.s.number().safeInt().transform((value) => value.toString()), + import_shapeshift9.s.string().regex(/^\d+$/) ]).nullish(); function validateDefaultMemberPermissions(permissions) { return memberPermissionPredicate.parse(permissions); @@ -2483,11 +2959,11 @@ function validateNSFW(value) { booleanPredicate.parse(value); } __name(validateNSFW, "validateNSFW"); -var contextsPredicate = import_shapeshift6.s.array( - import_shapeshift6.s.nativeEnum(import_v1020.InteractionContextType).setValidationEnabled(isValidationEnabled) +var contextsPredicate = import_shapeshift9.s.array( + import_shapeshift9.s.nativeEnum(import_v1026.InteractionContextType).setValidationEnabled(isValidationEnabled) ); -var integrationTypesPredicate = import_shapeshift6.s.array( - import_shapeshift6.s.nativeEnum(import_v1020.ApplicationIntegrationType).setValidationEnabled(isValidationEnabled) +var integrationTypesPredicate = import_shapeshift9.s.array( + import_shapeshift9.s.nativeEnum(import_v1026.ApplicationIntegrationType).setValidationEnabled(isValidationEnabled) ); // src/interactions/slashCommands/SlashCommandBuilder.ts @@ -2607,7 +3083,7 @@ var SharedNameAndDescription = class { }; // src/interactions/slashCommands/mixins/SharedSlashCommand.ts -var import_v1021 = require("discord-api-types/v10"); +var import_v1027 = require("discord-api-types/v10"); var SharedSlashCommand = class { static { __name(this, "SharedSlashCommand"); @@ -2712,14 +3188,14 @@ var SharedSlashCommand = class { validateLocalizationMap(this.description_localizations); return { ...this, - type: import_v1021.ApplicationCommandType.ChatInput, + type: import_v1027.ApplicationCommandType.ChatInput, options: this.options.map((option) => option.toJSON()) }; } }; // src/interactions/slashCommands/options/attachment.ts -var import_v1022 = require("discord-api-types/v10"); +var import_v1028 = require("discord-api-types/v10"); // src/interactions/slashCommands/mixins/ApplicationCommandOptionBase.ts var ApplicationCommandOptionBase = class extends SharedNameAndDescription { @@ -2761,7 +3237,7 @@ var SlashCommandAttachmentOption = class extends ApplicationCommandOptionBase { /** * The type of this option. */ - type = import_v1022.ApplicationCommandOptionType.Attachment; + type = import_v1028.ApplicationCommandOptionType.Attachment; /** * {@inheritDoc ApplicationCommandOptionBase.toJSON} */ @@ -2772,7 +3248,7 @@ var SlashCommandAttachmentOption = class extends ApplicationCommandOptionBase { }; // src/interactions/slashCommands/options/boolean.ts -var import_v1023 = require("discord-api-types/v10"); +var import_v1029 = require("discord-api-types/v10"); var SlashCommandBooleanOption = class extends ApplicationCommandOptionBase { static { __name(this, "SlashCommandBooleanOption"); @@ -2780,7 +3256,7 @@ var SlashCommandBooleanOption = class extends ApplicationCommandOptionBase { /** * The type of this option. */ - type = import_v1023.ApplicationCommandOptionType.Boolean; + type = import_v1029.ApplicationCommandOptionType.Boolean; /** * {@inheritDoc ApplicationCommandOptionBase.toJSON} */ @@ -2791,25 +3267,25 @@ var SlashCommandBooleanOption = class extends ApplicationCommandOptionBase { }; // src/interactions/slashCommands/options/channel.ts -var import_v1025 = require("discord-api-types/v10"); +var import_v1031 = require("discord-api-types/v10"); var import_ts_mixer = require("ts-mixer"); // src/interactions/slashCommands/mixins/ApplicationCommandOptionChannelTypesMixin.ts -var import_shapeshift7 = require("@sapphire/shapeshift"); -var import_v1024 = require("discord-api-types/v10"); +var import_shapeshift10 = require("@sapphire/shapeshift"); +var import_v1030 = require("discord-api-types/v10"); var allowedChannelTypes = [ - import_v1024.ChannelType.GuildText, - import_v1024.ChannelType.GuildVoice, - import_v1024.ChannelType.GuildCategory, - import_v1024.ChannelType.GuildAnnouncement, - import_v1024.ChannelType.AnnouncementThread, - import_v1024.ChannelType.PublicThread, - import_v1024.ChannelType.PrivateThread, - import_v1024.ChannelType.GuildStageVoice, - import_v1024.ChannelType.GuildForum, - import_v1024.ChannelType.GuildMedia + import_v1030.ChannelType.GuildText, + import_v1030.ChannelType.GuildVoice, + import_v1030.ChannelType.GuildCategory, + import_v1030.ChannelType.GuildAnnouncement, + import_v1030.ChannelType.AnnouncementThread, + import_v1030.ChannelType.PublicThread, + import_v1030.ChannelType.PrivateThread, + import_v1030.ChannelType.GuildStageVoice, + import_v1030.ChannelType.GuildForum, + import_v1030.ChannelType.GuildMedia ]; -var channelTypesPredicate = import_shapeshift7.s.array(import_shapeshift7.s.union(allowedChannelTypes.map((type) => import_shapeshift7.s.literal(type)))); +var channelTypesPredicate = import_shapeshift10.s.array(import_shapeshift10.s.union(allowedChannelTypes.map((type) => import_shapeshift10.s.literal(type)))); var ApplicationCommandOptionChannelTypesMixin = class { static { __name(this, "ApplicationCommandOptionChannelTypesMixin"); @@ -2837,7 +3313,7 @@ var SlashCommandChannelOption = class extends ApplicationCommandOptionBase { /** * The type of this option. */ - type = import_v1025.ApplicationCommandOptionType.Channel; + type = import_v1031.ApplicationCommandOptionType.Channel; /** * {@inheritDoc ApplicationCommandOptionBase.toJSON} */ @@ -2852,8 +3328,8 @@ SlashCommandChannelOption = __decorateClass([ ], SlashCommandChannelOption); // src/interactions/slashCommands/options/integer.ts -var import_shapeshift10 = require("@sapphire/shapeshift"); -var import_v1027 = require("discord-api-types/v10"); +var import_shapeshift13 = require("@sapphire/shapeshift"); +var import_v1033 = require("discord-api-types/v10"); var import_ts_mixer2 = require("ts-mixer"); // src/interactions/slashCommands/mixins/ApplicationCommandNumericOptionMinMaxValueMixin.ts @@ -2872,8 +3348,8 @@ var ApplicationCommandNumericOptionMinMaxValueMixin = class { }; // src/interactions/slashCommands/mixins/ApplicationCommandOptionWithAutocompleteMixin.ts -var import_shapeshift8 = require("@sapphire/shapeshift"); -var booleanPredicate2 = import_shapeshift8.s.boolean(); +var import_shapeshift11 = require("@sapphire/shapeshift"); +var booleanPredicate2 = import_shapeshift11.s.boolean(); var ApplicationCommandOptionWithAutocompleteMixin = class { static { __name(this, "ApplicationCommandOptionWithAutocompleteMixin"); @@ -2904,14 +3380,14 @@ var ApplicationCommandOptionWithAutocompleteMixin = class { }; // src/interactions/slashCommands/mixins/ApplicationCommandOptionWithChoicesMixin.ts -var import_shapeshift9 = require("@sapphire/shapeshift"); -var import_v1026 = require("discord-api-types/v10"); -var stringPredicate = import_shapeshift9.s.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(100); -var numberPredicate = import_shapeshift9.s.number().greaterThan(Number.NEGATIVE_INFINITY).lessThan(Number.POSITIVE_INFINITY); -var choicesPredicate = import_shapeshift9.s.object({ +var import_shapeshift12 = require("@sapphire/shapeshift"); +var import_v1032 = require("discord-api-types/v10"); +var stringPredicate = import_shapeshift12.s.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(100); +var numberPredicate = import_shapeshift12.s.number().greaterThan(Number.NEGATIVE_INFINITY).lessThan(Number.POSITIVE_INFINITY); +var choicesPredicate = import_shapeshift12.s.object({ name: stringPredicate, name_localizations: localizationMapPredicate, - value: import_shapeshift9.s.union([stringPredicate, numberPredicate]) + value: import_shapeshift12.s.union([stringPredicate, numberPredicate]) }).array(); var ApplicationCommandOptionWithChoicesMixin = class { static { @@ -2943,7 +3419,7 @@ var ApplicationCommandOptionWithChoicesMixin = class { } validateChoicesLength(normalizedChoices.length, this.choices); for (const { name, name_localizations, value } of normalizedChoices) { - if (this.type === import_v1026.ApplicationCommandOptionType.String) { + if (this.type === import_v1032.ApplicationCommandOptionType.String) { stringPredicate.parse(value); } else { numberPredicate.parse(value); @@ -2970,12 +3446,12 @@ var ApplicationCommandOptionWithChoicesMixin = class { }; // src/interactions/slashCommands/options/integer.ts -var numberValidator = import_shapeshift10.s.number().int(); +var numberValidator = import_shapeshift13.s.number().int(); var SlashCommandIntegerOption = class extends ApplicationCommandOptionBase { /** * The type of this option. */ - type = import_v1027.ApplicationCommandOptionType.Integer; + type = import_v1033.ApplicationCommandOptionType.Integer; /** * {@inheritDoc ApplicationCommandNumericOptionMinMaxValueMixin.setMaxValue} */ @@ -3013,7 +3489,7 @@ SlashCommandIntegerOption = __decorateClass([ ], SlashCommandIntegerOption); // src/interactions/slashCommands/options/mentionable.ts -var import_v1028 = require("discord-api-types/v10"); +var import_v1034 = require("discord-api-types/v10"); var SlashCommandMentionableOption = class extends ApplicationCommandOptionBase { static { __name(this, "SlashCommandMentionableOption"); @@ -3021,7 +3497,7 @@ var SlashCommandMentionableOption = class extends ApplicationCommandOptionBase { /** * The type of this option. */ - type = import_v1028.ApplicationCommandOptionType.Mentionable; + type = import_v1034.ApplicationCommandOptionType.Mentionable; /** * {@inheritDoc ApplicationCommandOptionBase.toJSON} */ @@ -3032,15 +3508,15 @@ var SlashCommandMentionableOption = class extends ApplicationCommandOptionBase { }; // src/interactions/slashCommands/options/number.ts -var import_shapeshift11 = require("@sapphire/shapeshift"); -var import_v1029 = require("discord-api-types/v10"); +var import_shapeshift14 = require("@sapphire/shapeshift"); +var import_v1035 = require("discord-api-types/v10"); var import_ts_mixer3 = require("ts-mixer"); -var numberValidator2 = import_shapeshift11.s.number(); +var numberValidator2 = import_shapeshift14.s.number(); var SlashCommandNumberOption = class extends ApplicationCommandOptionBase { /** * The type of this option. */ - type = import_v1029.ApplicationCommandOptionType.Number; + type = import_v1035.ApplicationCommandOptionType.Number; /** * {@inheritDoc ApplicationCommandNumericOptionMinMaxValueMixin.setMaxValue} */ @@ -3078,7 +3554,7 @@ SlashCommandNumberOption = __decorateClass([ ], SlashCommandNumberOption); // src/interactions/slashCommands/options/role.ts -var import_v1030 = require("discord-api-types/v10"); +var import_v1036 = require("discord-api-types/v10"); var SlashCommandRoleOption = class extends ApplicationCommandOptionBase { static { __name(this, "SlashCommandRoleOption"); @@ -3086,7 +3562,7 @@ var SlashCommandRoleOption = class extends ApplicationCommandOptionBase { /** * The type of this option. */ - type = import_v1030.ApplicationCommandOptionType.Role; + type = import_v1036.ApplicationCommandOptionType.Role; /** * {@inheritDoc ApplicationCommandOptionBase.toJSON} */ @@ -3097,16 +3573,16 @@ var SlashCommandRoleOption = class extends ApplicationCommandOptionBase { }; // src/interactions/slashCommands/options/string.ts -var import_shapeshift12 = require("@sapphire/shapeshift"); -var import_v1031 = require("discord-api-types/v10"); +var import_shapeshift15 = require("@sapphire/shapeshift"); +var import_v1037 = require("discord-api-types/v10"); var import_ts_mixer4 = require("ts-mixer"); -var minLengthValidator2 = import_shapeshift12.s.number().greaterThanOrEqual(0).lessThanOrEqual(6e3); -var maxLengthValidator2 = import_shapeshift12.s.number().greaterThanOrEqual(1).lessThanOrEqual(6e3); +var minLengthValidator2 = import_shapeshift15.s.number().greaterThanOrEqual(0).lessThanOrEqual(6e3); +var maxLengthValidator2 = import_shapeshift15.s.number().greaterThanOrEqual(1).lessThanOrEqual(6e3); var SlashCommandStringOption = class extends ApplicationCommandOptionBase { /** * The type of this option. */ - type = import_v1031.ApplicationCommandOptionType.String; + type = import_v1037.ApplicationCommandOptionType.String; /** * The maximum length of this option. */ @@ -3152,7 +3628,7 @@ SlashCommandStringOption = __decorateClass([ ], SlashCommandStringOption); // src/interactions/slashCommands/options/user.ts -var import_v1032 = require("discord-api-types/v10"); +var import_v1038 = require("discord-api-types/v10"); var SlashCommandUserOption = class extends ApplicationCommandOptionBase { static { __name(this, "SlashCommandUserOption"); @@ -3160,7 +3636,7 @@ var SlashCommandUserOption = class extends ApplicationCommandOptionBase { /** * The type of this option. */ - type = import_v1032.ApplicationCommandOptionType.User; + type = import_v1038.ApplicationCommandOptionType.User; /** * {@inheritDoc ApplicationCommandOptionBase.toJSON} */ @@ -3266,7 +3742,7 @@ var SharedSlashCommandOptions = class { }; // src/interactions/slashCommands/SlashCommandSubcommands.ts -var import_v1033 = require("discord-api-types/v10"); +var import_v1039 = require("discord-api-types/v10"); var import_ts_mixer5 = require("ts-mixer"); var SlashCommandSubcommandGroupBuilder = class { /** @@ -3304,7 +3780,7 @@ var SlashCommandSubcommandGroupBuilder = class { toJSON() { validateRequiredParameters3(this.name, this.description, this.options); return { - type: import_v1033.ApplicationCommandOptionType.SubcommandGroup, + type: import_v1039.ApplicationCommandOptionType.SubcommandGroup, name: this.name, name_localizations: this.name_localizations, description: this.description, @@ -3340,7 +3816,7 @@ var SlashCommandSubcommandBuilder = class { toJSON() { validateRequiredParameters3(this.name, this.description, this.options); return { - type: import_v1033.ApplicationCommandOptionType.Subcommand, + type: import_v1039.ApplicationCommandOptionType.Subcommand, name: this.name, name_localizations: this.name_localizations, description: this.description, @@ -3448,8 +3924,8 @@ SlashCommandBuilder = __decorateClass([ ], SlashCommandBuilder); // src/interactions/contextMenuCommands/Assertions.ts -var Assertions_exports7 = {}; -__export(Assertions_exports7, { +var Assertions_exports10 = {}; +__export(Assertions_exports10, { contextsPredicate: () => contextsPredicate2, integrationTypesPredicate: () => integrationTypesPredicate2, validateDMPermission: () => validateDMPermission2, @@ -3459,11 +3935,11 @@ __export(Assertions_exports7, { validateRequiredParameters: () => validateRequiredParameters4, validateType: () => validateType }); -var import_shapeshift13 = require("@sapphire/shapeshift"); -var import_v1034 = require("discord-api-types/v10"); -var namePredicate2 = import_shapeshift13.s.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(32).regex(/\S/).setValidationEnabled(isValidationEnabled); -var typePredicate = import_shapeshift13.s.union([import_shapeshift13.s.literal(import_v1034.ApplicationCommandType.User), import_shapeshift13.s.literal(import_v1034.ApplicationCommandType.Message)]).setValidationEnabled(isValidationEnabled); -var booleanPredicate3 = import_shapeshift13.s.boolean(); +var import_shapeshift16 = require("@sapphire/shapeshift"); +var import_v1040 = require("discord-api-types/v10"); +var namePredicate2 = import_shapeshift16.s.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(32).regex(/\S/).setValidationEnabled(isValidationEnabled); +var typePredicate = import_shapeshift16.s.union([import_shapeshift16.s.literal(import_v1040.ApplicationCommandType.User), import_shapeshift16.s.literal(import_v1040.ApplicationCommandType.Message)]).setValidationEnabled(isValidationEnabled); +var booleanPredicate3 = import_shapeshift16.s.boolean(); function validateDefaultPermission2(value) { booleanPredicate3.parse(value); } @@ -3481,25 +3957,25 @@ function validateRequiredParameters4(name, type) { validateType(type); } __name(validateRequiredParameters4, "validateRequiredParameters"); -var dmPermissionPredicate2 = import_shapeshift13.s.boolean().nullish(); +var dmPermissionPredicate2 = import_shapeshift16.s.boolean().nullish(); function validateDMPermission2(value) { dmPermissionPredicate2.parse(value); } __name(validateDMPermission2, "validateDMPermission"); -var memberPermissionPredicate2 = import_shapeshift13.s.union([ - import_shapeshift13.s.bigint().transform((value) => value.toString()), - import_shapeshift13.s.number().safeInt().transform((value) => value.toString()), - import_shapeshift13.s.string().regex(/^\d+$/) +var memberPermissionPredicate2 = import_shapeshift16.s.union([ + import_shapeshift16.s.bigint().transform((value) => value.toString()), + import_shapeshift16.s.number().safeInt().transform((value) => value.toString()), + import_shapeshift16.s.string().regex(/^\d+$/) ]).nullish(); function validateDefaultMemberPermissions2(permissions) { return memberPermissionPredicate2.parse(permissions); } __name(validateDefaultMemberPermissions2, "validateDefaultMemberPermissions"); -var contextsPredicate2 = import_shapeshift13.s.array( - import_shapeshift13.s.nativeEnum(import_v1034.InteractionContextType).setValidationEnabled(isValidationEnabled) +var contextsPredicate2 = import_shapeshift16.s.array( + import_shapeshift16.s.nativeEnum(import_v1040.InteractionContextType).setValidationEnabled(isValidationEnabled) ); -var integrationTypesPredicate2 = import_shapeshift13.s.array( - import_shapeshift13.s.nativeEnum(import_v1034.ApplicationIntegrationType).setValidationEnabled(isValidationEnabled) +var integrationTypesPredicate2 = import_shapeshift16.s.array( + import_shapeshift16.s.nativeEnum(import_v1040.ApplicationIntegrationType).setValidationEnabled(isValidationEnabled) ); // src/interactions/contextMenuCommands/ContextMenuCommandBuilder.ts @@ -3680,7 +4156,7 @@ function embedLength(data) { __name(embedLength, "embedLength"); // src/index.ts -var version = "1.11.3"; +var version = "1.13.1"; // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { ActionRowBuilder, @@ -3701,6 +4177,10 @@ var version = "1.11.3"; EmbedAssertions, EmbedBuilder, FileBuilder, + FileUploadAssertions, + FileUploadBuilder, + LabelAssertions, + LabelBuilder, MediaGalleryBuilder, MediaGalleryItemBuilder, MentionableSelectMenuBuilder, @@ -3708,6 +4188,7 @@ var version = "1.11.3"; ModalBuilder, RoleSelectMenuBuilder, SectionBuilder, + SelectMenuAssertions, SelectMenuBuilder, SelectMenuOptionBuilder, SeparatorBuilder, diff --git a/node_modules/@discordjs/builders/dist/index.js.map b/node_modules/@discordjs/builders/dist/index.js.map index 47769e9..051e7c2 100644 --- a/node_modules/@discordjs/builders/dist/index.js.map +++ b/node_modules/@discordjs/builders/dist/index.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/index.ts","../src/messages/embed/Assertions.ts","../src/util/validation.ts","../src/util/normalizeArray.ts","../src/messages/embed/Embed.ts","../src/components/Assertions.ts","../src/components/selectMenu/StringSelectMenuOption.ts","../src/components/ActionRow.ts","../src/components/Component.ts","../src/components/Components.ts","../src/components/button/Button.ts","../src/components/selectMenu/ChannelSelectMenu.ts","../src/components/selectMenu/BaseSelectMenu.ts","../src/components/selectMenu/MentionableSelectMenu.ts","../src/components/selectMenu/RoleSelectMenu.ts","../src/components/selectMenu/StringSelectMenu.ts","../src/components/selectMenu/UserSelectMenu.ts","../src/components/textInput/TextInput.ts","../src/components/textInput/Assertions.ts","../src/components/v2/Container.ts","../src/components/v2/Assertions.ts","../src/components/v2/Thumbnail.ts","../src/components/v2/File.ts","../src/components/v2/Separator.ts","../src/components/v2/TextDisplay.ts","../src/components/v2/MediaGallery.ts","../src/components/v2/MediaGalleryItem.ts","../src/components/v2/Section.ts","../src/interactions/modals/Assertions.ts","../src/interactions/modals/Modal.ts","../src/interactions/slashCommands/Assertions.ts","../src/interactions/slashCommands/SlashCommandBuilder.ts","../src/interactions/slashCommands/mixins/NameAndDescription.ts","../src/interactions/slashCommands/mixins/SharedSlashCommand.ts","../src/interactions/slashCommands/options/attachment.ts","../src/interactions/slashCommands/mixins/ApplicationCommandOptionBase.ts","../src/interactions/slashCommands/options/boolean.ts","../src/interactions/slashCommands/options/channel.ts","../src/interactions/slashCommands/mixins/ApplicationCommandOptionChannelTypesMixin.ts","../src/interactions/slashCommands/options/integer.ts","../src/interactions/slashCommands/mixins/ApplicationCommandNumericOptionMinMaxValueMixin.ts","../src/interactions/slashCommands/mixins/ApplicationCommandOptionWithAutocompleteMixin.ts","../src/interactions/slashCommands/mixins/ApplicationCommandOptionWithChoicesMixin.ts","../src/interactions/slashCommands/options/mentionable.ts","../src/interactions/slashCommands/options/number.ts","../src/interactions/slashCommands/options/role.ts","../src/interactions/slashCommands/options/string.ts","../src/interactions/slashCommands/options/user.ts","../src/interactions/slashCommands/mixins/SharedSlashCommandOptions.ts","../src/interactions/slashCommands/SlashCommandSubcommands.ts","../src/interactions/slashCommands/mixins/SharedSubcommands.ts","../src/interactions/contextMenuCommands/Assertions.ts","../src/interactions/contextMenuCommands/ContextMenuCommandBuilder.ts","../src/util/componentUtil.ts"],"sourcesContent":["export * as EmbedAssertions from './messages/embed/Assertions.js';\nexport * from './messages/embed/Embed.js';\n// TODO: Consider removing this dep in the next major version\nexport * from '@discordjs/formatters';\n\nexport * as ComponentAssertions from './components/Assertions.js';\nexport * from './components/ActionRow.js';\nexport * from './components/button/Button.js';\nexport * from './components/Component.js';\nexport * from './components/Components.js';\nexport * from './components/textInput/TextInput.js';\nexport * as TextInputAssertions from './components/textInput/Assertions.js';\nexport * from './interactions/modals/Modal.js';\nexport * as ModalAssertions from './interactions/modals/Assertions.js';\n\nexport * from './components/selectMenu/BaseSelectMenu.js';\nexport * from './components/selectMenu/ChannelSelectMenu.js';\nexport * from './components/selectMenu/MentionableSelectMenu.js';\nexport * from './components/selectMenu/RoleSelectMenu.js';\nexport * from './components/selectMenu/StringSelectMenu.js';\n// TODO: Remove those aliases in v2\nexport {\n\t/**\n\t * @deprecated Will be removed in the next major version, use {@link StringSelectMenuBuilder} instead.\n\t */\n\tStringSelectMenuBuilder as SelectMenuBuilder,\n} from './components/selectMenu/StringSelectMenu.js';\nexport {\n\t/**\n\t * @deprecated Will be removed in the next major version, use {@link StringSelectMenuOptionBuilder} instead.\n\t */\n\tStringSelectMenuOptionBuilder as SelectMenuOptionBuilder,\n} from './components/selectMenu/StringSelectMenuOption.js';\nexport * from './components/selectMenu/StringSelectMenuOption.js';\nexport * from './components/selectMenu/UserSelectMenu.js';\n\nexport * as ComponentsV2Assertions from './components/v2/Assertions.js';\nexport * from './components/v2/Container.js';\nexport * from './components/v2/File.js';\nexport * from './components/v2/MediaGallery.js';\nexport * from './components/v2/MediaGalleryItem.js';\nexport * from './components/v2/Section.js';\nexport * from './components/v2/Separator.js';\nexport * from './components/v2/TextDisplay.js';\nexport * from './components/v2/Thumbnail.js';\n\nexport * as SlashCommandAssertions from './interactions/slashCommands/Assertions.js';\nexport * from './interactions/slashCommands/SlashCommandBuilder.js';\nexport * from './interactions/slashCommands/SlashCommandSubcommands.js';\nexport * from './interactions/slashCommands/options/boolean.js';\nexport * from './interactions/slashCommands/options/channel.js';\nexport * from './interactions/slashCommands/options/integer.js';\nexport * from './interactions/slashCommands/options/mentionable.js';\nexport * from './interactions/slashCommands/options/number.js';\nexport * from './interactions/slashCommands/options/role.js';\nexport * from './interactions/slashCommands/options/attachment.js';\nexport * from './interactions/slashCommands/options/string.js';\nexport * from './interactions/slashCommands/options/user.js';\nexport * from './interactions/slashCommands/mixins/ApplicationCommandNumericOptionMinMaxValueMixin.js';\nexport * from './interactions/slashCommands/mixins/ApplicationCommandOptionBase.js';\nexport * from './interactions/slashCommands/mixins/ApplicationCommandOptionChannelTypesMixin.js';\nexport * from './interactions/slashCommands/mixins/ApplicationCommandOptionWithAutocompleteMixin.js';\nexport * from './interactions/slashCommands/mixins/ApplicationCommandOptionWithChoicesMixin.js';\nexport * from './interactions/slashCommands/mixins/NameAndDescription.js';\nexport * from './interactions/slashCommands/mixins/SharedSlashCommandOptions.js';\nexport * from './interactions/slashCommands/mixins/SharedSubcommands.js';\nexport * from './interactions/slashCommands/mixins/SharedSlashCommand.js';\n\nexport * as ContextMenuCommandAssertions from './interactions/contextMenuCommands/Assertions.js';\nexport * from './interactions/contextMenuCommands/ContextMenuCommandBuilder.js';\n\nexport * from './util/componentUtil.js';\nexport * from './util/normalizeArray.js';\nexport * from './util/validation.js';\n\n/**\n * The {@link https://github.com/discordjs/discord.js/blob/main/packages/builders#readme | @discordjs/builders} version\n * that you are currently using.\n *\n * @privateRemarks This needs to explicitly be `string` so it is not typed as a \"const string\" that gets injected by esbuild.\n */\nexport const version = '1.11.3' as string;\n","import { s } from '@sapphire/shapeshift';\nimport type { APIEmbedField } from 'discord-api-types/v10';\nimport { isValidationEnabled } from '../../util/validation.js';\n\nexport const fieldNamePredicate = s.string().lengthLessThanOrEqual(256).setValidationEnabled(isValidationEnabled);\n\nexport const fieldValuePredicate = s.string().lengthLessThanOrEqual(1_024).setValidationEnabled(isValidationEnabled);\n\nexport const fieldInlinePredicate = s.boolean().optional();\n\nexport const embedFieldPredicate = s\n\t.object({\n\t\tname: fieldNamePredicate,\n\t\tvalue: fieldValuePredicate,\n\t\tinline: fieldInlinePredicate,\n\t})\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const embedFieldsArrayPredicate = embedFieldPredicate.array().setValidationEnabled(isValidationEnabled);\n\nexport const fieldLengthPredicate = s.number().lessThanOrEqual(25).setValidationEnabled(isValidationEnabled);\n\nexport function validateFieldLength(amountAdding: number, fields?: APIEmbedField[]): void {\n\tfieldLengthPredicate.parse((fields?.length ?? 0) + amountAdding);\n}\n\nexport const authorNamePredicate = fieldNamePredicate\n\t.lengthGreaterThanOrEqual(1)\n\t.nullable()\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const imageURLPredicate = s\n\t.string()\n\t.url({\n\t\tallowedProtocols: ['http:', 'https:', 'attachment:'],\n\t})\n\t.nullish()\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const urlPredicate = s\n\t.string()\n\t.url({\n\t\tallowedProtocols: ['http:', 'https:'],\n\t})\n\t.nullish()\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const embedAuthorPredicate = s\n\t.object({\n\t\tname: authorNamePredicate,\n\t\ticonURL: imageURLPredicate,\n\t\turl: urlPredicate,\n\t})\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const RGBPredicate = s\n\t.number()\n\t.int()\n\t.greaterThanOrEqual(0)\n\t.lessThanOrEqual(255)\n\t.setValidationEnabled(isValidationEnabled);\nexport const colorPredicate = s\n\t.number()\n\t.int()\n\t.greaterThanOrEqual(0)\n\t.lessThanOrEqual(0xffffff)\n\t.or(s.tuple([RGBPredicate, RGBPredicate, RGBPredicate]))\n\t.nullable()\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const descriptionPredicate = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(4_096)\n\t.nullable()\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const footerTextPredicate = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(2_048)\n\t.nullable()\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const embedFooterPredicate = s\n\t.object({\n\t\ttext: footerTextPredicate,\n\t\ticonURL: imageURLPredicate,\n\t})\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const timestampPredicate = s.union([s.number(), s.date()]).nullable().setValidationEnabled(isValidationEnabled);\n\nexport const titlePredicate = fieldNamePredicate\n\t.lengthGreaterThanOrEqual(1)\n\t.nullable()\n\t.setValidationEnabled(isValidationEnabled);\n","let validate = true;\n\n/**\n * Enables validators.\n *\n * @returns Whether validation is occurring.\n */\nexport function enableValidators() {\n\treturn (validate = true);\n}\n\n/**\n * Disables validators.\n *\n * @returns Whether validation is occurring.\n */\nexport function disableValidators() {\n\treturn (validate = false);\n}\n\n/**\n * Checks whether validation is occurring.\n */\nexport function isValidationEnabled() {\n\treturn validate;\n}\n","/**\n * Normalizes data that is a rest parameter or an array into an array with a depth of 1.\n *\n * @typeParam ItemType - The data that must satisfy {@link RestOrArray}.\n * @param arr - The (possibly variadic) data to normalize\n */\nexport function normalizeArray(arr: RestOrArray): ItemType[] {\n\tif (Array.isArray(arr[0])) return [...arr[0]];\n\treturn arr as ItemType[];\n}\n\n/**\n * Represents data that may be an array or came from a rest parameter.\n *\n * @remarks\n * This type is used throughout builders to ensure both an array and variadic arguments\n * may be used. It is normalized with {@link normalizeArray}.\n */\nexport type RestOrArray = Type[] | [Type[]];\n","import type { APIEmbed, APIEmbedAuthor, APIEmbedField, APIEmbedFooter, APIEmbedImage } from 'discord-api-types/v10';\nimport { normalizeArray, type RestOrArray } from '../../util/normalizeArray.js';\nimport {\n\tcolorPredicate,\n\tdescriptionPredicate,\n\tembedAuthorPredicate,\n\tembedFieldsArrayPredicate,\n\tembedFooterPredicate,\n\timageURLPredicate,\n\ttimestampPredicate,\n\ttitlePredicate,\n\turlPredicate,\n\tvalidateFieldLength,\n} from './Assertions.js';\n\n/**\n * A tuple satisfying the RGB color model.\n *\n * @see {@link https://developer.mozilla.org/docs/Glossary/RGB}\n */\nexport type RGBTuple = [red: number, green: number, blue: number];\n\n/**\n * The base icon data typically used in payloads.\n */\nexport interface IconData {\n\t/**\n\t * The URL of the icon.\n\t */\n\ticonURL?: string;\n\t/**\n\t * The proxy URL of the icon.\n\t */\n\tproxyIconURL?: string;\n}\n\n/**\n * Represents the author data of an embed.\n */\nexport interface EmbedAuthorData extends IconData, Omit {}\n\n/**\n * Represents the author options of an embed.\n */\nexport interface EmbedAuthorOptions extends Omit {}\n\n/**\n * Represents the footer data of an embed.\n */\nexport interface EmbedFooterData extends IconData, Omit {}\n\n/**\n * Represents the footer options of an embed.\n */\nexport interface EmbedFooterOptions extends Omit {}\n\n/**\n * Represents the image data of an embed.\n */\nexport interface EmbedImageData extends Omit {\n\t/**\n\t * The proxy URL for the image.\n\t */\n\tproxyURL?: string;\n}\n\n/**\n * A builder that creates API-compatible JSON data for embeds.\n */\nexport class EmbedBuilder {\n\t/**\n\t * The API data associated with this embed.\n\t */\n\tpublic readonly data: APIEmbed;\n\n\t/**\n\t * Creates a new embed from API data.\n\t *\n\t * @param data - The API data to create this embed with\n\t */\n\tpublic constructor(data: APIEmbed = {}) {\n\t\tthis.data = { ...data };\n\t\tif (data.timestamp) this.data.timestamp = new Date(data.timestamp).toISOString();\n\t}\n\n\t/**\n\t * Appends fields to the embed.\n\t *\n\t * @remarks\n\t * This method accepts either an array of fields or a variable number of field parameters.\n\t * The maximum amount of fields that can be added is 25.\n\t * @example\n\t * Using an array:\n\t * ```ts\n\t * const fields: APIEmbedField[] = ...;\n\t * const embed = new EmbedBuilder()\n\t * \t.addFields(fields);\n\t * ```\n\t * @example\n\t * Using rest parameters (variadic):\n\t * ```ts\n\t * const embed = new EmbedBuilder()\n\t * \t.addFields(\n\t * \t\t{ name: 'Field 1', value: 'Value 1' },\n\t * \t\t{ name: 'Field 2', value: 'Value 2' },\n\t * \t);\n\t * ```\n\t * @param fields - The fields to add\n\t */\n\tpublic addFields(...fields: RestOrArray): this {\n\t\tconst normalizedFields = normalizeArray(fields);\n\t\t// Ensure adding these fields won't exceed the 25 field limit\n\t\tvalidateFieldLength(normalizedFields.length, this.data.fields);\n\n\t\t// Data assertions\n\t\tembedFieldsArrayPredicate.parse(normalizedFields);\n\n\t\tif (this.data.fields) this.data.fields.push(...normalizedFields);\n\t\telse this.data.fields = normalizedFields;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Removes, replaces, or inserts fields for this embed.\n\t *\n\t * @remarks\n\t * This method behaves similarly\n\t * to {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice | Array.prototype.splice()}.\n\t * The maximum amount of fields that can be added is 25.\n\t *\n\t * It's useful for modifying and adjusting order of the already-existing fields of an embed.\n\t * @example\n\t * Remove the first field:\n\t * ```ts\n\t * embed.spliceFields(0, 1);\n\t * ```\n\t * @example\n\t * Remove the first n fields:\n\t * ```ts\n\t * const n = 4;\n\t * embed.spliceFields(0, n);\n\t * ```\n\t * @example\n\t * Remove the last field:\n\t * ```ts\n\t * embed.spliceFields(-1, 1);\n\t * ```\n\t * @param index - The index to start at\n\t * @param deleteCount - The number of fields to remove\n\t * @param fields - The replacing field objects\n\t */\n\tpublic spliceFields(index: number, deleteCount: number, ...fields: APIEmbedField[]): this {\n\t\t// Ensure adding these fields won't exceed the 25 field limit\n\t\tvalidateFieldLength(fields.length - deleteCount, this.data.fields);\n\n\t\t// Data assertions\n\t\tembedFieldsArrayPredicate.parse(fields);\n\t\tif (this.data.fields) this.data.fields.splice(index, deleteCount, ...fields);\n\t\telse this.data.fields = fields;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the fields for this embed.\n\t *\n\t * @remarks\n\t * This method is an alias for {@link EmbedBuilder.spliceFields}. More specifically,\n\t * it splices the entire array of fields, replacing them with the provided fields.\n\t *\n\t * You can set a maximum of 25 fields.\n\t * @param fields - The fields to set\n\t */\n\tpublic setFields(...fields: RestOrArray): this {\n\t\tthis.spliceFields(0, this.data.fields?.length ?? 0, ...normalizeArray(fields));\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the author of this embed.\n\t *\n\t * @param options - The options to use\n\t */\n\n\tpublic setAuthor(options: EmbedAuthorOptions | null): this {\n\t\tif (options === null) {\n\t\t\tthis.data.author = undefined;\n\t\t\treturn this;\n\t\t}\n\n\t\t// Data assertions\n\t\tembedAuthorPredicate.parse(options);\n\n\t\tthis.data.author = { name: options.name, url: options.url, icon_url: options.iconURL };\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the color of this embed.\n\t *\n\t * @param color - The color to use\n\t */\n\tpublic setColor(color: RGBTuple | number | null): this {\n\t\t// Data assertions\n\t\tcolorPredicate.parse(color);\n\n\t\tif (Array.isArray(color)) {\n\t\t\tconst [red, green, blue] = color;\n\t\t\tthis.data.color = (red << 16) + (green << 8) + blue;\n\t\t\treturn this;\n\t\t}\n\n\t\tthis.data.color = color ?? undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the description of this embed.\n\t *\n\t * @param description - The description to use\n\t */\n\tpublic setDescription(description: string | null): this {\n\t\t// Data assertions\n\t\tdescriptionPredicate.parse(description);\n\n\t\tthis.data.description = description ?? undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the footer of this embed.\n\t *\n\t * @param options - The footer to use\n\t */\n\tpublic setFooter(options: EmbedFooterOptions | null): this {\n\t\tif (options === null) {\n\t\t\tthis.data.footer = undefined;\n\t\t\treturn this;\n\t\t}\n\n\t\t// Data assertions\n\t\tembedFooterPredicate.parse(options);\n\n\t\tthis.data.footer = { text: options.text, icon_url: options.iconURL };\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the image of this embed.\n\t *\n\t * @param url - The image URL to use\n\t */\n\tpublic setImage(url: string | null): this {\n\t\t// Data assertions\n\t\timageURLPredicate.parse(url);\n\n\t\tthis.data.image = url ? { url } : undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the thumbnail of this embed.\n\t *\n\t * @param url - The thumbnail URL to use\n\t */\n\tpublic setThumbnail(url: string | null): this {\n\t\t// Data assertions\n\t\timageURLPredicate.parse(url);\n\n\t\tthis.data.thumbnail = url ? { url } : undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the timestamp of this embed.\n\t *\n\t * @param timestamp - The timestamp or date to use\n\t */\n\tpublic setTimestamp(timestamp: Date | number | null = Date.now()): this {\n\t\t// Data assertions\n\t\ttimestampPredicate.parse(timestamp);\n\n\t\tthis.data.timestamp = timestamp ? new Date(timestamp).toISOString() : undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the title for this embed.\n\t *\n\t * @param title - The title to use\n\t */\n\tpublic setTitle(title: string | null): this {\n\t\t// Data assertions\n\t\ttitlePredicate.parse(title);\n\n\t\tthis.data.title = title ?? undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the URL of this embed.\n\t *\n\t * @param url - The URL to use\n\t */\n\tpublic setURL(url: string | null): this {\n\t\t// Data assertions\n\t\turlPredicate.parse(url);\n\n\t\tthis.data.url = url ?? undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Serializes this builder to API-compatible JSON data.\n\t *\n\t * @remarks\n\t * This method runs validations on the data before serializing it.\n\t * As such, it may throw an error if the data is invalid.\n\t */\n\tpublic toJSON(): APIEmbed {\n\t\treturn { ...this.data };\n\t}\n}\n","import { s } from '@sapphire/shapeshift';\nimport { ButtonStyle, ChannelType, type APIMessageComponentEmoji } from 'discord-api-types/v10';\nimport { isValidationEnabled } from '../util/validation.js';\nimport { StringSelectMenuOptionBuilder } from './selectMenu/StringSelectMenuOption.js';\n\nexport const idValidator = s\n\t.number()\n\t.safeInt()\n\t.greaterThanOrEqual(1)\n\t.lessThan(4_294_967_296) // 2^32 - 1\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const customIdValidator = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(100)\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const emojiValidator = s\n\t.object({\n\t\tid: s.string(),\n\t\tname: s.string(),\n\t\tanimated: s.boolean(),\n\t})\n\t.partial()\n\t.strict()\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const disabledValidator = s.boolean();\n\nexport const buttonLabelValidator = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(80)\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const buttonStyleValidator = s.nativeEnum(ButtonStyle);\n\nexport const placeholderValidator = s.string().lengthLessThanOrEqual(150).setValidationEnabled(isValidationEnabled);\nexport const minMaxValidator = s\n\t.number()\n\t.int()\n\t.greaterThanOrEqual(0)\n\t.lessThanOrEqual(25)\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const labelValueDescriptionValidator = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(100)\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const jsonOptionValidator = s\n\t.object({\n\t\tlabel: labelValueDescriptionValidator,\n\t\tvalue: labelValueDescriptionValidator,\n\t\tdescription: labelValueDescriptionValidator.optional(),\n\t\temoji: emojiValidator.optional(),\n\t\tdefault: s.boolean().optional(),\n\t})\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const optionValidator = s.instance(StringSelectMenuOptionBuilder).setValidationEnabled(isValidationEnabled);\n\nexport const optionsValidator = optionValidator\n\t.array()\n\t.lengthGreaterThanOrEqual(0)\n\t.setValidationEnabled(isValidationEnabled);\nexport const optionsLengthValidator = s\n\t.number()\n\t.int()\n\t.greaterThanOrEqual(0)\n\t.lessThanOrEqual(25)\n\t.setValidationEnabled(isValidationEnabled);\n\nexport function validateRequiredSelectMenuParameters(options: StringSelectMenuOptionBuilder[], customId?: string) {\n\tcustomIdValidator.parse(customId);\n\toptionsValidator.parse(options);\n}\n\nexport const defaultValidator = s.boolean();\n\nexport function validateRequiredSelectMenuOptionParameters(label?: string, value?: string) {\n\tlabelValueDescriptionValidator.parse(label);\n\tlabelValueDescriptionValidator.parse(value);\n}\n\nexport const channelTypesValidator = s.nativeEnum(ChannelType).array().setValidationEnabled(isValidationEnabled);\n\nexport const urlValidator = s\n\t.string()\n\t.url({\n\t\tallowedProtocols: ['http:', 'https:', 'discord:'],\n\t})\n\t.setValidationEnabled(isValidationEnabled);\n\nexport function validateRequiredButtonParameters(\n\tstyle?: ButtonStyle,\n\tlabel?: string,\n\temoji?: APIMessageComponentEmoji,\n\tcustomId?: string,\n\tskuId?: string,\n\turl?: string,\n) {\n\tif (style === ButtonStyle.Premium) {\n\t\tif (!skuId) {\n\t\t\tthrow new RangeError('Premium buttons must have an SKU id.');\n\t\t}\n\n\t\tif (customId || label || url || emoji) {\n\t\t\tthrow new RangeError('Premium buttons cannot have a custom id, label, URL, or emoji.');\n\t\t}\n\t} else {\n\t\tif (skuId) {\n\t\t\tthrow new RangeError('Non-premium buttons must not have an SKU id.');\n\t\t}\n\n\t\tif (url && customId) {\n\t\t\tthrow new RangeError('URL and custom id are mutually exclusive.');\n\t\t}\n\n\t\tif (!label && !emoji) {\n\t\t\tthrow new RangeError('Non-premium buttons must have a label and/or an emoji.');\n\t\t}\n\n\t\tif (style === ButtonStyle.Link) {\n\t\t\tif (!url) {\n\t\t\t\tthrow new RangeError('Link buttons must have a URL.');\n\t\t\t}\n\t\t} else if (url) {\n\t\t\tthrow new RangeError('Non-premium and non-link buttons cannot have a URL.');\n\t\t}\n\t}\n}\n","import type { JSONEncodable } from '@discordjs/util';\nimport type { APIMessageComponentEmoji, APISelectMenuOption } from 'discord-api-types/v10';\nimport {\n\tdefaultValidator,\n\temojiValidator,\n\tlabelValueDescriptionValidator,\n\tvalidateRequiredSelectMenuOptionParameters,\n} from '../Assertions.js';\n\n/**\n * A builder that creates API-compatible JSON data for string select menu options.\n */\nexport class StringSelectMenuOptionBuilder implements JSONEncodable {\n\t/**\n\t * Creates a new string select menu option from API data.\n\t *\n\t * @param data - The API data to create this string select menu option with\n\t * @example\n\t * Creating a string select menu option from an API data object:\n\t * ```ts\n\t * const selectMenuOption = new SelectMenuOptionBuilder({\n\t * \tlabel: 'catchy label',\n\t * \tvalue: '1',\n\t * });\n\t * ```\n\t * @example\n\t * Creating a string select menu option using setters and API data:\n\t * ```ts\n\t * const selectMenuOption = new SelectMenuOptionBuilder({\n\t * \tdefault: true,\n\t * \tvalue: '1',\n\t * })\n\t * \t.setLabel('woah');\n\t * ```\n\t */\n\tpublic constructor(public data: Partial = {}) {}\n\n\t/**\n\t * Sets the label for this option.\n\t *\n\t * @param label - The label to use\n\t */\n\tpublic setLabel(label: string) {\n\t\tthis.data.label = labelValueDescriptionValidator.parse(label);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the value for this option.\n\t *\n\t * @param value - The value to use\n\t */\n\tpublic setValue(value: string) {\n\t\tthis.data.value = labelValueDescriptionValidator.parse(value);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the description for this option.\n\t *\n\t * @param description - The description to use\n\t */\n\tpublic setDescription(description: string) {\n\t\tthis.data.description = labelValueDescriptionValidator.parse(description);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets whether this option is selected by default.\n\t *\n\t * @param isDefault - Whether this option is selected by default\n\t */\n\tpublic setDefault(isDefault = true) {\n\t\tthis.data.default = defaultValidator.parse(isDefault);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the emoji to display for this option.\n\t *\n\t * @param emoji - The emoji to use\n\t */\n\tpublic setEmoji(emoji: APIMessageComponentEmoji) {\n\t\tthis.data.emoji = emojiValidator.parse(emoji);\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc BaseSelectMenuBuilder.toJSON}\n\t */\n\tpublic toJSON(): APISelectMenuOption {\n\t\tvalidateRequiredSelectMenuOptionParameters(this.data.label, this.data.value);\n\n\t\treturn {\n\t\t\t...this.data,\n\t\t} as APISelectMenuOption;\n\t}\n}\n","/* eslint-disable jsdoc/check-param-names */\n\nimport {\n\ttype APIActionRowComponent,\n\tComponentType,\n\ttype APIComponentInMessageActionRow,\n\ttype APIComponentInModalActionRow,\n\ttype APIComponentInActionRow,\n} from 'discord-api-types/v10';\nimport { normalizeArray, type RestOrArray } from '../util/normalizeArray.js';\nimport { ComponentBuilder } from './Component.js';\nimport { createComponentBuilder } from './Components.js';\nimport type { ButtonBuilder } from './button/Button.js';\nimport type { ChannelSelectMenuBuilder } from './selectMenu/ChannelSelectMenu.js';\nimport type { MentionableSelectMenuBuilder } from './selectMenu/MentionableSelectMenu.js';\nimport type { RoleSelectMenuBuilder } from './selectMenu/RoleSelectMenu.js';\nimport type { StringSelectMenuBuilder } from './selectMenu/StringSelectMenu.js';\nimport type { UserSelectMenuBuilder } from './selectMenu/UserSelectMenu.js';\nimport type { TextInputBuilder } from './textInput/TextInput.js';\n\n/**\n * The builders that may be used for modals.\n */\nexport type ModalComponentBuilder = ActionRowBuilder | ModalActionRowComponentBuilder;\n\n/**\n * The builders that may be used within an action row for messages.\n */\nexport type MessageActionRowComponentBuilder =\n\t| ButtonBuilder\n\t| ChannelSelectMenuBuilder\n\t| MentionableSelectMenuBuilder\n\t| RoleSelectMenuBuilder\n\t| StringSelectMenuBuilder\n\t| UserSelectMenuBuilder;\n\n/**\n * The builders that may be used within an action row for modals.\n */\nexport type ModalActionRowComponentBuilder = TextInputBuilder;\n\n/**\n * Any builder.\n */\nexport type AnyComponentBuilder = MessageActionRowComponentBuilder | ModalActionRowComponentBuilder;\n\n/**\n * A builder that creates API-compatible JSON data for action rows.\n *\n * @typeParam ComponentType - The types of components this action row holds\n */\nexport class ActionRowBuilder extends ComponentBuilder<\n\tAPIActionRowComponent\n> {\n\t/**\n\t * The components within this action row.\n\t */\n\tpublic readonly components: ComponentType[];\n\n\t/**\n\t * Creates a new action row from API data.\n\t *\n\t * @param data - The API data to create this action row with\n\t * @example\n\t * Creating an action row from an API data object:\n\t * ```ts\n\t * const actionRow = new ActionRowBuilder({\n\t * \tcomponents: [\n\t * \t\t{\n\t * \t\t\tcustom_id: \"custom id\",\n\t * \t\t\tlabel: \"Type something\",\n\t * \t\t\tstyle: TextInputStyle.Short,\n\t * \t\t\ttype: ComponentType.TextInput,\n\t * \t\t},\n\t * \t],\n\t * });\n\t * ```\n\t * @example\n\t * Creating an action row using setters and API data:\n\t * ```ts\n\t * const actionRow = new ActionRowBuilder({\n\t * \tcomponents: [\n\t * \t\t{\n\t * \t\t\tcustom_id: \"custom id\",\n\t * \t\t\tlabel: \"Click me\",\n\t * \t\t\tstyle: ButtonStyle.Primary,\n\t * \t\t\ttype: ComponentType.Button,\n\t * \t\t},\n\t * \t],\n\t * })\n\t * \t.addComponents(button2, button3);\n\t * ```\n\t */\n\tpublic constructor({ components, ...data }: Partial> = {}) {\n\t\tsuper({ type: ComponentType.ActionRow, ...data });\n\t\tthis.components = (components?.map((component) => createComponentBuilder(component)) ?? []) as ComponentType[];\n\t}\n\n\t/**\n\t * Adds components to this action row.\n\t *\n\t * @param components - The components to add\n\t */\n\tpublic addComponents(...components: RestOrArray) {\n\t\tthis.components.push(...normalizeArray(components));\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets components for this action row.\n\t *\n\t * @param components - The components to set\n\t */\n\tpublic setComponents(...components: RestOrArray) {\n\t\tthis.components.splice(0, this.components.length, ...normalizeArray(components));\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic toJSON(): APIActionRowComponent> {\n\t\treturn {\n\t\t\t...this.data,\n\t\t\tcomponents: this.components.map((component) => component.toJSON()),\n\t\t} as APIActionRowComponent>;\n\t}\n}\n","import type { JSONEncodable } from '@discordjs/util';\nimport type {\n\tAPIActionRowComponent,\n\tAPIComponentInActionRow,\n\tAPIBaseComponent,\n\tComponentType,\n\tAPIMessageComponent,\n} from 'discord-api-types/v10';\nimport { idValidator } from './Assertions';\n\n/**\n * Any action row component data represented as an object.\n */\nexport type AnyAPIActionRowComponent =\n\t| APIActionRowComponent\n\t| APIComponentInActionRow\n\t| APIMessageComponent;\n\n/**\n * The base component builder that contains common symbols for all sorts of components.\n *\n * @typeParam DataType - The type of internal API data that is stored within the component\n */\nexport abstract class ComponentBuilder<\n\tDataType extends Partial> = APIBaseComponent,\n> implements JSONEncodable\n{\n\t/**\n\t * The API data associated with this component.\n\t */\n\tpublic readonly data: Partial;\n\n\t/**\n\t * Serializes this builder to API-compatible JSON data.\n\t *\n\t * @remarks\n\t * This method runs validations on the data before serializing it.\n\t * As such, it may throw an error if the data is invalid.\n\t */\n\tpublic abstract toJSON(): AnyAPIActionRowComponent;\n\n\t/**\n\t * Constructs a new kind of component.\n\t *\n\t * @param data - The data to construct a component out of\n\t */\n\tpublic constructor(data: Partial) {\n\t\tthis.data = data;\n\t}\n\n\t/**\n\t * Sets the id (not the custom id) for this component.\n\t *\n\t * @param id - The id for this component\n\t */\n\tpublic setId(id: number) {\n\t\tthis.data.id = idValidator.parse(id);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Clears the id of this component, defaulting to a default incremented id.\n\t */\n\tpublic clearId() {\n\t\tthis.data.id = undefined;\n\t\treturn this;\n\t}\n}\n","import type { JSONEncodable } from '@discordjs/util';\nimport { ComponentType, type APIMessageComponent, type APIModalComponent } from 'discord-api-types/v10';\nimport {\n\tActionRowBuilder,\n\ttype MessageActionRowComponentBuilder,\n\ttype AnyComponentBuilder,\n\ttype ModalComponentBuilder,\n} from './ActionRow.js';\nimport { ComponentBuilder } from './Component.js';\nimport { ButtonBuilder } from './button/Button.js';\nimport { ChannelSelectMenuBuilder } from './selectMenu/ChannelSelectMenu.js';\nimport { MentionableSelectMenuBuilder } from './selectMenu/MentionableSelectMenu.js';\nimport { RoleSelectMenuBuilder } from './selectMenu/RoleSelectMenu.js';\nimport { StringSelectMenuBuilder } from './selectMenu/StringSelectMenu.js';\nimport { UserSelectMenuBuilder } from './selectMenu/UserSelectMenu.js';\nimport { TextInputBuilder } from './textInput/TextInput.js';\nimport { ContainerBuilder } from './v2/Container.js';\nimport { FileBuilder } from './v2/File.js';\nimport { MediaGalleryBuilder } from './v2/MediaGallery.js';\nimport { SectionBuilder } from './v2/Section.js';\nimport { SeparatorBuilder } from './v2/Separator.js';\nimport { TextDisplayBuilder } from './v2/TextDisplay.js';\nimport { ThumbnailBuilder } from './v2/Thumbnail.js';\n\n/**\n * The builders that may be used for messages.\n */\nexport type MessageComponentBuilder =\n\t| ActionRowBuilder\n\t| ContainerBuilder\n\t| FileBuilder\n\t| MediaGalleryBuilder\n\t| MessageActionRowComponentBuilder\n\t| SectionBuilder\n\t| SeparatorBuilder\n\t| TextDisplayBuilder\n\t| ThumbnailBuilder;\n\n/**\n * Components here are mapped to their respective builder.\n */\nexport interface MappedComponentTypes {\n\t/**\n\t * The action row component type is associated with an {@link ActionRowBuilder}.\n\t */\n\t[ComponentType.ActionRow]: ActionRowBuilder;\n\t/**\n\t * The button component type is associated with a {@link ButtonBuilder}.\n\t */\n\t[ComponentType.Button]: ButtonBuilder;\n\t/**\n\t * The string select component type is associated with a {@link StringSelectMenuBuilder}.\n\t */\n\t[ComponentType.StringSelect]: StringSelectMenuBuilder;\n\t/**\n\t * The text input component type is associated with a {@link TextInputBuilder}.\n\t */\n\t[ComponentType.TextInput]: TextInputBuilder;\n\t/**\n\t * The user select component type is associated with a {@link UserSelectMenuBuilder}.\n\t */\n\t[ComponentType.UserSelect]: UserSelectMenuBuilder;\n\t/**\n\t * The role select component type is associated with a {@link RoleSelectMenuBuilder}.\n\t */\n\t[ComponentType.RoleSelect]: RoleSelectMenuBuilder;\n\t/**\n\t * The mentionable select component type is associated with a {@link MentionableSelectMenuBuilder}.\n\t */\n\t[ComponentType.MentionableSelect]: MentionableSelectMenuBuilder;\n\t/**\n\t * The channel select component type is associated with a {@link ChannelSelectMenuBuilder}.\n\t */\n\t[ComponentType.ChannelSelect]: ChannelSelectMenuBuilder;\n\t/**\n\t * The file component type is associated with a {@link FileBuilder}.\n\t */\n\t[ComponentType.File]: FileBuilder;\n\t/**\n\t * The separator component type is associated with a {@link SeparatorBuilder}.\n\t */\n\t[ComponentType.Separator]: SeparatorBuilder;\n\t/**\n\t * The container component type is associated with a {@link ContainerBuilder}.\n\t */\n\t[ComponentType.Container]: ContainerBuilder;\n\t/**\n\t * The text display component type is associated with a {@link TextDisplayBuilder}.\n\t */\n\t[ComponentType.TextDisplay]: TextDisplayBuilder;\n\t/**\n\t * The thumbnail component type is associated with a {@link ThumbnailBuilder}.\n\t */\n\t[ComponentType.Thumbnail]: ThumbnailBuilder;\n\t/**\n\t * The section component type is associated with a {@link SectionBuilder}.\n\t */\n\t[ComponentType.Section]: SectionBuilder;\n\t/**\n\t * The media gallery component type is associated with a {@link MediaGalleryBuilder}.\n\t */\n\t[ComponentType.MediaGallery]: MediaGalleryBuilder;\n}\n\n/**\n * Factory for creating components from API data.\n *\n * @typeParam ComponentType - The type of component to use\n * @param data - The API data to transform to a component class\n */\nexport function createComponentBuilder(\n\t// eslint-disable-next-line @typescript-eslint/sort-type-constituents\n\tdata: (APIModalComponent | APIMessageComponent) & { type: ComponentType },\n): MappedComponentTypes[ComponentType];\n\n/**\n * Factory for creating components from API data.\n *\n * @typeParam ComponentBuilder - The type of component to use\n * @param data - The API data to transform to a component class\n */\nexport function createComponentBuilder(\n\tdata: ComponentBuilder,\n): ComponentBuilder;\n\nexport function createComponentBuilder(\n\tdata: APIMessageComponent | APIModalComponent | MessageComponentBuilder,\n): ComponentBuilder {\n\tif (data instanceof ComponentBuilder) {\n\t\treturn data;\n\t}\n\n\tswitch (data.type) {\n\t\tcase ComponentType.ActionRow:\n\t\t\treturn new ActionRowBuilder(data);\n\t\tcase ComponentType.Button:\n\t\t\treturn new ButtonBuilder(data);\n\t\tcase ComponentType.StringSelect:\n\t\t\treturn new StringSelectMenuBuilder(data);\n\t\tcase ComponentType.TextInput:\n\t\t\treturn new TextInputBuilder(data);\n\t\tcase ComponentType.UserSelect:\n\t\t\treturn new UserSelectMenuBuilder(data);\n\t\tcase ComponentType.RoleSelect:\n\t\t\treturn new RoleSelectMenuBuilder(data);\n\t\tcase ComponentType.MentionableSelect:\n\t\t\treturn new MentionableSelectMenuBuilder(data);\n\t\tcase ComponentType.ChannelSelect:\n\t\t\treturn new ChannelSelectMenuBuilder(data);\n\t\tcase ComponentType.File:\n\t\t\treturn new FileBuilder(data);\n\t\tcase ComponentType.Container:\n\t\t\treturn new ContainerBuilder(data);\n\t\tcase ComponentType.Section:\n\t\t\treturn new SectionBuilder(data);\n\t\tcase ComponentType.Separator:\n\t\t\treturn new SeparatorBuilder(data);\n\t\tcase ComponentType.TextDisplay:\n\t\t\treturn new TextDisplayBuilder(data);\n\t\tcase ComponentType.Thumbnail:\n\t\t\treturn new ThumbnailBuilder(data);\n\t\tcase ComponentType.MediaGallery:\n\t\t\treturn new MediaGalleryBuilder(data);\n\t\tdefault:\n\t\t\t// @ts-expect-error This case can still occur if we get a newer unsupported component type\n\t\t\tthrow new Error(`Cannot properly serialize component type: ${data.type}`);\n\t}\n}\n\nfunction isBuilder>(\n\tbuilder: unknown,\n\tConstructor: new () => Builder,\n): builder is Builder {\n\treturn builder instanceof Constructor;\n}\n\nexport function resolveBuilder, Builder extends JSONEncodable>(\n\tbuilder: Builder | ComponentType | ((builder: Builder) => Builder),\n\tConstructor: new (data?: ComponentType) => Builder,\n) {\n\tif (isBuilder(builder, Constructor)) {\n\t\treturn builder;\n\t}\n\n\tif (typeof builder === 'function') {\n\t\treturn builder(new Constructor());\n\t}\n\n\treturn new Constructor(builder);\n}\n","import {\n\tComponentType,\n\ttype APIButtonComponent,\n\ttype APIButtonComponentWithCustomId,\n\ttype APIButtonComponentWithSKUId,\n\ttype APIButtonComponentWithURL,\n\ttype APIMessageComponentEmoji,\n\ttype ButtonStyle,\n\ttype Snowflake,\n} from 'discord-api-types/v10';\nimport {\n\tbuttonLabelValidator,\n\tbuttonStyleValidator,\n\tcustomIdValidator,\n\tdisabledValidator,\n\temojiValidator,\n\turlValidator,\n\tvalidateRequiredButtonParameters,\n} from '../Assertions.js';\nimport { ComponentBuilder } from '../Component.js';\n\n/**\n * A builder that creates API-compatible JSON data for buttons.\n */\nexport class ButtonBuilder extends ComponentBuilder {\n\t/**\n\t * Creates a new button from API data.\n\t *\n\t * @param data - The API data to create this button with\n\t * @example\n\t * Creating a button from an API data object:\n\t * ```ts\n\t * const button = new ButtonBuilder({\n\t * \tcustom_id: 'a cool button',\n\t * \tstyle: ButtonStyle.Primary,\n\t * \tlabel: 'Click Me',\n\t * \temoji: {\n\t * \t\tname: 'smile',\n\t * \t\tid: '123456789012345678',\n\t * \t},\n\t * });\n\t * ```\n\t * @example\n\t * Creating a button using setters and API data:\n\t * ```ts\n\t * const button = new ButtonBuilder({\n\t * \tstyle: ButtonStyle.Secondary,\n\t * \tlabel: 'Click Me',\n\t * })\n\t * \t.setEmoji({ name: '🙂' })\n\t * \t.setCustomId('another cool button');\n\t * ```\n\t */\n\tpublic constructor(data?: Partial) {\n\t\tsuper({ type: ComponentType.Button, ...data });\n\t}\n\n\t/**\n\t * Sets the style of this button.\n\t *\n\t * @param style - The style to use\n\t */\n\tpublic setStyle(style: ButtonStyle) {\n\t\tthis.data.style = buttonStyleValidator.parse(style);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the URL for this button.\n\t *\n\t * @remarks\n\t * This method is only available to buttons using the `Link` button style.\n\t * Only three types of URL schemes are currently supported: `https://`, `http://`, and `discord://`.\n\t * @param url - The URL to use\n\t */\n\tpublic setURL(url: string) {\n\t\t(this.data as APIButtonComponentWithURL).url = urlValidator.parse(url);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the custom id for this button.\n\t *\n\t * @remarks\n\t * This method is only applicable to buttons that are not using the `Link` button style.\n\t * @param customId - The custom id to use\n\t */\n\tpublic setCustomId(customId: string) {\n\t\t(this.data as APIButtonComponentWithCustomId).custom_id = customIdValidator.parse(customId);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the SKU id that represents a purchasable SKU for this button.\n\t *\n\t * @remarks Only available when using premium-style buttons.\n\t * @param skuId - The SKU id to use\n\t */\n\tpublic setSKUId(skuId: Snowflake) {\n\t\t(this.data as APIButtonComponentWithSKUId).sku_id = skuId;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the emoji to display on this button.\n\t *\n\t * @param emoji - The emoji to use\n\t */\n\tpublic setEmoji(emoji: APIMessageComponentEmoji) {\n\t\t(this.data as Exclude).emoji = emojiValidator.parse(emoji);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets whether this button is disabled.\n\t *\n\t * @param disabled - Whether to disable this button\n\t */\n\tpublic setDisabled(disabled = true) {\n\t\tthis.data.disabled = disabledValidator.parse(disabled);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the label for this button.\n\t *\n\t * @param label - The label to use\n\t */\n\tpublic setLabel(label: string) {\n\t\t(this.data as Exclude).label = buttonLabelValidator.parse(label);\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic toJSON(): APIButtonComponent {\n\t\tvalidateRequiredButtonParameters(\n\t\t\tthis.data.style,\n\t\t\t(this.data as Exclude).label,\n\t\t\t(this.data as Exclude).emoji,\n\t\t\t(this.data as APIButtonComponentWithCustomId).custom_id,\n\t\t\t(this.data as APIButtonComponentWithSKUId).sku_id,\n\t\t\t(this.data as APIButtonComponentWithURL).url,\n\t\t);\n\n\t\treturn {\n\t\t\t...this.data,\n\t\t} as APIButtonComponent;\n\t}\n}\n","import {\n\ttype APIChannelSelectComponent,\n\ttype ChannelType,\n\ttype Snowflake,\n\tComponentType,\n\tSelectMenuDefaultValueType,\n} from 'discord-api-types/v10';\nimport { type RestOrArray, normalizeArray } from '../../util/normalizeArray.js';\nimport { channelTypesValidator, customIdValidator, optionsLengthValidator } from '../Assertions.js';\nimport { BaseSelectMenuBuilder } from './BaseSelectMenu.js';\n\n/**\n * A builder that creates API-compatible JSON data for channel select menus.\n */\nexport class ChannelSelectMenuBuilder extends BaseSelectMenuBuilder {\n\t/**\n\t * Creates a new select menu from API data.\n\t *\n\t * @param data - The API data to create this select menu with\n\t * @example\n\t * Creating a select menu from an API data object:\n\t * ```ts\n\t * const selectMenu = new ChannelSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * \tplaceholder: 'select an option',\n\t * \tmax_values: 2,\n\t * });\n\t * ```\n\t * @example\n\t * Creating a select menu using setters and API data:\n\t * ```ts\n\t * const selectMenu = new ChannelSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * })\n\t * \t.addChannelTypes(ChannelType.GuildText, ChannelType.GuildAnnouncement)\n\t * \t.setMinValues(2);\n\t * ```\n\t */\n\tpublic constructor(data?: Partial) {\n\t\tsuper({ ...data, type: ComponentType.ChannelSelect });\n\t}\n\n\t/**\n\t * Adds channel types to this select menu.\n\t *\n\t * @param types - The channel types to use\n\t */\n\tpublic addChannelTypes(...types: RestOrArray) {\n\t\tconst normalizedTypes = normalizeArray(types);\n\t\tthis.data.channel_types ??= [];\n\t\tthis.data.channel_types.push(...channelTypesValidator.parse(normalizedTypes));\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets channel types for this select menu.\n\t *\n\t * @param types - The channel types to use\n\t */\n\tpublic setChannelTypes(...types: RestOrArray) {\n\t\tconst normalizedTypes = normalizeArray(types);\n\t\tthis.data.channel_types ??= [];\n\t\tthis.data.channel_types.splice(0, this.data.channel_types.length, ...channelTypesValidator.parse(normalizedTypes));\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds default channels to this auto populated select menu.\n\t *\n\t * @param channels - The channels to add\n\t */\n\tpublic addDefaultChannels(...channels: RestOrArray) {\n\t\tconst normalizedValues = normalizeArray(channels);\n\t\toptionsLengthValidator.parse((this.data.default_values?.length ?? 0) + normalizedValues.length);\n\t\tthis.data.default_values ??= [];\n\n\t\tthis.data.default_values.push(\n\t\t\t...normalizedValues.map((id) => ({\n\t\t\t\tid,\n\t\t\t\ttype: SelectMenuDefaultValueType.Channel as const,\n\t\t\t})),\n\t\t);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets default channels for this auto populated select menu.\n\t *\n\t * @param channels - The channels to set\n\t */\n\tpublic setDefaultChannels(...channels: RestOrArray) {\n\t\tconst normalizedValues = normalizeArray(channels);\n\t\toptionsLengthValidator.parse(normalizedValues.length);\n\n\t\tthis.data.default_values = normalizedValues.map((id) => ({\n\t\t\tid,\n\t\t\ttype: SelectMenuDefaultValueType.Channel as const,\n\t\t}));\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc BaseSelectMenuBuilder.toJSON}\n\t */\n\tpublic override toJSON(): APIChannelSelectComponent {\n\t\tcustomIdValidator.parse(this.data.custom_id);\n\n\t\treturn {\n\t\t\t...this.data,\n\t\t} as APIChannelSelectComponent;\n\t}\n}\n","import type { APISelectMenuComponent } from 'discord-api-types/v10';\nimport { customIdValidator, disabledValidator, minMaxValidator, placeholderValidator } from '../Assertions.js';\nimport { ComponentBuilder } from '../Component.js';\n\n/**\n * The base select menu builder that contains common symbols for select menu builders.\n *\n * @typeParam SelectMenuType - The type of select menu this would be instantiated for.\n */\nexport abstract class BaseSelectMenuBuilder<\n\tSelectMenuType extends APISelectMenuComponent,\n> extends ComponentBuilder {\n\t/**\n\t * Sets the placeholder for this select menu.\n\t *\n\t * @param placeholder - The placeholder to use\n\t */\n\tpublic setPlaceholder(placeholder: string) {\n\t\tthis.data.placeholder = placeholderValidator.parse(placeholder);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the minimum values that must be selected in the select menu.\n\t *\n\t * @param minValues - The minimum values that must be selected\n\t */\n\tpublic setMinValues(minValues: number) {\n\t\tthis.data.min_values = minMaxValidator.parse(minValues);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the maximum values that must be selected in the select menu.\n\t *\n\t * @param maxValues - The maximum values that must be selected\n\t */\n\tpublic setMaxValues(maxValues: number) {\n\t\tthis.data.max_values = minMaxValidator.parse(maxValues);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the custom id for this select menu.\n\t *\n\t * @param customId - The custom id to use\n\t */\n\tpublic setCustomId(customId: string) {\n\t\tthis.data.custom_id = customIdValidator.parse(customId);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets whether this select menu is disabled.\n\t *\n\t * @param disabled - Whether this select menu is disabled\n\t */\n\tpublic setDisabled(disabled = true) {\n\t\tthis.data.disabled = disabledValidator.parse(disabled);\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic toJSON(): SelectMenuType {\n\t\tcustomIdValidator.parse(this.data.custom_id);\n\t\treturn {\n\t\t\t...this.data,\n\t\t} as SelectMenuType;\n\t}\n}\n","import {\n\ttype APIMentionableSelectComponent,\n\ttype APISelectMenuDefaultValue,\n\ttype Snowflake,\n\tComponentType,\n\tSelectMenuDefaultValueType,\n} from 'discord-api-types/v10';\nimport { type RestOrArray, normalizeArray } from '../../util/normalizeArray.js';\nimport { optionsLengthValidator } from '../Assertions.js';\nimport { BaseSelectMenuBuilder } from './BaseSelectMenu.js';\n\n/**\n * A builder that creates API-compatible JSON data for mentionable select menus.\n */\nexport class MentionableSelectMenuBuilder extends BaseSelectMenuBuilder {\n\t/**\n\t * Creates a new select menu from API data.\n\t *\n\t * @param data - The API data to create this select menu with\n\t * @example\n\t * Creating a select menu from an API data object:\n\t * ```ts\n\t * const selectMenu = new MentionableSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * \tplaceholder: 'select an option',\n\t * \tmax_values: 2,\n\t * });\n\t * ```\n\t * @example\n\t * Creating a select menu using setters and API data:\n\t * ```ts\n\t * const selectMenu = new MentionableSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * })\n\t * \t.setMinValues(1);\n\t * ```\n\t */\n\tpublic constructor(data?: Partial) {\n\t\tsuper({ ...data, type: ComponentType.MentionableSelect });\n\t}\n\n\t/**\n\t * Adds default roles to this auto populated select menu.\n\t *\n\t * @param roles - The roles to add\n\t */\n\tpublic addDefaultRoles(...roles: RestOrArray) {\n\t\tconst normalizedValues = normalizeArray(roles);\n\t\toptionsLengthValidator.parse((this.data.default_values?.length ?? 0) + normalizedValues.length);\n\t\tthis.data.default_values ??= [];\n\n\t\tthis.data.default_values.push(\n\t\t\t...normalizedValues.map((id) => ({\n\t\t\t\tid,\n\t\t\t\ttype: SelectMenuDefaultValueType.Role as const,\n\t\t\t})),\n\t\t);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds default users to this auto populated select menu.\n\t *\n\t * @param users - The users to add\n\t */\n\tpublic addDefaultUsers(...users: RestOrArray) {\n\t\tconst normalizedValues = normalizeArray(users);\n\t\toptionsLengthValidator.parse((this.data.default_values?.length ?? 0) + normalizedValues.length);\n\t\tthis.data.default_values ??= [];\n\n\t\tthis.data.default_values.push(\n\t\t\t...normalizedValues.map((id) => ({\n\t\t\t\tid,\n\t\t\t\ttype: SelectMenuDefaultValueType.User as const,\n\t\t\t})),\n\t\t);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds default values to this auto populated select menu.\n\t *\n\t * @param values - The values to add\n\t */\n\tpublic addDefaultValues(\n\t\t...values: RestOrArray<\n\t\t\t| APISelectMenuDefaultValue\n\t\t\t| APISelectMenuDefaultValue\n\t\t>\n\t) {\n\t\tconst normalizedValues = normalizeArray(values);\n\t\toptionsLengthValidator.parse((this.data.default_values?.length ?? 0) + normalizedValues.length);\n\t\tthis.data.default_values ??= [];\n\t\tthis.data.default_values.push(...normalizedValues);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets default values for this auto populated select menu.\n\t *\n\t * @param values - The values to set\n\t */\n\tpublic setDefaultValues(\n\t\t...values: RestOrArray<\n\t\t\t| APISelectMenuDefaultValue\n\t\t\t| APISelectMenuDefaultValue\n\t\t>\n\t) {\n\t\tconst normalizedValues = normalizeArray(values);\n\t\toptionsLengthValidator.parse(normalizedValues.length);\n\t\tthis.data.default_values = normalizedValues;\n\t\treturn this;\n\t}\n}\n","import {\n\ttype APIRoleSelectComponent,\n\ttype Snowflake,\n\tComponentType,\n\tSelectMenuDefaultValueType,\n} from 'discord-api-types/v10';\nimport { type RestOrArray, normalizeArray } from '../../util/normalizeArray.js';\nimport { optionsLengthValidator } from '../Assertions.js';\nimport { BaseSelectMenuBuilder } from './BaseSelectMenu.js';\n\n/**\n * A builder that creates API-compatible JSON data for role select menus.\n */\nexport class RoleSelectMenuBuilder extends BaseSelectMenuBuilder {\n\t/**\n\t * Creates a new select menu from API data.\n\t *\n\t * @param data - The API data to create this select menu with\n\t * @example\n\t * Creating a select menu from an API data object:\n\t * ```ts\n\t * const selectMenu = new RoleSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * \tplaceholder: 'select an option',\n\t * \tmax_values: 2,\n\t * });\n\t * ```\n\t * @example\n\t * Creating a select menu using setters and API data:\n\t * ```ts\n\t * const selectMenu = new RoleSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * })\n\t * \t.setMinValues(1);\n\t * ```\n\t */\n\tpublic constructor(data?: Partial) {\n\t\tsuper({ ...data, type: ComponentType.RoleSelect });\n\t}\n\n\t/**\n\t * Adds default roles to this auto populated select menu.\n\t *\n\t * @param roles - The roles to add\n\t */\n\tpublic addDefaultRoles(...roles: RestOrArray) {\n\t\tconst normalizedValues = normalizeArray(roles);\n\t\toptionsLengthValidator.parse((this.data.default_values?.length ?? 0) + normalizedValues.length);\n\t\tthis.data.default_values ??= [];\n\n\t\tthis.data.default_values.push(\n\t\t\t...normalizedValues.map((id) => ({\n\t\t\t\tid,\n\t\t\t\ttype: SelectMenuDefaultValueType.Role as const,\n\t\t\t})),\n\t\t);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets default roles for this auto populated select menu.\n\t *\n\t * @param roles - The roles to set\n\t */\n\tpublic setDefaultRoles(...roles: RestOrArray) {\n\t\tconst normalizedValues = normalizeArray(roles);\n\t\toptionsLengthValidator.parse(normalizedValues.length);\n\n\t\tthis.data.default_values = normalizedValues.map((id) => ({\n\t\t\tid,\n\t\t\ttype: SelectMenuDefaultValueType.Role as const,\n\t\t}));\n\n\t\treturn this;\n\t}\n}\n","import { ComponentType } from 'discord-api-types/v10';\nimport type { APIStringSelectComponent, APISelectMenuOption } from 'discord-api-types/v10';\nimport { normalizeArray, type RestOrArray } from '../../util/normalizeArray.js';\nimport { jsonOptionValidator, optionsLengthValidator, validateRequiredSelectMenuParameters } from '../Assertions.js';\nimport { BaseSelectMenuBuilder } from './BaseSelectMenu.js';\nimport { StringSelectMenuOptionBuilder } from './StringSelectMenuOption.js';\n\n/**\n * A builder that creates API-compatible JSON data for string select menus.\n */\nexport class StringSelectMenuBuilder extends BaseSelectMenuBuilder {\n\t/**\n\t * The options within this select menu.\n\t */\n\tpublic readonly options: StringSelectMenuOptionBuilder[];\n\n\t/**\n\t * Creates a new select menu from API data.\n\t *\n\t * @param data - The API data to create this select menu with\n\t * @example\n\t * Creating a select menu from an API data object:\n\t * ```ts\n\t * const selectMenu = new StringSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * \tplaceholder: 'select an option',\n\t * \tmax_values: 2,\n\t * \toptions: [\n\t * \t\t{ label: 'option 1', value: '1' },\n\t * \t\t{ label: 'option 2', value: '2' },\n\t * \t\t{ label: 'option 3', value: '3' },\n\t * \t],\n\t * });\n\t * ```\n\t * @example\n\t * Creating a select menu using setters and API data:\n\t * ```ts\n\t * const selectMenu = new StringSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * })\n\t * \t.setMinValues(1)\n\t * \t.addOptions({\n\t * \t\tlabel: 'Catchy',\n\t * \t\tvalue: 'catch',\n\t * \t});\n\t * ```\n\t */\n\tpublic constructor(data?: Partial) {\n\t\tconst { options, ...initData } = data ?? {};\n\t\tsuper({ ...initData, type: ComponentType.StringSelect });\n\t\tthis.options = options?.map((option: APISelectMenuOption) => new StringSelectMenuOptionBuilder(option)) ?? [];\n\t}\n\n\t/**\n\t * Adds options to this select menu.\n\t *\n\t * @param options - The options to add\n\t */\n\tpublic addOptions(...options: RestOrArray) {\n\t\tconst normalizedOptions = normalizeArray(options);\n\t\toptionsLengthValidator.parse(this.options.length + normalizedOptions.length);\n\t\tthis.options.push(\n\t\t\t...normalizedOptions.map((normalizedOption) =>\n\t\t\t\tnormalizedOption instanceof StringSelectMenuOptionBuilder\n\t\t\t\t\t? normalizedOption\n\t\t\t\t\t: new StringSelectMenuOptionBuilder(jsonOptionValidator.parse(normalizedOption)),\n\t\t\t),\n\t\t);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the options for this select menu.\n\t *\n\t * @param options - The options to set\n\t */\n\tpublic setOptions(...options: RestOrArray) {\n\t\treturn this.spliceOptions(0, this.options.length, ...options);\n\t}\n\n\t/**\n\t * Removes, replaces, or inserts options for this select menu.\n\t *\n\t * @remarks\n\t * This method behaves similarly\n\t * to {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice | Array.prototype.splice()}.\n\t * It's useful for modifying and adjusting the order of existing options.\n\t * @example\n\t * Remove the first option:\n\t * ```ts\n\t * selectMenu.spliceOptions(0, 1);\n\t * ```\n\t * @example\n\t * Remove the first n option:\n\t * ```ts\n\t * const n = 4;\n\t * selectMenu.spliceOptions(0, n);\n\t * ```\n\t * @example\n\t * Remove the last option:\n\t * ```ts\n\t * selectMenu.spliceOptions(-1, 1);\n\t * ```\n\t * @param index - The index to start at\n\t * @param deleteCount - The number of options to remove\n\t * @param options - The replacing option objects or builders\n\t */\n\tpublic spliceOptions(\n\t\tindex: number,\n\t\tdeleteCount: number,\n\t\t...options: RestOrArray\n\t) {\n\t\tconst normalizedOptions = normalizeArray(options);\n\n\t\tconst clone = [...this.options];\n\n\t\tclone.splice(\n\t\t\tindex,\n\t\t\tdeleteCount,\n\t\t\t...normalizedOptions.map((normalizedOption) =>\n\t\t\t\tnormalizedOption instanceof StringSelectMenuOptionBuilder\n\t\t\t\t\t? normalizedOption\n\t\t\t\t\t: new StringSelectMenuOptionBuilder(jsonOptionValidator.parse(normalizedOption)),\n\t\t\t),\n\t\t);\n\n\t\toptionsLengthValidator.parse(clone.length);\n\t\tthis.options.splice(0, this.options.length, ...clone);\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc BaseSelectMenuBuilder.toJSON}\n\t */\n\tpublic override toJSON(): APIStringSelectComponent {\n\t\tvalidateRequiredSelectMenuParameters(this.options, this.data.custom_id);\n\n\t\treturn {\n\t\t\t...this.data,\n\t\t\toptions: this.options.map((option) => option.toJSON()),\n\t\t} as APIStringSelectComponent;\n\t}\n}\n","import {\n\ttype APIUserSelectComponent,\n\ttype Snowflake,\n\tComponentType,\n\tSelectMenuDefaultValueType,\n} from 'discord-api-types/v10';\nimport { type RestOrArray, normalizeArray } from '../../util/normalizeArray.js';\nimport { optionsLengthValidator } from '../Assertions.js';\nimport { BaseSelectMenuBuilder } from './BaseSelectMenu.js';\n\n/**\n * A builder that creates API-compatible JSON data for user select menus.\n */\nexport class UserSelectMenuBuilder extends BaseSelectMenuBuilder {\n\t/**\n\t * Creates a new select menu from API data.\n\t *\n\t * @param data - The API data to create this select menu with\n\t * @example\n\t * Creating a select menu from an API data object:\n\t * ```ts\n\t * const selectMenu = new UserSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * \tplaceholder: 'select an option',\n\t * \tmax_values: 2,\n\t * });\n\t * ```\n\t * @example\n\t * Creating a select menu using setters and API data:\n\t * ```ts\n\t * const selectMenu = new UserSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * })\n\t * \t.setMinValues(1);\n\t * ```\n\t */\n\tpublic constructor(data?: Partial) {\n\t\tsuper({ ...data, type: ComponentType.UserSelect });\n\t}\n\n\t/**\n\t * Adds default users to this auto populated select menu.\n\t *\n\t * @param users - The users to add\n\t */\n\tpublic addDefaultUsers(...users: RestOrArray) {\n\t\tconst normalizedValues = normalizeArray(users);\n\t\toptionsLengthValidator.parse((this.data.default_values?.length ?? 0) + normalizedValues.length);\n\t\tthis.data.default_values ??= [];\n\n\t\tthis.data.default_values.push(\n\t\t\t...normalizedValues.map((id) => ({\n\t\t\t\tid,\n\t\t\t\ttype: SelectMenuDefaultValueType.User as const,\n\t\t\t})),\n\t\t);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets default users for this auto populated select menu.\n\t *\n\t * @param users - The users to set\n\t */\n\tpublic setDefaultUsers(...users: RestOrArray) {\n\t\tconst normalizedValues = normalizeArray(users);\n\t\toptionsLengthValidator.parse(normalizedValues.length);\n\n\t\tthis.data.default_values = normalizedValues.map((id) => ({\n\t\t\tid,\n\t\t\ttype: SelectMenuDefaultValueType.User as const,\n\t\t}));\n\n\t\treturn this;\n\t}\n}\n","import { isJSONEncodable, type Equatable, type JSONEncodable } from '@discordjs/util';\nimport { ComponentType, type TextInputStyle, type APITextInputComponent } from 'discord-api-types/v10';\nimport isEqual from 'fast-deep-equal';\nimport { customIdValidator } from '../Assertions.js';\nimport { ComponentBuilder } from '../Component.js';\nimport {\n\tmaxLengthValidator,\n\tminLengthValidator,\n\tplaceholderValidator,\n\trequiredValidator,\n\tvalueValidator,\n\tvalidateRequiredParameters,\n\tlabelValidator,\n\ttextInputStyleValidator,\n} from './Assertions.js';\n\n/**\n * A builder that creates API-compatible JSON data for text inputs.\n */\nexport class TextInputBuilder\n\textends ComponentBuilder\n\timplements Equatable>\n{\n\t/**\n\t * Creates a new text input from API data.\n\t *\n\t * @param data - The API data to create this text input with\n\t * @example\n\t * Creating a text input from an API data object:\n\t * ```ts\n\t * const textInput = new TextInputBuilder({\n\t * \tcustom_id: 'a cool text input',\n\t * \tlabel: 'Type something',\n\t * \tstyle: TextInputStyle.Short,\n\t * });\n\t * ```\n\t * @example\n\t * Creating a text input using setters and API data:\n\t * ```ts\n\t * const textInput = new TextInputBuilder({\n\t * \tlabel: 'Type something else',\n\t * })\n\t * \t.setCustomId('woah')\n\t * \t.setStyle(TextInputStyle.Paragraph);\n\t * ```\n\t */\n\tpublic constructor(data?: APITextInputComponent & { type?: ComponentType.TextInput }) {\n\t\tsuper({ type: ComponentType.TextInput, ...data });\n\t}\n\n\t/**\n\t * Sets the custom id for this text input.\n\t *\n\t * @param customId - The custom id to use\n\t */\n\tpublic setCustomId(customId: string) {\n\t\tthis.data.custom_id = customIdValidator.parse(customId);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the label for this text input.\n\t *\n\t * @param label - The label to use\n\t */\n\tpublic setLabel(label: string) {\n\t\tthis.data.label = labelValidator.parse(label);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the style for this text input.\n\t *\n\t * @param style - The style to use\n\t */\n\tpublic setStyle(style: TextInputStyle) {\n\t\tthis.data.style = textInputStyleValidator.parse(style);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the minimum length of text for this text input.\n\t *\n\t * @param minLength - The minimum length of text for this text input\n\t */\n\tpublic setMinLength(minLength: number) {\n\t\tthis.data.min_length = minLengthValidator.parse(minLength);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the maximum length of text for this text input.\n\t *\n\t * @param maxLength - The maximum length of text for this text input\n\t */\n\tpublic setMaxLength(maxLength: number) {\n\t\tthis.data.max_length = maxLengthValidator.parse(maxLength);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the placeholder for this text input.\n\t *\n\t * @param placeholder - The placeholder to use\n\t */\n\tpublic setPlaceholder(placeholder: string) {\n\t\tthis.data.placeholder = placeholderValidator.parse(placeholder);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the value for this text input.\n\t *\n\t * @param value - The value to use\n\t */\n\tpublic setValue(value: string) {\n\t\tthis.data.value = valueValidator.parse(value);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets whether this text input is required.\n\t *\n\t * @param required - Whether this text input is required\n\t */\n\tpublic setRequired(required = true) {\n\t\tthis.data.required = requiredValidator.parse(required);\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic toJSON(): APITextInputComponent {\n\t\tvalidateRequiredParameters(this.data.custom_id, this.data.style, this.data.label);\n\n\t\treturn {\n\t\t\t...this.data,\n\t\t} as APITextInputComponent;\n\t}\n\n\t/**\n\t * Whether this is equal to another structure.\n\t */\n\tpublic equals(other: APITextInputComponent | JSONEncodable): boolean {\n\t\tif (isJSONEncodable(other)) {\n\t\t\treturn isEqual(other.toJSON(), this.data);\n\t\t}\n\n\t\treturn isEqual(other, this.data);\n\t}\n}\n","import { s } from '@sapphire/shapeshift';\nimport { TextInputStyle } from 'discord-api-types/v10';\nimport { isValidationEnabled } from '../../util/validation.js';\nimport { customIdValidator } from '../Assertions.js';\n\nexport const textInputStyleValidator = s.nativeEnum(TextInputStyle);\nexport const minLengthValidator = s\n\t.number()\n\t.int()\n\t.greaterThanOrEqual(0)\n\t.lessThanOrEqual(4_000)\n\t.setValidationEnabled(isValidationEnabled);\nexport const maxLengthValidator = s\n\t.number()\n\t.int()\n\t.greaterThanOrEqual(1)\n\t.lessThanOrEqual(4_000)\n\t.setValidationEnabled(isValidationEnabled);\nexport const requiredValidator = s.boolean();\nexport const valueValidator = s.string().lengthLessThanOrEqual(4_000).setValidationEnabled(isValidationEnabled);\nexport const placeholderValidator = s.string().lengthLessThanOrEqual(100).setValidationEnabled(isValidationEnabled);\nexport const labelValidator = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(45)\n\t.setValidationEnabled(isValidationEnabled);\n\nexport function validateRequiredParameters(customId?: string, style?: TextInputStyle, label?: string) {\n\tcustomIdValidator.parse(customId);\n\ttextInputStyleValidator.parse(style);\n\tlabelValidator.parse(label);\n}\n","/* eslint-disable jsdoc/check-param-names */\n\nimport type {\n\tAPIActionRowComponent,\n\tAPIComponentInContainer,\n\tAPIComponentInMessageActionRow,\n\tAPIContainerComponent,\n\tAPIFileComponent,\n\tAPIMediaGalleryComponent,\n\tAPISectionComponent,\n\tAPISeparatorComponent,\n\tAPITextDisplayComponent,\n} from 'discord-api-types/v10';\nimport { ComponentType } from 'discord-api-types/v10';\nimport type { RGBTuple } from '../../index.js';\nimport { MediaGalleryBuilder, SectionBuilder } from '../../index.js';\nimport { normalizeArray, type RestOrArray } from '../../util/normalizeArray.js';\nimport type { AnyComponentBuilder, MessageActionRowComponentBuilder } from '../ActionRow.js';\nimport { ActionRowBuilder } from '../ActionRow.js';\nimport { ComponentBuilder } from '../Component.js';\nimport { createComponentBuilder, resolveBuilder } from '../Components.js';\nimport { containerColorPredicate, spoilerPredicate } from './Assertions.js';\nimport { FileBuilder } from './File.js';\nimport { SeparatorBuilder } from './Separator.js';\nimport { TextDisplayBuilder } from './TextDisplay.js';\n\n/**\n * The builders that may be used within a container.\n */\nexport type ContainerComponentBuilder =\n\t| ActionRowBuilder\n\t| FileBuilder\n\t| MediaGalleryBuilder\n\t| SectionBuilder\n\t| SeparatorBuilder\n\t| TextDisplayBuilder;\n\n/**\n * A builder that creates API-compatible JSON data for a container.\n */\nexport class ContainerBuilder extends ComponentBuilder {\n\t/**\n\t * The components within this container.\n\t */\n\tpublic readonly components: ContainerComponentBuilder[];\n\n\t/**\n\t * Creates a new container from API data.\n\t *\n\t * @param data - The API data to create this container with\n\t * @example\n\t * Creating a container from an API data object:\n\t * ```ts\n\t * const container = new ContainerBuilder({\n\t * \tcomponents: [\n\t * \t\t{\n\t * \t\t\tcontent: \"Some text here\",\n\t * \t\t\ttype: ComponentType.TextDisplay,\n\t * \t\t},\n\t * \t],\n\t * });\n\t * ```\n\t * @example\n\t * Creating a container using setters and API data:\n\t * ```ts\n\t * const container = new ContainerBuilder({\n\t * \tcomponents: [\n\t * \t\t{\n\t * \t\t\tcontent: \"# Heading\",\n\t * \t\t\ttype: ComponentType.TextDisplay,\n\t * \t\t},\n\t * \t],\n\t * })\n\t * \t.addComponents(separator, section);\n\t * ```\n\t */\n\tpublic constructor({ components, ...data }: Partial = {}) {\n\t\tsuper({ type: ComponentType.Container, ...data });\n\t\tthis.components = (components?.map((component) => createComponentBuilder(component)) ??\n\t\t\t[]) as ContainerComponentBuilder[];\n\t}\n\n\t/**\n\t * Sets the accent color of this container.\n\t *\n\t * @param color - The color to use\n\t */\n\tpublic setAccentColor(color?: RGBTuple | number): this {\n\t\t// Data assertions\n\t\tcontainerColorPredicate.parse(color);\n\n\t\tif (Array.isArray(color)) {\n\t\t\tconst [red, green, blue] = color;\n\t\t\tthis.data.accent_color = (red << 16) + (green << 8) + blue;\n\t\t\treturn this;\n\t\t}\n\n\t\tthis.data.accent_color = color;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Clears the accent color of this container.\n\t */\n\tpublic clearAccentColor() {\n\t\tthis.data.accent_color = undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds action row components to this container.\n\t *\n\t * @param components - The action row components to add\n\t */\n\tpublic addActionRowComponents(\n\t\t...components: RestOrArray<\n\t\t\t| ActionRowBuilder\n\t\t\t| APIActionRowComponent\n\t\t\t| ((builder: ActionRowBuilder) => ActionRowBuilder)\n\t\t>\n\t) {\n\t\tthis.components.push(\n\t\t\t...normalizeArray(components).map((component) => resolveBuilder(component, ActionRowBuilder)),\n\t\t);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds file components to this container.\n\t *\n\t * @param components - The file components to add\n\t */\n\tpublic addFileComponents(\n\t\t...components: RestOrArray FileBuilder)>\n\t) {\n\t\tthis.components.push(...normalizeArray(components).map((component) => resolveBuilder(component, FileBuilder)));\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds media gallery components to this container.\n\t *\n\t * @param components - The media gallery components to add\n\t */\n\tpublic addMediaGalleryComponents(\n\t\t...components: RestOrArray<\n\t\t\tAPIMediaGalleryComponent | MediaGalleryBuilder | ((builder: MediaGalleryBuilder) => MediaGalleryBuilder)\n\t\t>\n\t) {\n\t\tthis.components.push(\n\t\t\t...normalizeArray(components).map((component) => resolveBuilder(component, MediaGalleryBuilder)),\n\t\t);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds section components to this container.\n\t *\n\t * @param components - The section components to add\n\t */\n\tpublic addSectionComponents(\n\t\t...components: RestOrArray SectionBuilder)>\n\t) {\n\t\tthis.components.push(...normalizeArray(components).map((component) => resolveBuilder(component, SectionBuilder)));\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds separator components to this container.\n\t *\n\t * @param components - The separator components to add\n\t */\n\tpublic addSeparatorComponents(\n\t\t...components: RestOrArray<\n\t\t\tAPISeparatorComponent | SeparatorBuilder | ((builder: SeparatorBuilder) => SeparatorBuilder)\n\t\t>\n\t) {\n\t\tthis.components.push(...normalizeArray(components).map((component) => resolveBuilder(component, SeparatorBuilder)));\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds text display components to this container.\n\t *\n\t * @param components - The text display components to add\n\t */\n\tpublic addTextDisplayComponents(\n\t\t...components: RestOrArray<\n\t\t\tAPITextDisplayComponent | TextDisplayBuilder | ((builder: TextDisplayBuilder) => TextDisplayBuilder)\n\t\t>\n\t) {\n\t\tthis.components.push(\n\t\t\t...normalizeArray(components).map((component) => resolveBuilder(component, TextDisplayBuilder)),\n\t\t);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Removes, replaces, or inserts components for this container.\n\t *\n\t * @param index - The index to start removing, replacing or inserting components\n\t * @param deleteCount - The amount of components to remove\n\t * @param components - The components to set\n\t */\n\tpublic spliceComponents(\n\t\tindex: number,\n\t\tdeleteCount: number,\n\t\t...components: RestOrArray\n\t) {\n\t\tthis.components.splice(\n\t\t\tindex,\n\t\t\tdeleteCount,\n\t\t\t...normalizeArray(components).map((component) =>\n\t\t\t\tcomponent instanceof ComponentBuilder ? component : createComponentBuilder(component),\n\t\t\t),\n\t\t);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the spoiler status of this container.\n\t *\n\t * @param spoiler - The spoiler status to use\n\t */\n\tpublic setSpoiler(spoiler = true) {\n\t\tthis.data.spoiler = spoilerPredicate.parse(spoiler);\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic toJSON(): APIContainerComponent {\n\t\treturn {\n\t\t\t...this.data,\n\t\t\tcomponents: this.components.map((component) => component.toJSON()),\n\t\t} as APIContainerComponent;\n\t}\n}\n","import { s } from '@sapphire/shapeshift';\nimport { SeparatorSpacingSize } from 'discord-api-types/v10';\nimport { colorPredicate } from '../../messages/embed/Assertions';\nimport { isValidationEnabled } from '../../util/validation';\nimport { ComponentBuilder } from '../Component';\nimport { ButtonBuilder } from '../button/Button';\nimport type { ContainerComponentBuilder } from './Container';\nimport type { MediaGalleryItemBuilder } from './MediaGalleryItem';\nimport type { TextDisplayBuilder } from './TextDisplay';\nimport { ThumbnailBuilder } from './Thumbnail';\n\nexport const unfurledMediaItemPredicate = s\n\t.object({\n\t\turl: s\n\t\t\t.string()\n\t\t\t.url(\n\t\t\t\t{ allowedProtocols: ['http:', 'https:', 'attachment:'] },\n\t\t\t\t{ message: 'Invalid protocol for media URL. Must be http:, https:, or attachment:' },\n\t\t\t),\n\t})\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const descriptionPredicate = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(1_024)\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const filePredicate = s\n\t.object({\n\t\turl: s\n\t\t\t.string()\n\t\t\t.url({ allowedProtocols: ['attachment:'] }, { message: 'Invalid protocol for file URL. Must be attachment:' }),\n\t})\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const spoilerPredicate = s.boolean();\n\nexport const dividerPredicate = s.boolean();\n\nexport const spacingPredicate = s.nativeEnum(SeparatorSpacingSize);\n\nexport const textDisplayContentPredicate = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(4_000)\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const accessoryPredicate = s\n\t.instance(ButtonBuilder)\n\t.or(s.instance(ThumbnailBuilder))\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const containerColorPredicate = colorPredicate.nullish();\n\nexport function assertReturnOfBuilder(\n\tinput: unknown,\n\tExpectedInstanceOf: new () => ReturnType,\n): asserts input is ReturnType {\n\ts.instance(ExpectedInstanceOf).setValidationEnabled(isValidationEnabled).parse(input);\n}\n\nexport function validateComponentArray<\n\tReturnType extends ContainerComponentBuilder | MediaGalleryItemBuilder = ContainerComponentBuilder,\n>(input: unknown, min: number, max: number, ExpectedInstanceOf?: new () => ReturnType): asserts input is ReturnType[] {\n\t(ExpectedInstanceOf ? s.instance(ExpectedInstanceOf) : s.instance(ComponentBuilder))\n\t\t.array()\n\t\t.lengthGreaterThanOrEqual(min)\n\t\t.lengthLessThanOrEqual(max)\n\t\t.setValidationEnabled(isValidationEnabled)\n\t\t.parse(input);\n}\n","import type { APIThumbnailComponent } from 'discord-api-types/v10';\nimport { ComponentType } from 'discord-api-types/v10';\nimport { ComponentBuilder } from '../Component';\nimport { descriptionPredicate, spoilerPredicate, unfurledMediaItemPredicate } from './Assertions';\n\nexport class ThumbnailBuilder extends ComponentBuilder {\n\t/**\n\t * Creates a new thumbnail from API data.\n\t *\n\t * @param data - The API data to create this thumbnail with\n\t * @example\n\t * Creating a thumbnail from an API data object:\n\t * ```ts\n\t * const thumbnail = new ThumbnailBuilder({\n\t * \tdescription: 'some text',\n\t * media: {\n\t * url: 'https://cdn.discordapp.com/embed/avatars/4.png',\n\t * },\n\t * });\n\t * ```\n\t * @example\n\t * Creating a thumbnail using setters and API data:\n\t * ```ts\n\t * const thumbnail = new ThumbnailBuilder({\n\t * \tmedia: {\n\t * url: 'attachment://image.png',\n\t * },\n\t * })\n\t * \t.setDescription('alt text');\n\t * ```\n\t */\n\tpublic constructor(data: Partial = {}) {\n\t\tsuper({\n\t\t\ttype: ComponentType.Thumbnail,\n\t\t\t...data,\n\t\t\tmedia: data.media ? { url: data.media.url } : undefined,\n\t\t});\n\t}\n\n\t/**\n\t * Sets the description of this thumbnail.\n\t *\n\t * @param description - The description to use\n\t */\n\tpublic setDescription(description: string) {\n\t\tthis.data.description = descriptionPredicate.parse(description);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Clears the description of this thumbnail.\n\t */\n\tpublic clearDescription() {\n\t\tthis.data.description = undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the spoiler status of this thumbnail.\n\t *\n\t * @param spoiler - The spoiler status to use\n\t */\n\tpublic setSpoiler(spoiler = true) {\n\t\tthis.data.spoiler = spoilerPredicate.parse(spoiler);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the media URL of this thumbnail.\n\t *\n\t * @param url - The URL to use\n\t */\n\tpublic setURL(url: string) {\n\t\tthis.data.media = unfurledMediaItemPredicate.parse({ url });\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritdoc ComponentBuilder.toJSON}\n\t */\n\tpublic override toJSON(): APIThumbnailComponent {\n\t\tunfurledMediaItemPredicate.parse(this.data.media);\n\n\t\treturn { ...this.data } as APIThumbnailComponent;\n\t}\n}\n","import { ComponentType, type APIFileComponent } from 'discord-api-types/v10';\nimport { ComponentBuilder } from '../Component';\nimport { filePredicate, spoilerPredicate } from './Assertions';\n\nexport class FileBuilder extends ComponentBuilder {\n\t/**\n\t * Creates a new file from API data.\n\t *\n\t * @param data - The API data to create this file with\n\t * @example\n\t * Creating a file from an API data object:\n\t * ```ts\n\t * const file = new FileBuilder({\n\t * \tspoiler: true,\n\t * \tfile: {\n\t * \t\turl: 'attachment://file.png',\n\t * \t},\n\t * });\n\t * ```\n\t * @example\n\t * Creating a file using setters and API data:\n\t * ```ts\n\t * const file = new FileBuilder({\n\t * \tfile: {\n\t * \t\turl: 'attachment://image.jpg',\n\t * \t},\n\t * })\n\t * \t.setSpoiler(false);\n\t * ```\n\t */\n\tpublic constructor(data: Partial = {}) {\n\t\tsuper({ type: ComponentType.File, ...data, file: data.file ? { url: data.file.url } : undefined });\n\t}\n\n\t/**\n\t * Sets the spoiler status of this file.\n\t *\n\t * @param spoiler - The spoiler status to use\n\t */\n\tpublic setSpoiler(spoiler = true) {\n\t\tthis.data.spoiler = spoilerPredicate.parse(spoiler);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the media URL of this file.\n\t *\n\t * @param url - The URL to use\n\t */\n\tpublic setURL(url: string) {\n\t\tthis.data.file = filePredicate.parse({ url });\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic override toJSON(): APIFileComponent {\n\t\tfilePredicate.parse(this.data.file);\n\n\t\treturn { ...this.data, file: { ...this.data.file } } as APIFileComponent;\n\t}\n}\n","import type { SeparatorSpacingSize, APISeparatorComponent } from 'discord-api-types/v10';\nimport { ComponentType } from 'discord-api-types/v10';\nimport { ComponentBuilder } from '../Component';\nimport { dividerPredicate, spacingPredicate } from './Assertions';\n\nexport class SeparatorBuilder extends ComponentBuilder {\n\t/**\n\t * Creates a new separator from API data.\n\t *\n\t * @param data - The API data to create this separator with\n\t * @example\n\t * Creating a separator from an API data object:\n\t * ```ts\n\t * const separator = new SeparatorBuilder({\n\t * \tspacing: SeparatorSpacingSize.Small,\n\t * divider: true,\n\t * });\n\t * ```\n\t * @example\n\t * Creating a separator using setters and API data:\n\t * ```ts\n\t * const separator = new SeparatorBuilder({\n\t * \tspacing: SeparatorSpacingSize.Large,\n\t * })\n\t * \t.setDivider(false);\n\t * ```\n\t */\n\tpublic constructor(data: Partial = {}) {\n\t\tsuper({\n\t\t\ttype: ComponentType.Separator,\n\t\t\t...data,\n\t\t});\n\t}\n\n\t/**\n\t * Sets whether this separator should show a divider line.\n\t *\n\t * @param divider - Whether to show a divider line\n\t */\n\tpublic setDivider(divider = true) {\n\t\tthis.data.divider = dividerPredicate.parse(divider);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the spacing of this separator.\n\t *\n\t * @param spacing - The spacing to use\n\t */\n\tpublic setSpacing(spacing: SeparatorSpacingSize) {\n\t\tthis.data.spacing = spacingPredicate.parse(spacing);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Clears the spacing of this separator.\n\t */\n\tpublic clearSpacing() {\n\t\tthis.data.spacing = undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic override toJSON(): APISeparatorComponent {\n\t\treturn { ...this.data } as APISeparatorComponent;\n\t}\n}\n","import type { APITextDisplayComponent } from 'discord-api-types/v10';\nimport { ComponentType } from 'discord-api-types/v10';\nimport { ComponentBuilder } from '../Component';\nimport { textDisplayContentPredicate } from './Assertions';\n\nexport class TextDisplayBuilder extends ComponentBuilder {\n\t/**\n\t * Creates a new text display from API data.\n\t *\n\t * @param data - The API data to create this text display with\n\t * @example\n\t * Creating a text display from an API data object:\n\t * ```ts\n\t * const textDisplay = new TextDisplayBuilder({\n\t * \tcontent: 'some text',\n\t * });\n\t * ```\n\t * @example\n\t * Creating a text display using setters and API data:\n\t * ```ts\n\t * const textDisplay = new TextDisplayBuilder({\n\t * \tcontent: 'old text',\n\t * })\n\t * \t.setContent('new text');\n\t * ```\n\t */\n\tpublic constructor(data: Partial = {}) {\n\t\tsuper({\n\t\t\ttype: ComponentType.TextDisplay,\n\t\t\t...data,\n\t\t});\n\t}\n\n\t/**\n\t * Sets the text of this text display.\n\t *\n\t * @param content - The text to use\n\t */\n\tpublic setContent(content: string) {\n\t\tthis.data.content = textDisplayContentPredicate.parse(content);\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic override toJSON(): APITextDisplayComponent {\n\t\ttextDisplayContentPredicate.parse(this.data.content);\n\n\t\treturn { ...this.data } as APITextDisplayComponent;\n\t}\n}\n","/* eslint-disable jsdoc/check-param-names */\n\nimport type { APIMediaGalleryComponent, APIMediaGalleryItem } from 'discord-api-types/v10';\nimport { ComponentType } from 'discord-api-types/v10';\nimport { normalizeArray, type RestOrArray } from '../../util/normalizeArray.js';\nimport { ComponentBuilder } from '../Component.js';\nimport { resolveBuilder } from '../Components.js';\nimport { assertReturnOfBuilder, validateComponentArray } from './Assertions.js';\nimport { MediaGalleryItemBuilder } from './MediaGalleryItem.js';\n\n/**\n * A builder that creates API-compatible JSON data for a container.\n */\nexport class MediaGalleryBuilder extends ComponentBuilder {\n\t/**\n\t * The components within this container.\n\t */\n\tpublic readonly items: MediaGalleryItemBuilder[];\n\n\t/**\n\t * Creates a new media gallery from API data.\n\t *\n\t * @param data - The API data to create this media gallery with\n\t * @example\n\t * Creating a media gallery from an API data object:\n\t * ```ts\n\t * const mediaGallery = new MediaGalleryBuilder({\n\t * \titems: [\n\t * \t\t{\n\t * \t\t\tdescription: \"Some text here\",\n\t * \t\t\tmedia: {\n\t * \t\t\t\turl: 'https://cdn.discordapp.com/embed/avatars/2.png',\n\t * \t\t\t},\n\t * \t\t},\n\t * \t],\n\t * });\n\t * ```\n\t * @example\n\t * Creating a media gallery using setters and API data:\n\t * ```ts\n\t * const mediaGallery = new MediaGalleryBuilder({\n\t * \titems: [\n\t * \t\t{\n\t * \t\t\tdescription: \"alt text\",\n\t * \t\t\tmedia: {\n\t * \t\t\t\turl: 'https://cdn.discordapp.com/embed/avatars/5.png',\n\t * \t\t\t},\n\t * \t\t},\n\t * \t],\n\t * })\n\t * \t.addItems(item2, item3);\n\t * ```\n\t */\n\tpublic constructor({ items, ...data }: Partial = {}) {\n\t\tsuper({ type: ComponentType.MediaGallery, ...data });\n\t\tthis.items = items?.map((item) => new MediaGalleryItemBuilder(item)) ?? [];\n\t}\n\n\t/**\n\t * Adds items to this media gallery.\n\t *\n\t * @param items - The items to add\n\t */\n\tpublic addItems(\n\t\t...items: RestOrArray<\n\t\t\tAPIMediaGalleryItem | MediaGalleryItemBuilder | ((builder: MediaGalleryItemBuilder) => MediaGalleryItemBuilder)\n\t\t>\n\t) {\n\t\tthis.items.push(\n\t\t\t...normalizeArray(items).map((input) => {\n\t\t\t\tconst result = resolveBuilder(input, MediaGalleryItemBuilder);\n\n\t\t\t\tassertReturnOfBuilder(result, MediaGalleryItemBuilder);\n\t\t\t\treturn result;\n\t\t\t}),\n\t\t);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Removes, replaces, or inserts media gallery items for this media gallery.\n\t *\n\t * @param index - The index to start removing, replacing or inserting items\n\t * @param deleteCount - The amount of items to remove\n\t * @param items - The items to insert\n\t */\n\tpublic spliceItems(\n\t\tindex: number,\n\t\tdeleteCount: number,\n\t\t...items: RestOrArray<\n\t\t\tAPIMediaGalleryItem | MediaGalleryItemBuilder | ((builder: MediaGalleryItemBuilder) => MediaGalleryItemBuilder)\n\t\t>\n\t) {\n\t\tthis.items.splice(\n\t\t\tindex,\n\t\t\tdeleteCount,\n\t\t\t...normalizeArray(items).map((input) => {\n\t\t\t\tconst result = resolveBuilder(input, MediaGalleryItemBuilder);\n\n\t\t\t\tassertReturnOfBuilder(result, MediaGalleryItemBuilder);\n\t\t\t\treturn result;\n\t\t\t}),\n\t\t);\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic toJSON(): APIMediaGalleryComponent {\n\t\tvalidateComponentArray(this.items, 1, 10, MediaGalleryItemBuilder);\n\t\treturn {\n\t\t\t...this.data,\n\t\t\titems: this.items.map((item) => item.toJSON()),\n\t\t} as APIMediaGalleryComponent;\n\t}\n}\n","import type { JSONEncodable } from '@discordjs/util';\nimport type { APIMediaGalleryItem } from 'discord-api-types/v10';\nimport { descriptionPredicate, spoilerPredicate, unfurledMediaItemPredicate } from './Assertions';\n\nexport class MediaGalleryItemBuilder implements JSONEncodable {\n\t/**\n\t * The API data associated with this media gallery item.\n\t */\n\tpublic readonly data: Partial;\n\n\t/**\n\t * Creates a new media gallery item from API data.\n\t *\n\t * @param data - The API data to create this media gallery item with\n\t * @example\n\t * Creating a media gallery item from an API data object:\n\t * ```ts\n\t * const item = new MediaGalleryItemBuilder({\n\t * \tdescription: \"Some text here\",\n\t * \tmedia: {\n\t * \t\turl: 'https://cdn.discordapp.com/embed/avatars/2.png',\n\t * \t},\n\t * });\n\t * ```\n\t * @example\n\t * Creating a media gallery item using setters and API data:\n\t * ```ts\n\t * const item = new MediaGalleryItemBuilder({\n\t * \tmedia: {\n\t * \t\turl: 'https://cdn.discordapp.com/embed/avatars/5.png',\n\t * \t},\n\t * })\n\t * \t.setDescription(\"alt text\");\n\t * ```\n\t */\n\tpublic constructor(data: Partial = {}) {\n\t\tthis.data = data;\n\t}\n\n\t/**\n\t * Sets the description of this media gallery item.\n\t *\n\t * @param description - The description to use\n\t */\n\tpublic setDescription(description: string) {\n\t\tthis.data.description = descriptionPredicate.parse(description);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Clears the description of this media gallery item.\n\t */\n\tpublic clearDescription() {\n\t\tthis.data.description = undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the spoiler status of this media gallery item.\n\t *\n\t * @param spoiler - The spoiler status to use\n\t */\n\tpublic setSpoiler(spoiler = true) {\n\t\tthis.data.spoiler = spoilerPredicate.parse(spoiler);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the media URL of this media gallery item.\n\t *\n\t * @param url - The URL to use\n\t */\n\tpublic setURL(url: string) {\n\t\tthis.data.media = unfurledMediaItemPredicate.parse({ url });\n\t\treturn this;\n\t}\n\n\t/**\n\t * Serializes this builder to API-compatible JSON data.\n\t *\n\t * @remarks\n\t * This method runs validations on the data before serializing it.\n\t * As such, it may throw an error if the data is invalid.\n\t */\n\tpublic toJSON(): APIMediaGalleryItem {\n\t\tunfurledMediaItemPredicate.parse(this.data.media);\n\n\t\treturn { ...this.data } as APIMediaGalleryItem;\n\t}\n}\n","/* eslint-disable jsdoc/check-param-names */\n\nimport type {\n\tAPIButtonComponent,\n\tAPISectionComponent,\n\tAPITextDisplayComponent,\n\tAPIThumbnailComponent,\n} from 'discord-api-types/v10';\nimport { ComponentType } from 'discord-api-types/v10';\nimport { ButtonBuilder, ThumbnailBuilder } from '../../index.js';\nimport { normalizeArray, type RestOrArray } from '../../util/normalizeArray.js';\nimport { ComponentBuilder } from '../Component.js';\nimport { createComponentBuilder, resolveBuilder } from '../Components.js';\nimport { accessoryPredicate, assertReturnOfBuilder, validateComponentArray } from './Assertions.js';\nimport { TextDisplayBuilder } from './TextDisplay.js';\n\n/**\n * A builder that creates API-compatible JSON data for a section.\n */\nexport class SectionBuilder extends ComponentBuilder {\n\t/**\n\t * The components within this section.\n\t */\n\tpublic readonly components: ComponentBuilder[];\n\n\t/**\n\t * The accessory of this section.\n\t */\n\tpublic readonly accessory?: ButtonBuilder | ThumbnailBuilder;\n\n\t/**\n\t * Creates a new section from API data.\n\t *\n\t * @param data - The API data to create this section with\n\t * @example\n\t * Creating a section from an API data object:\n\t * ```ts\n\t * const section = new SectionBuilder({\n\t * \tcomponents: [\n\t * \t\t{\n\t * \t\t\tcontent: \"Some text here\",\n\t * \t\t\ttype: ComponentType.TextDisplay,\n\t * \t\t},\n\t * \t],\n\t * accessory: {\n\t * media: {\n\t * url: 'https://cdn.discordapp.com/embed/avatars/3.png',\n\t * },\n\t * }\n\t * });\n\t * ```\n\t * @example\n\t * Creating a section using setters and API data:\n\t * ```ts\n\t * const section = new SectionBuilder({\n\t * \tcomponents: [\n\t * \t\t{\n\t * \t\t\tcontent: \"# Heading\",\n\t * \t\t\ttype: ComponentType.TextDisplay,\n\t * \t\t},\n\t * \t],\n\t * })\n\t * \t.setPrimaryButtonAccessory(button);\n\t * ```\n\t */\n\tpublic constructor({ components, accessory, ...data }: Partial = {}) {\n\t\tsuper({ type: ComponentType.Section, ...data });\n\t\tthis.components = (components?.map((component) => createComponentBuilder(component)) ?? []) as ComponentBuilder[];\n\t\tthis.accessory = accessory ? createComponentBuilder(accessory) : undefined;\n\t}\n\n\t/**\n\t * Sets the accessory of this section to a button.\n\t *\n\t * @param accessory - The accessory to use\n\t */\n\tpublic setButtonAccessory(\n\t\taccessory: APIButtonComponent | ButtonBuilder | ((builder: ButtonBuilder) => ButtonBuilder),\n\t): this {\n\t\tReflect.set(this, 'accessory', accessoryPredicate.parse(resolveBuilder(accessory, ButtonBuilder)));\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the accessory of this section to a thumbnail.\n\t *\n\t * @param accessory - The accessory to use\n\t */\n\tpublic setThumbnailAccessory(\n\t\taccessory: APIThumbnailComponent | ThumbnailBuilder | ((builder: ThumbnailBuilder) => ThumbnailBuilder),\n\t): this {\n\t\tReflect.set(this, 'accessory', accessoryPredicate.parse(resolveBuilder(accessory, ThumbnailBuilder)));\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds text display components to this section.\n\t *\n\t * @param components - The text display components to add\n\t */\n\tpublic addTextDisplayComponents(\n\t\t...components: RestOrArray TextDisplayBuilder)>\n\t) {\n\t\tthis.components.push(\n\t\t\t...normalizeArray(components).map((input) => {\n\t\t\t\tconst result = resolveBuilder(input, TextDisplayBuilder);\n\n\t\t\t\tassertReturnOfBuilder(result, TextDisplayBuilder);\n\t\t\t\treturn result;\n\t\t\t}),\n\t\t);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Removes, replaces, or inserts text display components for this section.\n\t *\n\t * @param index - The index to start removing, replacing or inserting text display components\n\t * @param deleteCount - The amount of text display components to remove\n\t * @param components - The text display components to insert\n\t */\n\tpublic spliceTextDisplayComponents(\n\t\tindex: number,\n\t\tdeleteCount: number,\n\t\t...components: RestOrArray<\n\t\t\tAPITextDisplayComponent | TextDisplayBuilder | ((builder: TextDisplayBuilder) => TextDisplayBuilder)\n\t\t>\n\t) {\n\t\tthis.components.splice(\n\t\t\tindex,\n\t\t\tdeleteCount,\n\t\t\t...normalizeArray(components).map((input) => {\n\t\t\t\tconst result = resolveBuilder(input, TextDisplayBuilder);\n\n\t\t\t\tassertReturnOfBuilder(result, TextDisplayBuilder);\n\t\t\t\treturn result;\n\t\t\t}),\n\t\t);\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic toJSON(): APISectionComponent {\n\t\tvalidateComponentArray(this.components, 1, 3, TextDisplayBuilder);\n\t\treturn {\n\t\t\t...this.data,\n\t\t\tcomponents: this.components.map((component) => component.toJSON()),\n\t\t\taccessory: accessoryPredicate.parse(this.accessory).toJSON(),\n\t\t} as APISectionComponent;\n\t}\n}\n","import { s } from '@sapphire/shapeshift';\nimport { ActionRowBuilder, type ModalActionRowComponentBuilder } from '../../components/ActionRow.js';\nimport { customIdValidator } from '../../components/Assertions.js';\nimport { isValidationEnabled } from '../../util/validation.js';\n\nexport const titleValidator = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(45)\n\t.setValidationEnabled(isValidationEnabled);\nexport const componentsValidator = s\n\t.instance(ActionRowBuilder)\n\t.array()\n\t.lengthGreaterThanOrEqual(1)\n\t.setValidationEnabled(isValidationEnabled);\n\nexport function validateRequiredParameters(\n\tcustomId?: string,\n\ttitle?: string,\n\tcomponents?: ActionRowBuilder[],\n) {\n\tcustomIdValidator.parse(customId);\n\ttitleValidator.parse(title);\n\tcomponentsValidator.parse(components);\n}\n","/* eslint-disable jsdoc/check-param-names */\n\nimport type { JSONEncodable } from '@discordjs/util';\nimport type {\n\tAPIActionRowComponent,\n\tAPIComponentInModalActionRow,\n\tAPIModalInteractionResponseCallbackData,\n} from 'discord-api-types/v10';\nimport { ActionRowBuilder, type ModalActionRowComponentBuilder } from '../../components/ActionRow.js';\nimport { customIdValidator } from '../../components/Assertions.js';\nimport { createComponentBuilder } from '../../components/Components.js';\nimport { normalizeArray, type RestOrArray } from '../../util/normalizeArray.js';\nimport { titleValidator, validateRequiredParameters } from './Assertions.js';\n\n/**\n * A builder that creates API-compatible JSON data for modals.\n */\nexport class ModalBuilder implements JSONEncodable {\n\t/**\n\t * The API data associated with this modal.\n\t */\n\tpublic readonly data: Partial;\n\n\t/**\n\t * The components within this modal.\n\t */\n\tpublic readonly components: ActionRowBuilder[] = [];\n\n\t/**\n\t * Creates a new modal from API data.\n\t *\n\t * @param data - The API data to create this modal with\n\t */\n\tpublic constructor({ components, ...data }: Partial = {}) {\n\t\tthis.data = { ...data };\n\t\tthis.components = (components?.map((component) => createComponentBuilder(component)) ??\n\t\t\t[]) as ActionRowBuilder[];\n\t}\n\n\t/**\n\t * Sets the title of this modal.\n\t *\n\t * @param title - The title to use\n\t */\n\tpublic setTitle(title: string) {\n\t\tthis.data.title = titleValidator.parse(title);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the custom id of this modal.\n\t *\n\t * @param customId - The custom id to use\n\t */\n\tpublic setCustomId(customId: string) {\n\t\tthis.data.custom_id = customIdValidator.parse(customId);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds components to this modal.\n\t *\n\t * @param components - The components to add\n\t */\n\tpublic addComponents(\n\t\t...components: RestOrArray<\n\t\t\tActionRowBuilder | APIActionRowComponent\n\t\t>\n\t) {\n\t\tthis.components.push(\n\t\t\t...normalizeArray(components).map((component) =>\n\t\t\t\tcomponent instanceof ActionRowBuilder\n\t\t\t\t\t? component\n\t\t\t\t\t: new ActionRowBuilder(component),\n\t\t\t),\n\t\t);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets components for this modal.\n\t *\n\t * @param components - The components to set\n\t */\n\tpublic setComponents(...components: RestOrArray>) {\n\t\tthis.components.splice(0, this.components.length, ...normalizeArray(components));\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic toJSON(): APIModalInteractionResponseCallbackData {\n\t\tvalidateRequiredParameters(this.data.custom_id, this.data.title, this.components);\n\n\t\treturn {\n\t\t\t...this.data,\n\t\t\tcomponents: this.components.map((component) => component.toJSON()),\n\t\t} as APIModalInteractionResponseCallbackData;\n\t}\n}\n","import { s } from '@sapphire/shapeshift';\nimport {\n\tApplicationIntegrationType,\n\tInteractionContextType,\n\tLocale,\n\ttype APIApplicationCommandOptionChoice,\n\ttype LocalizationMap,\n} from 'discord-api-types/v10';\nimport { isValidationEnabled } from '../../util/validation.js';\nimport type { ToAPIApplicationCommandOptions } from './SlashCommandBuilder.js';\nimport type { SlashCommandSubcommandBuilder, SlashCommandSubcommandGroupBuilder } from './SlashCommandSubcommands.js';\nimport type { ApplicationCommandOptionBase } from './mixins/ApplicationCommandOptionBase.js';\n\nconst namePredicate = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(32)\n\t.regex(/^[\\p{Ll}\\p{Lm}\\p{Lo}\\p{N}\\p{sc=Devanagari}\\p{sc=Thai}_-]+$/u)\n\t.setValidationEnabled(isValidationEnabled);\n\nexport function validateName(name: unknown): asserts name is string {\n\tnamePredicate.parse(name);\n}\n\nconst descriptionPredicate = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(100)\n\t.setValidationEnabled(isValidationEnabled);\nconst localePredicate = s.nativeEnum(Locale);\n\nexport function validateDescription(description: unknown): asserts description is string {\n\tdescriptionPredicate.parse(description);\n}\n\nconst maxArrayLengthPredicate = s.unknown().array().lengthLessThanOrEqual(25).setValidationEnabled(isValidationEnabled);\nexport function validateLocale(locale: unknown) {\n\treturn localePredicate.parse(locale);\n}\n\nexport function validateMaxOptionsLength(options: unknown): asserts options is ToAPIApplicationCommandOptions[] {\n\tmaxArrayLengthPredicate.parse(options);\n}\n\nexport function validateRequiredParameters(\n\tname: string,\n\tdescription: string,\n\toptions: ToAPIApplicationCommandOptions[],\n) {\n\t// Assert name matches all conditions\n\tvalidateName(name);\n\n\t// Assert description conditions\n\tvalidateDescription(description);\n\n\t// Assert options conditions\n\tvalidateMaxOptionsLength(options);\n}\n\nconst booleanPredicate = s.boolean();\n\nexport function validateDefaultPermission(value: unknown): asserts value is boolean {\n\tbooleanPredicate.parse(value);\n}\n\nexport function validateRequired(required: unknown): asserts required is boolean {\n\tbooleanPredicate.parse(required);\n}\n\nconst choicesLengthPredicate = s.number().lessThanOrEqual(25).setValidationEnabled(isValidationEnabled);\n\nexport function validateChoicesLength(amountAdding: number, choices?: APIApplicationCommandOptionChoice[]): void {\n\tchoicesLengthPredicate.parse((choices?.length ?? 0) + amountAdding);\n}\n\nexport function assertReturnOfBuilder<\n\tReturnType extends ApplicationCommandOptionBase | SlashCommandSubcommandBuilder | SlashCommandSubcommandGroupBuilder,\n>(input: unknown, ExpectedInstanceOf: new () => ReturnType): asserts input is ReturnType {\n\ts.instance(ExpectedInstanceOf).parse(input);\n}\n\nexport const localizationMapPredicate = s\n\t.object(Object.fromEntries(Object.values(Locale).map((locale) => [locale, s.string().nullish()])))\n\t.strict()\n\t.nullish()\n\t.setValidationEnabled(isValidationEnabled);\n\nexport function validateLocalizationMap(value: unknown): asserts value is LocalizationMap {\n\tlocalizationMapPredicate.parse(value);\n}\n\nconst dmPermissionPredicate = s.boolean().nullish();\n\nexport function validateDMPermission(value: unknown): asserts value is boolean | null | undefined {\n\tdmPermissionPredicate.parse(value);\n}\n\nconst memberPermissionPredicate = s\n\t.union([\n\t\ts.bigint().transform((value) => value.toString()),\n\t\ts\n\t\t\t.number()\n\t\t\t.safeInt()\n\t\t\t.transform((value) => value.toString()),\n\t\ts.string().regex(/^\\d+$/),\n\t])\n\t.nullish();\n\nexport function validateDefaultMemberPermissions(permissions: unknown) {\n\treturn memberPermissionPredicate.parse(permissions);\n}\n\nexport function validateNSFW(value: unknown): asserts value is boolean {\n\tbooleanPredicate.parse(value);\n}\n\nexport const contextsPredicate = s.array(\n\ts.nativeEnum(InteractionContextType).setValidationEnabled(isValidationEnabled),\n);\n\nexport const integrationTypesPredicate = s.array(\n\ts.nativeEnum(ApplicationIntegrationType).setValidationEnabled(isValidationEnabled),\n);\n","import type {\n\tAPIApplicationCommandOption,\n\tApplicationIntegrationType,\n\tInteractionContextType,\n\tLocalizationMap,\n\tPermissions,\n} from 'discord-api-types/v10';\nimport { mix } from 'ts-mixer';\nimport { SharedNameAndDescription } from './mixins/NameAndDescription.js';\nimport { SharedSlashCommand } from './mixins/SharedSlashCommand.js';\nimport { SharedSlashCommandOptions } from './mixins/SharedSlashCommandOptions.js';\nimport { SharedSlashCommandSubcommands } from './mixins/SharedSubcommands.js';\n\n/**\n * A builder that creates API-compatible JSON data for slash commands.\n */\n@mix(SharedSlashCommandOptions, SharedNameAndDescription, SharedSlashCommandSubcommands, SharedSlashCommand)\nexport class SlashCommandBuilder {\n\t/**\n\t * The name of this command.\n\t */\n\tpublic readonly name: string = undefined!;\n\n\t/**\n\t * The name localizations of this command.\n\t */\n\tpublic readonly name_localizations?: LocalizationMap;\n\n\t/**\n\t * The description of this command.\n\t */\n\tpublic readonly description: string = undefined!;\n\n\t/**\n\t * The description localizations of this command.\n\t */\n\tpublic readonly description_localizations?: LocalizationMap;\n\n\t/**\n\t * The options of this command.\n\t */\n\tpublic readonly options: ToAPIApplicationCommandOptions[] = [];\n\n\t/**\n\t * The contexts for this command.\n\t */\n\tpublic readonly contexts?: InteractionContextType[];\n\n\t/**\n\t * Whether this command is enabled by default when the application is added to a guild.\n\t *\n\t * @deprecated Use {@link SharedSlashCommand.setDefaultMemberPermissions} or {@link SharedSlashCommand.setDMPermission} instead.\n\t */\n\tpublic readonly default_permission: boolean | undefined = undefined;\n\n\t/**\n\t * The set of permissions represented as a bit set for the command.\n\t */\n\tpublic readonly default_member_permissions: Permissions | null | undefined = undefined;\n\n\t/**\n\t * Indicates whether the command is available in direct messages with the application.\n\t *\n\t * @remarks\n\t * By default, commands are visible. This property is only for global commands.\n\t * @deprecated\n\t * Use {@link SlashCommandBuilder.contexts} instead.\n\t */\n\tpublic readonly dm_permission: boolean | undefined = undefined;\n\n\t/**\n\t * The integration types for this command.\n\t */\n\tpublic readonly integration_types?: ApplicationIntegrationType[];\n\n\t/**\n\t * Whether this command is NSFW.\n\t */\n\tpublic readonly nsfw: boolean | undefined = undefined;\n}\n\nexport interface SlashCommandBuilder\n\textends SharedNameAndDescription,\n\t\tSharedSlashCommandOptions,\n\t\tSharedSlashCommandSubcommands,\n\t\tSharedSlashCommand {}\n\n/**\n * An interface specifically for slash command subcommands.\n */\nexport interface SlashCommandSubcommandsOnlyBuilder\n\textends SharedNameAndDescription,\n\t\tSharedSlashCommandSubcommands,\n\t\tSharedSlashCommand {}\n\n/**\n * An interface specifically for slash command options.\n */\nexport interface SlashCommandOptionsOnlyBuilder\n\textends SharedNameAndDescription,\n\t\tSharedSlashCommandOptions,\n\t\tSharedSlashCommand {}\n\n/**\n * An interface that ensures the `toJSON()` call will return something\n * that can be serialized into API-compatible data.\n */\nexport interface ToAPIApplicationCommandOptions {\n\ttoJSON(): APIApplicationCommandOption;\n}\n","import type { LocaleString, LocalizationMap } from 'discord-api-types/v10';\nimport { validateDescription, validateLocale, validateName } from '../Assertions.js';\n\n/**\n * This mixin holds name and description symbols for slash commands.\n */\nexport class SharedNameAndDescription {\n\t/**\n\t * The name of this command.\n\t */\n\tpublic readonly name!: string;\n\n\t/**\n\t * The name localizations of this command.\n\t */\n\tpublic readonly name_localizations?: LocalizationMap;\n\n\t/**\n\t * The description of this command.\n\t */\n\tpublic readonly description!: string;\n\n\t/**\n\t * The description localizations of this command.\n\t */\n\tpublic readonly description_localizations?: LocalizationMap;\n\n\t/**\n\t * Sets the name of this command.\n\t *\n\t * @param name - The name to use\n\t */\n\tpublic setName(name: string): this {\n\t\t// Assert the name matches the conditions\n\t\tvalidateName(name);\n\n\t\tReflect.set(this, 'name', name);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the description of this command.\n\t *\n\t * @param description - The description to use\n\t */\n\tpublic setDescription(description: string) {\n\t\t// Assert the description matches the conditions\n\t\tvalidateDescription(description);\n\n\t\tReflect.set(this, 'description', description);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets a name localization for this command.\n\t *\n\t * @param locale - The locale to set\n\t * @param localizedName - The localized name for the given `locale`\n\t */\n\tpublic setNameLocalization(locale: LocaleString, localizedName: string | null) {\n\t\tif (!this.name_localizations) {\n\t\t\tReflect.set(this, 'name_localizations', {});\n\t\t}\n\n\t\tconst parsedLocale = validateLocale(locale);\n\n\t\tif (localizedName === null) {\n\t\t\tthis.name_localizations![parsedLocale] = null;\n\t\t\treturn this;\n\t\t}\n\n\t\tvalidateName(localizedName);\n\n\t\tthis.name_localizations![parsedLocale] = localizedName;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the name localizations for this command.\n\t *\n\t * @param localizedNames - The object of localized names to set\n\t */\n\tpublic setNameLocalizations(localizedNames: LocalizationMap | null) {\n\t\tif (localizedNames === null) {\n\t\t\tReflect.set(this, 'name_localizations', null);\n\t\t\treturn this;\n\t\t}\n\n\t\tReflect.set(this, 'name_localizations', {});\n\n\t\tfor (const args of Object.entries(localizedNames)) {\n\t\t\tthis.setNameLocalization(...(args as [LocaleString, string | null]));\n\t\t}\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets a description localization for this command.\n\t *\n\t * @param locale - The locale to set\n\t * @param localizedDescription - The localized description for the given locale\n\t */\n\tpublic setDescriptionLocalization(locale: LocaleString, localizedDescription: string | null) {\n\t\tif (!this.description_localizations) {\n\t\t\tReflect.set(this, 'description_localizations', {});\n\t\t}\n\n\t\tconst parsedLocale = validateLocale(locale);\n\n\t\tif (localizedDescription === null) {\n\t\t\tthis.description_localizations![parsedLocale] = null;\n\t\t\treturn this;\n\t\t}\n\n\t\tvalidateDescription(localizedDescription);\n\n\t\tthis.description_localizations![parsedLocale] = localizedDescription;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the description localizations for this command.\n\t *\n\t * @param localizedDescriptions - The object of localized descriptions to set\n\t */\n\tpublic setDescriptionLocalizations(localizedDescriptions: LocalizationMap | null) {\n\t\tif (localizedDescriptions === null) {\n\t\t\tReflect.set(this, 'description_localizations', null);\n\t\t\treturn this;\n\t\t}\n\n\t\tReflect.set(this, 'description_localizations', {});\n\t\tfor (const args of Object.entries(localizedDescriptions)) {\n\t\t\tthis.setDescriptionLocalization(...(args as [LocaleString, string | null]));\n\t\t}\n\n\t\treturn this;\n\t}\n}\n","import {\n\tApplicationCommandType,\n\ttype ApplicationIntegrationType,\n\ttype InteractionContextType,\n\ttype LocalizationMap,\n\ttype Permissions,\n\ttype RESTPostAPIChatInputApplicationCommandsJSONBody,\n} from 'discord-api-types/v10';\nimport type { RestOrArray } from '../../../util/normalizeArray.js';\nimport { normalizeArray } from '../../../util/normalizeArray.js';\nimport {\n\tcontextsPredicate,\n\tintegrationTypesPredicate,\n\tvalidateDMPermission,\n\tvalidateDefaultMemberPermissions,\n\tvalidateDefaultPermission,\n\tvalidateLocalizationMap,\n\tvalidateNSFW,\n\tvalidateRequiredParameters,\n} from '../Assertions.js';\nimport type { ToAPIApplicationCommandOptions } from '../SlashCommandBuilder.js';\n\n/**\n * This mixin holds symbols that can be shared in slashcommands independent of options or subcommands.\n */\nexport class SharedSlashCommand {\n\tpublic readonly name: string = undefined!;\n\n\tpublic readonly name_localizations?: LocalizationMap;\n\n\tpublic readonly description: string = undefined!;\n\n\tpublic readonly description_localizations?: LocalizationMap;\n\n\tpublic readonly options: ToAPIApplicationCommandOptions[] = [];\n\n\tpublic readonly contexts?: InteractionContextType[];\n\n\t/**\n\t * @deprecated Use {@link SharedSlashCommand.setDefaultMemberPermissions} or {@link SharedSlashCommand.setDMPermission} instead.\n\t */\n\tpublic readonly default_permission: boolean | undefined = undefined;\n\n\tpublic readonly default_member_permissions: Permissions | null | undefined = undefined;\n\n\t/**\n\t * @deprecated Use {@link SharedSlashCommand.contexts} instead.\n\t */\n\tpublic readonly dm_permission: boolean | undefined = undefined;\n\n\tpublic readonly integration_types?: ApplicationIntegrationType[];\n\n\tpublic readonly nsfw: boolean | undefined = undefined;\n\n\t/**\n\t * Sets the contexts of this command.\n\t *\n\t * @param contexts - The contexts\n\t */\n\tpublic setContexts(...contexts: RestOrArray) {\n\t\tReflect.set(this, 'contexts', contextsPredicate.parse(normalizeArray(contexts)));\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the integration types of this command.\n\t *\n\t * @param integrationTypes - The integration types\n\t */\n\tpublic setIntegrationTypes(...integrationTypes: RestOrArray) {\n\t\tReflect.set(this, 'integration_types', integrationTypesPredicate.parse(normalizeArray(integrationTypes)));\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets whether the command is enabled by default when the application is added to a guild.\n\t *\n\t * @remarks\n\t * If set to `false`, you will have to later `PUT` the permissions for this command.\n\t * @param value - Whether or not to enable this command by default\n\t * @see {@link https://discord.com/developers/docs/interactions/application-commands#permissions}\n\t * @deprecated Use {@link SharedSlashCommand.setDefaultMemberPermissions} or {@link SharedSlashCommand.setDMPermission} instead.\n\t */\n\tpublic setDefaultPermission(value: boolean) {\n\t\t// Assert the value matches the conditions\n\t\tvalidateDefaultPermission(value);\n\n\t\tReflect.set(this, 'default_permission', value);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the default permissions a member should have in order to run the command.\n\t *\n\t * @remarks\n\t * You can set this to `'0'` to disable the command by default.\n\t * @param permissions - The permissions bit field to set\n\t * @see {@link https://discord.com/developers/docs/interactions/application-commands#permissions}\n\t */\n\tpublic setDefaultMemberPermissions(permissions: Permissions | bigint | number | null | undefined) {\n\t\t// Assert the value and parse it\n\t\tconst permissionValue = validateDefaultMemberPermissions(permissions);\n\n\t\tReflect.set(this, 'default_member_permissions', permissionValue);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets if the command is available in direct messages with the application.\n\t *\n\t * @remarks\n\t * By default, commands are visible. This method is only for global commands.\n\t * @param enabled - Whether the command should be enabled in direct messages\n\t * @see {@link https://discord.com/developers/docs/interactions/application-commands#permissions}\n\t * @deprecated\n\t * Use {@link SharedSlashCommand.setContexts} instead.\n\t */\n\tpublic setDMPermission(enabled: boolean | null | undefined) {\n\t\t// Assert the value matches the conditions\n\t\tvalidateDMPermission(enabled);\n\n\t\tReflect.set(this, 'dm_permission', enabled);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets whether this command is NSFW.\n\t *\n\t * @param nsfw - Whether this command is NSFW\n\t */\n\tpublic setNSFW(nsfw = true) {\n\t\t// Assert the value matches the conditions\n\t\tvalidateNSFW(nsfw);\n\t\tReflect.set(this, 'nsfw', nsfw);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Serializes this builder to API-compatible JSON data.\n\t *\n\t * @remarks\n\t * This method runs validations on the data before serializing it.\n\t * As such, it may throw an error if the data is invalid.\n\t */\n\tpublic toJSON(): RESTPostAPIChatInputApplicationCommandsJSONBody {\n\t\tvalidateRequiredParameters(this.name, this.description, this.options);\n\n\t\tvalidateLocalizationMap(this.name_localizations);\n\t\tvalidateLocalizationMap(this.description_localizations);\n\n\t\treturn {\n\t\t\t...this,\n\t\t\ttype: ApplicationCommandType.ChatInput,\n\t\t\toptions: this.options.map((option) => option.toJSON()),\n\t\t};\n\t}\n}\n","import { ApplicationCommandOptionType, type APIApplicationCommandAttachmentOption } from 'discord-api-types/v10';\nimport { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js';\n\n/**\n * A slash command attachment option.\n */\nexport class SlashCommandAttachmentOption extends ApplicationCommandOptionBase {\n\t/**\n\t * The type of this option.\n\t */\n\tpublic override readonly type = ApplicationCommandOptionType.Attachment as const;\n\n\t/**\n\t * {@inheritDoc ApplicationCommandOptionBase.toJSON}\n\t */\n\tpublic toJSON(): APIApplicationCommandAttachmentOption {\n\t\tthis.runRequiredValidations();\n\n\t\treturn { ...this };\n\t}\n}\n","import type { APIApplicationCommandBasicOption, ApplicationCommandOptionType } from 'discord-api-types/v10';\nimport { validateRequiredParameters, validateRequired, validateLocalizationMap } from '../Assertions.js';\nimport { SharedNameAndDescription } from './NameAndDescription.js';\n\n/**\n * The base application command option builder that contains common symbols for application command builders.\n */\nexport abstract class ApplicationCommandOptionBase extends SharedNameAndDescription {\n\t/**\n\t * The type of this option.\n\t */\n\tpublic abstract readonly type: ApplicationCommandOptionType;\n\n\t/**\n\t * Whether this option is required.\n\t *\n\t * @defaultValue `false`\n\t */\n\tpublic readonly required: boolean = false;\n\n\t/**\n\t * Sets whether this option is required.\n\t *\n\t * @param required - Whether this option should be required\n\t */\n\tpublic setRequired(required: boolean) {\n\t\t// Assert that you actually passed a boolean\n\t\tvalidateRequired(required);\n\n\t\tReflect.set(this, 'required', required);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Serializes this builder to API-compatible JSON data.\n\t *\n\t * @remarks\n\t * This method runs validations on the data before serializing it.\n\t * As such, it may throw an error if the data is invalid.\n\t */\n\tpublic abstract toJSON(): APIApplicationCommandBasicOption;\n\n\t/**\n\t * This method runs required validators on this builder.\n\t */\n\tprotected runRequiredValidations() {\n\t\tvalidateRequiredParameters(this.name, this.description, []);\n\n\t\t// Validate localizations\n\t\tvalidateLocalizationMap(this.name_localizations);\n\t\tvalidateLocalizationMap(this.description_localizations);\n\n\t\t// Assert that you actually passed a boolean\n\t\tvalidateRequired(this.required);\n\t}\n}\n","import { ApplicationCommandOptionType, type APIApplicationCommandBooleanOption } from 'discord-api-types/v10';\nimport { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js';\n\n/**\n * A slash command boolean option.\n */\nexport class SlashCommandBooleanOption extends ApplicationCommandOptionBase {\n\t/**\n\t * The type of this option.\n\t */\n\tpublic readonly type = ApplicationCommandOptionType.Boolean as const;\n\n\t/**\n\t * {@inheritDoc ApplicationCommandOptionBase.toJSON}\n\t */\n\tpublic toJSON(): APIApplicationCommandBooleanOption {\n\t\tthis.runRequiredValidations();\n\n\t\treturn { ...this };\n\t}\n}\n","import { ApplicationCommandOptionType, type APIApplicationCommandChannelOption } from 'discord-api-types/v10';\nimport { mix } from 'ts-mixer';\nimport { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js';\nimport { ApplicationCommandOptionChannelTypesMixin } from '../mixins/ApplicationCommandOptionChannelTypesMixin.js';\n\n/**\n * A slash command channel option.\n */\n@mix(ApplicationCommandOptionChannelTypesMixin)\nexport class SlashCommandChannelOption extends ApplicationCommandOptionBase {\n\t/**\n\t * The type of this option.\n\t */\n\tpublic override readonly type = ApplicationCommandOptionType.Channel as const;\n\n\t/**\n\t * {@inheritDoc ApplicationCommandOptionBase.toJSON}\n\t */\n\tpublic toJSON(): APIApplicationCommandChannelOption {\n\t\tthis.runRequiredValidations();\n\n\t\treturn { ...this };\n\t}\n}\n\nexport interface SlashCommandChannelOption extends ApplicationCommandOptionChannelTypesMixin {}\n","import { s } from '@sapphire/shapeshift';\nimport { ChannelType } from 'discord-api-types/v10';\nimport { normalizeArray, type RestOrArray } from '../../../util/normalizeArray';\n\n/**\n * The allowed channel types used for a channel option in a slash command builder.\n *\n * @privateRemarks This can't be dynamic because const enums are erased at runtime.\n * @internal\n */\nconst allowedChannelTypes = [\n\tChannelType.GuildText,\n\tChannelType.GuildVoice,\n\tChannelType.GuildCategory,\n\tChannelType.GuildAnnouncement,\n\tChannelType.AnnouncementThread,\n\tChannelType.PublicThread,\n\tChannelType.PrivateThread,\n\tChannelType.GuildStageVoice,\n\tChannelType.GuildForum,\n\tChannelType.GuildMedia,\n] as const;\n\n/**\n * The type of allowed channel types used for a channel option.\n */\nexport type ApplicationCommandOptionAllowedChannelTypes = (typeof allowedChannelTypes)[number];\n\nconst channelTypesPredicate = s.array(s.union(allowedChannelTypes.map((type) => s.literal(type))));\n\n/**\n * This mixin holds channel type symbols used for options.\n */\nexport class ApplicationCommandOptionChannelTypesMixin {\n\t/**\n\t * The channel types of this option.\n\t */\n\tpublic readonly channel_types?: ApplicationCommandOptionAllowedChannelTypes[];\n\n\t/**\n\t * Adds channel types to this option.\n\t *\n\t * @param channelTypes - The channel types\n\t */\n\tpublic addChannelTypes(...channelTypes: RestOrArray) {\n\t\tif (this.channel_types === undefined) {\n\t\t\tReflect.set(this, 'channel_types', []);\n\t\t}\n\n\t\tthis.channel_types!.push(...channelTypesPredicate.parse(normalizeArray(channelTypes)));\n\n\t\treturn this;\n\t}\n}\n","import { s } from '@sapphire/shapeshift';\nimport { ApplicationCommandOptionType, type APIApplicationCommandIntegerOption } from 'discord-api-types/v10';\nimport { mix } from 'ts-mixer';\nimport { ApplicationCommandNumericOptionMinMaxValueMixin } from '../mixins/ApplicationCommandNumericOptionMinMaxValueMixin.js';\nimport { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js';\nimport { ApplicationCommandOptionWithAutocompleteMixin } from '../mixins/ApplicationCommandOptionWithAutocompleteMixin.js';\nimport { ApplicationCommandOptionWithChoicesMixin } from '../mixins/ApplicationCommandOptionWithChoicesMixin.js';\n\nconst numberValidator = s.number().int();\n\n/**\n * A slash command integer option.\n */\n@mix(\n\tApplicationCommandNumericOptionMinMaxValueMixin,\n\tApplicationCommandOptionWithAutocompleteMixin,\n\tApplicationCommandOptionWithChoicesMixin,\n)\nexport class SlashCommandIntegerOption\n\textends ApplicationCommandOptionBase\n\timplements ApplicationCommandNumericOptionMinMaxValueMixin\n{\n\t/**\n\t * The type of this option.\n\t */\n\tpublic readonly type = ApplicationCommandOptionType.Integer as const;\n\n\t/**\n\t * {@inheritDoc ApplicationCommandNumericOptionMinMaxValueMixin.setMaxValue}\n\t */\n\tpublic setMaxValue(max: number): this {\n\t\tnumberValidator.parse(max);\n\n\t\tReflect.set(this, 'max_value', max);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ApplicationCommandNumericOptionMinMaxValueMixin.setMinValue}\n\t */\n\tpublic setMinValue(min: number): this {\n\t\tnumberValidator.parse(min);\n\n\t\tReflect.set(this, 'min_value', min);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ApplicationCommandOptionBase.toJSON}\n\t */\n\tpublic toJSON(): APIApplicationCommandIntegerOption {\n\t\tthis.runRequiredValidations();\n\n\t\tif (this.autocomplete && Array.isArray(this.choices) && this.choices.length > 0) {\n\t\t\tthrow new RangeError('Autocomplete and choices are mutually exclusive to each other.');\n\t\t}\n\n\t\treturn { ...this } as APIApplicationCommandIntegerOption;\n\t}\n}\n\nexport interface SlashCommandIntegerOption\n\textends ApplicationCommandNumericOptionMinMaxValueMixin,\n\t\tApplicationCommandOptionWithChoicesMixin,\n\t\tApplicationCommandOptionWithAutocompleteMixin {}\n","/**\n * This mixin holds minimum and maximum symbols used for options.\n */\nexport abstract class ApplicationCommandNumericOptionMinMaxValueMixin {\n\t/**\n\t * The maximum value of this option.\n\t */\n\tpublic readonly max_value?: number;\n\n\t/**\n\t * The minimum value of this option.\n\t */\n\tpublic readonly min_value?: number;\n\n\t/**\n\t * Sets the maximum number value of this option.\n\t *\n\t * @param max - The maximum value this option can be\n\t */\n\tpublic abstract setMaxValue(max: number): this;\n\n\t/**\n\t * Sets the minimum number value of this option.\n\t *\n\t * @param min - The minimum value this option can be\n\t */\n\tpublic abstract setMinValue(min: number): this;\n}\n","import { s } from '@sapphire/shapeshift';\nimport type { ApplicationCommandOptionType } from 'discord-api-types/v10';\n\nconst booleanPredicate = s.boolean();\n\n/**\n * This mixin holds choices and autocomplete symbols used for options.\n */\nexport class ApplicationCommandOptionWithAutocompleteMixin {\n\t/**\n\t * Whether this option utilizes autocomplete.\n\t */\n\tpublic readonly autocomplete?: boolean;\n\n\t/**\n\t * The type of this option.\n\t *\n\t * @privateRemarks Since this is present and this is a mixin, this is needed.\n\t */\n\tpublic readonly type!: ApplicationCommandOptionType;\n\n\t/**\n\t * Whether this option uses autocomplete.\n\t *\n\t * @param autocomplete - Whether this option should use autocomplete\n\t */\n\tpublic setAutocomplete(autocomplete: boolean): this {\n\t\t// Assert that you actually passed a boolean\n\t\tbooleanPredicate.parse(autocomplete);\n\n\t\tif (autocomplete && 'choices' in this && Array.isArray(this.choices) && this.choices.length > 0) {\n\t\t\tthrow new RangeError('Autocomplete and choices are mutually exclusive to each other.');\n\t\t}\n\n\t\tReflect.set(this, 'autocomplete', autocomplete);\n\n\t\treturn this;\n\t}\n}\n","import { s } from '@sapphire/shapeshift';\nimport { ApplicationCommandOptionType, type APIApplicationCommandOptionChoice } from 'discord-api-types/v10';\nimport { normalizeArray, type RestOrArray } from '../../../util/normalizeArray.js';\nimport { localizationMapPredicate, validateChoicesLength } from '../Assertions.js';\n\nconst stringPredicate = s.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(100);\nconst numberPredicate = s.number().greaterThan(Number.NEGATIVE_INFINITY).lessThan(Number.POSITIVE_INFINITY);\nconst choicesPredicate = s\n\t.object({\n\t\tname: stringPredicate,\n\t\tname_localizations: localizationMapPredicate,\n\t\tvalue: s.union([stringPredicate, numberPredicate]),\n\t})\n\t.array();\n\n/**\n * This mixin holds choices and autocomplete symbols used for options.\n */\nexport class ApplicationCommandOptionWithChoicesMixin {\n\t/**\n\t * The choices of this option.\n\t */\n\tpublic readonly choices?: APIApplicationCommandOptionChoice[];\n\n\t/**\n\t * The type of this option.\n\t *\n\t * @privateRemarks Since this is present and this is a mixin, this is needed.\n\t */\n\tpublic readonly type!: ApplicationCommandOptionType;\n\n\t/**\n\t * Adds multiple choices to this option.\n\t *\n\t * @param choices - The choices to add\n\t */\n\tpublic addChoices(...choices: RestOrArray>): this {\n\t\tconst normalizedChoices = normalizeArray(choices);\n\t\tif (normalizedChoices.length > 0 && 'autocomplete' in this && this.autocomplete) {\n\t\t\tthrow new RangeError('Autocomplete and choices are mutually exclusive to each other.');\n\t\t}\n\n\t\tchoicesPredicate.parse(normalizedChoices);\n\n\t\tif (this.choices === undefined) {\n\t\t\tReflect.set(this, 'choices', []);\n\t\t}\n\n\t\tvalidateChoicesLength(normalizedChoices.length, this.choices);\n\n\t\tfor (const { name, name_localizations, value } of normalizedChoices) {\n\t\t\t// Validate the value\n\t\t\tif (this.type === ApplicationCommandOptionType.String) {\n\t\t\t\tstringPredicate.parse(value);\n\t\t\t} else {\n\t\t\t\tnumberPredicate.parse(value);\n\t\t\t}\n\n\t\t\tthis.choices!.push({ name, name_localizations, value });\n\t\t}\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets multiple choices for this option.\n\t *\n\t * @param choices - The choices to set\n\t */\n\tpublic setChoices>(...choices: RestOrArray): this {\n\t\tconst normalizedChoices = normalizeArray(choices);\n\t\tif (normalizedChoices.length > 0 && 'autocomplete' in this && this.autocomplete) {\n\t\t\tthrow new RangeError('Autocomplete and choices are mutually exclusive to each other.');\n\t\t}\n\n\t\tchoicesPredicate.parse(normalizedChoices);\n\n\t\tReflect.set(this, 'choices', []);\n\t\tthis.addChoices(normalizedChoices);\n\n\t\treturn this;\n\t}\n}\n","import { ApplicationCommandOptionType, type APIApplicationCommandMentionableOption } from 'discord-api-types/v10';\nimport { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js';\n\n/**\n * A slash command mentionable option.\n */\nexport class SlashCommandMentionableOption extends ApplicationCommandOptionBase {\n\t/**\n\t * The type of this option.\n\t */\n\tpublic readonly type = ApplicationCommandOptionType.Mentionable as const;\n\n\t/**\n\t * {@inheritDoc ApplicationCommandOptionBase.toJSON}\n\t */\n\tpublic toJSON(): APIApplicationCommandMentionableOption {\n\t\tthis.runRequiredValidations();\n\n\t\treturn { ...this };\n\t}\n}\n","import { s } from '@sapphire/shapeshift';\nimport { ApplicationCommandOptionType, type APIApplicationCommandNumberOption } from 'discord-api-types/v10';\nimport { mix } from 'ts-mixer';\nimport { ApplicationCommandNumericOptionMinMaxValueMixin } from '../mixins/ApplicationCommandNumericOptionMinMaxValueMixin.js';\nimport { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js';\nimport { ApplicationCommandOptionWithAutocompleteMixin } from '../mixins/ApplicationCommandOptionWithAutocompleteMixin.js';\nimport { ApplicationCommandOptionWithChoicesMixin } from '../mixins/ApplicationCommandOptionWithChoicesMixin.js';\n\nconst numberValidator = s.number();\n\n/**\n * A slash command number option.\n */\n@mix(\n\tApplicationCommandNumericOptionMinMaxValueMixin,\n\tApplicationCommandOptionWithAutocompleteMixin,\n\tApplicationCommandOptionWithChoicesMixin,\n)\nexport class SlashCommandNumberOption\n\textends ApplicationCommandOptionBase\n\timplements ApplicationCommandNumericOptionMinMaxValueMixin\n{\n\t/**\n\t * The type of this option.\n\t */\n\tpublic readonly type = ApplicationCommandOptionType.Number as const;\n\n\t/**\n\t * {@inheritDoc ApplicationCommandNumericOptionMinMaxValueMixin.setMaxValue}\n\t */\n\tpublic setMaxValue(max: number): this {\n\t\tnumberValidator.parse(max);\n\n\t\tReflect.set(this, 'max_value', max);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ApplicationCommandNumericOptionMinMaxValueMixin.setMinValue}\n\t */\n\tpublic setMinValue(min: number): this {\n\t\tnumberValidator.parse(min);\n\n\t\tReflect.set(this, 'min_value', min);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ApplicationCommandOptionBase.toJSON}\n\t */\n\tpublic toJSON(): APIApplicationCommandNumberOption {\n\t\tthis.runRequiredValidations();\n\n\t\tif (this.autocomplete && Array.isArray(this.choices) && this.choices.length > 0) {\n\t\t\tthrow new RangeError('Autocomplete and choices are mutually exclusive to each other.');\n\t\t}\n\n\t\treturn { ...this } as APIApplicationCommandNumberOption;\n\t}\n}\n\nexport interface SlashCommandNumberOption\n\textends ApplicationCommandNumericOptionMinMaxValueMixin,\n\t\tApplicationCommandOptionWithChoicesMixin,\n\t\tApplicationCommandOptionWithAutocompleteMixin {}\n","import { ApplicationCommandOptionType, type APIApplicationCommandRoleOption } from 'discord-api-types/v10';\nimport { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js';\n\n/**\n * A slash command role option.\n */\nexport class SlashCommandRoleOption extends ApplicationCommandOptionBase {\n\t/**\n\t * The type of this option.\n\t */\n\tpublic override readonly type = ApplicationCommandOptionType.Role as const;\n\n\t/**\n\t * {@inheritDoc ApplicationCommandOptionBase.toJSON}\n\t */\n\tpublic toJSON(): APIApplicationCommandRoleOption {\n\t\tthis.runRequiredValidations();\n\n\t\treturn { ...this };\n\t}\n}\n","import { s } from '@sapphire/shapeshift';\nimport { ApplicationCommandOptionType, type APIApplicationCommandStringOption } from 'discord-api-types/v10';\nimport { mix } from 'ts-mixer';\nimport { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js';\nimport { ApplicationCommandOptionWithAutocompleteMixin } from '../mixins/ApplicationCommandOptionWithAutocompleteMixin.js';\nimport { ApplicationCommandOptionWithChoicesMixin } from '../mixins/ApplicationCommandOptionWithChoicesMixin.js';\n\nconst minLengthValidator = s.number().greaterThanOrEqual(0).lessThanOrEqual(6_000);\nconst maxLengthValidator = s.number().greaterThanOrEqual(1).lessThanOrEqual(6_000);\n\n/**\n * A slash command string option.\n */\n@mix(ApplicationCommandOptionWithAutocompleteMixin, ApplicationCommandOptionWithChoicesMixin)\nexport class SlashCommandStringOption extends ApplicationCommandOptionBase {\n\t/**\n\t * The type of this option.\n\t */\n\tpublic readonly type = ApplicationCommandOptionType.String as const;\n\n\t/**\n\t * The maximum length of this option.\n\t */\n\tpublic readonly max_length?: number;\n\n\t/**\n\t * The minimum length of this option.\n\t */\n\tpublic readonly min_length?: number;\n\n\t/**\n\t * Sets the maximum length of this string option.\n\t *\n\t * @param max - The maximum length this option can be\n\t */\n\tpublic setMaxLength(max: number): this {\n\t\tmaxLengthValidator.parse(max);\n\n\t\tReflect.set(this, 'max_length', max);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the minimum length of this string option.\n\t *\n\t * @param min - The minimum length this option can be\n\t */\n\tpublic setMinLength(min: number): this {\n\t\tminLengthValidator.parse(min);\n\n\t\tReflect.set(this, 'min_length', min);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ApplicationCommandOptionBase.toJSON}\n\t */\n\tpublic toJSON(): APIApplicationCommandStringOption {\n\t\tthis.runRequiredValidations();\n\n\t\tif (this.autocomplete && Array.isArray(this.choices) && this.choices.length > 0) {\n\t\t\tthrow new RangeError('Autocomplete and choices are mutually exclusive to each other.');\n\t\t}\n\n\t\treturn { ...this } as APIApplicationCommandStringOption;\n\t}\n}\n\nexport interface SlashCommandStringOption\n\textends ApplicationCommandOptionWithChoicesMixin,\n\t\tApplicationCommandOptionWithAutocompleteMixin {}\n","import { ApplicationCommandOptionType, type APIApplicationCommandUserOption } from 'discord-api-types/v10';\nimport { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js';\n\n/**\n * A slash command user option.\n */\nexport class SlashCommandUserOption extends ApplicationCommandOptionBase {\n\t/**\n\t * The type of this option.\n\t */\n\tpublic readonly type = ApplicationCommandOptionType.User as const;\n\n\t/**\n\t * {@inheritDoc ApplicationCommandOptionBase.toJSON}\n\t */\n\tpublic toJSON(): APIApplicationCommandUserOption {\n\t\tthis.runRequiredValidations();\n\n\t\treturn { ...this };\n\t}\n}\n","import { assertReturnOfBuilder, validateMaxOptionsLength } from '../Assertions.js';\nimport type { ToAPIApplicationCommandOptions } from '../SlashCommandBuilder';\nimport { SlashCommandAttachmentOption } from '../options/attachment.js';\nimport { SlashCommandBooleanOption } from '../options/boolean.js';\nimport { SlashCommandChannelOption } from '../options/channel.js';\nimport { SlashCommandIntegerOption } from '../options/integer.js';\nimport { SlashCommandMentionableOption } from '../options/mentionable.js';\nimport { SlashCommandNumberOption } from '../options/number.js';\nimport { SlashCommandRoleOption } from '../options/role.js';\nimport { SlashCommandStringOption } from '../options/string.js';\nimport { SlashCommandUserOption } from '../options/user.js';\nimport type { ApplicationCommandOptionBase } from './ApplicationCommandOptionBase.js';\n\n/**\n * This mixin holds symbols that can be shared in slash command options.\n *\n * @typeParam TypeAfterAddingOptions - The type this class should return after adding an option.\n */\nexport class SharedSlashCommandOptions<\n\tTypeAfterAddingOptions extends SharedSlashCommandOptions,\n> {\n\tpublic readonly options!: ToAPIApplicationCommandOptions[];\n\n\t/**\n\t * Adds a boolean option.\n\t *\n\t * @param input - A function that returns an option builder or an already built builder\n\t */\n\tpublic addBooleanOption(\n\t\tinput: SlashCommandBooleanOption | ((builder: SlashCommandBooleanOption) => SlashCommandBooleanOption),\n\t) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandBooleanOption);\n\t}\n\n\t/**\n\t * Adds a user option.\n\t *\n\t * @param input - A function that returns an option builder or an already built builder\n\t */\n\tpublic addUserOption(input: SlashCommandUserOption | ((builder: SlashCommandUserOption) => SlashCommandUserOption)) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandUserOption);\n\t}\n\n\t/**\n\t * Adds a channel option.\n\t *\n\t * @param input - A function that returns an option builder or an already built builder\n\t */\n\tpublic addChannelOption(\n\t\tinput: SlashCommandChannelOption | ((builder: SlashCommandChannelOption) => SlashCommandChannelOption),\n\t) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandChannelOption);\n\t}\n\n\t/**\n\t * Adds a role option.\n\t *\n\t * @param input - A function that returns an option builder or an already built builder\n\t */\n\tpublic addRoleOption(input: SlashCommandRoleOption | ((builder: SlashCommandRoleOption) => SlashCommandRoleOption)) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandRoleOption);\n\t}\n\n\t/**\n\t * Adds an attachment option.\n\t *\n\t * @param input - A function that returns an option builder or an already built builder\n\t */\n\tpublic addAttachmentOption(\n\t\tinput: SlashCommandAttachmentOption | ((builder: SlashCommandAttachmentOption) => SlashCommandAttachmentOption),\n\t) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandAttachmentOption);\n\t}\n\n\t/**\n\t * Adds a mentionable option.\n\t *\n\t * @param input - A function that returns an option builder or an already built builder\n\t */\n\tpublic addMentionableOption(\n\t\tinput: SlashCommandMentionableOption | ((builder: SlashCommandMentionableOption) => SlashCommandMentionableOption),\n\t) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandMentionableOption);\n\t}\n\n\t/**\n\t * Adds a string option.\n\t *\n\t * @param input - A function that returns an option builder or an already built builder\n\t */\n\tpublic addStringOption(\n\t\tinput: SlashCommandStringOption | ((builder: SlashCommandStringOption) => SlashCommandStringOption),\n\t) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandStringOption);\n\t}\n\n\t/**\n\t * Adds an integer option.\n\t *\n\t * @param input - A function that returns an option builder or an already built builder\n\t */\n\tpublic addIntegerOption(\n\t\tinput: SlashCommandIntegerOption | ((builder: SlashCommandIntegerOption) => SlashCommandIntegerOption),\n\t) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandIntegerOption);\n\t}\n\n\t/**\n\t * Adds a number option.\n\t *\n\t * @param input - A function that returns an option builder or an already built builder\n\t */\n\tpublic addNumberOption(\n\t\tinput: SlashCommandNumberOption | ((builder: SlashCommandNumberOption) => SlashCommandNumberOption),\n\t) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandNumberOption);\n\t}\n\n\t/**\n\t * Where the actual adding magic happens. ✨\n\t *\n\t * @param input - The input. What else?\n\t * @param Instance - The instance of whatever is being added\n\t * @internal\n\t */\n\tprivate _sharedAddOptionMethod(\n\t\tinput: OptionBuilder | ((builder: OptionBuilder) => OptionBuilder),\n\t\tInstance: new () => OptionBuilder,\n\t): TypeAfterAddingOptions {\n\t\tconst { options } = this;\n\n\t\t// First, assert options conditions - we cannot have more than 25 options\n\t\tvalidateMaxOptionsLength(options);\n\n\t\t// Get the final result\n\t\tconst result = typeof input === 'function' ? input(new Instance()) : input;\n\n\t\tassertReturnOfBuilder(result, Instance);\n\n\t\t// Push it\n\t\toptions.push(result);\n\n\t\treturn this as unknown as TypeAfterAddingOptions;\n\t}\n}\n","import {\n\tApplicationCommandOptionType,\n\ttype APIApplicationCommandSubcommandGroupOption,\n\ttype APIApplicationCommandSubcommandOption,\n} from 'discord-api-types/v10';\nimport { mix } from 'ts-mixer';\nimport { assertReturnOfBuilder, validateMaxOptionsLength, validateRequiredParameters } from './Assertions.js';\nimport type { ToAPIApplicationCommandOptions } from './SlashCommandBuilder.js';\nimport type { ApplicationCommandOptionBase } from './mixins/ApplicationCommandOptionBase.js';\nimport { SharedNameAndDescription } from './mixins/NameAndDescription.js';\nimport { SharedSlashCommandOptions } from './mixins/SharedSlashCommandOptions.js';\n\n/**\n * Represents a folder for subcommands.\n *\n * @see {@link https://discord.com/developers/docs/interactions/application-commands#subcommands-and-subcommand-groups}\n */\n@mix(SharedNameAndDescription)\nexport class SlashCommandSubcommandGroupBuilder implements ToAPIApplicationCommandOptions {\n\t/**\n\t * The name of this subcommand group.\n\t */\n\tpublic readonly name: string = undefined!;\n\n\t/**\n\t * The description of this subcommand group.\n\t */\n\tpublic readonly description: string = undefined!;\n\n\t/**\n\t * The subcommands within this subcommand group.\n\t */\n\tpublic readonly options: SlashCommandSubcommandBuilder[] = [];\n\n\t/**\n\t * Adds a new subcommand to this group.\n\t *\n\t * @param input - A function that returns a subcommand builder or an already built builder\n\t */\n\tpublic addSubcommand(\n\t\tinput:\n\t\t\t| SlashCommandSubcommandBuilder\n\t\t\t| ((subcommandGroup: SlashCommandSubcommandBuilder) => SlashCommandSubcommandBuilder),\n\t) {\n\t\tconst { options } = this;\n\n\t\t// First, assert options conditions - we cannot have more than 25 options\n\t\tvalidateMaxOptionsLength(options);\n\n\t\t// Get the final result\n\t\t// eslint-disable-next-line @typescript-eslint/no-use-before-define\n\t\tconst result = typeof input === 'function' ? input(new SlashCommandSubcommandBuilder()) : input;\n\n\t\t// eslint-disable-next-line @typescript-eslint/no-use-before-define\n\t\tassertReturnOfBuilder(result, SlashCommandSubcommandBuilder);\n\n\t\t// Push it\n\t\toptions.push(result);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Serializes this builder to API-compatible JSON data.\n\t *\n\t * @remarks\n\t * This method runs validations on the data before serializing it.\n\t * As such, it may throw an error if the data is invalid.\n\t */\n\tpublic toJSON(): APIApplicationCommandSubcommandGroupOption {\n\t\tvalidateRequiredParameters(this.name, this.description, this.options);\n\n\t\treturn {\n\t\t\ttype: ApplicationCommandOptionType.SubcommandGroup,\n\t\t\tname: this.name,\n\t\t\tname_localizations: this.name_localizations,\n\t\t\tdescription: this.description,\n\t\t\tdescription_localizations: this.description_localizations,\n\t\t\toptions: this.options.map((option) => option.toJSON()),\n\t\t};\n\t}\n}\n\nexport interface SlashCommandSubcommandGroupBuilder extends SharedNameAndDescription {}\n\n/**\n * A builder that creates API-compatible JSON data for slash command subcommands.\n *\n * @see {@link https://discord.com/developers/docs/interactions/application-commands#subcommands-and-subcommand-groups}\n */\n@mix(SharedNameAndDescription, SharedSlashCommandOptions)\nexport class SlashCommandSubcommandBuilder implements ToAPIApplicationCommandOptions {\n\t/**\n\t * The name of this subcommand.\n\t */\n\tpublic readonly name: string = undefined!;\n\n\t/**\n\t * The description of this subcommand.\n\t */\n\tpublic readonly description: string = undefined!;\n\n\t/**\n\t * The options within this subcommand.\n\t */\n\tpublic readonly options: ApplicationCommandOptionBase[] = [];\n\n\t/**\n\t * Serializes this builder to API-compatible JSON data.\n\t *\n\t * @remarks\n\t * This method runs validations on the data before serializing it.\n\t * As such, it may throw an error if the data is invalid.\n\t */\n\tpublic toJSON(): APIApplicationCommandSubcommandOption {\n\t\tvalidateRequiredParameters(this.name, this.description, this.options);\n\n\t\treturn {\n\t\t\ttype: ApplicationCommandOptionType.Subcommand,\n\t\t\tname: this.name,\n\t\t\tname_localizations: this.name_localizations,\n\t\t\tdescription: this.description,\n\t\t\tdescription_localizations: this.description_localizations,\n\t\t\toptions: this.options.map((option) => option.toJSON()),\n\t\t};\n\t}\n}\n\nexport interface SlashCommandSubcommandBuilder\n\textends SharedNameAndDescription,\n\t\tSharedSlashCommandOptions {}\n","import { assertReturnOfBuilder, validateMaxOptionsLength } from '../Assertions.js';\nimport type { ToAPIApplicationCommandOptions } from '../SlashCommandBuilder.js';\nimport { SlashCommandSubcommandBuilder, SlashCommandSubcommandGroupBuilder } from '../SlashCommandSubcommands.js';\n\n/**\n * This mixin holds symbols that can be shared in slash subcommands.\n *\n * @typeParam TypeAfterAddingSubcommands - The type this class should return after adding a subcommand or subcommand group.\n */\nexport class SharedSlashCommandSubcommands<\n\tTypeAfterAddingSubcommands extends SharedSlashCommandSubcommands,\n> {\n\tpublic readonly options: ToAPIApplicationCommandOptions[] = [];\n\n\t/**\n\t * Adds a new subcommand group to this command.\n\t *\n\t * @param input - A function that returns a subcommand group builder or an already built builder\n\t */\n\tpublic addSubcommandGroup(\n\t\tinput:\n\t\t\t| SlashCommandSubcommandGroupBuilder\n\t\t\t| ((subcommandGroup: SlashCommandSubcommandGroupBuilder) => SlashCommandSubcommandGroupBuilder),\n\t): TypeAfterAddingSubcommands {\n\t\tconst { options } = this;\n\n\t\t// First, assert options conditions - we cannot have more than 25 options\n\t\tvalidateMaxOptionsLength(options);\n\n\t\t// Get the final result\n\t\tconst result = typeof input === 'function' ? input(new SlashCommandSubcommandGroupBuilder()) : input;\n\n\t\tassertReturnOfBuilder(result, SlashCommandSubcommandGroupBuilder);\n\n\t\t// Push it\n\t\toptions.push(result);\n\n\t\treturn this as unknown as TypeAfterAddingSubcommands;\n\t}\n\n\t/**\n\t * Adds a new subcommand to this command.\n\t *\n\t * @param input - A function that returns a subcommand builder or an already built builder\n\t */\n\tpublic addSubcommand(\n\t\tinput:\n\t\t\t| SlashCommandSubcommandBuilder\n\t\t\t| ((subcommandGroup: SlashCommandSubcommandBuilder) => SlashCommandSubcommandBuilder),\n\t): TypeAfterAddingSubcommands {\n\t\tconst { options } = this;\n\n\t\t// First, assert options conditions - we cannot have more than 25 options\n\t\tvalidateMaxOptionsLength(options);\n\n\t\t// Get the final result\n\t\tconst result = typeof input === 'function' ? input(new SlashCommandSubcommandBuilder()) : input;\n\n\t\tassertReturnOfBuilder(result, SlashCommandSubcommandBuilder);\n\n\t\t// Push it\n\t\toptions.push(result);\n\n\t\treturn this as unknown as TypeAfterAddingSubcommands;\n\t}\n}\n","import { s } from '@sapphire/shapeshift';\nimport { ApplicationCommandType, ApplicationIntegrationType, InteractionContextType } from 'discord-api-types/v10';\nimport { isValidationEnabled } from '../../util/validation.js';\nimport type { ContextMenuCommandType } from './ContextMenuCommandBuilder.js';\n\nconst namePredicate = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(32)\n\t.regex(/\\S/)\n\t.setValidationEnabled(isValidationEnabled);\nconst typePredicate = s\n\t.union([s.literal(ApplicationCommandType.User), s.literal(ApplicationCommandType.Message)])\n\t.setValidationEnabled(isValidationEnabled);\nconst booleanPredicate = s.boolean();\n\nexport function validateDefaultPermission(value: unknown): asserts value is boolean {\n\tbooleanPredicate.parse(value);\n}\n\nexport function validateName(name: unknown): asserts name is string {\n\tnamePredicate.parse(name);\n}\n\nexport function validateType(type: unknown): asserts type is ContextMenuCommandType {\n\ttypePredicate.parse(type);\n}\n\nexport function validateRequiredParameters(name: string, type: number) {\n\t// Assert name matches all conditions\n\tvalidateName(name);\n\n\t// Assert type is valid\n\tvalidateType(type);\n}\n\nconst dmPermissionPredicate = s.boolean().nullish();\n\nexport function validateDMPermission(value: unknown): asserts value is boolean | null | undefined {\n\tdmPermissionPredicate.parse(value);\n}\n\nconst memberPermissionPredicate = s\n\t.union([\n\t\ts.bigint().transform((value) => value.toString()),\n\t\ts\n\t\t\t.number()\n\t\t\t.safeInt()\n\t\t\t.transform((value) => value.toString()),\n\t\ts.string().regex(/^\\d+$/),\n\t])\n\t.nullish();\n\nexport function validateDefaultMemberPermissions(permissions: unknown) {\n\treturn memberPermissionPredicate.parse(permissions);\n}\n\nexport const contextsPredicate = s.array(\n\ts.nativeEnum(InteractionContextType).setValidationEnabled(isValidationEnabled),\n);\n\nexport const integrationTypesPredicate = s.array(\n\ts.nativeEnum(ApplicationIntegrationType).setValidationEnabled(isValidationEnabled),\n);\n","import type {\n\tApplicationCommandType,\n\tApplicationIntegrationType,\n\tInteractionContextType,\n\tLocaleString,\n\tLocalizationMap,\n\tPermissions,\n\tRESTPostAPIContextMenuApplicationCommandsJSONBody,\n} from 'discord-api-types/v10';\nimport type { RestOrArray } from '../../util/normalizeArray.js';\nimport { normalizeArray } from '../../util/normalizeArray.js';\nimport { validateLocale, validateLocalizationMap } from '../slashCommands/Assertions.js';\nimport {\n\tvalidateRequiredParameters,\n\tvalidateName,\n\tvalidateType,\n\tvalidateDefaultPermission,\n\tvalidateDefaultMemberPermissions,\n\tvalidateDMPermission,\n\tcontextsPredicate,\n\tintegrationTypesPredicate,\n} from './Assertions.js';\n\n/**\n * The type a context menu command can be.\n */\nexport type ContextMenuCommandType = ApplicationCommandType.Message | ApplicationCommandType.User;\n\n/**\n * A builder that creates API-compatible JSON data for context menu commands.\n */\nexport class ContextMenuCommandBuilder {\n\t/**\n\t * The name of this command.\n\t */\n\tpublic readonly name: string = undefined!;\n\n\t/**\n\t * The name localizations of this command.\n\t */\n\tpublic readonly name_localizations?: LocalizationMap;\n\n\t/**\n\t * The type of this command.\n\t */\n\tpublic readonly type: ContextMenuCommandType = undefined!;\n\n\t/**\n\t * The contexts for this command.\n\t */\n\tpublic readonly contexts?: InteractionContextType[];\n\n\t/**\n\t * Whether this command is enabled by default when the application is added to a guild.\n\t *\n\t * @deprecated Use {@link ContextMenuCommandBuilder.setDefaultMemberPermissions} or {@link ContextMenuCommandBuilder.setDMPermission} instead.\n\t */\n\tpublic readonly default_permission: boolean | undefined = undefined;\n\n\t/**\n\t * The set of permissions represented as a bit set for the command.\n\t */\n\tpublic readonly default_member_permissions: Permissions | null | undefined = undefined;\n\n\t/**\n\t * Indicates whether the command is available in direct messages with the application.\n\t *\n\t * @remarks\n\t * By default, commands are visible. This property is only for global commands.\n\t * @deprecated\n\t * Use {@link ContextMenuCommandBuilder.contexts} instead.\n\t */\n\tpublic readonly dm_permission: boolean | undefined = undefined;\n\n\t/**\n\t * The integration types for this command.\n\t */\n\tpublic readonly integration_types?: ApplicationIntegrationType[];\n\n\t/**\n\t * Sets the contexts of this command.\n\t *\n\t * @param contexts - The contexts\n\t */\n\tpublic setContexts(...contexts: RestOrArray) {\n\t\tReflect.set(this, 'contexts', contextsPredicate.parse(normalizeArray(contexts)));\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets integration types of this command.\n\t *\n\t * @param integrationTypes - The integration types\n\t */\n\tpublic setIntegrationTypes(...integrationTypes: RestOrArray) {\n\t\tReflect.set(this, 'integration_types', integrationTypesPredicate.parse(normalizeArray(integrationTypes)));\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the name of this command.\n\t *\n\t * @param name - The name to use\n\t */\n\tpublic setName(name: string) {\n\t\t// Assert the name matches the conditions\n\t\tvalidateName(name);\n\n\t\tReflect.set(this, 'name', name);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the type of this command.\n\t *\n\t * @param type - The type to use\n\t */\n\tpublic setType(type: ContextMenuCommandType) {\n\t\t// Assert the type is valid\n\t\tvalidateType(type);\n\n\t\tReflect.set(this, 'type', type);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets whether the command is enabled by default when the application is added to a guild.\n\t *\n\t * @remarks\n\t * If set to `false`, you will have to later `PUT` the permissions for this command.\n\t * @param value - Whether to enable this command by default\n\t * @see {@link https://discord.com/developers/docs/interactions/application-commands#permissions}\n\t * @deprecated Use {@link ContextMenuCommandBuilder.setDefaultMemberPermissions} or {@link ContextMenuCommandBuilder.setDMPermission} instead.\n\t */\n\tpublic setDefaultPermission(value: boolean) {\n\t\t// Assert the value matches the conditions\n\t\tvalidateDefaultPermission(value);\n\n\t\tReflect.set(this, 'default_permission', value);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the default permissions a member should have in order to run this command.\n\t *\n\t * @remarks\n\t * You can set this to `'0'` to disable the command by default.\n\t * @param permissions - The permissions bit field to set\n\t * @see {@link https://discord.com/developers/docs/interactions/application-commands#permissions}\n\t */\n\tpublic setDefaultMemberPermissions(permissions: Permissions | bigint | number | null | undefined) {\n\t\t// Assert the value and parse it\n\t\tconst permissionValue = validateDefaultMemberPermissions(permissions);\n\n\t\tReflect.set(this, 'default_member_permissions', permissionValue);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets if the command is available in direct messages with the application.\n\t *\n\t * @remarks\n\t * By default, commands are visible. This method is only for global commands.\n\t * @param enabled - Whether the command should be enabled in direct messages\n\t * @see {@link https://discord.com/developers/docs/interactions/application-commands#permissions}\n\t * @deprecated Use {@link ContextMenuCommandBuilder.setContexts} instead.\n\t */\n\tpublic setDMPermission(enabled: boolean | null | undefined) {\n\t\t// Assert the value matches the conditions\n\t\tvalidateDMPermission(enabled);\n\n\t\tReflect.set(this, 'dm_permission', enabled);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets a name localization for this command.\n\t *\n\t * @param locale - The locale to set\n\t * @param localizedName - The localized name for the given `locale`\n\t */\n\tpublic setNameLocalization(locale: LocaleString, localizedName: string | null) {\n\t\tif (!this.name_localizations) {\n\t\t\tReflect.set(this, 'name_localizations', {});\n\t\t}\n\n\t\tconst parsedLocale = validateLocale(locale);\n\n\t\tif (localizedName === null) {\n\t\t\tthis.name_localizations![parsedLocale] = null;\n\t\t\treturn this;\n\t\t}\n\n\t\tvalidateName(localizedName);\n\n\t\tthis.name_localizations![parsedLocale] = localizedName;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the name localizations for this command.\n\t *\n\t * @param localizedNames - The object of localized names to set\n\t */\n\tpublic setNameLocalizations(localizedNames: LocalizationMap | null) {\n\t\tif (localizedNames === null) {\n\t\t\tReflect.set(this, 'name_localizations', null);\n\t\t\treturn this;\n\t\t}\n\n\t\tReflect.set(this, 'name_localizations', {});\n\n\t\tfor (const args of Object.entries(localizedNames))\n\t\t\tthis.setNameLocalization(...(args as [LocaleString, string | null]));\n\t\treturn this;\n\t}\n\n\t/**\n\t * Serializes this builder to API-compatible JSON data.\n\t *\n\t * @remarks\n\t * This method runs validations on the data before serializing it.\n\t * As such, it may throw an error if the data is invalid.\n\t */\n\tpublic toJSON(): RESTPostAPIContextMenuApplicationCommandsJSONBody {\n\t\tvalidateRequiredParameters(this.name, this.type);\n\n\t\tvalidateLocalizationMap(this.name_localizations);\n\n\t\treturn { ...this };\n\t}\n}\n","import type { APIEmbed } from 'discord-api-types/v10';\n\n/**\n * Calculates the length of the embed.\n *\n * @param data - The embed data to check\n */\nexport function embedLength(data: APIEmbed) {\n\treturn (\n\t\t(data.title?.length ?? 0) +\n\t\t(data.description?.length ?? 0) +\n\t\t(data.fields?.reduce((prev, curr) => prev + curr.name.length + curr.value.length, 0) ?? 0) +\n\t\t(data.footer?.text.length ?? 0) +\n\t\t(data.author?.name.length ?? 0)\n\t);\n}\n"],"mappings":"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","names":["Assertions_exports","Assertions_exports","import_shapeshift","import_v10","import_v10","import_v10","import_v10","import_v10","import_v10","import_v10","import_v10","import_v10","Assertions_exports","placeholderValidator","import_shapeshift","import_v10","placeholderValidator","placeholderValidator","isEqual","import_v10","Assertions_exports","descriptionPredicate","import_shapeshift","import_v10","import_v10","descriptionPredicate","descriptionPredicate","import_v10","import_v10","import_v10","import_v10","descriptionPredicate","import_v10","Assertions_exports","validateRequiredParameters","import_shapeshift","validateRequiredParameters","validateRequiredParameters","Assertions_exports","assertReturnOfBuilder","validateRequiredParameters","import_shapeshift","import_v10","descriptionPredicate","validateRequiredParameters","assertReturnOfBuilder","import_ts_mixer","import_v10","validateRequiredParameters","import_v10","validateRequiredParameters","import_v10","import_v10","import_shapeshift","import_v10","import_shapeshift","import_v10","import_ts_mixer","import_shapeshift","booleanPredicate","import_shapeshift","import_v10","import_v10","import_shapeshift","import_v10","import_ts_mixer","numberValidator","import_v10","import_shapeshift","import_v10","import_ts_mixer","minLengthValidator","maxLengthValidator","import_v10","assertReturnOfBuilder","import_v10","import_ts_mixer","assertReturnOfBuilder","validateRequiredParameters","assertReturnOfBuilder","Assertions_exports","contextsPredicate","integrationTypesPredicate","validateDMPermission","validateDefaultMemberPermissions","validateDefaultPermission","validateName","validateRequiredParameters","import_shapeshift","import_v10","namePredicate","booleanPredicate","validateDefaultPermission","validateName","validateRequiredParameters","dmPermissionPredicate","validateDMPermission","memberPermissionPredicate","validateDefaultMemberPermissions","contextsPredicate","integrationTypesPredicate","contextsPredicate","integrationTypesPredicate","validateName","validateDefaultPermission","validateDefaultMemberPermissions","validateDMPermission","validateRequiredParameters"]} \ No newline at end of file +{"version":3,"sources":["../src/index.ts","../src/messages/embed/Assertions.ts","../src/util/validation.ts","../src/util/normalizeArray.ts","../src/messages/embed/Embed.ts","../src/components/Assertions.ts","../src/components/selectMenu/StringSelectMenuOption.ts","../src/components/ActionRow.ts","../src/components/Component.ts","../src/components/Components.ts","../src/components/button/Button.ts","../src/components/fileUpload/FileUpload.ts","../src/components/fileUpload/Assertions.ts","../src/components/label/Label.ts","../src/components/selectMenu/ChannelSelectMenu.ts","../src/components/textInput/Assertions.ts","../src/components/selectMenu/BaseSelectMenu.ts","../src/components/selectMenu/MentionableSelectMenu.ts","../src/components/selectMenu/RoleSelectMenu.ts","../src/components/selectMenu/StringSelectMenu.ts","../src/components/selectMenu/Assertions.ts","../src/components/selectMenu/UserSelectMenu.ts","../src/components/textInput/TextInput.ts","../src/components/label/Assertions.ts","../src/components/v2/Container.ts","../src/components/v2/Assertions.ts","../src/components/v2/Thumbnail.ts","../src/components/v2/File.ts","../src/components/v2/Separator.ts","../src/components/v2/TextDisplay.ts","../src/components/v2/MediaGallery.ts","../src/components/v2/MediaGalleryItem.ts","../src/components/v2/Section.ts","../src/interactions/modals/Modal.ts","../src/interactions/modals/Assertions.ts","../src/interactions/slashCommands/Assertions.ts","../src/interactions/slashCommands/SlashCommandBuilder.ts","../src/interactions/slashCommands/mixins/NameAndDescription.ts","../src/interactions/slashCommands/mixins/SharedSlashCommand.ts","../src/interactions/slashCommands/options/attachment.ts","../src/interactions/slashCommands/mixins/ApplicationCommandOptionBase.ts","../src/interactions/slashCommands/options/boolean.ts","../src/interactions/slashCommands/options/channel.ts","../src/interactions/slashCommands/mixins/ApplicationCommandOptionChannelTypesMixin.ts","../src/interactions/slashCommands/options/integer.ts","../src/interactions/slashCommands/mixins/ApplicationCommandNumericOptionMinMaxValueMixin.ts","../src/interactions/slashCommands/mixins/ApplicationCommandOptionWithAutocompleteMixin.ts","../src/interactions/slashCommands/mixins/ApplicationCommandOptionWithChoicesMixin.ts","../src/interactions/slashCommands/options/mentionable.ts","../src/interactions/slashCommands/options/number.ts","../src/interactions/slashCommands/options/role.ts","../src/interactions/slashCommands/options/string.ts","../src/interactions/slashCommands/options/user.ts","../src/interactions/slashCommands/mixins/SharedSlashCommandOptions.ts","../src/interactions/slashCommands/SlashCommandSubcommands.ts","../src/interactions/slashCommands/mixins/SharedSubcommands.ts","../src/interactions/contextMenuCommands/Assertions.ts","../src/interactions/contextMenuCommands/ContextMenuCommandBuilder.ts","../src/util/componentUtil.ts"],"sourcesContent":["export * as EmbedAssertions from './messages/embed/Assertions.js';\nexport * from './messages/embed/Embed.js';\n// TODO: Consider removing this dep in the next major version\nexport * from '@discordjs/formatters';\n\nexport * as ComponentAssertions from './components/Assertions.js';\nexport * from './components/ActionRow.js';\nexport * from './components/button/Button.js';\nexport * from './components/Component.js';\nexport * from './components/Components.js';\nexport * from './components/textInput/TextInput.js';\nexport * as TextInputAssertions from './components/textInput/Assertions.js';\nexport * from './interactions/modals/Modal.js';\nexport * as ModalAssertions from './interactions/modals/Assertions.js';\n\nexport * from './components/selectMenu/BaseSelectMenu.js';\nexport * from './components/selectMenu/ChannelSelectMenu.js';\nexport * from './components/selectMenu/MentionableSelectMenu.js';\nexport * from './components/selectMenu/RoleSelectMenu.js';\nexport * from './components/selectMenu/StringSelectMenu.js';\n// TODO: Remove those aliases in v2\nexport {\n\t/**\n\t * @deprecated Will be removed in the next major version, use {@link StringSelectMenuBuilder} instead.\n\t */\n\tStringSelectMenuBuilder as SelectMenuBuilder,\n} from './components/selectMenu/StringSelectMenu.js';\nexport {\n\t/**\n\t * @deprecated Will be removed in the next major version, use {@link StringSelectMenuOptionBuilder} instead.\n\t */\n\tStringSelectMenuOptionBuilder as SelectMenuOptionBuilder,\n} from './components/selectMenu/StringSelectMenuOption.js';\nexport * as SelectMenuAssertions from './components/selectMenu/Assertions.js';\nexport * from './components/selectMenu/StringSelectMenuOption.js';\nexport * from './components/selectMenu/UserSelectMenu.js';\n\nexport * from './components/fileUpload/FileUpload.js';\nexport * as FileUploadAssertions from './components/fileUpload/Assertions.js';\n\nexport * from './components/label/Label.js';\nexport * as LabelAssertions from './components/label/Assertions.js';\n\nexport * as ComponentsV2Assertions from './components/v2/Assertions.js';\nexport * from './components/v2/Container.js';\nexport * from './components/v2/File.js';\nexport * from './components/v2/MediaGallery.js';\nexport * from './components/v2/MediaGalleryItem.js';\nexport * from './components/v2/Section.js';\nexport * from './components/v2/Separator.js';\nexport * from './components/v2/TextDisplay.js';\nexport * from './components/v2/Thumbnail.js';\n\nexport * as SlashCommandAssertions from './interactions/slashCommands/Assertions.js';\nexport * from './interactions/slashCommands/SlashCommandBuilder.js';\nexport * from './interactions/slashCommands/SlashCommandSubcommands.js';\nexport * from './interactions/slashCommands/options/boolean.js';\nexport * from './interactions/slashCommands/options/channel.js';\nexport * from './interactions/slashCommands/options/integer.js';\nexport * from './interactions/slashCommands/options/mentionable.js';\nexport * from './interactions/slashCommands/options/number.js';\nexport * from './interactions/slashCommands/options/role.js';\nexport * from './interactions/slashCommands/options/attachment.js';\nexport * from './interactions/slashCommands/options/string.js';\nexport * from './interactions/slashCommands/options/user.js';\nexport * from './interactions/slashCommands/mixins/ApplicationCommandNumericOptionMinMaxValueMixin.js';\nexport * from './interactions/slashCommands/mixins/ApplicationCommandOptionBase.js';\nexport * from './interactions/slashCommands/mixins/ApplicationCommandOptionChannelTypesMixin.js';\nexport * from './interactions/slashCommands/mixins/ApplicationCommandOptionWithAutocompleteMixin.js';\nexport * from './interactions/slashCommands/mixins/ApplicationCommandOptionWithChoicesMixin.js';\nexport * from './interactions/slashCommands/mixins/NameAndDescription.js';\nexport * from './interactions/slashCommands/mixins/SharedSlashCommandOptions.js';\nexport * from './interactions/slashCommands/mixins/SharedSubcommands.js';\nexport * from './interactions/slashCommands/mixins/SharedSlashCommand.js';\n\nexport * as ContextMenuCommandAssertions from './interactions/contextMenuCommands/Assertions.js';\nexport * from './interactions/contextMenuCommands/ContextMenuCommandBuilder.js';\n\nexport * from './util/componentUtil.js';\nexport * from './util/normalizeArray.js';\nexport * from './util/validation.js';\n\n/**\n * The {@link https://github.com/discordjs/discord.js/blob/main/packages/builders#readme | @discordjs/builders} version\n * that you are currently using.\n *\n * @privateRemarks This needs to explicitly be `string` so it is not typed as a \"const string\" that gets injected by esbuild.\n */\nexport const version = '1.13.1' as string;\n","import { s } from '@sapphire/shapeshift';\nimport type { APIEmbedField } from 'discord-api-types/v10';\nimport { isValidationEnabled } from '../../util/validation.js';\n\nexport const fieldNamePredicate = s.string().lengthLessThanOrEqual(256).setValidationEnabled(isValidationEnabled);\n\nexport const fieldValuePredicate = s.string().lengthLessThanOrEqual(1_024).setValidationEnabled(isValidationEnabled);\n\nexport const fieldInlinePredicate = s.boolean().optional();\n\nexport const embedFieldPredicate = s\n\t.object({\n\t\tname: fieldNamePredicate,\n\t\tvalue: fieldValuePredicate,\n\t\tinline: fieldInlinePredicate,\n\t})\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const embedFieldsArrayPredicate = embedFieldPredicate.array().setValidationEnabled(isValidationEnabled);\n\nexport const fieldLengthPredicate = s.number().lessThanOrEqual(25).setValidationEnabled(isValidationEnabled);\n\nexport function validateFieldLength(amountAdding: number, fields?: APIEmbedField[]): void {\n\tfieldLengthPredicate.parse((fields?.length ?? 0) + amountAdding);\n}\n\nexport const authorNamePredicate = fieldNamePredicate\n\t.lengthGreaterThanOrEqual(1)\n\t.nullable()\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const imageURLPredicate = s\n\t.string()\n\t.url({\n\t\tallowedProtocols: ['http:', 'https:', 'attachment:'],\n\t})\n\t.nullish()\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const urlPredicate = s\n\t.string()\n\t.url({\n\t\tallowedProtocols: ['http:', 'https:'],\n\t})\n\t.nullish()\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const embedAuthorPredicate = s\n\t.object({\n\t\tname: authorNamePredicate,\n\t\ticonURL: imageURLPredicate,\n\t\turl: urlPredicate,\n\t})\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const RGBPredicate = s\n\t.number()\n\t.int()\n\t.greaterThanOrEqual(0)\n\t.lessThanOrEqual(255)\n\t.setValidationEnabled(isValidationEnabled);\nexport const colorPredicate = s\n\t.number()\n\t.int()\n\t.greaterThanOrEqual(0)\n\t.lessThanOrEqual(0xffffff)\n\t.or(s.tuple([RGBPredicate, RGBPredicate, RGBPredicate]))\n\t.nullable()\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const descriptionPredicate = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(4_096)\n\t.nullable()\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const footerTextPredicate = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(2_048)\n\t.nullable()\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const embedFooterPredicate = s\n\t.object({\n\t\ttext: footerTextPredicate,\n\t\ticonURL: imageURLPredicate,\n\t})\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const timestampPredicate = s.union([s.number(), s.date()]).nullable().setValidationEnabled(isValidationEnabled);\n\nexport const titlePredicate = fieldNamePredicate\n\t.lengthGreaterThanOrEqual(1)\n\t.nullable()\n\t.setValidationEnabled(isValidationEnabled);\n","let validate = true;\n\n/**\n * Enables validators.\n *\n * @returns Whether validation is occurring.\n */\nexport function enableValidators() {\n\treturn (validate = true);\n}\n\n/**\n * Disables validators.\n *\n * @returns Whether validation is occurring.\n */\nexport function disableValidators() {\n\treturn (validate = false);\n}\n\n/**\n * Checks whether validation is occurring.\n */\nexport function isValidationEnabled() {\n\treturn validate;\n}\n","/**\n * Normalizes data that is a rest parameter or an array into an array with a depth of 1.\n *\n * @typeParam ItemType - The data that must satisfy {@link RestOrArray}.\n * @param arr - The (possibly variadic) data to normalize\n */\nexport function normalizeArray(arr: RestOrArray): ItemType[] {\n\tif (Array.isArray(arr[0])) return [...arr[0]];\n\treturn arr as ItemType[];\n}\n\n/**\n * Represents data that may be an array or came from a rest parameter.\n *\n * @remarks\n * This type is used throughout builders to ensure both an array and variadic arguments\n * may be used. It is normalized with {@link normalizeArray}.\n */\nexport type RestOrArray = Type[] | [Type[]];\n","import type { APIEmbed, APIEmbedAuthor, APIEmbedField, APIEmbedFooter, APIEmbedImage } from 'discord-api-types/v10';\nimport { normalizeArray, type RestOrArray } from '../../util/normalizeArray.js';\nimport {\n\tcolorPredicate,\n\tdescriptionPredicate,\n\tembedAuthorPredicate,\n\tembedFieldsArrayPredicate,\n\tembedFooterPredicate,\n\timageURLPredicate,\n\ttimestampPredicate,\n\ttitlePredicate,\n\turlPredicate,\n\tvalidateFieldLength,\n} from './Assertions.js';\n\n/**\n * A tuple satisfying the RGB color model.\n *\n * @see {@link https://developer.mozilla.org/docs/Glossary/RGB}\n */\nexport type RGBTuple = [red: number, green: number, blue: number];\n\n/**\n * The base icon data typically used in payloads.\n */\nexport interface IconData {\n\t/**\n\t * The URL of the icon.\n\t */\n\ticonURL?: string;\n\t/**\n\t * The proxy URL of the icon.\n\t */\n\tproxyIconURL?: string;\n}\n\n/**\n * Represents the author data of an embed.\n */\nexport interface EmbedAuthorData extends IconData, Omit {}\n\n/**\n * Represents the author options of an embed.\n */\nexport interface EmbedAuthorOptions extends Omit {}\n\n/**\n * Represents the footer data of an embed.\n */\nexport interface EmbedFooterData extends IconData, Omit {}\n\n/**\n * Represents the footer options of an embed.\n */\nexport interface EmbedFooterOptions extends Omit {}\n\n/**\n * Represents the image data of an embed.\n */\nexport interface EmbedImageData extends Omit {\n\t/**\n\t * The proxy URL for the image.\n\t */\n\tproxyURL?: string;\n}\n\n/**\n * A builder that creates API-compatible JSON data for embeds.\n */\nexport class EmbedBuilder {\n\t/**\n\t * The API data associated with this embed.\n\t */\n\tpublic readonly data: APIEmbed;\n\n\t/**\n\t * Creates a new embed from API data.\n\t *\n\t * @param data - The API data to create this embed with\n\t */\n\tpublic constructor(data: APIEmbed = {}) {\n\t\tthis.data = { ...data };\n\t\tif (data.timestamp) this.data.timestamp = new Date(data.timestamp).toISOString();\n\t}\n\n\t/**\n\t * Appends fields to the embed.\n\t *\n\t * @remarks\n\t * This method accepts either an array of fields or a variable number of field parameters.\n\t * The maximum amount of fields that can be added is 25.\n\t * @example\n\t * Using an array:\n\t * ```ts\n\t * const fields: APIEmbedField[] = ...;\n\t * const embed = new EmbedBuilder()\n\t * \t.addFields(fields);\n\t * ```\n\t * @example\n\t * Using rest parameters (variadic):\n\t * ```ts\n\t * const embed = new EmbedBuilder()\n\t * \t.addFields(\n\t * \t\t{ name: 'Field 1', value: 'Value 1' },\n\t * \t\t{ name: 'Field 2', value: 'Value 2' },\n\t * \t);\n\t * ```\n\t * @param fields - The fields to add\n\t */\n\tpublic addFields(...fields: RestOrArray): this {\n\t\tconst normalizedFields = normalizeArray(fields);\n\t\t// Ensure adding these fields won't exceed the 25 field limit\n\t\tvalidateFieldLength(normalizedFields.length, this.data.fields);\n\n\t\t// Data assertions\n\t\tembedFieldsArrayPredicate.parse(normalizedFields);\n\n\t\tif (this.data.fields) this.data.fields.push(...normalizedFields);\n\t\telse this.data.fields = normalizedFields;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Removes, replaces, or inserts fields for this embed.\n\t *\n\t * @remarks\n\t * This method behaves similarly\n\t * to {@link https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/splice | Array.prototype.splice()}.\n\t * The maximum amount of fields that can be added is 25.\n\t *\n\t * It's useful for modifying and adjusting order of the already-existing fields of an embed.\n\t * @example\n\t * Remove the first field:\n\t * ```ts\n\t * embed.spliceFields(0, 1);\n\t * ```\n\t * @example\n\t * Remove the first n fields:\n\t * ```ts\n\t * const n = 4;\n\t * embed.spliceFields(0, n);\n\t * ```\n\t * @example\n\t * Remove the last field:\n\t * ```ts\n\t * embed.spliceFields(-1, 1);\n\t * ```\n\t * @param index - The index to start at\n\t * @param deleteCount - The number of fields to remove\n\t * @param fields - The replacing field objects\n\t */\n\tpublic spliceFields(index: number, deleteCount: number, ...fields: APIEmbedField[]): this {\n\t\t// Ensure adding these fields won't exceed the 25 field limit\n\t\tvalidateFieldLength(fields.length - deleteCount, this.data.fields);\n\n\t\t// Data assertions\n\t\tembedFieldsArrayPredicate.parse(fields);\n\t\tif (this.data.fields) this.data.fields.splice(index, deleteCount, ...fields);\n\t\telse this.data.fields = fields;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the fields for this embed.\n\t *\n\t * @remarks\n\t * This method is an alias for {@link EmbedBuilder.spliceFields}. More specifically,\n\t * it splices the entire array of fields, replacing them with the provided fields.\n\t *\n\t * You can set a maximum of 25 fields.\n\t * @param fields - The fields to set\n\t */\n\tpublic setFields(...fields: RestOrArray): this {\n\t\tthis.spliceFields(0, this.data.fields?.length ?? 0, ...normalizeArray(fields));\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the author of this embed.\n\t *\n\t * @param options - The options to use\n\t */\n\n\tpublic setAuthor(options: EmbedAuthorOptions | null): this {\n\t\tif (options === null) {\n\t\t\tthis.data.author = undefined;\n\t\t\treturn this;\n\t\t}\n\n\t\t// Data assertions\n\t\tembedAuthorPredicate.parse(options);\n\n\t\tthis.data.author = { name: options.name, url: options.url, icon_url: options.iconURL };\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the color of this embed.\n\t *\n\t * @param color - The color to use\n\t */\n\tpublic setColor(color: RGBTuple | number | null): this {\n\t\t// Data assertions\n\t\tcolorPredicate.parse(color);\n\n\t\tif (Array.isArray(color)) {\n\t\t\tconst [red, green, blue] = color;\n\t\t\tthis.data.color = (red << 16) + (green << 8) + blue;\n\t\t\treturn this;\n\t\t}\n\n\t\tthis.data.color = color ?? undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the description of this embed.\n\t *\n\t * @param description - The description to use\n\t */\n\tpublic setDescription(description: string | null): this {\n\t\t// Data assertions\n\t\tdescriptionPredicate.parse(description);\n\n\t\tthis.data.description = description ?? undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the footer of this embed.\n\t *\n\t * @param options - The footer to use\n\t */\n\tpublic setFooter(options: EmbedFooterOptions | null): this {\n\t\tif (options === null) {\n\t\t\tthis.data.footer = undefined;\n\t\t\treturn this;\n\t\t}\n\n\t\t// Data assertions\n\t\tembedFooterPredicate.parse(options);\n\n\t\tthis.data.footer = { text: options.text, icon_url: options.iconURL };\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the image of this embed.\n\t *\n\t * @param url - The image URL to use\n\t */\n\tpublic setImage(url: string | null): this {\n\t\t// Data assertions\n\t\timageURLPredicate.parse(url);\n\n\t\tthis.data.image = url ? { url } : undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the thumbnail of this embed.\n\t *\n\t * @param url - The thumbnail URL to use\n\t */\n\tpublic setThumbnail(url: string | null): this {\n\t\t// Data assertions\n\t\timageURLPredicate.parse(url);\n\n\t\tthis.data.thumbnail = url ? { url } : undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the timestamp of this embed.\n\t *\n\t * @param timestamp - The timestamp or date to use\n\t */\n\tpublic setTimestamp(timestamp: Date | number | null = Date.now()): this {\n\t\t// Data assertions\n\t\ttimestampPredicate.parse(timestamp);\n\n\t\tthis.data.timestamp = timestamp ? new Date(timestamp).toISOString() : undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the title for this embed.\n\t *\n\t * @param title - The title to use\n\t */\n\tpublic setTitle(title: string | null): this {\n\t\t// Data assertions\n\t\ttitlePredicate.parse(title);\n\n\t\tthis.data.title = title ?? undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the URL of this embed.\n\t *\n\t * @param url - The URL to use\n\t */\n\tpublic setURL(url: string | null): this {\n\t\t// Data assertions\n\t\turlPredicate.parse(url);\n\n\t\tthis.data.url = url ?? undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Serializes this builder to API-compatible JSON data.\n\t *\n\t * @remarks\n\t * This method runs validations on the data before serializing it.\n\t * As such, it may throw an error if the data is invalid.\n\t */\n\tpublic toJSON(): APIEmbed {\n\t\treturn { ...this.data };\n\t}\n}\n","import { s } from '@sapphire/shapeshift';\nimport { ButtonStyle, ChannelType, type APIMessageComponentEmoji } from 'discord-api-types/v10';\nimport { isValidationEnabled } from '../util/validation.js';\nimport { StringSelectMenuOptionBuilder } from './selectMenu/StringSelectMenuOption.js';\n\nexport const idValidator = s\n\t.number()\n\t.safeInt()\n\t.greaterThanOrEqual(1)\n\t.lessThan(4_294_967_296) // 2^32 - 1\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const customIdValidator = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(100)\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const emojiValidator = s\n\t.object({\n\t\tid: s.string(),\n\t\tname: s.string(),\n\t\tanimated: s.boolean(),\n\t})\n\t.partial()\n\t.strict()\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const disabledValidator = s.boolean();\n\nexport const buttonLabelValidator = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(80)\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const buttonStyleValidator = s.nativeEnum(ButtonStyle);\n\nexport const placeholderValidator = s.string().lengthLessThanOrEqual(150).setValidationEnabled(isValidationEnabled);\nexport const minMaxValidator = s\n\t.number()\n\t.int()\n\t.greaterThanOrEqual(0)\n\t.lessThanOrEqual(25)\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const labelValueDescriptionValidator = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(100)\n\t.setValidationEnabled(isValidationEnabled);\n\n/**\n * @deprecated Replaced with selectMenuStringOptionPredicate.\n */\nexport const jsonOptionValidator = s\n\t.object({\n\t\tlabel: labelValueDescriptionValidator,\n\t\tvalue: labelValueDescriptionValidator,\n\t\tdescription: labelValueDescriptionValidator.optional(),\n\t\temoji: emojiValidator.optional(),\n\t\tdefault: s.boolean().optional(),\n\t})\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const optionValidator = s.instance(StringSelectMenuOptionBuilder).setValidationEnabled(isValidationEnabled);\n\nexport const optionsValidator = optionValidator\n\t.array()\n\t.lengthGreaterThanOrEqual(0)\n\t.setValidationEnabled(isValidationEnabled);\nexport const optionsLengthValidator = s\n\t.number()\n\t.int()\n\t.greaterThanOrEqual(0)\n\t.lessThanOrEqual(25)\n\t.setValidationEnabled(isValidationEnabled);\n\nexport function validateRequiredSelectMenuParameters(options: StringSelectMenuOptionBuilder[], customId?: string) {\n\tcustomIdValidator.parse(customId);\n\toptionsValidator.parse(options);\n}\n\nexport const defaultValidator = s.boolean();\n\nexport function validateRequiredSelectMenuOptionParameters(label?: string, value?: string) {\n\tlabelValueDescriptionValidator.parse(label);\n\tlabelValueDescriptionValidator.parse(value);\n}\n\nexport const channelTypesValidator = s.nativeEnum(ChannelType).array().setValidationEnabled(isValidationEnabled);\n\nexport const urlValidator = s\n\t.string()\n\t.url({\n\t\tallowedProtocols: ['http:', 'https:', 'discord:'],\n\t})\n\t.setValidationEnabled(isValidationEnabled);\n\nexport function validateRequiredButtonParameters(\n\tstyle?: ButtonStyle,\n\tlabel?: string,\n\temoji?: APIMessageComponentEmoji,\n\tcustomId?: string,\n\tskuId?: string,\n\turl?: string,\n) {\n\tif (style === ButtonStyle.Premium) {\n\t\tif (!skuId) {\n\t\t\tthrow new RangeError('Premium buttons must have an SKU id.');\n\t\t}\n\n\t\tif (customId || label || url || emoji) {\n\t\t\tthrow new RangeError('Premium buttons cannot have a custom id, label, URL, or emoji.');\n\t\t}\n\t} else {\n\t\tif (skuId) {\n\t\t\tthrow new RangeError('Non-premium buttons must not have an SKU id.');\n\t\t}\n\n\t\tif (url && customId) {\n\t\t\tthrow new RangeError('URL and custom id are mutually exclusive.');\n\t\t}\n\n\t\tif (!label && !emoji) {\n\t\t\tthrow new RangeError('Non-premium buttons must have a label and/or an emoji.');\n\t\t}\n\n\t\tif (style === ButtonStyle.Link) {\n\t\t\tif (!url) {\n\t\t\t\tthrow new RangeError('Link buttons must have a URL.');\n\t\t\t}\n\t\t} else if (url) {\n\t\t\tthrow new RangeError('Non-premium and non-link buttons cannot have a URL.');\n\t\t}\n\t}\n}\n","import type { JSONEncodable } from '@discordjs/util';\nimport type { APIMessageComponentEmoji, APISelectMenuOption } from 'discord-api-types/v10';\nimport {\n\tdefaultValidator,\n\temojiValidator,\n\tlabelValueDescriptionValidator,\n\tvalidateRequiredSelectMenuOptionParameters,\n} from '../Assertions.js';\n\n/**\n * A builder that creates API-compatible JSON data for string select menu options.\n */\nexport class StringSelectMenuOptionBuilder implements JSONEncodable {\n\t/**\n\t * Creates a new string select menu option from API data.\n\t *\n\t * @param data - The API data to create this string select menu option with\n\t * @example\n\t * Creating a string select menu option from an API data object:\n\t * ```ts\n\t * const selectMenuOption = new SelectMenuOptionBuilder({\n\t * \tlabel: 'catchy label',\n\t * \tvalue: '1',\n\t * });\n\t * ```\n\t * @example\n\t * Creating a string select menu option using setters and API data:\n\t * ```ts\n\t * const selectMenuOption = new SelectMenuOptionBuilder({\n\t * \tdefault: true,\n\t * \tvalue: '1',\n\t * })\n\t * \t.setLabel('woah');\n\t * ```\n\t */\n\tpublic constructor(public data: Partial = {}) {}\n\n\t/**\n\t * Sets the label for this option.\n\t *\n\t * @param label - The label to use\n\t */\n\tpublic setLabel(label: string) {\n\t\tthis.data.label = labelValueDescriptionValidator.parse(label);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the value for this option.\n\t *\n\t * @param value - The value to use\n\t */\n\tpublic setValue(value: string) {\n\t\tthis.data.value = labelValueDescriptionValidator.parse(value);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the description for this option.\n\t *\n\t * @param description - The description to use\n\t */\n\tpublic setDescription(description: string) {\n\t\tthis.data.description = labelValueDescriptionValidator.parse(description);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets whether this option is selected by default.\n\t *\n\t * @param isDefault - Whether this option is selected by default\n\t */\n\tpublic setDefault(isDefault = true) {\n\t\tthis.data.default = defaultValidator.parse(isDefault);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the emoji to display for this option.\n\t *\n\t * @param emoji - The emoji to use\n\t */\n\tpublic setEmoji(emoji: APIMessageComponentEmoji) {\n\t\tthis.data.emoji = emojiValidator.parse(emoji);\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc BaseSelectMenuBuilder.toJSON}\n\t */\n\tpublic toJSON(): APISelectMenuOption {\n\t\tvalidateRequiredSelectMenuOptionParameters(this.data.label, this.data.value);\n\n\t\treturn {\n\t\t\t...this.data,\n\t\t} as APISelectMenuOption;\n\t}\n}\n","/* eslint-disable jsdoc/check-param-names */\n\nimport {\n\ttype APIActionRowComponent,\n\tComponentType,\n\ttype APIComponentInMessageActionRow,\n\ttype APIComponentInModalActionRow,\n\ttype APIComponentInActionRow,\n} from 'discord-api-types/v10';\nimport { normalizeArray, type RestOrArray } from '../util/normalizeArray.js';\nimport { ComponentBuilder } from './Component.js';\nimport { createComponentBuilder } from './Components.js';\nimport type { ButtonBuilder } from './button/Button.js';\nimport type { ChannelSelectMenuBuilder } from './selectMenu/ChannelSelectMenu.js';\nimport type { MentionableSelectMenuBuilder } from './selectMenu/MentionableSelectMenu.js';\nimport type { RoleSelectMenuBuilder } from './selectMenu/RoleSelectMenu.js';\nimport type { StringSelectMenuBuilder } from './selectMenu/StringSelectMenu.js';\nimport type { UserSelectMenuBuilder } from './selectMenu/UserSelectMenu.js';\nimport type { TextInputBuilder } from './textInput/TextInput.js';\n\n/**\n * The builders that may be used for modals.\n */\nexport type ModalComponentBuilder = ActionRowBuilder | ModalActionRowComponentBuilder;\n\n/**\n * The builders that may be used within an action row for messages.\n */\nexport type MessageActionRowComponentBuilder =\n\t| ButtonBuilder\n\t| ChannelSelectMenuBuilder\n\t| MentionableSelectMenuBuilder\n\t| RoleSelectMenuBuilder\n\t| StringSelectMenuBuilder\n\t| UserSelectMenuBuilder;\n\n/**\n * The builders that may be used within an action row for modals.\n */\nexport type ModalActionRowComponentBuilder = TextInputBuilder;\n\n/**\n * Any builder.\n */\nexport type AnyComponentBuilder = MessageActionRowComponentBuilder | ModalActionRowComponentBuilder;\n\n/**\n * A builder that creates API-compatible JSON data for action rows.\n *\n * @typeParam ComponentType - The types of components this action row holds\n */\nexport class ActionRowBuilder extends ComponentBuilder<\n\tAPIActionRowComponent\n> {\n\t/**\n\t * The components within this action row.\n\t */\n\tpublic readonly components: ComponentType[];\n\n\t/**\n\t * Creates a new action row from API data.\n\t *\n\t * @param data - The API data to create this action row with\n\t * @example\n\t * Creating an action row from an API data object:\n\t * ```ts\n\t * const actionRow = new ActionRowBuilder({\n\t * \tcomponents: [\n\t * \t\t{\n\t * \t\t\tcustom_id: \"custom id\",\n\t * \t\t\tlabel: \"Type something\",\n\t * \t\t\tstyle: TextInputStyle.Short,\n\t * \t\t\ttype: ComponentType.TextInput,\n\t * \t\t},\n\t * \t],\n\t * });\n\t * ```\n\t * @example\n\t * Creating an action row using setters and API data:\n\t * ```ts\n\t * const actionRow = new ActionRowBuilder({\n\t * \tcomponents: [\n\t * \t\t{\n\t * \t\t\tcustom_id: \"custom id\",\n\t * \t\t\tlabel: \"Click me\",\n\t * \t\t\tstyle: ButtonStyle.Primary,\n\t * \t\t\ttype: ComponentType.Button,\n\t * \t\t},\n\t * \t],\n\t * })\n\t * \t.addComponents(button2, button3);\n\t * ```\n\t */\n\tpublic constructor({ components, ...data }: Partial> = {}) {\n\t\tsuper({ type: ComponentType.ActionRow, ...data });\n\t\tthis.components = (components?.map((component) => createComponentBuilder(component)) ?? []) as ComponentType[];\n\t}\n\n\t/**\n\t * Adds components to this action row.\n\t *\n\t * @param components - The components to add\n\t */\n\tpublic addComponents(...components: RestOrArray) {\n\t\tthis.components.push(...normalizeArray(components));\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets components for this action row.\n\t *\n\t * @param components - The components to set\n\t */\n\tpublic setComponents(...components: RestOrArray) {\n\t\tthis.components.splice(0, this.components.length, ...normalizeArray(components));\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic toJSON(): APIActionRowComponent> {\n\t\treturn {\n\t\t\t...this.data,\n\t\t\tcomponents: this.components.map((component) => component.toJSON()),\n\t\t} as APIActionRowComponent>;\n\t}\n}\n","import type { JSONEncodable } from '@discordjs/util';\nimport type {\n\tAPIActionRowComponent,\n\tAPIComponentInActionRow,\n\tAPIBaseComponent,\n\tComponentType,\n\tAPIMessageComponent,\n\tAPIModalComponent,\n} from 'discord-api-types/v10';\nimport { idValidator } from './Assertions';\n\n/**\n * Any action row component data represented as an object.\n */\nexport type AnyAPIActionRowComponent =\n\t| APIActionRowComponent\n\t| APIComponentInActionRow\n\t| APIMessageComponent\n\t| APIModalComponent;\n\n/**\n * The base component builder that contains common symbols for all sorts of components.\n *\n * @typeParam DataType - The type of internal API data that is stored within the component\n */\nexport abstract class ComponentBuilder<\n\tDataType extends Partial> = APIBaseComponent,\n> implements JSONEncodable\n{\n\t/**\n\t * The API data associated with this component.\n\t */\n\tpublic readonly data: Partial;\n\n\t/**\n\t * Serializes this builder to API-compatible JSON data.\n\t *\n\t * @remarks\n\t * This method runs validations on the data before serializing it.\n\t * As such, it may throw an error if the data is invalid.\n\t */\n\tpublic abstract toJSON(): AnyAPIActionRowComponent;\n\n\t/**\n\t * Constructs a new kind of component.\n\t *\n\t * @param data - The data to construct a component out of\n\t */\n\tpublic constructor(data: Partial) {\n\t\tthis.data = data;\n\t}\n\n\t/**\n\t * Sets the id (not the custom id) for this component.\n\t *\n\t * @param id - The id for this component\n\t */\n\tpublic setId(id: number) {\n\t\tthis.data.id = idValidator.parse(id);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Clears the id of this component, defaulting to a default incremented id.\n\t */\n\tpublic clearId() {\n\t\tthis.data.id = undefined;\n\t\treturn this;\n\t}\n}\n","import type { JSONEncodable } from '@discordjs/util';\nimport { ComponentType, type APIMessageComponent, type APIModalComponent } from 'discord-api-types/v10';\nimport {\n\tActionRowBuilder,\n\ttype MessageActionRowComponentBuilder,\n\ttype AnyComponentBuilder,\n\ttype ModalComponentBuilder,\n} from './ActionRow.js';\nimport { ComponentBuilder } from './Component.js';\nimport { ButtonBuilder } from './button/Button.js';\nimport { FileUploadBuilder } from './fileUpload/FileUpload.js';\nimport { LabelBuilder } from './label/Label.js';\nimport { ChannelSelectMenuBuilder } from './selectMenu/ChannelSelectMenu.js';\nimport { MentionableSelectMenuBuilder } from './selectMenu/MentionableSelectMenu.js';\nimport { RoleSelectMenuBuilder } from './selectMenu/RoleSelectMenu.js';\nimport { StringSelectMenuBuilder } from './selectMenu/StringSelectMenu.js';\nimport { UserSelectMenuBuilder } from './selectMenu/UserSelectMenu.js';\nimport { TextInputBuilder } from './textInput/TextInput.js';\nimport { ContainerBuilder } from './v2/Container.js';\nimport { FileBuilder } from './v2/File.js';\nimport { MediaGalleryBuilder } from './v2/MediaGallery.js';\nimport { SectionBuilder } from './v2/Section.js';\nimport { SeparatorBuilder } from './v2/Separator.js';\nimport { TextDisplayBuilder } from './v2/TextDisplay.js';\nimport { ThumbnailBuilder } from './v2/Thumbnail.js';\n\n/**\n * The builders that may be used for messages.\n */\nexport type MessageComponentBuilder =\n\t| ActionRowBuilder\n\t| ContainerBuilder\n\t| FileBuilder\n\t| MediaGalleryBuilder\n\t| MessageActionRowComponentBuilder\n\t| SectionBuilder\n\t| SeparatorBuilder\n\t| TextDisplayBuilder\n\t| ThumbnailBuilder;\n\n/**\n * Components here are mapped to their respective builder.\n */\nexport interface MappedComponentTypes {\n\t/**\n\t * The action row component type is associated with an {@link ActionRowBuilder}.\n\t */\n\t[ComponentType.ActionRow]: ActionRowBuilder;\n\t/**\n\t * The button component type is associated with a {@link ButtonBuilder}.\n\t */\n\t[ComponentType.Button]: ButtonBuilder;\n\t/**\n\t * The string select component type is associated with a {@link StringSelectMenuBuilder}.\n\t */\n\t[ComponentType.StringSelect]: StringSelectMenuBuilder;\n\t/**\n\t * The text input component type is associated with a {@link TextInputBuilder}.\n\t */\n\t[ComponentType.TextInput]: TextInputBuilder;\n\t/**\n\t * The user select component type is associated with a {@link UserSelectMenuBuilder}.\n\t */\n\t[ComponentType.UserSelect]: UserSelectMenuBuilder;\n\t/**\n\t * The role select component type is associated with a {@link RoleSelectMenuBuilder}.\n\t */\n\t[ComponentType.RoleSelect]: RoleSelectMenuBuilder;\n\t/**\n\t * The mentionable select component type is associated with a {@link MentionableSelectMenuBuilder}.\n\t */\n\t[ComponentType.MentionableSelect]: MentionableSelectMenuBuilder;\n\t/**\n\t * The channel select component type is associated with a {@link ChannelSelectMenuBuilder}.\n\t */\n\t[ComponentType.ChannelSelect]: ChannelSelectMenuBuilder;\n\t/**\n\t * The file component type is associated with a {@link FileBuilder}.\n\t */\n\t[ComponentType.File]: FileBuilder;\n\t/**\n\t * The separator component type is associated with a {@link SeparatorBuilder}.\n\t */\n\t[ComponentType.Separator]: SeparatorBuilder;\n\t/**\n\t * The container component type is associated with a {@link ContainerBuilder}.\n\t */\n\t[ComponentType.Container]: ContainerBuilder;\n\t/**\n\t * The text display component type is associated with a {@link TextDisplayBuilder}.\n\t */\n\t[ComponentType.TextDisplay]: TextDisplayBuilder;\n\t/**\n\t * The thumbnail component type is associated with a {@link ThumbnailBuilder}.\n\t */\n\t[ComponentType.Thumbnail]: ThumbnailBuilder;\n\t/**\n\t * The section component type is associated with a {@link SectionBuilder}.\n\t */\n\t[ComponentType.Section]: SectionBuilder;\n\t/**\n\t * The media gallery component type is associated with a {@link MediaGalleryBuilder}.\n\t */\n\t[ComponentType.MediaGallery]: MediaGalleryBuilder;\n\t/**\n\t * The label component type is associated with a {@link LabelBuilder}.\n\t */\n\t[ComponentType.Label]: LabelBuilder;\n\t/**\n\t * The file upload component type is associated with a {@link FileUploadBuilder}.\n\t */\n\t[ComponentType.FileUpload]: FileUploadBuilder;\n}\n\n/**\n * Factory for creating components from API data.\n *\n * @typeParam ComponentType - The type of component to use\n * @param data - The API data to transform to a component class\n */\nexport function createComponentBuilder(\n\t// eslint-disable-next-line @typescript-eslint/sort-type-constituents\n\tdata: (APIModalComponent | APIMessageComponent) & { type: ComponentType },\n): MappedComponentTypes[ComponentType];\n\n/**\n * Factory for creating components from API data.\n *\n * @typeParam ComponentBuilder - The type of component to use\n * @param data - The API data to transform to a component class\n */\nexport function createComponentBuilder(\n\tdata: ComponentBuilder,\n): ComponentBuilder;\n\nexport function createComponentBuilder(\n\tdata: APIMessageComponent | APIModalComponent | MessageComponentBuilder,\n): ComponentBuilder {\n\tif (data instanceof ComponentBuilder) {\n\t\treturn data;\n\t}\n\n\tswitch (data.type) {\n\t\tcase ComponentType.ActionRow:\n\t\t\treturn new ActionRowBuilder(data);\n\t\tcase ComponentType.Button:\n\t\t\treturn new ButtonBuilder(data);\n\t\tcase ComponentType.StringSelect:\n\t\t\treturn new StringSelectMenuBuilder(data);\n\t\tcase ComponentType.TextInput:\n\t\t\treturn new TextInputBuilder(data);\n\t\tcase ComponentType.UserSelect:\n\t\t\treturn new UserSelectMenuBuilder(data);\n\t\tcase ComponentType.RoleSelect:\n\t\t\treturn new RoleSelectMenuBuilder(data);\n\t\tcase ComponentType.MentionableSelect:\n\t\t\treturn new MentionableSelectMenuBuilder(data);\n\t\tcase ComponentType.ChannelSelect:\n\t\t\treturn new ChannelSelectMenuBuilder(data);\n\t\tcase ComponentType.File:\n\t\t\treturn new FileBuilder(data);\n\t\tcase ComponentType.Container:\n\t\t\treturn new ContainerBuilder(data);\n\t\tcase ComponentType.Section:\n\t\t\treturn new SectionBuilder(data);\n\t\tcase ComponentType.Separator:\n\t\t\treturn new SeparatorBuilder(data);\n\t\tcase ComponentType.TextDisplay:\n\t\t\treturn new TextDisplayBuilder(data);\n\t\tcase ComponentType.Thumbnail:\n\t\t\treturn new ThumbnailBuilder(data);\n\t\tcase ComponentType.MediaGallery:\n\t\t\treturn new MediaGalleryBuilder(data);\n\t\tcase ComponentType.Label:\n\t\t\treturn new LabelBuilder(data);\n\t\tcase ComponentType.FileUpload:\n\t\t\treturn new FileUploadBuilder(data);\n\t\tdefault:\n\t\t\t// @ts-expect-error This case can still occur if we get a newer unsupported component type\n\t\t\tthrow new Error(`Cannot properly serialize component type: ${data.type}`);\n\t}\n}\n\nfunction isBuilder>(\n\tbuilder: unknown,\n\tConstructor: new () => Builder,\n): builder is Builder {\n\treturn builder instanceof Constructor;\n}\n\nexport function resolveBuilder, Builder extends JSONEncodable>(\n\tbuilder: Builder | ComponentType | ((builder: Builder) => Builder),\n\tConstructor: new (data?: ComponentType) => Builder,\n) {\n\tif (isBuilder(builder, Constructor)) {\n\t\treturn builder;\n\t}\n\n\tif (typeof builder === 'function') {\n\t\treturn builder(new Constructor());\n\t}\n\n\treturn new Constructor(builder);\n}\n","import {\n\tComponentType,\n\ttype APIButtonComponent,\n\ttype APIButtonComponentWithCustomId,\n\ttype APIButtonComponentWithSKUId,\n\ttype APIButtonComponentWithURL,\n\ttype APIMessageComponentEmoji,\n\ttype ButtonStyle,\n\ttype Snowflake,\n} from 'discord-api-types/v10';\nimport {\n\tbuttonLabelValidator,\n\tbuttonStyleValidator,\n\tcustomIdValidator,\n\tdisabledValidator,\n\temojiValidator,\n\turlValidator,\n\tvalidateRequiredButtonParameters,\n} from '../Assertions.js';\nimport { ComponentBuilder } from '../Component.js';\n\n/**\n * A builder that creates API-compatible JSON data for buttons.\n */\nexport class ButtonBuilder extends ComponentBuilder {\n\t/**\n\t * Creates a new button from API data.\n\t *\n\t * @param data - The API data to create this button with\n\t * @example\n\t * Creating a button from an API data object:\n\t * ```ts\n\t * const button = new ButtonBuilder({\n\t * \tcustom_id: 'a cool button',\n\t * \tstyle: ButtonStyle.Primary,\n\t * \tlabel: 'Click Me',\n\t * \temoji: {\n\t * \t\tname: 'smile',\n\t * \t\tid: '123456789012345678',\n\t * \t},\n\t * });\n\t * ```\n\t * @example\n\t * Creating a button using setters and API data:\n\t * ```ts\n\t * const button = new ButtonBuilder({\n\t * \tstyle: ButtonStyle.Secondary,\n\t * \tlabel: 'Click Me',\n\t * })\n\t * \t.setEmoji({ name: '🙂' })\n\t * \t.setCustomId('another cool button');\n\t * ```\n\t */\n\tpublic constructor(data?: Partial) {\n\t\tsuper({ type: ComponentType.Button, ...data });\n\t}\n\n\t/**\n\t * Sets the style of this button.\n\t *\n\t * @param style - The style to use\n\t */\n\tpublic setStyle(style: ButtonStyle) {\n\t\tthis.data.style = buttonStyleValidator.parse(style);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the URL for this button.\n\t *\n\t * @remarks\n\t * This method is only available to buttons using the `Link` button style.\n\t * Only three types of URL schemes are currently supported: `https://`, `http://`, and `discord://`.\n\t * @param url - The URL to use\n\t */\n\tpublic setURL(url: string) {\n\t\t(this.data as APIButtonComponentWithURL).url = urlValidator.parse(url);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the custom id for this button.\n\t *\n\t * @remarks\n\t * This method is only applicable to buttons that are not using the `Link` button style.\n\t * @param customId - The custom id to use\n\t */\n\tpublic setCustomId(customId: string) {\n\t\t(this.data as APIButtonComponentWithCustomId).custom_id = customIdValidator.parse(customId);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the SKU id that represents a purchasable SKU for this button.\n\t *\n\t * @remarks Only available when using premium-style buttons.\n\t * @param skuId - The SKU id to use\n\t */\n\tpublic setSKUId(skuId: Snowflake) {\n\t\t(this.data as APIButtonComponentWithSKUId).sku_id = skuId;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the emoji to display on this button.\n\t *\n\t * @param emoji - The emoji to use\n\t */\n\tpublic setEmoji(emoji: APIMessageComponentEmoji) {\n\t\t(this.data as Exclude).emoji = emojiValidator.parse(emoji);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets whether this button is disabled.\n\t *\n\t * @param disabled - Whether to disable this button\n\t */\n\tpublic setDisabled(disabled = true) {\n\t\tthis.data.disabled = disabledValidator.parse(disabled);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the label for this button.\n\t *\n\t * @param label - The label to use\n\t */\n\tpublic setLabel(label: string) {\n\t\t(this.data as Exclude).label = buttonLabelValidator.parse(label);\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic toJSON(): APIButtonComponent {\n\t\tvalidateRequiredButtonParameters(\n\t\t\tthis.data.style,\n\t\t\t(this.data as Exclude).label,\n\t\t\t(this.data as Exclude).emoji,\n\t\t\t(this.data as APIButtonComponentWithCustomId).custom_id,\n\t\t\t(this.data as APIButtonComponentWithSKUId).sku_id,\n\t\t\t(this.data as APIButtonComponentWithURL).url,\n\t\t);\n\n\t\treturn {\n\t\t\t...this.data,\n\t\t} as APIButtonComponent;\n\t}\n}\n","import { type APIFileUploadComponent, ComponentType } from 'discord-api-types/v10';\nimport { ComponentBuilder } from '../Component.js';\nimport { fileUploadPredicate } from './Assertions.js';\n\n/**\n * A builder that creates API-compatible JSON data for file uploads.\n */\nexport class FileUploadBuilder extends ComponentBuilder {\n\t/**\n\t * Creates a new file upload.\n\t *\n\t * @param data - The API data to create this file upload with\n\t * @example\n\t * Creating a file upload from an API data object:\n\t * ```ts\n\t * const fileUpload = new FileUploadBuilder({\n\t * \tcustom_id: \"file_upload\",\n\t * min_values: 2,\n\t * max_values: 5,\n\t * });\n\t * ```\n\t * @example\n\t * Creating a file upload using setters and API data:\n\t * ```ts\n\t * const fileUpload = new FileUploadBuilder({\n\t * \tcustom_id: \"file_upload\",\n\t * min_values: 2,\n\t * max_values: 5,\n\t * }).setRequired();\n\t * ```\n\t */\n\tpublic constructor(data: Partial = {}) {\n\t\tsuper({ type: ComponentType.FileUpload, ...data });\n\t}\n\n\t/**\n\t * Sets the custom id for this file upload.\n\t *\n\t * @param customId - The custom id to use\n\t */\n\tpublic setCustomId(customId: string) {\n\t\tthis.data.custom_id = customId;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the minimum number of file uploads required.\n\t *\n\t * @param minValues - The minimum values that must be uploaded\n\t */\n\tpublic setMinValues(minValues: number) {\n\t\tthis.data.min_values = minValues;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Clears the minimum values.\n\t */\n\tpublic clearMinValues() {\n\t\tthis.data.min_values = undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the maximum number of file uploads required.\n\t *\n\t * @param maxValues - The maximum values that can be uploaded\n\t */\n\tpublic setMaxValues(maxValues: number) {\n\t\tthis.data.max_values = maxValues;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Clears the maximum values.\n\t */\n\tpublic clearMaxValues() {\n\t\tthis.data.max_values = undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets whether this file upload is required.\n\t *\n\t * @param required - Whether this file upload is required\n\t */\n\tpublic setRequired(required = true) {\n\t\tthis.data.required = required;\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic toJSON(): APIFileUploadComponent {\n\t\tfileUploadPredicate.parse(this.data);\n\t\treturn this.data as APIFileUploadComponent;\n\t}\n}\n","import { s } from '@sapphire/shapeshift';\nimport { ComponentType } from 'discord-api-types/v10';\nimport { customIdValidator, idValidator } from '../Assertions.js';\n\nexport const fileUploadPredicate = s.object({\n\ttype: s.literal(ComponentType.FileUpload),\n\tid: idValidator.optional(),\n\tcustom_id: customIdValidator,\n\tmin_values: s.number().greaterThanOrEqual(0).lessThanOrEqual(10).optional(),\n\tmax_values: s.number().greaterThanOrEqual(1).lessThanOrEqual(10).optional(),\n\trequired: s.boolean().optional(),\n});\n","import type {\n\tAPIChannelSelectComponent,\n\tAPIFileUploadComponent,\n\tAPILabelComponent,\n\tAPIMentionableSelectComponent,\n\tAPIRoleSelectComponent,\n\tAPIStringSelectComponent,\n\tAPITextInputComponent,\n\tAPIUserSelectComponent,\n} from 'discord-api-types/v10';\nimport { ComponentType } from 'discord-api-types/v10';\nimport { ComponentBuilder } from '../Component.js';\nimport { createComponentBuilder, resolveBuilder } from '../Components.js';\nimport { FileUploadBuilder } from '../fileUpload/FileUpload.js';\nimport { ChannelSelectMenuBuilder } from '../selectMenu/ChannelSelectMenu.js';\nimport { MentionableSelectMenuBuilder } from '../selectMenu/MentionableSelectMenu.js';\nimport { RoleSelectMenuBuilder } from '../selectMenu/RoleSelectMenu.js';\nimport { StringSelectMenuBuilder } from '../selectMenu/StringSelectMenu.js';\nimport { UserSelectMenuBuilder } from '../selectMenu/UserSelectMenu.js';\nimport { TextInputBuilder } from '../textInput/TextInput.js';\nimport { labelPredicate } from './Assertions.js';\n\nexport interface LabelBuilderData extends Partial> {\n\tcomponent?:\n\t\t| ChannelSelectMenuBuilder\n\t\t| FileUploadBuilder\n\t\t| MentionableSelectMenuBuilder\n\t\t| RoleSelectMenuBuilder\n\t\t| StringSelectMenuBuilder\n\t\t| TextInputBuilder\n\t\t| UserSelectMenuBuilder;\n}\n\n/**\n * A builder that creates API-compatible JSON data for labels.\n */\nexport class LabelBuilder extends ComponentBuilder {\n\t/**\n\t * @internal\n\t */\n\tpublic override readonly data: LabelBuilderData;\n\n\t/**\n\t * Creates a new label.\n\t *\n\t * @param data - The API data to create this label with\n\t * @example\n\t * Creating a label from an API data object:\n\t * ```ts\n\t * const label = new LabelBuilder({\n\t * \tlabel: \"label\",\n\t * \tcomponent,\n\t * });\n\t * ```\n\t * @example\n\t * Creating a label using setters and API data:\n\t * ```ts\n\t * const label = new LabelBuilder({\n\t * \tlabel: 'label',\n\t * \tcomponent,\n\t * }).setLabel('new text');\n\t * ```\n\t */\n\tpublic constructor(data: Partial = {}) {\n\t\tsuper({ type: ComponentType.Label });\n\n\t\tconst { component, ...rest } = data;\n\n\t\tthis.data = {\n\t\t\t...rest,\n\t\t\tcomponent: component ? createComponentBuilder(component) : undefined,\n\t\t\ttype: ComponentType.Label,\n\t\t};\n\t}\n\n\t/**\n\t * Sets the label for this label.\n\t *\n\t * @param label - The label to use\n\t */\n\tpublic setLabel(label: string) {\n\t\tthis.data.label = label;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the description for this label.\n\t *\n\t * @param description - The description to use\n\t */\n\tpublic setDescription(description: string) {\n\t\tthis.data.description = description;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Clears the description for this label.\n\t */\n\tpublic clearDescription() {\n\t\tthis.data.description = undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets a string select menu component to this label.\n\t *\n\t * @param input - A function that returns a component builder or an already built builder\n\t */\n\tpublic setStringSelectMenuComponent(\n\t\tinput:\n\t\t\t| APIStringSelectComponent\n\t\t\t| StringSelectMenuBuilder\n\t\t\t| ((builder: StringSelectMenuBuilder) => StringSelectMenuBuilder),\n\t): this {\n\t\tthis.data.component = resolveBuilder(input, StringSelectMenuBuilder);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets a user select menu component to this label.\n\t *\n\t * @param input - A function that returns a component builder or an already built builder\n\t */\n\tpublic setUserSelectMenuComponent(\n\t\tinput: APIUserSelectComponent | UserSelectMenuBuilder | ((builder: UserSelectMenuBuilder) => UserSelectMenuBuilder),\n\t): this {\n\t\tthis.data.component = resolveBuilder(input, UserSelectMenuBuilder);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets a role select menu component to this label.\n\t *\n\t * @param input - A function that returns a component builder or an already built builder\n\t */\n\tpublic setRoleSelectMenuComponent(\n\t\tinput: APIRoleSelectComponent | RoleSelectMenuBuilder | ((builder: RoleSelectMenuBuilder) => RoleSelectMenuBuilder),\n\t): this {\n\t\tthis.data.component = resolveBuilder(input, RoleSelectMenuBuilder);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets a mentionable select menu component to this label.\n\t *\n\t * @param input - A function that returns a component builder or an already built builder\n\t */\n\tpublic setMentionableSelectMenuComponent(\n\t\tinput:\n\t\t\t| APIMentionableSelectComponent\n\t\t\t| MentionableSelectMenuBuilder\n\t\t\t| ((builder: MentionableSelectMenuBuilder) => MentionableSelectMenuBuilder),\n\t): this {\n\t\tthis.data.component = resolveBuilder(input, MentionableSelectMenuBuilder);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets a channel select menu component to this label.\n\t *\n\t * @param input - A function that returns a component builder or an already built builder\n\t */\n\tpublic setChannelSelectMenuComponent(\n\t\tinput:\n\t\t\t| APIChannelSelectComponent\n\t\t\t| ChannelSelectMenuBuilder\n\t\t\t| ((builder: ChannelSelectMenuBuilder) => ChannelSelectMenuBuilder),\n\t): this {\n\t\tthis.data.component = resolveBuilder(input, ChannelSelectMenuBuilder);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets a text input component to this label.\n\t *\n\t * @param input - A function that returns a component builder or an already built builder\n\t */\n\tpublic setTextInputComponent(\n\t\tinput: APITextInputComponent | TextInputBuilder | ((builder: TextInputBuilder) => TextInputBuilder),\n\t): this {\n\t\tthis.data.component = resolveBuilder(input, TextInputBuilder);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets a file upload component to this label.\n\t *\n\t * @param input - A function that returns a component builder or an already built builder\n\t */\n\tpublic setFileUploadComponent(\n\t\tinput: APIFileUploadComponent | FileUploadBuilder | ((builder: FileUploadBuilder) => FileUploadBuilder),\n\t): this {\n\t\tthis.data.component = resolveBuilder(input, FileUploadBuilder);\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic override toJSON(): APILabelComponent {\n\t\tconst { component, ...rest } = this.data;\n\n\t\tconst data = {\n\t\t\t...rest,\n\t\t\t// The label predicate validates the component.\n\t\t\tcomponent: component?.toJSON(),\n\t\t};\n\n\t\tlabelPredicate.parse(data);\n\n\t\treturn data as APILabelComponent;\n\t}\n}\n","import {\n\ttype APIChannelSelectComponent,\n\ttype ChannelType,\n\ttype Snowflake,\n\tComponentType,\n\tSelectMenuDefaultValueType,\n} from 'discord-api-types/v10';\nimport { type RestOrArray, normalizeArray } from '../../util/normalizeArray.js';\nimport { channelTypesValidator, customIdValidator, optionsLengthValidator } from '../Assertions.js';\nimport { BaseSelectMenuBuilder } from './BaseSelectMenu.js';\n\n/**\n * A builder that creates API-compatible JSON data for channel select menus.\n */\nexport class ChannelSelectMenuBuilder extends BaseSelectMenuBuilder {\n\t/**\n\t * Creates a new select menu from API data.\n\t *\n\t * @param data - The API data to create this select menu with\n\t * @example\n\t * Creating a select menu from an API data object:\n\t * ```ts\n\t * const selectMenu = new ChannelSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * \tplaceholder: 'select an option',\n\t * \tmax_values: 2,\n\t * });\n\t * ```\n\t * @example\n\t * Creating a select menu using setters and API data:\n\t * ```ts\n\t * const selectMenu = new ChannelSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * })\n\t * \t.addChannelTypes(ChannelType.GuildText, ChannelType.GuildAnnouncement)\n\t * \t.setMinValues(2);\n\t * ```\n\t */\n\tpublic constructor(data?: Partial) {\n\t\tsuper({ ...data, type: ComponentType.ChannelSelect });\n\t}\n\n\t/**\n\t * Adds channel types to this select menu.\n\t *\n\t * @param types - The channel types to use\n\t */\n\tpublic addChannelTypes(...types: RestOrArray) {\n\t\tconst normalizedTypes = normalizeArray(types);\n\t\tthis.data.channel_types ??= [];\n\t\tthis.data.channel_types.push(...channelTypesValidator.parse(normalizedTypes));\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets channel types for this select menu.\n\t *\n\t * @param types - The channel types to use\n\t */\n\tpublic setChannelTypes(...types: RestOrArray) {\n\t\tconst normalizedTypes = normalizeArray(types);\n\t\tthis.data.channel_types ??= [];\n\t\tthis.data.channel_types.splice(0, this.data.channel_types.length, ...channelTypesValidator.parse(normalizedTypes));\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds default channels to this auto populated select menu.\n\t *\n\t * @param channels - The channels to add\n\t */\n\tpublic addDefaultChannels(...channels: RestOrArray) {\n\t\tconst normalizedValues = normalizeArray(channels);\n\t\toptionsLengthValidator.parse((this.data.default_values?.length ?? 0) + normalizedValues.length);\n\t\tthis.data.default_values ??= [];\n\n\t\tthis.data.default_values.push(\n\t\t\t...normalizedValues.map((id) => ({\n\t\t\t\tid,\n\t\t\t\ttype: SelectMenuDefaultValueType.Channel as const,\n\t\t\t})),\n\t\t);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets default channels for this auto populated select menu.\n\t *\n\t * @param channels - The channels to set\n\t */\n\tpublic setDefaultChannels(...channels: RestOrArray) {\n\t\tconst normalizedValues = normalizeArray(channels);\n\t\toptionsLengthValidator.parse(normalizedValues.length);\n\n\t\tthis.data.default_values = normalizedValues.map((id) => ({\n\t\t\tid,\n\t\t\ttype: SelectMenuDefaultValueType.Channel as const,\n\t\t}));\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc BaseSelectMenuBuilder.toJSON}\n\t */\n\tpublic override toJSON(): APIChannelSelectComponent {\n\t\tcustomIdValidator.parse(this.data.custom_id);\n\n\t\treturn {\n\t\t\t...this.data,\n\t\t} as APIChannelSelectComponent;\n\t}\n}\n","import { s } from '@sapphire/shapeshift';\nimport { ComponentType, TextInputStyle } from 'discord-api-types/v10';\nimport { isValidationEnabled } from '../../util/validation.js';\nimport { customIdValidator, idValidator } from '../Assertions.js';\n\nexport const textInputStyleValidator = s.nativeEnum(TextInputStyle).setValidationEnabled(isValidationEnabled);\nexport const minLengthValidator = s\n\t.number()\n\t.int()\n\t.greaterThanOrEqual(0)\n\t.lessThanOrEqual(4_000)\n\t.setValidationEnabled(isValidationEnabled);\nexport const maxLengthValidator = s\n\t.number()\n\t.int()\n\t.greaterThanOrEqual(1)\n\t.lessThanOrEqual(4_000)\n\t.setValidationEnabled(isValidationEnabled);\nexport const requiredValidator = s.boolean().setValidationEnabled(isValidationEnabled);\nexport const valueValidator = s.string().lengthLessThanOrEqual(4_000).setValidationEnabled(isValidationEnabled);\nexport const placeholderValidator = s.string().lengthLessThanOrEqual(100).setValidationEnabled(isValidationEnabled);\nexport const labelValidator = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(45)\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const textInputPredicate = s\n\t.object({\n\t\ttype: s.literal(ComponentType.TextInput),\n\t\tcustom_id: customIdValidator,\n\t\tstyle: textInputStyleValidator,\n\t\tid: idValidator.optional(),\n\t\tmin_length: minLengthValidator.optional(),\n\t\tmax_length: maxLengthValidator.optional(),\n\t\tplaceholder: placeholderValidator.optional(),\n\t\tvalue: valueValidator.optional(),\n\t\trequired: requiredValidator.optional(),\n\t})\n\t.setValidationEnabled(isValidationEnabled);\n\nexport function validateRequiredParameters(customId?: string, style?: TextInputStyle) {\n\tcustomIdValidator.parse(customId);\n\ttextInputStyleValidator.parse(style);\n}\n","import type { APISelectMenuComponent } from 'discord-api-types/v10';\nimport { customIdValidator, disabledValidator, minMaxValidator, placeholderValidator } from '../Assertions.js';\nimport { ComponentBuilder } from '../Component.js';\nimport { requiredValidator } from '../textInput/Assertions.js';\n\n/**\n * The base select menu builder that contains common symbols for select menu builders.\n *\n * @typeParam SelectMenuType - The type of select menu this would be instantiated for.\n */\nexport abstract class BaseSelectMenuBuilder<\n\tSelectMenuType extends APISelectMenuComponent,\n> extends ComponentBuilder {\n\t/**\n\t * Sets the placeholder for this select menu.\n\t *\n\t * @param placeholder - The placeholder to use\n\t */\n\tpublic setPlaceholder(placeholder: string) {\n\t\tthis.data.placeholder = placeholderValidator.parse(placeholder);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the minimum values that must be selected in the select menu.\n\t *\n\t * @param minValues - The minimum values that must be selected\n\t */\n\tpublic setMinValues(minValues: number) {\n\t\tthis.data.min_values = minMaxValidator.parse(minValues);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the maximum values that can be selected in the select menu.\n\t *\n\t * @param maxValues - The maximum values that can be selected\n\t */\n\tpublic setMaxValues(maxValues: number) {\n\t\tthis.data.max_values = minMaxValidator.parse(maxValues);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the custom id for this select menu.\n\t *\n\t * @param customId - The custom id to use\n\t */\n\tpublic setCustomId(customId: string) {\n\t\tthis.data.custom_id = customIdValidator.parse(customId);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets whether this select menu is disabled.\n\t *\n\t * @param disabled - Whether this select menu is disabled\n\t */\n\tpublic setDisabled(disabled = true) {\n\t\tthis.data.disabled = disabledValidator.parse(disabled);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets whether this select menu is required.\n\t *\n\t * @remarks Only for use in modals.\n\t * @param required - Whether this select menu is required\n\t */\n\tpublic setRequired(required = true) {\n\t\tthis.data.required = requiredValidator.parse(required);\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic toJSON(): SelectMenuType {\n\t\tcustomIdValidator.parse(this.data.custom_id);\n\t\treturn {\n\t\t\t...this.data,\n\t\t} as SelectMenuType;\n\t}\n}\n","import {\n\ttype APIMentionableSelectComponent,\n\ttype APISelectMenuDefaultValue,\n\ttype Snowflake,\n\tComponentType,\n\tSelectMenuDefaultValueType,\n} from 'discord-api-types/v10';\nimport { type RestOrArray, normalizeArray } from '../../util/normalizeArray.js';\nimport { optionsLengthValidator } from '../Assertions.js';\nimport { BaseSelectMenuBuilder } from './BaseSelectMenu.js';\n\n/**\n * A builder that creates API-compatible JSON data for mentionable select menus.\n */\nexport class MentionableSelectMenuBuilder extends BaseSelectMenuBuilder {\n\t/**\n\t * Creates a new select menu from API data.\n\t *\n\t * @param data - The API data to create this select menu with\n\t * @example\n\t * Creating a select menu from an API data object:\n\t * ```ts\n\t * const selectMenu = new MentionableSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * \tplaceholder: 'select an option',\n\t * \tmax_values: 2,\n\t * });\n\t * ```\n\t * @example\n\t * Creating a select menu using setters and API data:\n\t * ```ts\n\t * const selectMenu = new MentionableSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * })\n\t * \t.setMinValues(1);\n\t * ```\n\t */\n\tpublic constructor(data?: Partial) {\n\t\tsuper({ ...data, type: ComponentType.MentionableSelect });\n\t}\n\n\t/**\n\t * Adds default roles to this auto populated select menu.\n\t *\n\t * @param roles - The roles to add\n\t */\n\tpublic addDefaultRoles(...roles: RestOrArray) {\n\t\tconst normalizedValues = normalizeArray(roles);\n\t\toptionsLengthValidator.parse((this.data.default_values?.length ?? 0) + normalizedValues.length);\n\t\tthis.data.default_values ??= [];\n\n\t\tthis.data.default_values.push(\n\t\t\t...normalizedValues.map((id) => ({\n\t\t\t\tid,\n\t\t\t\ttype: SelectMenuDefaultValueType.Role as const,\n\t\t\t})),\n\t\t);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds default users to this auto populated select menu.\n\t *\n\t * @param users - The users to add\n\t */\n\tpublic addDefaultUsers(...users: RestOrArray) {\n\t\tconst normalizedValues = normalizeArray(users);\n\t\toptionsLengthValidator.parse((this.data.default_values?.length ?? 0) + normalizedValues.length);\n\t\tthis.data.default_values ??= [];\n\n\t\tthis.data.default_values.push(\n\t\t\t...normalizedValues.map((id) => ({\n\t\t\t\tid,\n\t\t\t\ttype: SelectMenuDefaultValueType.User as const,\n\t\t\t})),\n\t\t);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds default values to this auto populated select menu.\n\t *\n\t * @param values - The values to add\n\t */\n\tpublic addDefaultValues(\n\t\t...values: RestOrArray<\n\t\t\t| APISelectMenuDefaultValue\n\t\t\t| APISelectMenuDefaultValue\n\t\t>\n\t) {\n\t\tconst normalizedValues = normalizeArray(values);\n\t\toptionsLengthValidator.parse((this.data.default_values?.length ?? 0) + normalizedValues.length);\n\t\tthis.data.default_values ??= [];\n\t\tthis.data.default_values.push(...normalizedValues);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets default values for this auto populated select menu.\n\t *\n\t * @param values - The values to set\n\t */\n\tpublic setDefaultValues(\n\t\t...values: RestOrArray<\n\t\t\t| APISelectMenuDefaultValue\n\t\t\t| APISelectMenuDefaultValue\n\t\t>\n\t) {\n\t\tconst normalizedValues = normalizeArray(values);\n\t\toptionsLengthValidator.parse(normalizedValues.length);\n\t\tthis.data.default_values = normalizedValues;\n\t\treturn this;\n\t}\n}\n","import {\n\ttype APIRoleSelectComponent,\n\ttype Snowflake,\n\tComponentType,\n\tSelectMenuDefaultValueType,\n} from 'discord-api-types/v10';\nimport { type RestOrArray, normalizeArray } from '../../util/normalizeArray.js';\nimport { optionsLengthValidator } from '../Assertions.js';\nimport { BaseSelectMenuBuilder } from './BaseSelectMenu.js';\n\n/**\n * A builder that creates API-compatible JSON data for role select menus.\n */\nexport class RoleSelectMenuBuilder extends BaseSelectMenuBuilder {\n\t/**\n\t * Creates a new select menu from API data.\n\t *\n\t * @param data - The API data to create this select menu with\n\t * @example\n\t * Creating a select menu from an API data object:\n\t * ```ts\n\t * const selectMenu = new RoleSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * \tplaceholder: 'select an option',\n\t * \tmax_values: 2,\n\t * });\n\t * ```\n\t * @example\n\t * Creating a select menu using setters and API data:\n\t * ```ts\n\t * const selectMenu = new RoleSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * })\n\t * \t.setMinValues(1);\n\t * ```\n\t */\n\tpublic constructor(data?: Partial) {\n\t\tsuper({ ...data, type: ComponentType.RoleSelect });\n\t}\n\n\t/**\n\t * Adds default roles to this auto populated select menu.\n\t *\n\t * @param roles - The roles to add\n\t */\n\tpublic addDefaultRoles(...roles: RestOrArray) {\n\t\tconst normalizedValues = normalizeArray(roles);\n\t\toptionsLengthValidator.parse((this.data.default_values?.length ?? 0) + normalizedValues.length);\n\t\tthis.data.default_values ??= [];\n\n\t\tthis.data.default_values.push(\n\t\t\t...normalizedValues.map((id) => ({\n\t\t\t\tid,\n\t\t\t\ttype: SelectMenuDefaultValueType.Role as const,\n\t\t\t})),\n\t\t);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets default roles for this auto populated select menu.\n\t *\n\t * @param roles - The roles to set\n\t */\n\tpublic setDefaultRoles(...roles: RestOrArray) {\n\t\tconst normalizedValues = normalizeArray(roles);\n\t\toptionsLengthValidator.parse(normalizedValues.length);\n\n\t\tthis.data.default_values = normalizedValues.map((id) => ({\n\t\t\tid,\n\t\t\ttype: SelectMenuDefaultValueType.Role as const,\n\t\t}));\n\n\t\treturn this;\n\t}\n}\n","import { ComponentType } from 'discord-api-types/v10';\nimport type { APIStringSelectComponent, APISelectMenuOption } from 'discord-api-types/v10';\nimport { normalizeArray, type RestOrArray } from '../../util/normalizeArray.js';\nimport { optionsLengthValidator, validateRequiredSelectMenuParameters } from '../Assertions.js';\nimport { selectMenuStringOptionPredicate } from './Assertions.js';\nimport { BaseSelectMenuBuilder } from './BaseSelectMenu.js';\nimport { StringSelectMenuOptionBuilder } from './StringSelectMenuOption.js';\n\n/**\n * A builder that creates API-compatible JSON data for string select menus.\n */\nexport class StringSelectMenuBuilder extends BaseSelectMenuBuilder {\n\t/**\n\t * The options within this select menu.\n\t */\n\tpublic readonly options: StringSelectMenuOptionBuilder[];\n\n\t/**\n\t * Creates a new select menu from API data.\n\t *\n\t * @param data - The API data to create this select menu with\n\t * @example\n\t * Creating a select menu from an API data object:\n\t * ```ts\n\t * const selectMenu = new StringSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * \tplaceholder: 'select an option',\n\t * \tmax_values: 2,\n\t * \toptions: [\n\t * \t\t{ label: 'option 1', value: '1' },\n\t * \t\t{ label: 'option 2', value: '2' },\n\t * \t\t{ label: 'option 3', value: '3' },\n\t * \t],\n\t * });\n\t * ```\n\t * @example\n\t * Creating a select menu using setters and API data:\n\t * ```ts\n\t * const selectMenu = new StringSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * })\n\t * \t.setMinValues(1)\n\t * \t.addOptions({\n\t * \t\tlabel: 'Catchy',\n\t * \t\tvalue: 'catch',\n\t * \t});\n\t * ```\n\t */\n\tpublic constructor(data?: Partial) {\n\t\tconst { options, ...initData } = data ?? {};\n\t\tsuper({ ...initData, type: ComponentType.StringSelect });\n\t\tthis.options = options?.map((option: APISelectMenuOption) => new StringSelectMenuOptionBuilder(option)) ?? [];\n\t}\n\n\t/**\n\t * Adds options to this select menu.\n\t *\n\t * @param options - The options to add\n\t */\n\tpublic addOptions(...options: RestOrArray) {\n\t\tconst normalizedOptions = normalizeArray(options);\n\t\toptionsLengthValidator.parse(this.options.length + normalizedOptions.length);\n\t\tthis.options.push(\n\t\t\t...normalizedOptions.map((normalizedOption) =>\n\t\t\t\tnormalizedOption instanceof StringSelectMenuOptionBuilder\n\t\t\t\t\t? normalizedOption\n\t\t\t\t\t: new StringSelectMenuOptionBuilder(selectMenuStringOptionPredicate.parse(normalizedOption)),\n\t\t\t),\n\t\t);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the options for this select menu.\n\t *\n\t * @param options - The options to set\n\t */\n\tpublic setOptions(...options: RestOrArray) {\n\t\treturn this.spliceOptions(0, this.options.length, ...options);\n\t}\n\n\t/**\n\t * Removes, replaces, or inserts options for this select menu.\n\t *\n\t * @remarks\n\t * This method behaves similarly\n\t * to {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice | Array.prototype.splice()}.\n\t * It's useful for modifying and adjusting the order of existing options.\n\t * @example\n\t * Remove the first option:\n\t * ```ts\n\t * selectMenu.spliceOptions(0, 1);\n\t * ```\n\t * @example\n\t * Remove the first n option:\n\t * ```ts\n\t * const n = 4;\n\t * selectMenu.spliceOptions(0, n);\n\t * ```\n\t * @example\n\t * Remove the last option:\n\t * ```ts\n\t * selectMenu.spliceOptions(-1, 1);\n\t * ```\n\t * @param index - The index to start at\n\t * @param deleteCount - The number of options to remove\n\t * @param options - The replacing option objects or builders\n\t */\n\tpublic spliceOptions(\n\t\tindex: number,\n\t\tdeleteCount: number,\n\t\t...options: RestOrArray\n\t) {\n\t\tconst normalizedOptions = normalizeArray(options);\n\n\t\tconst clone = [...this.options];\n\n\t\tclone.splice(\n\t\t\tindex,\n\t\t\tdeleteCount,\n\t\t\t...normalizedOptions.map((normalizedOption) =>\n\t\t\t\tnormalizedOption instanceof StringSelectMenuOptionBuilder\n\t\t\t\t\t? normalizedOption\n\t\t\t\t\t: new StringSelectMenuOptionBuilder(selectMenuStringOptionPredicate.parse(normalizedOption)),\n\t\t\t),\n\t\t);\n\n\t\toptionsLengthValidator.parse(clone.length);\n\t\tthis.options.splice(0, this.options.length, ...clone);\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc BaseSelectMenuBuilder.toJSON}\n\t */\n\tpublic override toJSON(): APIStringSelectComponent {\n\t\tvalidateRequiredSelectMenuParameters(this.options, this.data.custom_id);\n\n\t\treturn {\n\t\t\t...this.data,\n\t\t\toptions: this.options.map((option) => option.toJSON()),\n\t\t} as APIStringSelectComponent;\n\t}\n}\n","import { Result, s } from '@sapphire/shapeshift';\nimport { ChannelType, ComponentType, SelectMenuDefaultValueType } from 'discord-api-types/v10';\nimport { isValidationEnabled } from '../../util/validation.js';\nimport { customIdValidator, emojiValidator, idValidator } from '../Assertions.js';\n\nconst selectMenuBasePredicate = s.object({\n\tid: idValidator.optional(),\n\tplaceholder: s.string().lengthLessThanOrEqual(150).optional(),\n\tmin_values: s.number().greaterThanOrEqual(0).lessThanOrEqual(25).optional(),\n\tmax_values: s.number().greaterThanOrEqual(0).lessThanOrEqual(25).optional(),\n\tcustom_id: customIdValidator,\n\tdisabled: s.boolean().optional(),\n});\n\nexport const selectMenuChannelPredicate = selectMenuBasePredicate\n\t.extend({\n\t\ttype: s.literal(ComponentType.ChannelSelect),\n\t\tchannel_types: s.nativeEnum(ChannelType).array().optional(),\n\t\tdefault_values: s\n\t\t\t.object({ id: s.string(), type: s.literal(SelectMenuDefaultValueType.Channel) })\n\t\t\t.array()\n\t\t\t.lengthLessThanOrEqual(25)\n\t\t\t.optional(),\n\t})\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const selectMenuMentionablePredicate = selectMenuBasePredicate\n\t.extend({\n\t\ttype: s.literal(ComponentType.MentionableSelect),\n\t\tdefault_values: s\n\t\t\t.object({\n\t\t\t\tid: s.string(),\n\t\t\t\ttype: s.union([s.literal(SelectMenuDefaultValueType.Role), s.literal(SelectMenuDefaultValueType.User)]),\n\t\t\t})\n\t\t\t.array()\n\t\t\t.lengthLessThanOrEqual(25)\n\t\t\t.optional(),\n\t})\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const selectMenuRolePredicate = selectMenuBasePredicate\n\t.extend({\n\t\ttype: s.literal(ComponentType.RoleSelect),\n\t\tdefault_values: s\n\t\t\t.object({ id: s.string(), type: s.literal(SelectMenuDefaultValueType.Role) })\n\t\t\t.array()\n\t\t\t.lengthLessThanOrEqual(25)\n\t\t\t.optional(),\n\t})\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const selectMenuUserPredicate = selectMenuBasePredicate\n\t.extend({\n\t\ttype: s.literal(ComponentType.UserSelect),\n\t\tdefault_values: s\n\t\t\t.object({ id: s.string(), type: s.literal(SelectMenuDefaultValueType.User) })\n\t\t\t.array()\n\t\t\t.lengthLessThanOrEqual(25)\n\t\t\t.optional(),\n\t})\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const selectMenuStringOptionPredicate = s\n\t.object({\n\t\tlabel: s.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(100),\n\t\tvalue: s.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(100),\n\t\tdescription: s.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(100).optional(),\n\t\temoji: emojiValidator.optional(),\n\t\tdefault: s.boolean().optional(),\n\t})\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const selectMenuStringPredicate = selectMenuBasePredicate\n\t.extend({\n\t\ttype: s.literal(ComponentType.StringSelect),\n\t\toptions: selectMenuStringOptionPredicate.array().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(25),\n\t})\n\t.reshape((value) => {\n\t\tif (value.min_values !== undefined && value.options.length < value.min_values) {\n\t\t\treturn Result.err(new RangeError(`The number of options must be greater than or equal to min_values`));\n\t\t}\n\n\t\tif (value.min_values !== undefined && value.max_values !== undefined && value.min_values > value.max_values) {\n\t\t\treturn Result.err(\n\t\t\t\tnew RangeError(`The maximum amount of options must be greater than or equal to the minimum amount of options`),\n\t\t\t);\n\t\t}\n\n\t\treturn Result.ok(value);\n\t})\n\t.setValidationEnabled(isValidationEnabled);\n","import {\n\ttype APIUserSelectComponent,\n\ttype Snowflake,\n\tComponentType,\n\tSelectMenuDefaultValueType,\n} from 'discord-api-types/v10';\nimport { type RestOrArray, normalizeArray } from '../../util/normalizeArray.js';\nimport { optionsLengthValidator } from '../Assertions.js';\nimport { BaseSelectMenuBuilder } from './BaseSelectMenu.js';\n\n/**\n * A builder that creates API-compatible JSON data for user select menus.\n */\nexport class UserSelectMenuBuilder extends BaseSelectMenuBuilder {\n\t/**\n\t * Creates a new select menu from API data.\n\t *\n\t * @param data - The API data to create this select menu with\n\t * @example\n\t * Creating a select menu from an API data object:\n\t * ```ts\n\t * const selectMenu = new UserSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * \tplaceholder: 'select an option',\n\t * \tmax_values: 2,\n\t * });\n\t * ```\n\t * @example\n\t * Creating a select menu using setters and API data:\n\t * ```ts\n\t * const selectMenu = new UserSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * })\n\t * \t.setMinValues(1);\n\t * ```\n\t */\n\tpublic constructor(data?: Partial) {\n\t\tsuper({ ...data, type: ComponentType.UserSelect });\n\t}\n\n\t/**\n\t * Adds default users to this auto populated select menu.\n\t *\n\t * @param users - The users to add\n\t */\n\tpublic addDefaultUsers(...users: RestOrArray) {\n\t\tconst normalizedValues = normalizeArray(users);\n\t\toptionsLengthValidator.parse((this.data.default_values?.length ?? 0) + normalizedValues.length);\n\t\tthis.data.default_values ??= [];\n\n\t\tthis.data.default_values.push(\n\t\t\t...normalizedValues.map((id) => ({\n\t\t\t\tid,\n\t\t\t\ttype: SelectMenuDefaultValueType.User as const,\n\t\t\t})),\n\t\t);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets default users for this auto populated select menu.\n\t *\n\t * @param users - The users to set\n\t */\n\tpublic setDefaultUsers(...users: RestOrArray) {\n\t\tconst normalizedValues = normalizeArray(users);\n\t\toptionsLengthValidator.parse(normalizedValues.length);\n\n\t\tthis.data.default_values = normalizedValues.map((id) => ({\n\t\t\tid,\n\t\t\ttype: SelectMenuDefaultValueType.User as const,\n\t\t}));\n\n\t\treturn this;\n\t}\n}\n","import { isJSONEncodable, type Equatable, type JSONEncodable } from '@discordjs/util';\nimport { ComponentType, type TextInputStyle, type APITextInputComponent } from 'discord-api-types/v10';\nimport isEqual from 'fast-deep-equal';\nimport { customIdValidator } from '../Assertions.js';\nimport { ComponentBuilder } from '../Component.js';\nimport {\n\tmaxLengthValidator,\n\tminLengthValidator,\n\tplaceholderValidator,\n\trequiredValidator,\n\tvalueValidator,\n\tvalidateRequiredParameters,\n\tlabelValidator,\n\ttextInputStyleValidator,\n} from './Assertions.js';\n\n/**\n * A builder that creates API-compatible JSON data for text inputs.\n */\nexport class TextInputBuilder\n\textends ComponentBuilder\n\timplements Equatable>\n{\n\t/**\n\t * Creates a new text input from API data.\n\t *\n\t * @param data - The API data to create this text input with\n\t * @example\n\t * Creating a text input from an API data object:\n\t * ```ts\n\t * const textInput = new TextInputBuilder({\n\t * \tcustom_id: 'a cool text input',\n\t * \tplaceholder: 'Type something',\n\t * \tstyle: TextInputStyle.Short,\n\t * });\n\t * ```\n\t * @example\n\t * Creating a text input using setters and API data:\n\t * ```ts\n\t * const textInput = new TextInputBuilder({\n\t * \tplaceholder: 'Type something else',\n\t * })\n\t * \t.setCustomId('woah')\n\t * \t.setStyle(TextInputStyle.Paragraph);\n\t * ```\n\t */\n\tpublic constructor(data?: APITextInputComponent & { type?: ComponentType.TextInput }) {\n\t\tsuper({ type: ComponentType.TextInput, ...data });\n\t}\n\n\t/**\n\t * Sets the custom id for this text input.\n\t *\n\t * @param customId - The custom id to use\n\t */\n\tpublic setCustomId(customId: string) {\n\t\tthis.data.custom_id = customIdValidator.parse(customId);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the label for this text input.\n\t *\n\t * @param label - The label to use\n\t * @deprecated Use a label builder to create a label (and optionally a description) instead.\n\t */\n\tpublic setLabel(label: string) {\n\t\tthis.data.label = labelValidator.parse(label);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the style for this text input.\n\t *\n\t * @param style - The style to use\n\t */\n\tpublic setStyle(style: TextInputStyle) {\n\t\tthis.data.style = textInputStyleValidator.parse(style);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the minimum length of text for this text input.\n\t *\n\t * @param minLength - The minimum length of text for this text input\n\t */\n\tpublic setMinLength(minLength: number) {\n\t\tthis.data.min_length = minLengthValidator.parse(minLength);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the maximum length of text for this text input.\n\t *\n\t * @param maxLength - The maximum length of text for this text input\n\t */\n\tpublic setMaxLength(maxLength: number) {\n\t\tthis.data.max_length = maxLengthValidator.parse(maxLength);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the placeholder for this text input.\n\t *\n\t * @param placeholder - The placeholder to use\n\t */\n\tpublic setPlaceholder(placeholder: string) {\n\t\tthis.data.placeholder = placeholderValidator.parse(placeholder);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the value for this text input.\n\t *\n\t * @param value - The value to use\n\t */\n\tpublic setValue(value: string) {\n\t\tthis.data.value = valueValidator.parse(value);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets whether this text input is required.\n\t *\n\t * @param required - Whether this text input is required\n\t */\n\tpublic setRequired(required = true) {\n\t\tthis.data.required = requiredValidator.parse(required);\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic toJSON(): APITextInputComponent {\n\t\tvalidateRequiredParameters(this.data.custom_id, this.data.style);\n\n\t\treturn {\n\t\t\t...this.data,\n\t\t} as APITextInputComponent;\n\t}\n\n\t/**\n\t * Whether this is equal to another structure.\n\t */\n\tpublic equals(other: APITextInputComponent | JSONEncodable): boolean {\n\t\tif (isJSONEncodable(other)) {\n\t\t\treturn isEqual(other.toJSON(), this.data);\n\t\t}\n\n\t\treturn isEqual(other, this.data);\n\t}\n}\n","import { s } from '@sapphire/shapeshift';\nimport { ComponentType } from 'discord-api-types/v10';\nimport { isValidationEnabled } from '../../util/validation.js';\nimport { idValidator } from '../Assertions.js';\nimport { fileUploadPredicate } from '../fileUpload/Assertions.js';\nimport {\n\tselectMenuChannelPredicate,\n\tselectMenuMentionablePredicate,\n\tselectMenuRolePredicate,\n\tselectMenuStringPredicate,\n\tselectMenuUserPredicate,\n} from '../selectMenu/Assertions.js';\nimport { textInputPredicate } from '../textInput/Assertions.js';\n\nexport const labelPredicate = s\n\t.object({\n\t\tid: idValidator.optional(),\n\t\ttype: s.literal(ComponentType.Label),\n\t\tlabel: s.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(45),\n\t\tdescription: s.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(100).optional(),\n\t\tcomponent: s.union([\n\t\t\ttextInputPredicate,\n\t\t\tselectMenuUserPredicate,\n\t\t\tselectMenuRolePredicate,\n\t\t\tselectMenuMentionablePredicate,\n\t\t\tselectMenuChannelPredicate,\n\t\t\tselectMenuStringPredicate,\n\t\t\tfileUploadPredicate,\n\t\t]),\n\t})\n\t.setValidationEnabled(isValidationEnabled);\n","/* eslint-disable jsdoc/check-param-names */\n\nimport type {\n\tAPIActionRowComponent,\n\tAPIComponentInContainer,\n\tAPIComponentInMessageActionRow,\n\tAPIContainerComponent,\n\tAPIFileComponent,\n\tAPIMediaGalleryComponent,\n\tAPISectionComponent,\n\tAPISeparatorComponent,\n\tAPITextDisplayComponent,\n} from 'discord-api-types/v10';\nimport { ComponentType } from 'discord-api-types/v10';\nimport type { RGBTuple } from '../../index.js';\nimport { MediaGalleryBuilder, SectionBuilder } from '../../index.js';\nimport { normalizeArray, type RestOrArray } from '../../util/normalizeArray.js';\nimport type { AnyComponentBuilder, MessageActionRowComponentBuilder } from '../ActionRow.js';\nimport { ActionRowBuilder } from '../ActionRow.js';\nimport { ComponentBuilder } from '../Component.js';\nimport { createComponentBuilder, resolveBuilder } from '../Components.js';\nimport { containerColorPredicate, spoilerPredicate } from './Assertions.js';\nimport { FileBuilder } from './File.js';\nimport { SeparatorBuilder } from './Separator.js';\nimport { TextDisplayBuilder } from './TextDisplay.js';\n\n/**\n * The builders that may be used within a container.\n */\nexport type ContainerComponentBuilder =\n\t| ActionRowBuilder\n\t| FileBuilder\n\t| MediaGalleryBuilder\n\t| SectionBuilder\n\t| SeparatorBuilder\n\t| TextDisplayBuilder;\n\n/**\n * A builder that creates API-compatible JSON data for a container.\n */\nexport class ContainerBuilder extends ComponentBuilder {\n\t/**\n\t * The components within this container.\n\t */\n\tpublic readonly components: ContainerComponentBuilder[];\n\n\t/**\n\t * Creates a new container from API data.\n\t *\n\t * @param data - The API data to create this container with\n\t * @example\n\t * Creating a container from an API data object:\n\t * ```ts\n\t * const container = new ContainerBuilder({\n\t * \tcomponents: [\n\t * \t\t{\n\t * \t\t\tcontent: \"Some text here\",\n\t * \t\t\ttype: ComponentType.TextDisplay,\n\t * \t\t},\n\t * \t],\n\t * });\n\t * ```\n\t * @example\n\t * Creating a container using setters and API data:\n\t * ```ts\n\t * const container = new ContainerBuilder({\n\t * \tcomponents: [\n\t * \t\t{\n\t * \t\t\tcontent: \"# Heading\",\n\t * \t\t\ttype: ComponentType.TextDisplay,\n\t * \t\t},\n\t * \t],\n\t * })\n\t * .addSeparatorComponents(separator)\n\t * .addSectionComponents(section);\n\t * ```\n\t */\n\tpublic constructor({ components, ...data }: Partial = {}) {\n\t\tsuper({ type: ComponentType.Container, ...data });\n\t\tthis.components = (components?.map((component) => createComponentBuilder(component)) ??\n\t\t\t[]) as ContainerComponentBuilder[];\n\t}\n\n\t/**\n\t * Sets the accent color of this container.\n\t *\n\t * @param color - The color to use\n\t */\n\tpublic setAccentColor(color?: RGBTuple | number): this {\n\t\t// Data assertions\n\t\tcontainerColorPredicate.parse(color);\n\n\t\tif (Array.isArray(color)) {\n\t\t\tconst [red, green, blue] = color;\n\t\t\tthis.data.accent_color = (red << 16) + (green << 8) + blue;\n\t\t\treturn this;\n\t\t}\n\n\t\tthis.data.accent_color = color;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Clears the accent color of this container.\n\t */\n\tpublic clearAccentColor() {\n\t\tthis.data.accent_color = undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds action row components to this container.\n\t *\n\t * @param components - The action row components to add\n\t */\n\tpublic addActionRowComponents(\n\t\t...components: RestOrArray<\n\t\t\t| ActionRowBuilder\n\t\t\t| APIActionRowComponent\n\t\t\t| ((builder: ActionRowBuilder) => ActionRowBuilder)\n\t\t>\n\t) {\n\t\tthis.components.push(\n\t\t\t...normalizeArray(components).map((component) => resolveBuilder(component, ActionRowBuilder)),\n\t\t);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds file components to this container.\n\t *\n\t * @param components - The file components to add\n\t */\n\tpublic addFileComponents(\n\t\t...components: RestOrArray FileBuilder)>\n\t) {\n\t\tthis.components.push(...normalizeArray(components).map((component) => resolveBuilder(component, FileBuilder)));\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds media gallery components to this container.\n\t *\n\t * @param components - The media gallery components to add\n\t */\n\tpublic addMediaGalleryComponents(\n\t\t...components: RestOrArray<\n\t\t\tAPIMediaGalleryComponent | MediaGalleryBuilder | ((builder: MediaGalleryBuilder) => MediaGalleryBuilder)\n\t\t>\n\t) {\n\t\tthis.components.push(\n\t\t\t...normalizeArray(components).map((component) => resolveBuilder(component, MediaGalleryBuilder)),\n\t\t);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds section components to this container.\n\t *\n\t * @param components - The section components to add\n\t */\n\tpublic addSectionComponents(\n\t\t...components: RestOrArray SectionBuilder)>\n\t) {\n\t\tthis.components.push(...normalizeArray(components).map((component) => resolveBuilder(component, SectionBuilder)));\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds separator components to this container.\n\t *\n\t * @param components - The separator components to add\n\t */\n\tpublic addSeparatorComponents(\n\t\t...components: RestOrArray<\n\t\t\tAPISeparatorComponent | SeparatorBuilder | ((builder: SeparatorBuilder) => SeparatorBuilder)\n\t\t>\n\t) {\n\t\tthis.components.push(...normalizeArray(components).map((component) => resolveBuilder(component, SeparatorBuilder)));\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds text display components to this container.\n\t *\n\t * @param components - The text display components to add\n\t */\n\tpublic addTextDisplayComponents(\n\t\t...components: RestOrArray<\n\t\t\tAPITextDisplayComponent | TextDisplayBuilder | ((builder: TextDisplayBuilder) => TextDisplayBuilder)\n\t\t>\n\t) {\n\t\tthis.components.push(\n\t\t\t...normalizeArray(components).map((component) => resolveBuilder(component, TextDisplayBuilder)),\n\t\t);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Removes, replaces, or inserts components for this container.\n\t *\n\t * @param index - The index to start removing, replacing or inserting components\n\t * @param deleteCount - The amount of components to remove\n\t * @param components - The components to set\n\t */\n\tpublic spliceComponents(\n\t\tindex: number,\n\t\tdeleteCount: number,\n\t\t...components: RestOrArray\n\t) {\n\t\tthis.components.splice(\n\t\t\tindex,\n\t\t\tdeleteCount,\n\t\t\t...normalizeArray(components).map((component) =>\n\t\t\t\tcomponent instanceof ComponentBuilder ? component : createComponentBuilder(component),\n\t\t\t),\n\t\t);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the spoiler status of this container.\n\t *\n\t * @param spoiler - The spoiler status to use\n\t */\n\tpublic setSpoiler(spoiler = true) {\n\t\tthis.data.spoiler = spoilerPredicate.parse(spoiler);\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic toJSON(): APIContainerComponent {\n\t\treturn {\n\t\t\t...this.data,\n\t\t\tcomponents: this.components.map((component) => component.toJSON()),\n\t\t} as APIContainerComponent;\n\t}\n}\n","import { s } from '@sapphire/shapeshift';\nimport { SeparatorSpacingSize } from 'discord-api-types/v10';\nimport { colorPredicate } from '../../messages/embed/Assertions';\nimport { isValidationEnabled } from '../../util/validation';\nimport { ComponentBuilder } from '../Component';\nimport { ButtonBuilder } from '../button/Button';\nimport type { ContainerComponentBuilder } from './Container';\nimport type { MediaGalleryItemBuilder } from './MediaGalleryItem';\nimport type { TextDisplayBuilder } from './TextDisplay';\nimport { ThumbnailBuilder } from './Thumbnail';\n\nexport const unfurledMediaItemPredicate = s\n\t.object({\n\t\turl: s\n\t\t\t.string()\n\t\t\t.url(\n\t\t\t\t{ allowedProtocols: ['http:', 'https:', 'attachment:'] },\n\t\t\t\t{ message: 'Invalid protocol for media URL. Must be http:, https:, or attachment:' },\n\t\t\t),\n\t})\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const descriptionPredicate = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(1_024)\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const filePredicate = s\n\t.object({\n\t\turl: s\n\t\t\t.string()\n\t\t\t.url({ allowedProtocols: ['attachment:'] }, { message: 'Invalid protocol for file URL. Must be attachment:' }),\n\t})\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const spoilerPredicate = s.boolean();\n\nexport const dividerPredicate = s.boolean();\n\nexport const spacingPredicate = s.nativeEnum(SeparatorSpacingSize);\n\nexport const textDisplayContentPredicate = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(4_000)\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const accessoryPredicate = s\n\t.instance(ButtonBuilder)\n\t.or(s.instance(ThumbnailBuilder))\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const containerColorPredicate = colorPredicate.nullish();\n\nexport function assertReturnOfBuilder(\n\tinput: unknown,\n\tExpectedInstanceOf: new () => ReturnType,\n): asserts input is ReturnType {\n\ts.instance(ExpectedInstanceOf).setValidationEnabled(isValidationEnabled).parse(input);\n}\n\nexport function validateComponentArray<\n\tReturnType extends ContainerComponentBuilder | MediaGalleryItemBuilder = ContainerComponentBuilder,\n>(input: unknown, min: number, max: number, ExpectedInstanceOf?: new () => ReturnType): asserts input is ReturnType[] {\n\t(ExpectedInstanceOf ? s.instance(ExpectedInstanceOf) : s.instance(ComponentBuilder))\n\t\t.array()\n\t\t.lengthGreaterThanOrEqual(min)\n\t\t.lengthLessThanOrEqual(max)\n\t\t.setValidationEnabled(isValidationEnabled)\n\t\t.parse(input);\n}\n","import type { APIThumbnailComponent } from 'discord-api-types/v10';\nimport { ComponentType } from 'discord-api-types/v10';\nimport { ComponentBuilder } from '../Component';\nimport { descriptionPredicate, spoilerPredicate, unfurledMediaItemPredicate } from './Assertions';\n\nexport class ThumbnailBuilder extends ComponentBuilder {\n\t/**\n\t * Creates a new thumbnail from API data.\n\t *\n\t * @param data - The API data to create this thumbnail with\n\t * @example\n\t * Creating a thumbnail from an API data object:\n\t * ```ts\n\t * const thumbnail = new ThumbnailBuilder({\n\t * \tdescription: 'some text',\n\t * media: {\n\t * url: 'https://cdn.discordapp.com/embed/avatars/4.png',\n\t * },\n\t * });\n\t * ```\n\t * @example\n\t * Creating a thumbnail using setters and API data:\n\t * ```ts\n\t * const thumbnail = new ThumbnailBuilder({\n\t * \tmedia: {\n\t * url: 'attachment://image.png',\n\t * },\n\t * })\n\t * \t.setDescription('alt text');\n\t * ```\n\t */\n\tpublic constructor(data: Partial = {}) {\n\t\tsuper({\n\t\t\ttype: ComponentType.Thumbnail,\n\t\t\t...data,\n\t\t\tmedia: data.media ? { url: data.media.url } : undefined,\n\t\t});\n\t}\n\n\t/**\n\t * Sets the description of this thumbnail.\n\t *\n\t * @param description - The description to use\n\t */\n\tpublic setDescription(description: string) {\n\t\tthis.data.description = descriptionPredicate.parse(description);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Clears the description of this thumbnail.\n\t */\n\tpublic clearDescription() {\n\t\tthis.data.description = undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the spoiler status of this thumbnail.\n\t *\n\t * @param spoiler - The spoiler status to use\n\t */\n\tpublic setSpoiler(spoiler = true) {\n\t\tthis.data.spoiler = spoilerPredicate.parse(spoiler);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the media URL of this thumbnail.\n\t *\n\t * @param url - The URL to use\n\t */\n\tpublic setURL(url: string) {\n\t\tthis.data.media = unfurledMediaItemPredicate.parse({ url });\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritdoc ComponentBuilder.toJSON}\n\t */\n\tpublic override toJSON(): APIThumbnailComponent {\n\t\tunfurledMediaItemPredicate.parse(this.data.media);\n\n\t\treturn { ...this.data } as APIThumbnailComponent;\n\t}\n}\n","import { ComponentType, type APIFileComponent } from 'discord-api-types/v10';\nimport { ComponentBuilder } from '../Component';\nimport { filePredicate, spoilerPredicate } from './Assertions';\n\nexport class FileBuilder extends ComponentBuilder {\n\t/**\n\t * Creates a new file from API data.\n\t *\n\t * @param data - The API data to create this file with\n\t * @example\n\t * Creating a file from an API data object:\n\t * ```ts\n\t * const file = new FileBuilder({\n\t * \tspoiler: true,\n\t * \tfile: {\n\t * \t\turl: 'attachment://file.png',\n\t * \t},\n\t * });\n\t * ```\n\t * @example\n\t * Creating a file using setters and API data:\n\t * ```ts\n\t * const file = new FileBuilder({\n\t * \tfile: {\n\t * \t\turl: 'attachment://image.jpg',\n\t * \t},\n\t * })\n\t * \t.setSpoiler(false);\n\t * ```\n\t */\n\tpublic constructor(data: Partial = {}) {\n\t\tsuper({ type: ComponentType.File, ...data, file: data.file ? { url: data.file.url } : undefined });\n\t}\n\n\t/**\n\t * Sets the spoiler status of this file.\n\t *\n\t * @param spoiler - The spoiler status to use\n\t */\n\tpublic setSpoiler(spoiler = true) {\n\t\tthis.data.spoiler = spoilerPredicate.parse(spoiler);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the media URL of this file.\n\t *\n\t * @param url - The URL to use\n\t */\n\tpublic setURL(url: string) {\n\t\tthis.data.file = filePredicate.parse({ url });\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic override toJSON(): APIFileComponent {\n\t\tfilePredicate.parse(this.data.file);\n\n\t\treturn { ...this.data, file: { ...this.data.file } } as APIFileComponent;\n\t}\n}\n","import type { SeparatorSpacingSize, APISeparatorComponent } from 'discord-api-types/v10';\nimport { ComponentType } from 'discord-api-types/v10';\nimport { ComponentBuilder } from '../Component';\nimport { dividerPredicate, spacingPredicate } from './Assertions';\n\nexport class SeparatorBuilder extends ComponentBuilder {\n\t/**\n\t * Creates a new separator from API data.\n\t *\n\t * @param data - The API data to create this separator with\n\t * @example\n\t * Creating a separator from an API data object:\n\t * ```ts\n\t * const separator = new SeparatorBuilder({\n\t * \tspacing: SeparatorSpacingSize.Small,\n\t * divider: true,\n\t * });\n\t * ```\n\t * @example\n\t * Creating a separator using setters and API data:\n\t * ```ts\n\t * const separator = new SeparatorBuilder({\n\t * \tspacing: SeparatorSpacingSize.Large,\n\t * })\n\t * \t.setDivider(false);\n\t * ```\n\t */\n\tpublic constructor(data: Partial = {}) {\n\t\tsuper({\n\t\t\ttype: ComponentType.Separator,\n\t\t\t...data,\n\t\t});\n\t}\n\n\t/**\n\t * Sets whether this separator should show a divider line.\n\t *\n\t * @param divider - Whether to show a divider line\n\t */\n\tpublic setDivider(divider = true) {\n\t\tthis.data.divider = dividerPredicate.parse(divider);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the spacing of this separator.\n\t *\n\t * @param spacing - The spacing to use\n\t */\n\tpublic setSpacing(spacing: SeparatorSpacingSize) {\n\t\tthis.data.spacing = spacingPredicate.parse(spacing);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Clears the spacing of this separator.\n\t */\n\tpublic clearSpacing() {\n\t\tthis.data.spacing = undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic override toJSON(): APISeparatorComponent {\n\t\treturn { ...this.data } as APISeparatorComponent;\n\t}\n}\n","import type { APITextDisplayComponent } from 'discord-api-types/v10';\nimport { ComponentType } from 'discord-api-types/v10';\nimport { ComponentBuilder } from '../Component';\nimport { textDisplayContentPredicate } from './Assertions';\n\nexport class TextDisplayBuilder extends ComponentBuilder {\n\t/**\n\t * Creates a new text display from API data.\n\t *\n\t * @param data - The API data to create this text display with\n\t * @example\n\t * Creating a text display from an API data object:\n\t * ```ts\n\t * const textDisplay = new TextDisplayBuilder({\n\t * \tcontent: 'some text',\n\t * });\n\t * ```\n\t * @example\n\t * Creating a text display using setters and API data:\n\t * ```ts\n\t * const textDisplay = new TextDisplayBuilder({\n\t * \tcontent: 'old text',\n\t * })\n\t * \t.setContent('new text');\n\t * ```\n\t */\n\tpublic constructor(data: Partial = {}) {\n\t\tsuper({\n\t\t\ttype: ComponentType.TextDisplay,\n\t\t\t...data,\n\t\t});\n\t}\n\n\t/**\n\t * Sets the text of this text display.\n\t *\n\t * @param content - The text to use\n\t */\n\tpublic setContent(content: string) {\n\t\tthis.data.content = textDisplayContentPredicate.parse(content);\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic override toJSON(): APITextDisplayComponent {\n\t\ttextDisplayContentPredicate.parse(this.data.content);\n\n\t\treturn { ...this.data } as APITextDisplayComponent;\n\t}\n}\n","/* eslint-disable jsdoc/check-param-names */\n\nimport type { APIMediaGalleryComponent, APIMediaGalleryItem } from 'discord-api-types/v10';\nimport { ComponentType } from 'discord-api-types/v10';\nimport { normalizeArray, type RestOrArray } from '../../util/normalizeArray.js';\nimport { ComponentBuilder } from '../Component.js';\nimport { resolveBuilder } from '../Components.js';\nimport { assertReturnOfBuilder, validateComponentArray } from './Assertions.js';\nimport { MediaGalleryItemBuilder } from './MediaGalleryItem.js';\n\n/**\n * A builder that creates API-compatible JSON data for a container.\n */\nexport class MediaGalleryBuilder extends ComponentBuilder {\n\t/**\n\t * The components within this container.\n\t */\n\tpublic readonly items: MediaGalleryItemBuilder[];\n\n\t/**\n\t * Creates a new media gallery from API data.\n\t *\n\t * @param data - The API data to create this media gallery with\n\t * @example\n\t * Creating a media gallery from an API data object:\n\t * ```ts\n\t * const mediaGallery = new MediaGalleryBuilder({\n\t * \titems: [\n\t * \t\t{\n\t * \t\t\tdescription: \"Some text here\",\n\t * \t\t\tmedia: {\n\t * \t\t\t\turl: 'https://cdn.discordapp.com/embed/avatars/2.png',\n\t * \t\t\t},\n\t * \t\t},\n\t * \t],\n\t * });\n\t * ```\n\t * @example\n\t * Creating a media gallery using setters and API data:\n\t * ```ts\n\t * const mediaGallery = new MediaGalleryBuilder({\n\t * \titems: [\n\t * \t\t{\n\t * \t\t\tdescription: \"alt text\",\n\t * \t\t\tmedia: {\n\t * \t\t\t\turl: 'https://cdn.discordapp.com/embed/avatars/5.png',\n\t * \t\t\t},\n\t * \t\t},\n\t * \t],\n\t * })\n\t * \t.addItems(item2, item3);\n\t * ```\n\t */\n\tpublic constructor({ items, ...data }: Partial = {}) {\n\t\tsuper({ type: ComponentType.MediaGallery, ...data });\n\t\tthis.items = items?.map((item) => new MediaGalleryItemBuilder(item)) ?? [];\n\t}\n\n\t/**\n\t * Adds items to this media gallery.\n\t *\n\t * @param items - The items to add\n\t */\n\tpublic addItems(\n\t\t...items: RestOrArray<\n\t\t\tAPIMediaGalleryItem | MediaGalleryItemBuilder | ((builder: MediaGalleryItemBuilder) => MediaGalleryItemBuilder)\n\t\t>\n\t) {\n\t\tthis.items.push(\n\t\t\t...normalizeArray(items).map((input) => {\n\t\t\t\tconst result = resolveBuilder(input, MediaGalleryItemBuilder);\n\n\t\t\t\tassertReturnOfBuilder(result, MediaGalleryItemBuilder);\n\t\t\t\treturn result;\n\t\t\t}),\n\t\t);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Removes, replaces, or inserts media gallery items for this media gallery.\n\t *\n\t * @param index - The index to start removing, replacing or inserting items\n\t * @param deleteCount - The amount of items to remove\n\t * @param items - The items to insert\n\t */\n\tpublic spliceItems(\n\t\tindex: number,\n\t\tdeleteCount: number,\n\t\t...items: RestOrArray<\n\t\t\tAPIMediaGalleryItem | MediaGalleryItemBuilder | ((builder: MediaGalleryItemBuilder) => MediaGalleryItemBuilder)\n\t\t>\n\t) {\n\t\tthis.items.splice(\n\t\t\tindex,\n\t\t\tdeleteCount,\n\t\t\t...normalizeArray(items).map((input) => {\n\t\t\t\tconst result = resolveBuilder(input, MediaGalleryItemBuilder);\n\n\t\t\t\tassertReturnOfBuilder(result, MediaGalleryItemBuilder);\n\t\t\t\treturn result;\n\t\t\t}),\n\t\t);\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic toJSON(): APIMediaGalleryComponent {\n\t\tvalidateComponentArray(this.items, 1, 10, MediaGalleryItemBuilder);\n\t\treturn {\n\t\t\t...this.data,\n\t\t\titems: this.items.map((item) => item.toJSON()),\n\t\t} as APIMediaGalleryComponent;\n\t}\n}\n","import type { JSONEncodable } from '@discordjs/util';\nimport type { APIMediaGalleryItem } from 'discord-api-types/v10';\nimport { descriptionPredicate, spoilerPredicate, unfurledMediaItemPredicate } from './Assertions';\n\nexport class MediaGalleryItemBuilder implements JSONEncodable {\n\t/**\n\t * The API data associated with this media gallery item.\n\t */\n\tpublic readonly data: Partial;\n\n\t/**\n\t * Creates a new media gallery item from API data.\n\t *\n\t * @param data - The API data to create this media gallery item with\n\t * @example\n\t * Creating a media gallery item from an API data object:\n\t * ```ts\n\t * const item = new MediaGalleryItemBuilder({\n\t * \tdescription: \"Some text here\",\n\t * \tmedia: {\n\t * \t\turl: 'https://cdn.discordapp.com/embed/avatars/2.png',\n\t * \t},\n\t * });\n\t * ```\n\t * @example\n\t * Creating a media gallery item using setters and API data:\n\t * ```ts\n\t * const item = new MediaGalleryItemBuilder({\n\t * \tmedia: {\n\t * \t\turl: 'https://cdn.discordapp.com/embed/avatars/5.png',\n\t * \t},\n\t * })\n\t * \t.setDescription(\"alt text\");\n\t * ```\n\t */\n\tpublic constructor(data: Partial = {}) {\n\t\tthis.data = data;\n\t}\n\n\t/**\n\t * Sets the description of this media gallery item.\n\t *\n\t * @param description - The description to use\n\t */\n\tpublic setDescription(description: string) {\n\t\tthis.data.description = descriptionPredicate.parse(description);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Clears the description of this media gallery item.\n\t */\n\tpublic clearDescription() {\n\t\tthis.data.description = undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the spoiler status of this media gallery item.\n\t *\n\t * @param spoiler - The spoiler status to use\n\t */\n\tpublic setSpoiler(spoiler = true) {\n\t\tthis.data.spoiler = spoilerPredicate.parse(spoiler);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the media URL of this media gallery item.\n\t *\n\t * @param url - The URL to use\n\t */\n\tpublic setURL(url: string) {\n\t\tthis.data.media = unfurledMediaItemPredicate.parse({ url });\n\t\treturn this;\n\t}\n\n\t/**\n\t * Serializes this builder to API-compatible JSON data.\n\t *\n\t * @remarks\n\t * This method runs validations on the data before serializing it.\n\t * As such, it may throw an error if the data is invalid.\n\t */\n\tpublic toJSON(): APIMediaGalleryItem {\n\t\tunfurledMediaItemPredicate.parse(this.data.media);\n\n\t\treturn { ...this.data } as APIMediaGalleryItem;\n\t}\n}\n","/* eslint-disable jsdoc/check-param-names */\n\nimport type {\n\tAPIButtonComponent,\n\tAPISectionComponent,\n\tAPITextDisplayComponent,\n\tAPIThumbnailComponent,\n} from 'discord-api-types/v10';\nimport { ComponentType } from 'discord-api-types/v10';\nimport { ButtonBuilder, ThumbnailBuilder } from '../../index.js';\nimport { normalizeArray, type RestOrArray } from '../../util/normalizeArray.js';\nimport { ComponentBuilder } from '../Component.js';\nimport { createComponentBuilder, resolveBuilder } from '../Components.js';\nimport { accessoryPredicate, assertReturnOfBuilder, validateComponentArray } from './Assertions.js';\nimport { TextDisplayBuilder } from './TextDisplay.js';\n\n/**\n * A builder that creates API-compatible JSON data for a section.\n */\nexport class SectionBuilder extends ComponentBuilder {\n\t/**\n\t * The components within this section.\n\t */\n\tpublic readonly components: ComponentBuilder[];\n\n\t/**\n\t * The accessory of this section.\n\t */\n\tpublic readonly accessory?: ButtonBuilder | ThumbnailBuilder;\n\n\t/**\n\t * Creates a new section from API data.\n\t *\n\t * @param data - The API data to create this section with\n\t * @example\n\t * Creating a section from an API data object:\n\t * ```ts\n\t * const section = new SectionBuilder({\n\t * \tcomponents: [\n\t * \t\t{\n\t * \t\t\tcontent: \"Some text here\",\n\t * \t\t\ttype: ComponentType.TextDisplay,\n\t * \t\t},\n\t * \t],\n\t * accessory: {\n\t * media: {\n\t * url: 'https://cdn.discordapp.com/embed/avatars/3.png',\n\t * },\n\t * }\n\t * });\n\t * ```\n\t * @example\n\t * Creating a section using setters and API data:\n\t * ```ts\n\t * const section = new SectionBuilder({\n\t * \tcomponents: [\n\t * \t\t{\n\t * \t\t\tcontent: \"# Heading\",\n\t * \t\t\ttype: ComponentType.TextDisplay,\n\t * \t\t},\n\t * \t],\n\t * })\n\t * \t.setPrimaryButtonAccessory(button);\n\t * ```\n\t */\n\tpublic constructor({ components, accessory, ...data }: Partial = {}) {\n\t\tsuper({ type: ComponentType.Section, ...data });\n\t\tthis.components = (components?.map((component) => createComponentBuilder(component)) ?? []) as ComponentBuilder[];\n\t\tthis.accessory = accessory ? createComponentBuilder(accessory) : undefined;\n\t}\n\n\t/**\n\t * Sets the accessory of this section to a button.\n\t *\n\t * @param accessory - The accessory to use\n\t */\n\tpublic setButtonAccessory(\n\t\taccessory: APIButtonComponent | ButtonBuilder | ((builder: ButtonBuilder) => ButtonBuilder),\n\t): this {\n\t\tReflect.set(this, 'accessory', accessoryPredicate.parse(resolveBuilder(accessory, ButtonBuilder)));\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the accessory of this section to a thumbnail.\n\t *\n\t * @param accessory - The accessory to use\n\t */\n\tpublic setThumbnailAccessory(\n\t\taccessory: APIThumbnailComponent | ThumbnailBuilder | ((builder: ThumbnailBuilder) => ThumbnailBuilder),\n\t): this {\n\t\tReflect.set(this, 'accessory', accessoryPredicate.parse(resolveBuilder(accessory, ThumbnailBuilder)));\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds text display components to this section.\n\t *\n\t * @param components - The text display components to add\n\t */\n\tpublic addTextDisplayComponents(\n\t\t...components: RestOrArray TextDisplayBuilder)>\n\t) {\n\t\tthis.components.push(\n\t\t\t...normalizeArray(components).map((input) => {\n\t\t\t\tconst result = resolveBuilder(input, TextDisplayBuilder);\n\n\t\t\t\tassertReturnOfBuilder(result, TextDisplayBuilder);\n\t\t\t\treturn result;\n\t\t\t}),\n\t\t);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Removes, replaces, or inserts text display components for this section.\n\t *\n\t * @param index - The index to start removing, replacing or inserting text display components\n\t * @param deleteCount - The amount of text display components to remove\n\t * @param components - The text display components to insert\n\t */\n\tpublic spliceTextDisplayComponents(\n\t\tindex: number,\n\t\tdeleteCount: number,\n\t\t...components: RestOrArray<\n\t\t\tAPITextDisplayComponent | TextDisplayBuilder | ((builder: TextDisplayBuilder) => TextDisplayBuilder)\n\t\t>\n\t) {\n\t\tthis.components.splice(\n\t\t\tindex,\n\t\t\tdeleteCount,\n\t\t\t...normalizeArray(components).map((input) => {\n\t\t\t\tconst result = resolveBuilder(input, TextDisplayBuilder);\n\n\t\t\t\tassertReturnOfBuilder(result, TextDisplayBuilder);\n\t\t\t\treturn result;\n\t\t\t}),\n\t\t);\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic toJSON(): APISectionComponent {\n\t\tvalidateComponentArray(this.components, 1, 3, TextDisplayBuilder);\n\t\treturn {\n\t\t\t...this.data,\n\t\t\tcomponents: this.components.map((component) => component.toJSON()),\n\t\t\taccessory: accessoryPredicate.parse(this.accessory).toJSON(),\n\t\t} as APISectionComponent;\n\t}\n}\n","/* eslint-disable jsdoc/check-param-names */\n\nimport type { JSONEncodable } from '@discordjs/util';\nimport type {\n\tAPITextInputComponent,\n\tAPIActionRowComponent,\n\tAPIComponentInModalActionRow,\n\tAPILabelComponent,\n\tAPIModalInteractionResponseCallbackData,\n\tAPITextDisplayComponent,\n} from 'discord-api-types/v10';\nimport { ComponentType } from 'discord-api-types/v10';\nimport { ActionRowBuilder, type ModalActionRowComponentBuilder } from '../../components/ActionRow.js';\nimport { customIdValidator } from '../../components/Assertions.js';\nimport { createComponentBuilder, resolveBuilder } from '../../components/Components.js';\nimport { LabelBuilder } from '../../components/label/Label.js';\nimport { TextInputBuilder } from '../../components/textInput/TextInput.js';\nimport { TextDisplayBuilder } from '../../components/v2/TextDisplay.js';\nimport { normalizeArray, type RestOrArray } from '../../util/normalizeArray.js';\nimport { titleValidator, validateRequiredParameters } from './Assertions.js';\n\n/**\n * A builder that creates API-compatible JSON data for modals.\n */\nexport class ModalBuilder implements JSONEncodable {\n\t/**\n\t * The API data associated with this modal.\n\t */\n\tpublic readonly data: Partial;\n\n\t/**\n\t * The components within this modal.\n\t */\n\tpublic readonly components: (ActionRowBuilder | LabelBuilder | TextDisplayBuilder)[] =\n\t\t[];\n\n\t/**\n\t * Creates a new modal from API data.\n\t *\n\t * @param data - The API data to create this modal with\n\t */\n\tpublic constructor({ components, ...data }: Partial = {}) {\n\t\tthis.data = { ...data };\n\t\tthis.components = (components?.map((component) => createComponentBuilder(component)) ?? []) as (\n\t\t\t| ActionRowBuilder\n\t\t\t| LabelBuilder\n\t\t)[];\n\t}\n\n\t/**\n\t * Sets the title of this modal.\n\t *\n\t * @param title - The title to use\n\t */\n\tpublic setTitle(title: string) {\n\t\tthis.data.title = titleValidator.parse(title);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the custom id of this modal.\n\t *\n\t * @param customId - The custom id to use\n\t */\n\tpublic setCustomId(customId: string) {\n\t\tthis.data.custom_id = customIdValidator.parse(customId);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds components to this modal.\n\t *\n\t * @param components - The components to add\n\t * @deprecated Use {@link ModalBuilder.addLabelComponents} or {@link ModalBuilder.addTextDisplayComponents} instead\n\t */\n\tpublic addComponents(\n\t\t...components: RestOrArray<\n\t\t\t| ActionRowBuilder\n\t\t\t| APIActionRowComponent\n\t\t\t| APILabelComponent\n\t\t\t| APITextDisplayComponent\n\t\t\t| APITextInputComponent\n\t\t\t| LabelBuilder\n\t\t\t| TextDisplayBuilder\n\t\t\t| TextInputBuilder\n\t\t>\n\t) {\n\t\tthis.components.push(\n\t\t\t...normalizeArray(components).map((component, idx) => {\n\t\t\t\tif (\n\t\t\t\t\tcomponent instanceof ActionRowBuilder ||\n\t\t\t\t\tcomponent instanceof LabelBuilder ||\n\t\t\t\t\tcomponent instanceof TextDisplayBuilder\n\t\t\t\t) {\n\t\t\t\t\treturn component;\n\t\t\t\t}\n\n\t\t\t\t// Deprecated support\n\t\t\t\tif (component instanceof TextInputBuilder) {\n\t\t\t\t\treturn new ActionRowBuilder().addComponents(component);\n\t\t\t\t}\n\n\t\t\t\tif ('type' in component) {\n\t\t\t\t\tif (component.type === ComponentType.ActionRow) {\n\t\t\t\t\t\treturn new ActionRowBuilder(component);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (component.type === ComponentType.Label) {\n\t\t\t\t\t\treturn new LabelBuilder(component);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (component.type === ComponentType.TextDisplay) {\n\t\t\t\t\t\treturn new TextDisplayBuilder(component);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Deprecated, should go in a label component\n\t\t\t\t\tif (component.type === ComponentType.TextInput) {\n\t\t\t\t\t\treturn new ActionRowBuilder().addComponents(\n\t\t\t\t\t\t\tnew TextInputBuilder(component),\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthrow new TypeError(`Invalid component passed in ModalBuilder.addComponents at index ${idx}!`);\n\t\t\t}),\n\t\t);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds label components to this modal.\n\t *\n\t * @param components - The components to add\n\t */\n\tpublic addLabelComponents(\n\t\t...components: RestOrArray LabelBuilder)>\n\t) {\n\t\tconst normalized = normalizeArray(components);\n\t\tconst resolved = normalized.map((label) => resolveBuilder(label, LabelBuilder));\n\n\t\tthis.components.push(...resolved);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds text display components to this modal.\n\t *\n\t * @param components - The components to add\n\t */\n\tpublic addTextDisplayComponents(\n\t\t...components: RestOrArray<\n\t\t\tAPITextDisplayComponent | TextDisplayBuilder | ((builder: TextDisplayBuilder) => TextDisplayBuilder)\n\t\t>\n\t) {\n\t\tconst normalized = normalizeArray(components);\n\t\tconst resolved = normalized.map((row) => resolveBuilder(row, TextDisplayBuilder));\n\n\t\tthis.components.push(...resolved);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds action rows to this modal.\n\t *\n\t * @param components - The components to add\n\t * @deprecated Use {@link ModalBuilder.addLabelComponents} instead\n\t */\n\tpublic addActionRowComponents(\n\t\t...components: RestOrArray<\n\t\t\t| ActionRowBuilder\n\t\t\t| APIActionRowComponent\n\t\t\t| ((\n\t\t\t\t\tbuilder: ActionRowBuilder,\n\t\t\t ) => ActionRowBuilder)\n\t\t>\n\t) {\n\t\tconst normalized = normalizeArray(components);\n\t\tconst resolved = normalized.map((row) => resolveBuilder(row, ActionRowBuilder));\n\n\t\tthis.components.push(...resolved);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the labels for this modal.\n\t *\n\t * @param components - The components to set\n\t */\n\tpublic setLabelComponents(\n\t\t...components: RestOrArray LabelBuilder)>\n\t) {\n\t\tconst normalized = normalizeArray(components);\n\t\tthis.spliceLabelComponents(0, this.components.length, ...normalized);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Removes, replaces, or inserts labels for this modal.\n\t *\n\t * @remarks\n\t * This method behaves similarly\n\t * to {@link https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/splice | Array.prototype.splice()}.\n\t * The maximum amount of labels that can be added is 5.\n\t *\n\t * It's useful for modifying and adjusting order of the already-existing labels of a modal.\n\t * @example\n\t * Remove the first label:\n\t * ```ts\n\t * modal.spliceLabelComponents(0, 1);\n\t * ```\n\t * @example\n\t * Remove the first n labels:\n\t * ```ts\n\t * const n = 4;\n\t * modal.spliceLabelComponents(0, n);\n\t * ```\n\t * @example\n\t * Remove the last label:\n\t * ```ts\n\t * modal.spliceLabelComponents(-1, 1);\n\t * ```\n\t * @param index - The index to start at\n\t * @param deleteCount - The number of labels to remove\n\t * @param labels - The replacing label objects\n\t */\n\tpublic spliceLabelComponents(\n\t\tindex: number,\n\t\tdeleteCount: number,\n\t\t...labels: (APILabelComponent | LabelBuilder | ((builder: LabelBuilder) => LabelBuilder))[]\n\t): this {\n\t\tconst resolved = labels.map((label) => resolveBuilder(label, LabelBuilder));\n\t\tthis.components.splice(index, deleteCount, ...resolved);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets components for this modal.\n\t *\n\t * @param components - The components to set\n\t * @deprecated Use {@link ModalBuilder.setLabelComponents} instead\n\t */\n\tpublic setComponents(\n\t\t...components: RestOrArray | LabelBuilder | TextDisplayBuilder>\n\t) {\n\t\tthis.components.splice(0, this.components.length, ...normalizeArray(components));\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic toJSON(): APIModalInteractionResponseCallbackData {\n\t\tvalidateRequiredParameters(this.data.custom_id, this.data.title, this.components);\n\n\t\treturn {\n\t\t\t...this.data,\n\t\t\tcomponents: this.components.map((component) => component.toJSON()),\n\t\t} as APIModalInteractionResponseCallbackData;\n\t}\n}\n","import { s } from '@sapphire/shapeshift';\nimport { ActionRowBuilder, type ModalActionRowComponentBuilder } from '../../components/ActionRow.js';\nimport { customIdValidator } from '../../components/Assertions.js';\nimport { LabelBuilder } from '../../components/label/Label.js';\nimport { TextDisplayBuilder } from '../../components/v2/TextDisplay.js';\nimport { isValidationEnabled } from '../../util/validation.js';\n\nexport const titleValidator = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(45)\n\t.setValidationEnabled(isValidationEnabled);\nexport const componentsValidator = s\n\t.union([s.instance(ActionRowBuilder), s.instance(LabelBuilder), s.instance(TextDisplayBuilder)])\n\t.array()\n\t.lengthGreaterThanOrEqual(1)\n\t.setValidationEnabled(isValidationEnabled);\n\nexport function validateRequiredParameters(\n\tcustomId?: string,\n\ttitle?: string,\n\tcomponents?: (ActionRowBuilder | LabelBuilder | TextDisplayBuilder)[],\n) {\n\tcustomIdValidator.parse(customId);\n\ttitleValidator.parse(title);\n\tcomponentsValidator.parse(components);\n}\n","import { s } from '@sapphire/shapeshift';\nimport {\n\tApplicationIntegrationType,\n\tInteractionContextType,\n\tLocale,\n\ttype APIApplicationCommandOptionChoice,\n\ttype LocalizationMap,\n} from 'discord-api-types/v10';\nimport { isValidationEnabled } from '../../util/validation.js';\nimport type { ToAPIApplicationCommandOptions } from './SlashCommandBuilder.js';\nimport type { SlashCommandSubcommandBuilder, SlashCommandSubcommandGroupBuilder } from './SlashCommandSubcommands.js';\nimport type { ApplicationCommandOptionBase } from './mixins/ApplicationCommandOptionBase.js';\n\nconst namePredicate = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(32)\n\t.regex(/^[\\p{Ll}\\p{Lm}\\p{Lo}\\p{N}\\p{sc=Devanagari}\\p{sc=Thai}_-]+$/u)\n\t.setValidationEnabled(isValidationEnabled);\n\nexport function validateName(name: unknown): asserts name is string {\n\tnamePredicate.parse(name);\n}\n\nconst descriptionPredicate = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(100)\n\t.setValidationEnabled(isValidationEnabled);\nconst localePredicate = s.nativeEnum(Locale);\n\nexport function validateDescription(description: unknown): asserts description is string {\n\tdescriptionPredicate.parse(description);\n}\n\nconst maxArrayLengthPredicate = s.unknown().array().lengthLessThanOrEqual(25).setValidationEnabled(isValidationEnabled);\nexport function validateLocale(locale: unknown) {\n\treturn localePredicate.parse(locale);\n}\n\nexport function validateMaxOptionsLength(options: unknown): asserts options is ToAPIApplicationCommandOptions[] {\n\tmaxArrayLengthPredicate.parse(options);\n}\n\nexport function validateRequiredParameters(\n\tname: string,\n\tdescription: string,\n\toptions: ToAPIApplicationCommandOptions[],\n) {\n\t// Assert name matches all conditions\n\tvalidateName(name);\n\n\t// Assert description conditions\n\tvalidateDescription(description);\n\n\t// Assert options conditions\n\tvalidateMaxOptionsLength(options);\n}\n\nconst booleanPredicate = s.boolean();\n\nexport function validateDefaultPermission(value: unknown): asserts value is boolean {\n\tbooleanPredicate.parse(value);\n}\n\nexport function validateRequired(required: unknown): asserts required is boolean {\n\tbooleanPredicate.parse(required);\n}\n\nconst choicesLengthPredicate = s.number().lessThanOrEqual(25).setValidationEnabled(isValidationEnabled);\n\nexport function validateChoicesLength(amountAdding: number, choices?: APIApplicationCommandOptionChoice[]): void {\n\tchoicesLengthPredicate.parse((choices?.length ?? 0) + amountAdding);\n}\n\nexport function assertReturnOfBuilder<\n\tReturnType extends ApplicationCommandOptionBase | SlashCommandSubcommandBuilder | SlashCommandSubcommandGroupBuilder,\n>(input: unknown, ExpectedInstanceOf: new () => ReturnType): asserts input is ReturnType {\n\ts.instance(ExpectedInstanceOf).parse(input);\n}\n\nexport const localizationMapPredicate = s\n\t.object(Object.fromEntries(Object.values(Locale).map((locale) => [locale, s.string().nullish()])))\n\t.strict()\n\t.nullish()\n\t.setValidationEnabled(isValidationEnabled);\n\nexport function validateLocalizationMap(value: unknown): asserts value is LocalizationMap {\n\tlocalizationMapPredicate.parse(value);\n}\n\nconst dmPermissionPredicate = s.boolean().nullish();\n\nexport function validateDMPermission(value: unknown): asserts value is boolean | null | undefined {\n\tdmPermissionPredicate.parse(value);\n}\n\nconst memberPermissionPredicate = s\n\t.union([\n\t\ts.bigint().transform((value) => value.toString()),\n\t\ts\n\t\t\t.number()\n\t\t\t.safeInt()\n\t\t\t.transform((value) => value.toString()),\n\t\ts.string().regex(/^\\d+$/),\n\t])\n\t.nullish();\n\nexport function validateDefaultMemberPermissions(permissions: unknown) {\n\treturn memberPermissionPredicate.parse(permissions);\n}\n\nexport function validateNSFW(value: unknown): asserts value is boolean {\n\tbooleanPredicate.parse(value);\n}\n\nexport const contextsPredicate = s.array(\n\ts.nativeEnum(InteractionContextType).setValidationEnabled(isValidationEnabled),\n);\n\nexport const integrationTypesPredicate = s.array(\n\ts.nativeEnum(ApplicationIntegrationType).setValidationEnabled(isValidationEnabled),\n);\n","import type {\n\tAPIApplicationCommandOption,\n\tApplicationIntegrationType,\n\tInteractionContextType,\n\tLocalizationMap,\n\tPermissions,\n} from 'discord-api-types/v10';\nimport { mix } from 'ts-mixer';\nimport { SharedNameAndDescription } from './mixins/NameAndDescription.js';\nimport { SharedSlashCommand } from './mixins/SharedSlashCommand.js';\nimport { SharedSlashCommandOptions } from './mixins/SharedSlashCommandOptions.js';\nimport { SharedSlashCommandSubcommands } from './mixins/SharedSubcommands.js';\n\n/**\n * A builder that creates API-compatible JSON data for slash commands.\n */\n@mix(SharedSlashCommandOptions, SharedNameAndDescription, SharedSlashCommandSubcommands, SharedSlashCommand)\nexport class SlashCommandBuilder {\n\t/**\n\t * The name of this command.\n\t */\n\tpublic readonly name: string = undefined!;\n\n\t/**\n\t * The name localizations of this command.\n\t */\n\tpublic readonly name_localizations?: LocalizationMap;\n\n\t/**\n\t * The description of this command.\n\t */\n\tpublic readonly description: string = undefined!;\n\n\t/**\n\t * The description localizations of this command.\n\t */\n\tpublic readonly description_localizations?: LocalizationMap;\n\n\t/**\n\t * The options of this command.\n\t */\n\tpublic readonly options: ToAPIApplicationCommandOptions[] = [];\n\n\t/**\n\t * The contexts for this command.\n\t */\n\tpublic readonly contexts?: InteractionContextType[];\n\n\t/**\n\t * Whether this command is enabled by default when the application is added to a guild.\n\t *\n\t * @deprecated Use {@link SharedSlashCommand.setDefaultMemberPermissions} or {@link SharedSlashCommand.setDMPermission} instead.\n\t */\n\tpublic readonly default_permission: boolean | undefined = undefined;\n\n\t/**\n\t * The set of permissions represented as a bit set for the command.\n\t */\n\tpublic readonly default_member_permissions: Permissions | null | undefined = undefined;\n\n\t/**\n\t * Indicates whether the command is available in direct messages with the application.\n\t *\n\t * @remarks\n\t * By default, commands are visible. This property is only for global commands.\n\t * @deprecated\n\t * Use {@link SlashCommandBuilder.contexts} instead.\n\t */\n\tpublic readonly dm_permission: boolean | undefined = undefined;\n\n\t/**\n\t * The integration types for this command.\n\t */\n\tpublic readonly integration_types?: ApplicationIntegrationType[];\n\n\t/**\n\t * Whether this command is NSFW.\n\t */\n\tpublic readonly nsfw: boolean | undefined = undefined;\n}\n\nexport interface SlashCommandBuilder\n\textends SharedNameAndDescription,\n\t\tSharedSlashCommandOptions,\n\t\tSharedSlashCommandSubcommands,\n\t\tSharedSlashCommand {}\n\n/**\n * An interface specifically for slash command subcommands.\n */\nexport interface SlashCommandSubcommandsOnlyBuilder\n\textends SharedNameAndDescription,\n\t\tSharedSlashCommandSubcommands,\n\t\tSharedSlashCommand {}\n\n/**\n * An interface specifically for slash command options.\n */\nexport interface SlashCommandOptionsOnlyBuilder\n\textends SharedNameAndDescription,\n\t\tSharedSlashCommandOptions,\n\t\tSharedSlashCommand {}\n\n/**\n * An interface that ensures the `toJSON()` call will return something\n * that can be serialized into API-compatible data.\n */\nexport interface ToAPIApplicationCommandOptions {\n\ttoJSON(): APIApplicationCommandOption;\n}\n","import type { LocaleString, LocalizationMap } from 'discord-api-types/v10';\nimport { validateDescription, validateLocale, validateName } from '../Assertions.js';\n\n/**\n * This mixin holds name and description symbols for slash commands.\n */\nexport class SharedNameAndDescription {\n\t/**\n\t * The name of this command.\n\t */\n\tpublic readonly name!: string;\n\n\t/**\n\t * The name localizations of this command.\n\t */\n\tpublic readonly name_localizations?: LocalizationMap;\n\n\t/**\n\t * The description of this command.\n\t */\n\tpublic readonly description!: string;\n\n\t/**\n\t * The description localizations of this command.\n\t */\n\tpublic readonly description_localizations?: LocalizationMap;\n\n\t/**\n\t * Sets the name of this command.\n\t *\n\t * @param name - The name to use\n\t */\n\tpublic setName(name: string): this {\n\t\t// Assert the name matches the conditions\n\t\tvalidateName(name);\n\n\t\tReflect.set(this, 'name', name);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the description of this command.\n\t *\n\t * @param description - The description to use\n\t */\n\tpublic setDescription(description: string) {\n\t\t// Assert the description matches the conditions\n\t\tvalidateDescription(description);\n\n\t\tReflect.set(this, 'description', description);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets a name localization for this command.\n\t *\n\t * @param locale - The locale to set\n\t * @param localizedName - The localized name for the given `locale`\n\t */\n\tpublic setNameLocalization(locale: LocaleString, localizedName: string | null) {\n\t\tif (!this.name_localizations) {\n\t\t\tReflect.set(this, 'name_localizations', {});\n\t\t}\n\n\t\tconst parsedLocale = validateLocale(locale);\n\n\t\tif (localizedName === null) {\n\t\t\tthis.name_localizations![parsedLocale] = null;\n\t\t\treturn this;\n\t\t}\n\n\t\tvalidateName(localizedName);\n\n\t\tthis.name_localizations![parsedLocale] = localizedName;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the name localizations for this command.\n\t *\n\t * @param localizedNames - The object of localized names to set\n\t */\n\tpublic setNameLocalizations(localizedNames: LocalizationMap | null) {\n\t\tif (localizedNames === null) {\n\t\t\tReflect.set(this, 'name_localizations', null);\n\t\t\treturn this;\n\t\t}\n\n\t\tReflect.set(this, 'name_localizations', {});\n\n\t\tfor (const args of Object.entries(localizedNames)) {\n\t\t\tthis.setNameLocalization(...(args as [LocaleString, string | null]));\n\t\t}\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets a description localization for this command.\n\t *\n\t * @param locale - The locale to set\n\t * @param localizedDescription - The localized description for the given locale\n\t */\n\tpublic setDescriptionLocalization(locale: LocaleString, localizedDescription: string | null) {\n\t\tif (!this.description_localizations) {\n\t\t\tReflect.set(this, 'description_localizations', {});\n\t\t}\n\n\t\tconst parsedLocale = validateLocale(locale);\n\n\t\tif (localizedDescription === null) {\n\t\t\tthis.description_localizations![parsedLocale] = null;\n\t\t\treturn this;\n\t\t}\n\n\t\tvalidateDescription(localizedDescription);\n\n\t\tthis.description_localizations![parsedLocale] = localizedDescription;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the description localizations for this command.\n\t *\n\t * @param localizedDescriptions - The object of localized descriptions to set\n\t */\n\tpublic setDescriptionLocalizations(localizedDescriptions: LocalizationMap | null) {\n\t\tif (localizedDescriptions === null) {\n\t\t\tReflect.set(this, 'description_localizations', null);\n\t\t\treturn this;\n\t\t}\n\n\t\tReflect.set(this, 'description_localizations', {});\n\t\tfor (const args of Object.entries(localizedDescriptions)) {\n\t\t\tthis.setDescriptionLocalization(...(args as [LocaleString, string | null]));\n\t\t}\n\n\t\treturn this;\n\t}\n}\n","import {\n\tApplicationCommandType,\n\ttype ApplicationIntegrationType,\n\ttype InteractionContextType,\n\ttype LocalizationMap,\n\ttype Permissions,\n\ttype RESTPostAPIChatInputApplicationCommandsJSONBody,\n} from 'discord-api-types/v10';\nimport type { RestOrArray } from '../../../util/normalizeArray.js';\nimport { normalizeArray } from '../../../util/normalizeArray.js';\nimport {\n\tcontextsPredicate,\n\tintegrationTypesPredicate,\n\tvalidateDMPermission,\n\tvalidateDefaultMemberPermissions,\n\tvalidateDefaultPermission,\n\tvalidateLocalizationMap,\n\tvalidateNSFW,\n\tvalidateRequiredParameters,\n} from '../Assertions.js';\nimport type { ToAPIApplicationCommandOptions } from '../SlashCommandBuilder.js';\n\n/**\n * This mixin holds symbols that can be shared in slashcommands independent of options or subcommands.\n */\nexport class SharedSlashCommand {\n\tpublic readonly name: string = undefined!;\n\n\tpublic readonly name_localizations?: LocalizationMap;\n\n\tpublic readonly description: string = undefined!;\n\n\tpublic readonly description_localizations?: LocalizationMap;\n\n\tpublic readonly options: ToAPIApplicationCommandOptions[] = [];\n\n\tpublic readonly contexts?: InteractionContextType[];\n\n\t/**\n\t * @deprecated Use {@link SharedSlashCommand.setDefaultMemberPermissions} or {@link SharedSlashCommand.setDMPermission} instead.\n\t */\n\tpublic readonly default_permission: boolean | undefined = undefined;\n\n\tpublic readonly default_member_permissions: Permissions | null | undefined = undefined;\n\n\t/**\n\t * @deprecated Use {@link SharedSlashCommand.contexts} instead.\n\t */\n\tpublic readonly dm_permission: boolean | undefined = undefined;\n\n\tpublic readonly integration_types?: ApplicationIntegrationType[];\n\n\tpublic readonly nsfw: boolean | undefined = undefined;\n\n\t/**\n\t * Sets the contexts of this command.\n\t *\n\t * @param contexts - The contexts\n\t */\n\tpublic setContexts(...contexts: RestOrArray) {\n\t\tReflect.set(this, 'contexts', contextsPredicate.parse(normalizeArray(contexts)));\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the integration types of this command.\n\t *\n\t * @param integrationTypes - The integration types\n\t */\n\tpublic setIntegrationTypes(...integrationTypes: RestOrArray) {\n\t\tReflect.set(this, 'integration_types', integrationTypesPredicate.parse(normalizeArray(integrationTypes)));\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets whether the command is enabled by default when the application is added to a guild.\n\t *\n\t * @remarks\n\t * If set to `false`, you will have to later `PUT` the permissions for this command.\n\t * @param value - Whether or not to enable this command by default\n\t * @see {@link https://discord.com/developers/docs/interactions/application-commands#permissions}\n\t * @deprecated Use {@link SharedSlashCommand.setDefaultMemberPermissions} or {@link SharedSlashCommand.setDMPermission} instead.\n\t */\n\tpublic setDefaultPermission(value: boolean) {\n\t\t// Assert the value matches the conditions\n\t\tvalidateDefaultPermission(value);\n\n\t\tReflect.set(this, 'default_permission', value);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the default permissions a member should have in order to run the command.\n\t *\n\t * @remarks\n\t * You can set this to `'0'` to disable the command by default.\n\t * @param permissions - The permissions bit field to set\n\t * @see {@link https://discord.com/developers/docs/interactions/application-commands#permissions}\n\t */\n\tpublic setDefaultMemberPermissions(permissions: Permissions | bigint | number | null | undefined) {\n\t\t// Assert the value and parse it\n\t\tconst permissionValue = validateDefaultMemberPermissions(permissions);\n\n\t\tReflect.set(this, 'default_member_permissions', permissionValue);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets if the command is available in direct messages with the application.\n\t *\n\t * @remarks\n\t * By default, commands are visible. This method is only for global commands.\n\t * @param enabled - Whether the command should be enabled in direct messages\n\t * @see {@link https://discord.com/developers/docs/interactions/application-commands#permissions}\n\t * @deprecated\n\t * Use {@link SharedSlashCommand.setContexts} instead.\n\t */\n\tpublic setDMPermission(enabled: boolean | null | undefined) {\n\t\t// Assert the value matches the conditions\n\t\tvalidateDMPermission(enabled);\n\n\t\tReflect.set(this, 'dm_permission', enabled);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets whether this command is NSFW.\n\t *\n\t * @param nsfw - Whether this command is NSFW\n\t */\n\tpublic setNSFW(nsfw = true) {\n\t\t// Assert the value matches the conditions\n\t\tvalidateNSFW(nsfw);\n\t\tReflect.set(this, 'nsfw', nsfw);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Serializes this builder to API-compatible JSON data.\n\t *\n\t * @remarks\n\t * This method runs validations on the data before serializing it.\n\t * As such, it may throw an error if the data is invalid.\n\t */\n\tpublic toJSON(): RESTPostAPIChatInputApplicationCommandsJSONBody {\n\t\tvalidateRequiredParameters(this.name, this.description, this.options);\n\n\t\tvalidateLocalizationMap(this.name_localizations);\n\t\tvalidateLocalizationMap(this.description_localizations);\n\n\t\treturn {\n\t\t\t...this,\n\t\t\ttype: ApplicationCommandType.ChatInput,\n\t\t\toptions: this.options.map((option) => option.toJSON()),\n\t\t};\n\t}\n}\n","import { ApplicationCommandOptionType, type APIApplicationCommandAttachmentOption } from 'discord-api-types/v10';\nimport { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js';\n\n/**\n * A slash command attachment option.\n */\nexport class SlashCommandAttachmentOption extends ApplicationCommandOptionBase {\n\t/**\n\t * The type of this option.\n\t */\n\tpublic override readonly type = ApplicationCommandOptionType.Attachment as const;\n\n\t/**\n\t * {@inheritDoc ApplicationCommandOptionBase.toJSON}\n\t */\n\tpublic toJSON(): APIApplicationCommandAttachmentOption {\n\t\tthis.runRequiredValidations();\n\n\t\treturn { ...this };\n\t}\n}\n","import type { APIApplicationCommandBasicOption, ApplicationCommandOptionType } from 'discord-api-types/v10';\nimport { validateRequiredParameters, validateRequired, validateLocalizationMap } from '../Assertions.js';\nimport { SharedNameAndDescription } from './NameAndDescription.js';\n\n/**\n * The base application command option builder that contains common symbols for application command builders.\n */\nexport abstract class ApplicationCommandOptionBase extends SharedNameAndDescription {\n\t/**\n\t * The type of this option.\n\t */\n\tpublic abstract readonly type: ApplicationCommandOptionType;\n\n\t/**\n\t * Whether this option is required.\n\t *\n\t * @defaultValue `false`\n\t */\n\tpublic readonly required: boolean = false;\n\n\t/**\n\t * Sets whether this option is required.\n\t *\n\t * @param required - Whether this option should be required\n\t */\n\tpublic setRequired(required: boolean) {\n\t\t// Assert that you actually passed a boolean\n\t\tvalidateRequired(required);\n\n\t\tReflect.set(this, 'required', required);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Serializes this builder to API-compatible JSON data.\n\t *\n\t * @remarks\n\t * This method runs validations on the data before serializing it.\n\t * As such, it may throw an error if the data is invalid.\n\t */\n\tpublic abstract toJSON(): APIApplicationCommandBasicOption;\n\n\t/**\n\t * This method runs required validators on this builder.\n\t */\n\tprotected runRequiredValidations() {\n\t\tvalidateRequiredParameters(this.name, this.description, []);\n\n\t\t// Validate localizations\n\t\tvalidateLocalizationMap(this.name_localizations);\n\t\tvalidateLocalizationMap(this.description_localizations);\n\n\t\t// Assert that you actually passed a boolean\n\t\tvalidateRequired(this.required);\n\t}\n}\n","import { ApplicationCommandOptionType, type APIApplicationCommandBooleanOption } from 'discord-api-types/v10';\nimport { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js';\n\n/**\n * A slash command boolean option.\n */\nexport class SlashCommandBooleanOption extends ApplicationCommandOptionBase {\n\t/**\n\t * The type of this option.\n\t */\n\tpublic readonly type = ApplicationCommandOptionType.Boolean as const;\n\n\t/**\n\t * {@inheritDoc ApplicationCommandOptionBase.toJSON}\n\t */\n\tpublic toJSON(): APIApplicationCommandBooleanOption {\n\t\tthis.runRequiredValidations();\n\n\t\treturn { ...this };\n\t}\n}\n","import { ApplicationCommandOptionType, type APIApplicationCommandChannelOption } from 'discord-api-types/v10';\nimport { mix } from 'ts-mixer';\nimport { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js';\nimport { ApplicationCommandOptionChannelTypesMixin } from '../mixins/ApplicationCommandOptionChannelTypesMixin.js';\n\n/**\n * A slash command channel option.\n */\n@mix(ApplicationCommandOptionChannelTypesMixin)\nexport class SlashCommandChannelOption extends ApplicationCommandOptionBase {\n\t/**\n\t * The type of this option.\n\t */\n\tpublic override readonly type = ApplicationCommandOptionType.Channel as const;\n\n\t/**\n\t * {@inheritDoc ApplicationCommandOptionBase.toJSON}\n\t */\n\tpublic toJSON(): APIApplicationCommandChannelOption {\n\t\tthis.runRequiredValidations();\n\n\t\treturn { ...this };\n\t}\n}\n\nexport interface SlashCommandChannelOption extends ApplicationCommandOptionChannelTypesMixin {}\n","import { s } from '@sapphire/shapeshift';\nimport { ChannelType } from 'discord-api-types/v10';\nimport { normalizeArray, type RestOrArray } from '../../../util/normalizeArray';\n\n/**\n * The allowed channel types used for a channel option in a slash command builder.\n *\n * @privateRemarks This can't be dynamic because const enums are erased at runtime.\n * @internal\n */\nconst allowedChannelTypes = [\n\tChannelType.GuildText,\n\tChannelType.GuildVoice,\n\tChannelType.GuildCategory,\n\tChannelType.GuildAnnouncement,\n\tChannelType.AnnouncementThread,\n\tChannelType.PublicThread,\n\tChannelType.PrivateThread,\n\tChannelType.GuildStageVoice,\n\tChannelType.GuildForum,\n\tChannelType.GuildMedia,\n] as const;\n\n/**\n * The type of allowed channel types used for a channel option.\n */\nexport type ApplicationCommandOptionAllowedChannelTypes = (typeof allowedChannelTypes)[number];\n\nconst channelTypesPredicate = s.array(s.union(allowedChannelTypes.map((type) => s.literal(type))));\n\n/**\n * This mixin holds channel type symbols used for options.\n */\nexport class ApplicationCommandOptionChannelTypesMixin {\n\t/**\n\t * The channel types of this option.\n\t */\n\tpublic readonly channel_types?: ApplicationCommandOptionAllowedChannelTypes[];\n\n\t/**\n\t * Adds channel types to this option.\n\t *\n\t * @param channelTypes - The channel types\n\t */\n\tpublic addChannelTypes(...channelTypes: RestOrArray) {\n\t\tif (this.channel_types === undefined) {\n\t\t\tReflect.set(this, 'channel_types', []);\n\t\t}\n\n\t\tthis.channel_types!.push(...channelTypesPredicate.parse(normalizeArray(channelTypes)));\n\n\t\treturn this;\n\t}\n}\n","import { s } from '@sapphire/shapeshift';\nimport { ApplicationCommandOptionType, type APIApplicationCommandIntegerOption } from 'discord-api-types/v10';\nimport { mix } from 'ts-mixer';\nimport { ApplicationCommandNumericOptionMinMaxValueMixin } from '../mixins/ApplicationCommandNumericOptionMinMaxValueMixin.js';\nimport { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js';\nimport { ApplicationCommandOptionWithAutocompleteMixin } from '../mixins/ApplicationCommandOptionWithAutocompleteMixin.js';\nimport { ApplicationCommandOptionWithChoicesMixin } from '../mixins/ApplicationCommandOptionWithChoicesMixin.js';\n\nconst numberValidator = s.number().int();\n\n/**\n * A slash command integer option.\n */\n@mix(\n\tApplicationCommandNumericOptionMinMaxValueMixin,\n\tApplicationCommandOptionWithAutocompleteMixin,\n\tApplicationCommandOptionWithChoicesMixin,\n)\nexport class SlashCommandIntegerOption\n\textends ApplicationCommandOptionBase\n\timplements ApplicationCommandNumericOptionMinMaxValueMixin\n{\n\t/**\n\t * The type of this option.\n\t */\n\tpublic readonly type = ApplicationCommandOptionType.Integer as const;\n\n\t/**\n\t * {@inheritDoc ApplicationCommandNumericOptionMinMaxValueMixin.setMaxValue}\n\t */\n\tpublic setMaxValue(max: number): this {\n\t\tnumberValidator.parse(max);\n\n\t\tReflect.set(this, 'max_value', max);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ApplicationCommandNumericOptionMinMaxValueMixin.setMinValue}\n\t */\n\tpublic setMinValue(min: number): this {\n\t\tnumberValidator.parse(min);\n\n\t\tReflect.set(this, 'min_value', min);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ApplicationCommandOptionBase.toJSON}\n\t */\n\tpublic toJSON(): APIApplicationCommandIntegerOption {\n\t\tthis.runRequiredValidations();\n\n\t\tif (this.autocomplete && Array.isArray(this.choices) && this.choices.length > 0) {\n\t\t\tthrow new RangeError('Autocomplete and choices are mutually exclusive to each other.');\n\t\t}\n\n\t\treturn { ...this } as APIApplicationCommandIntegerOption;\n\t}\n}\n\nexport interface SlashCommandIntegerOption\n\textends ApplicationCommandNumericOptionMinMaxValueMixin,\n\t\tApplicationCommandOptionWithChoicesMixin,\n\t\tApplicationCommandOptionWithAutocompleteMixin {}\n","/**\n * This mixin holds minimum and maximum symbols used for options.\n */\nexport abstract class ApplicationCommandNumericOptionMinMaxValueMixin {\n\t/**\n\t * The maximum value of this option.\n\t */\n\tpublic readonly max_value?: number;\n\n\t/**\n\t * The minimum value of this option.\n\t */\n\tpublic readonly min_value?: number;\n\n\t/**\n\t * Sets the maximum number value of this option.\n\t *\n\t * @param max - The maximum value this option can be\n\t */\n\tpublic abstract setMaxValue(max: number): this;\n\n\t/**\n\t * Sets the minimum number value of this option.\n\t *\n\t * @param min - The minimum value this option can be\n\t */\n\tpublic abstract setMinValue(min: number): this;\n}\n","import { s } from '@sapphire/shapeshift';\nimport type { ApplicationCommandOptionType } from 'discord-api-types/v10';\n\nconst booleanPredicate = s.boolean();\n\n/**\n * This mixin holds choices and autocomplete symbols used for options.\n */\nexport class ApplicationCommandOptionWithAutocompleteMixin {\n\t/**\n\t * Whether this option utilizes autocomplete.\n\t */\n\tpublic readonly autocomplete?: boolean;\n\n\t/**\n\t * The type of this option.\n\t *\n\t * @privateRemarks Since this is present and this is a mixin, this is needed.\n\t */\n\tpublic readonly type!: ApplicationCommandOptionType;\n\n\t/**\n\t * Whether this option uses autocomplete.\n\t *\n\t * @param autocomplete - Whether this option should use autocomplete\n\t */\n\tpublic setAutocomplete(autocomplete: boolean): this {\n\t\t// Assert that you actually passed a boolean\n\t\tbooleanPredicate.parse(autocomplete);\n\n\t\tif (autocomplete && 'choices' in this && Array.isArray(this.choices) && this.choices.length > 0) {\n\t\t\tthrow new RangeError('Autocomplete and choices are mutually exclusive to each other.');\n\t\t}\n\n\t\tReflect.set(this, 'autocomplete', autocomplete);\n\n\t\treturn this;\n\t}\n}\n","import { s } from '@sapphire/shapeshift';\nimport { ApplicationCommandOptionType, type APIApplicationCommandOptionChoice } from 'discord-api-types/v10';\nimport { normalizeArray, type RestOrArray } from '../../../util/normalizeArray.js';\nimport { localizationMapPredicate, validateChoicesLength } from '../Assertions.js';\n\nconst stringPredicate = s.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(100);\nconst numberPredicate = s.number().greaterThan(Number.NEGATIVE_INFINITY).lessThan(Number.POSITIVE_INFINITY);\nconst choicesPredicate = s\n\t.object({\n\t\tname: stringPredicate,\n\t\tname_localizations: localizationMapPredicate,\n\t\tvalue: s.union([stringPredicate, numberPredicate]),\n\t})\n\t.array();\n\n/**\n * This mixin holds choices and autocomplete symbols used for options.\n */\nexport class ApplicationCommandOptionWithChoicesMixin {\n\t/**\n\t * The choices of this option.\n\t */\n\tpublic readonly choices?: APIApplicationCommandOptionChoice[];\n\n\t/**\n\t * The type of this option.\n\t *\n\t * @privateRemarks Since this is present and this is a mixin, this is needed.\n\t */\n\tpublic readonly type!: ApplicationCommandOptionType;\n\n\t/**\n\t * Adds multiple choices to this option.\n\t *\n\t * @param choices - The choices to add\n\t */\n\tpublic addChoices(...choices: RestOrArray>): this {\n\t\tconst normalizedChoices = normalizeArray(choices);\n\t\tif (normalizedChoices.length > 0 && 'autocomplete' in this && this.autocomplete) {\n\t\t\tthrow new RangeError('Autocomplete and choices are mutually exclusive to each other.');\n\t\t}\n\n\t\tchoicesPredicate.parse(normalizedChoices);\n\n\t\tif (this.choices === undefined) {\n\t\t\tReflect.set(this, 'choices', []);\n\t\t}\n\n\t\tvalidateChoicesLength(normalizedChoices.length, this.choices);\n\n\t\tfor (const { name, name_localizations, value } of normalizedChoices) {\n\t\t\t// Validate the value\n\t\t\tif (this.type === ApplicationCommandOptionType.String) {\n\t\t\t\tstringPredicate.parse(value);\n\t\t\t} else {\n\t\t\t\tnumberPredicate.parse(value);\n\t\t\t}\n\n\t\t\tthis.choices!.push({ name, name_localizations, value });\n\t\t}\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets multiple choices for this option.\n\t *\n\t * @param choices - The choices to set\n\t */\n\tpublic setChoices>(...choices: RestOrArray): this {\n\t\tconst normalizedChoices = normalizeArray(choices);\n\t\tif (normalizedChoices.length > 0 && 'autocomplete' in this && this.autocomplete) {\n\t\t\tthrow new RangeError('Autocomplete and choices are mutually exclusive to each other.');\n\t\t}\n\n\t\tchoicesPredicate.parse(normalizedChoices);\n\n\t\tReflect.set(this, 'choices', []);\n\t\tthis.addChoices(normalizedChoices);\n\n\t\treturn this;\n\t}\n}\n","import { ApplicationCommandOptionType, type APIApplicationCommandMentionableOption } from 'discord-api-types/v10';\nimport { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js';\n\n/**\n * A slash command mentionable option.\n */\nexport class SlashCommandMentionableOption extends ApplicationCommandOptionBase {\n\t/**\n\t * The type of this option.\n\t */\n\tpublic readonly type = ApplicationCommandOptionType.Mentionable as const;\n\n\t/**\n\t * {@inheritDoc ApplicationCommandOptionBase.toJSON}\n\t */\n\tpublic toJSON(): APIApplicationCommandMentionableOption {\n\t\tthis.runRequiredValidations();\n\n\t\treturn { ...this };\n\t}\n}\n","import { s } from '@sapphire/shapeshift';\nimport { ApplicationCommandOptionType, type APIApplicationCommandNumberOption } from 'discord-api-types/v10';\nimport { mix } from 'ts-mixer';\nimport { ApplicationCommandNumericOptionMinMaxValueMixin } from '../mixins/ApplicationCommandNumericOptionMinMaxValueMixin.js';\nimport { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js';\nimport { ApplicationCommandOptionWithAutocompleteMixin } from '../mixins/ApplicationCommandOptionWithAutocompleteMixin.js';\nimport { ApplicationCommandOptionWithChoicesMixin } from '../mixins/ApplicationCommandOptionWithChoicesMixin.js';\n\nconst numberValidator = s.number();\n\n/**\n * A slash command number option.\n */\n@mix(\n\tApplicationCommandNumericOptionMinMaxValueMixin,\n\tApplicationCommandOptionWithAutocompleteMixin,\n\tApplicationCommandOptionWithChoicesMixin,\n)\nexport class SlashCommandNumberOption\n\textends ApplicationCommandOptionBase\n\timplements ApplicationCommandNumericOptionMinMaxValueMixin\n{\n\t/**\n\t * The type of this option.\n\t */\n\tpublic readonly type = ApplicationCommandOptionType.Number as const;\n\n\t/**\n\t * {@inheritDoc ApplicationCommandNumericOptionMinMaxValueMixin.setMaxValue}\n\t */\n\tpublic setMaxValue(max: number): this {\n\t\tnumberValidator.parse(max);\n\n\t\tReflect.set(this, 'max_value', max);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ApplicationCommandNumericOptionMinMaxValueMixin.setMinValue}\n\t */\n\tpublic setMinValue(min: number): this {\n\t\tnumberValidator.parse(min);\n\n\t\tReflect.set(this, 'min_value', min);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ApplicationCommandOptionBase.toJSON}\n\t */\n\tpublic toJSON(): APIApplicationCommandNumberOption {\n\t\tthis.runRequiredValidations();\n\n\t\tif (this.autocomplete && Array.isArray(this.choices) && this.choices.length > 0) {\n\t\t\tthrow new RangeError('Autocomplete and choices are mutually exclusive to each other.');\n\t\t}\n\n\t\treturn { ...this } as APIApplicationCommandNumberOption;\n\t}\n}\n\nexport interface SlashCommandNumberOption\n\textends ApplicationCommandNumericOptionMinMaxValueMixin,\n\t\tApplicationCommandOptionWithChoicesMixin,\n\t\tApplicationCommandOptionWithAutocompleteMixin {}\n","import { ApplicationCommandOptionType, type APIApplicationCommandRoleOption } from 'discord-api-types/v10';\nimport { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js';\n\n/**\n * A slash command role option.\n */\nexport class SlashCommandRoleOption extends ApplicationCommandOptionBase {\n\t/**\n\t * The type of this option.\n\t */\n\tpublic override readonly type = ApplicationCommandOptionType.Role as const;\n\n\t/**\n\t * {@inheritDoc ApplicationCommandOptionBase.toJSON}\n\t */\n\tpublic toJSON(): APIApplicationCommandRoleOption {\n\t\tthis.runRequiredValidations();\n\n\t\treturn { ...this };\n\t}\n}\n","import { s } from '@sapphire/shapeshift';\nimport { ApplicationCommandOptionType, type APIApplicationCommandStringOption } from 'discord-api-types/v10';\nimport { mix } from 'ts-mixer';\nimport { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js';\nimport { ApplicationCommandOptionWithAutocompleteMixin } from '../mixins/ApplicationCommandOptionWithAutocompleteMixin.js';\nimport { ApplicationCommandOptionWithChoicesMixin } from '../mixins/ApplicationCommandOptionWithChoicesMixin.js';\n\nconst minLengthValidator = s.number().greaterThanOrEqual(0).lessThanOrEqual(6_000);\nconst maxLengthValidator = s.number().greaterThanOrEqual(1).lessThanOrEqual(6_000);\n\n/**\n * A slash command string option.\n */\n@mix(ApplicationCommandOptionWithAutocompleteMixin, ApplicationCommandOptionWithChoicesMixin)\nexport class SlashCommandStringOption extends ApplicationCommandOptionBase {\n\t/**\n\t * The type of this option.\n\t */\n\tpublic readonly type = ApplicationCommandOptionType.String as const;\n\n\t/**\n\t * The maximum length of this option.\n\t */\n\tpublic readonly max_length?: number;\n\n\t/**\n\t * The minimum length of this option.\n\t */\n\tpublic readonly min_length?: number;\n\n\t/**\n\t * Sets the maximum length of this string option.\n\t *\n\t * @param max - The maximum length this option can be\n\t */\n\tpublic setMaxLength(max: number): this {\n\t\tmaxLengthValidator.parse(max);\n\n\t\tReflect.set(this, 'max_length', max);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the minimum length of this string option.\n\t *\n\t * @param min - The minimum length this option can be\n\t */\n\tpublic setMinLength(min: number): this {\n\t\tminLengthValidator.parse(min);\n\n\t\tReflect.set(this, 'min_length', min);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ApplicationCommandOptionBase.toJSON}\n\t */\n\tpublic toJSON(): APIApplicationCommandStringOption {\n\t\tthis.runRequiredValidations();\n\n\t\tif (this.autocomplete && Array.isArray(this.choices) && this.choices.length > 0) {\n\t\t\tthrow new RangeError('Autocomplete and choices are mutually exclusive to each other.');\n\t\t}\n\n\t\treturn { ...this } as APIApplicationCommandStringOption;\n\t}\n}\n\nexport interface SlashCommandStringOption\n\textends ApplicationCommandOptionWithChoicesMixin,\n\t\tApplicationCommandOptionWithAutocompleteMixin {}\n","import { ApplicationCommandOptionType, type APIApplicationCommandUserOption } from 'discord-api-types/v10';\nimport { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js';\n\n/**\n * A slash command user option.\n */\nexport class SlashCommandUserOption extends ApplicationCommandOptionBase {\n\t/**\n\t * The type of this option.\n\t */\n\tpublic readonly type = ApplicationCommandOptionType.User as const;\n\n\t/**\n\t * {@inheritDoc ApplicationCommandOptionBase.toJSON}\n\t */\n\tpublic toJSON(): APIApplicationCommandUserOption {\n\t\tthis.runRequiredValidations();\n\n\t\treturn { ...this };\n\t}\n}\n","import { assertReturnOfBuilder, validateMaxOptionsLength } from '../Assertions.js';\nimport type { ToAPIApplicationCommandOptions } from '../SlashCommandBuilder';\nimport { SlashCommandAttachmentOption } from '../options/attachment.js';\nimport { SlashCommandBooleanOption } from '../options/boolean.js';\nimport { SlashCommandChannelOption } from '../options/channel.js';\nimport { SlashCommandIntegerOption } from '../options/integer.js';\nimport { SlashCommandMentionableOption } from '../options/mentionable.js';\nimport { SlashCommandNumberOption } from '../options/number.js';\nimport { SlashCommandRoleOption } from '../options/role.js';\nimport { SlashCommandStringOption } from '../options/string.js';\nimport { SlashCommandUserOption } from '../options/user.js';\nimport type { ApplicationCommandOptionBase } from './ApplicationCommandOptionBase.js';\n\n/**\n * This mixin holds symbols that can be shared in slash command options.\n *\n * @typeParam TypeAfterAddingOptions - The type this class should return after adding an option.\n */\nexport class SharedSlashCommandOptions<\n\tTypeAfterAddingOptions extends SharedSlashCommandOptions,\n> {\n\tpublic readonly options!: ToAPIApplicationCommandOptions[];\n\n\t/**\n\t * Adds a boolean option.\n\t *\n\t * @param input - A function that returns an option builder or an already built builder\n\t */\n\tpublic addBooleanOption(\n\t\tinput: SlashCommandBooleanOption | ((builder: SlashCommandBooleanOption) => SlashCommandBooleanOption),\n\t) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandBooleanOption);\n\t}\n\n\t/**\n\t * Adds a user option.\n\t *\n\t * @param input - A function that returns an option builder or an already built builder\n\t */\n\tpublic addUserOption(input: SlashCommandUserOption | ((builder: SlashCommandUserOption) => SlashCommandUserOption)) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandUserOption);\n\t}\n\n\t/**\n\t * Adds a channel option.\n\t *\n\t * @param input - A function that returns an option builder or an already built builder\n\t */\n\tpublic addChannelOption(\n\t\tinput: SlashCommandChannelOption | ((builder: SlashCommandChannelOption) => SlashCommandChannelOption),\n\t) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandChannelOption);\n\t}\n\n\t/**\n\t * Adds a role option.\n\t *\n\t * @param input - A function that returns an option builder or an already built builder\n\t */\n\tpublic addRoleOption(input: SlashCommandRoleOption | ((builder: SlashCommandRoleOption) => SlashCommandRoleOption)) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandRoleOption);\n\t}\n\n\t/**\n\t * Adds an attachment option.\n\t *\n\t * @param input - A function that returns an option builder or an already built builder\n\t */\n\tpublic addAttachmentOption(\n\t\tinput: SlashCommandAttachmentOption | ((builder: SlashCommandAttachmentOption) => SlashCommandAttachmentOption),\n\t) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandAttachmentOption);\n\t}\n\n\t/**\n\t * Adds a mentionable option.\n\t *\n\t * @param input - A function that returns an option builder or an already built builder\n\t */\n\tpublic addMentionableOption(\n\t\tinput: SlashCommandMentionableOption | ((builder: SlashCommandMentionableOption) => SlashCommandMentionableOption),\n\t) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandMentionableOption);\n\t}\n\n\t/**\n\t * Adds a string option.\n\t *\n\t * @param input - A function that returns an option builder or an already built builder\n\t */\n\tpublic addStringOption(\n\t\tinput: SlashCommandStringOption | ((builder: SlashCommandStringOption) => SlashCommandStringOption),\n\t) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandStringOption);\n\t}\n\n\t/**\n\t * Adds an integer option.\n\t *\n\t * @param input - A function that returns an option builder or an already built builder\n\t */\n\tpublic addIntegerOption(\n\t\tinput: SlashCommandIntegerOption | ((builder: SlashCommandIntegerOption) => SlashCommandIntegerOption),\n\t) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandIntegerOption);\n\t}\n\n\t/**\n\t * Adds a number option.\n\t *\n\t * @param input - A function that returns an option builder or an already built builder\n\t */\n\tpublic addNumberOption(\n\t\tinput: SlashCommandNumberOption | ((builder: SlashCommandNumberOption) => SlashCommandNumberOption),\n\t) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandNumberOption);\n\t}\n\n\t/**\n\t * Where the actual adding magic happens. ✨\n\t *\n\t * @param input - The input. What else?\n\t * @param Instance - The instance of whatever is being added\n\t * @internal\n\t */\n\tprivate _sharedAddOptionMethod(\n\t\tinput: OptionBuilder | ((builder: OptionBuilder) => OptionBuilder),\n\t\tInstance: new () => OptionBuilder,\n\t): TypeAfterAddingOptions {\n\t\tconst { options } = this;\n\n\t\t// First, assert options conditions - we cannot have more than 25 options\n\t\tvalidateMaxOptionsLength(options);\n\n\t\t// Get the final result\n\t\tconst result = typeof input === 'function' ? input(new Instance()) : input;\n\n\t\tassertReturnOfBuilder(result, Instance);\n\n\t\t// Push it\n\t\toptions.push(result);\n\n\t\treturn this as unknown as TypeAfterAddingOptions;\n\t}\n}\n","import {\n\tApplicationCommandOptionType,\n\ttype APIApplicationCommandSubcommandGroupOption,\n\ttype APIApplicationCommandSubcommandOption,\n} from 'discord-api-types/v10';\nimport { mix } from 'ts-mixer';\nimport { assertReturnOfBuilder, validateMaxOptionsLength, validateRequiredParameters } from './Assertions.js';\nimport type { ToAPIApplicationCommandOptions } from './SlashCommandBuilder.js';\nimport type { ApplicationCommandOptionBase } from './mixins/ApplicationCommandOptionBase.js';\nimport { SharedNameAndDescription } from './mixins/NameAndDescription.js';\nimport { SharedSlashCommandOptions } from './mixins/SharedSlashCommandOptions.js';\n\n/**\n * Represents a folder for subcommands.\n *\n * @see {@link https://discord.com/developers/docs/interactions/application-commands#subcommands-and-subcommand-groups}\n */\n@mix(SharedNameAndDescription)\nexport class SlashCommandSubcommandGroupBuilder implements ToAPIApplicationCommandOptions {\n\t/**\n\t * The name of this subcommand group.\n\t */\n\tpublic readonly name: string = undefined!;\n\n\t/**\n\t * The description of this subcommand group.\n\t */\n\tpublic readonly description: string = undefined!;\n\n\t/**\n\t * The subcommands within this subcommand group.\n\t */\n\tpublic readonly options: SlashCommandSubcommandBuilder[] = [];\n\n\t/**\n\t * Adds a new subcommand to this group.\n\t *\n\t * @param input - A function that returns a subcommand builder or an already built builder\n\t */\n\tpublic addSubcommand(\n\t\tinput:\n\t\t\t| SlashCommandSubcommandBuilder\n\t\t\t| ((subcommandGroup: SlashCommandSubcommandBuilder) => SlashCommandSubcommandBuilder),\n\t) {\n\t\tconst { options } = this;\n\n\t\t// First, assert options conditions - we cannot have more than 25 options\n\t\tvalidateMaxOptionsLength(options);\n\n\t\t// Get the final result\n\t\t// eslint-disable-next-line @typescript-eslint/no-use-before-define\n\t\tconst result = typeof input === 'function' ? input(new SlashCommandSubcommandBuilder()) : input;\n\n\t\t// eslint-disable-next-line @typescript-eslint/no-use-before-define\n\t\tassertReturnOfBuilder(result, SlashCommandSubcommandBuilder);\n\n\t\t// Push it\n\t\toptions.push(result);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Serializes this builder to API-compatible JSON data.\n\t *\n\t * @remarks\n\t * This method runs validations on the data before serializing it.\n\t * As such, it may throw an error if the data is invalid.\n\t */\n\tpublic toJSON(): APIApplicationCommandSubcommandGroupOption {\n\t\tvalidateRequiredParameters(this.name, this.description, this.options);\n\n\t\treturn {\n\t\t\ttype: ApplicationCommandOptionType.SubcommandGroup,\n\t\t\tname: this.name,\n\t\t\tname_localizations: this.name_localizations,\n\t\t\tdescription: this.description,\n\t\t\tdescription_localizations: this.description_localizations,\n\t\t\toptions: this.options.map((option) => option.toJSON()),\n\t\t};\n\t}\n}\n\nexport interface SlashCommandSubcommandGroupBuilder extends SharedNameAndDescription {}\n\n/**\n * A builder that creates API-compatible JSON data for slash command subcommands.\n *\n * @see {@link https://discord.com/developers/docs/interactions/application-commands#subcommands-and-subcommand-groups}\n */\n@mix(SharedNameAndDescription, SharedSlashCommandOptions)\nexport class SlashCommandSubcommandBuilder implements ToAPIApplicationCommandOptions {\n\t/**\n\t * The name of this subcommand.\n\t */\n\tpublic readonly name: string = undefined!;\n\n\t/**\n\t * The description of this subcommand.\n\t */\n\tpublic readonly description: string = undefined!;\n\n\t/**\n\t * The options within this subcommand.\n\t */\n\tpublic readonly options: ApplicationCommandOptionBase[] = [];\n\n\t/**\n\t * Serializes this builder to API-compatible JSON data.\n\t *\n\t * @remarks\n\t * This method runs validations on the data before serializing it.\n\t * As such, it may throw an error if the data is invalid.\n\t */\n\tpublic toJSON(): APIApplicationCommandSubcommandOption {\n\t\tvalidateRequiredParameters(this.name, this.description, this.options);\n\n\t\treturn {\n\t\t\ttype: ApplicationCommandOptionType.Subcommand,\n\t\t\tname: this.name,\n\t\t\tname_localizations: this.name_localizations,\n\t\t\tdescription: this.description,\n\t\t\tdescription_localizations: this.description_localizations,\n\t\t\toptions: this.options.map((option) => option.toJSON()),\n\t\t};\n\t}\n}\n\nexport interface SlashCommandSubcommandBuilder\n\textends SharedNameAndDescription,\n\t\tSharedSlashCommandOptions {}\n","import { assertReturnOfBuilder, validateMaxOptionsLength } from '../Assertions.js';\nimport type { ToAPIApplicationCommandOptions } from '../SlashCommandBuilder.js';\nimport { SlashCommandSubcommandBuilder, SlashCommandSubcommandGroupBuilder } from '../SlashCommandSubcommands.js';\n\n/**\n * This mixin holds symbols that can be shared in slash subcommands.\n *\n * @typeParam TypeAfterAddingSubcommands - The type this class should return after adding a subcommand or subcommand group.\n */\nexport class SharedSlashCommandSubcommands<\n\tTypeAfterAddingSubcommands extends SharedSlashCommandSubcommands,\n> {\n\tpublic readonly options: ToAPIApplicationCommandOptions[] = [];\n\n\t/**\n\t * Adds a new subcommand group to this command.\n\t *\n\t * @param input - A function that returns a subcommand group builder or an already built builder\n\t */\n\tpublic addSubcommandGroup(\n\t\tinput:\n\t\t\t| SlashCommandSubcommandGroupBuilder\n\t\t\t| ((subcommandGroup: SlashCommandSubcommandGroupBuilder) => SlashCommandSubcommandGroupBuilder),\n\t): TypeAfterAddingSubcommands {\n\t\tconst { options } = this;\n\n\t\t// First, assert options conditions - we cannot have more than 25 options\n\t\tvalidateMaxOptionsLength(options);\n\n\t\t// Get the final result\n\t\tconst result = typeof input === 'function' ? input(new SlashCommandSubcommandGroupBuilder()) : input;\n\n\t\tassertReturnOfBuilder(result, SlashCommandSubcommandGroupBuilder);\n\n\t\t// Push it\n\t\toptions.push(result);\n\n\t\treturn this as unknown as TypeAfterAddingSubcommands;\n\t}\n\n\t/**\n\t * Adds a new subcommand to this command.\n\t *\n\t * @param input - A function that returns a subcommand builder or an already built builder\n\t */\n\tpublic addSubcommand(\n\t\tinput:\n\t\t\t| SlashCommandSubcommandBuilder\n\t\t\t| ((subcommandGroup: SlashCommandSubcommandBuilder) => SlashCommandSubcommandBuilder),\n\t): TypeAfterAddingSubcommands {\n\t\tconst { options } = this;\n\n\t\t// First, assert options conditions - we cannot have more than 25 options\n\t\tvalidateMaxOptionsLength(options);\n\n\t\t// Get the final result\n\t\tconst result = typeof input === 'function' ? input(new SlashCommandSubcommandBuilder()) : input;\n\n\t\tassertReturnOfBuilder(result, SlashCommandSubcommandBuilder);\n\n\t\t// Push it\n\t\toptions.push(result);\n\n\t\treturn this as unknown as TypeAfterAddingSubcommands;\n\t}\n}\n","import { s } from '@sapphire/shapeshift';\nimport { ApplicationCommandType, ApplicationIntegrationType, InteractionContextType } from 'discord-api-types/v10';\nimport { isValidationEnabled } from '../../util/validation.js';\nimport type { ContextMenuCommandType } from './ContextMenuCommandBuilder.js';\n\nconst namePredicate = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(32)\n\t.regex(/\\S/)\n\t.setValidationEnabled(isValidationEnabled);\nconst typePredicate = s\n\t.union([s.literal(ApplicationCommandType.User), s.literal(ApplicationCommandType.Message)])\n\t.setValidationEnabled(isValidationEnabled);\nconst booleanPredicate = s.boolean();\n\nexport function validateDefaultPermission(value: unknown): asserts value is boolean {\n\tbooleanPredicate.parse(value);\n}\n\nexport function validateName(name: unknown): asserts name is string {\n\tnamePredicate.parse(name);\n}\n\nexport function validateType(type: unknown): asserts type is ContextMenuCommandType {\n\ttypePredicate.parse(type);\n}\n\nexport function validateRequiredParameters(name: string, type: number) {\n\t// Assert name matches all conditions\n\tvalidateName(name);\n\n\t// Assert type is valid\n\tvalidateType(type);\n}\n\nconst dmPermissionPredicate = s.boolean().nullish();\n\nexport function validateDMPermission(value: unknown): asserts value is boolean | null | undefined {\n\tdmPermissionPredicate.parse(value);\n}\n\nconst memberPermissionPredicate = s\n\t.union([\n\t\ts.bigint().transform((value) => value.toString()),\n\t\ts\n\t\t\t.number()\n\t\t\t.safeInt()\n\t\t\t.transform((value) => value.toString()),\n\t\ts.string().regex(/^\\d+$/),\n\t])\n\t.nullish();\n\nexport function validateDefaultMemberPermissions(permissions: unknown) {\n\treturn memberPermissionPredicate.parse(permissions);\n}\n\nexport const contextsPredicate = s.array(\n\ts.nativeEnum(InteractionContextType).setValidationEnabled(isValidationEnabled),\n);\n\nexport const integrationTypesPredicate = s.array(\n\ts.nativeEnum(ApplicationIntegrationType).setValidationEnabled(isValidationEnabled),\n);\n","import type {\n\tApplicationCommandType,\n\tApplicationIntegrationType,\n\tInteractionContextType,\n\tLocaleString,\n\tLocalizationMap,\n\tPermissions,\n\tRESTPostAPIContextMenuApplicationCommandsJSONBody,\n} from 'discord-api-types/v10';\nimport type { RestOrArray } from '../../util/normalizeArray.js';\nimport { normalizeArray } from '../../util/normalizeArray.js';\nimport { validateLocale, validateLocalizationMap } from '../slashCommands/Assertions.js';\nimport {\n\tvalidateRequiredParameters,\n\tvalidateName,\n\tvalidateType,\n\tvalidateDefaultPermission,\n\tvalidateDefaultMemberPermissions,\n\tvalidateDMPermission,\n\tcontextsPredicate,\n\tintegrationTypesPredicate,\n} from './Assertions.js';\n\n/**\n * The type a context menu command can be.\n */\nexport type ContextMenuCommandType = ApplicationCommandType.Message | ApplicationCommandType.User;\n\n/**\n * A builder that creates API-compatible JSON data for context menu commands.\n */\nexport class ContextMenuCommandBuilder {\n\t/**\n\t * The name of this command.\n\t */\n\tpublic readonly name: string = undefined!;\n\n\t/**\n\t * The name localizations of this command.\n\t */\n\tpublic readonly name_localizations?: LocalizationMap;\n\n\t/**\n\t * The type of this command.\n\t */\n\tpublic readonly type: ContextMenuCommandType = undefined!;\n\n\t/**\n\t * The contexts for this command.\n\t */\n\tpublic readonly contexts?: InteractionContextType[];\n\n\t/**\n\t * Whether this command is enabled by default when the application is added to a guild.\n\t *\n\t * @deprecated Use {@link ContextMenuCommandBuilder.setDefaultMemberPermissions} or {@link ContextMenuCommandBuilder.setDMPermission} instead.\n\t */\n\tpublic readonly default_permission: boolean | undefined = undefined;\n\n\t/**\n\t * The set of permissions represented as a bit set for the command.\n\t */\n\tpublic readonly default_member_permissions: Permissions | null | undefined = undefined;\n\n\t/**\n\t * Indicates whether the command is available in direct messages with the application.\n\t *\n\t * @remarks\n\t * By default, commands are visible. This property is only for global commands.\n\t * @deprecated\n\t * Use {@link ContextMenuCommandBuilder.contexts} instead.\n\t */\n\tpublic readonly dm_permission: boolean | undefined = undefined;\n\n\t/**\n\t * The integration types for this command.\n\t */\n\tpublic readonly integration_types?: ApplicationIntegrationType[];\n\n\t/**\n\t * Sets the contexts of this command.\n\t *\n\t * @param contexts - The contexts\n\t */\n\tpublic setContexts(...contexts: RestOrArray) {\n\t\tReflect.set(this, 'contexts', contextsPredicate.parse(normalizeArray(contexts)));\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets integration types of this command.\n\t *\n\t * @param integrationTypes - The integration types\n\t */\n\tpublic setIntegrationTypes(...integrationTypes: RestOrArray) {\n\t\tReflect.set(this, 'integration_types', integrationTypesPredicate.parse(normalizeArray(integrationTypes)));\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the name of this command.\n\t *\n\t * @param name - The name to use\n\t */\n\tpublic setName(name: string) {\n\t\t// Assert the name matches the conditions\n\t\tvalidateName(name);\n\n\t\tReflect.set(this, 'name', name);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the type of this command.\n\t *\n\t * @param type - The type to use\n\t */\n\tpublic setType(type: ContextMenuCommandType) {\n\t\t// Assert the type is valid\n\t\tvalidateType(type);\n\n\t\tReflect.set(this, 'type', type);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets whether the command is enabled by default when the application is added to a guild.\n\t *\n\t * @remarks\n\t * If set to `false`, you will have to later `PUT` the permissions for this command.\n\t * @param value - Whether to enable this command by default\n\t * @see {@link https://discord.com/developers/docs/interactions/application-commands#permissions}\n\t * @deprecated Use {@link ContextMenuCommandBuilder.setDefaultMemberPermissions} or {@link ContextMenuCommandBuilder.setDMPermission} instead.\n\t */\n\tpublic setDefaultPermission(value: boolean) {\n\t\t// Assert the value matches the conditions\n\t\tvalidateDefaultPermission(value);\n\n\t\tReflect.set(this, 'default_permission', value);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the default permissions a member should have in order to run this command.\n\t *\n\t * @remarks\n\t * You can set this to `'0'` to disable the command by default.\n\t * @param permissions - The permissions bit field to set\n\t * @see {@link https://discord.com/developers/docs/interactions/application-commands#permissions}\n\t */\n\tpublic setDefaultMemberPermissions(permissions: Permissions | bigint | number | null | undefined) {\n\t\t// Assert the value and parse it\n\t\tconst permissionValue = validateDefaultMemberPermissions(permissions);\n\n\t\tReflect.set(this, 'default_member_permissions', permissionValue);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets if the command is available in direct messages with the application.\n\t *\n\t * @remarks\n\t * By default, commands are visible. This method is only for global commands.\n\t * @param enabled - Whether the command should be enabled in direct messages\n\t * @see {@link https://discord.com/developers/docs/interactions/application-commands#permissions}\n\t * @deprecated Use {@link ContextMenuCommandBuilder.setContexts} instead.\n\t */\n\tpublic setDMPermission(enabled: boolean | null | undefined) {\n\t\t// Assert the value matches the conditions\n\t\tvalidateDMPermission(enabled);\n\n\t\tReflect.set(this, 'dm_permission', enabled);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets a name localization for this command.\n\t *\n\t * @param locale - The locale to set\n\t * @param localizedName - The localized name for the given `locale`\n\t */\n\tpublic setNameLocalization(locale: LocaleString, localizedName: string | null) {\n\t\tif (!this.name_localizations) {\n\t\t\tReflect.set(this, 'name_localizations', {});\n\t\t}\n\n\t\tconst parsedLocale = validateLocale(locale);\n\n\t\tif (localizedName === null) {\n\t\t\tthis.name_localizations![parsedLocale] = null;\n\t\t\treturn this;\n\t\t}\n\n\t\tvalidateName(localizedName);\n\n\t\tthis.name_localizations![parsedLocale] = localizedName;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the name localizations for this command.\n\t *\n\t * @param localizedNames - The object of localized names to set\n\t */\n\tpublic setNameLocalizations(localizedNames: LocalizationMap | null) {\n\t\tif (localizedNames === null) {\n\t\t\tReflect.set(this, 'name_localizations', null);\n\t\t\treturn this;\n\t\t}\n\n\t\tReflect.set(this, 'name_localizations', {});\n\n\t\tfor (const args of Object.entries(localizedNames))\n\t\t\tthis.setNameLocalization(...(args as [LocaleString, string | null]));\n\t\treturn this;\n\t}\n\n\t/**\n\t * Serializes this builder to API-compatible JSON data.\n\t *\n\t * @remarks\n\t * This method runs validations on the data before serializing it.\n\t * As such, it may throw an error if the data is invalid.\n\t */\n\tpublic toJSON(): RESTPostAPIContextMenuApplicationCommandsJSONBody {\n\t\tvalidateRequiredParameters(this.name, this.type);\n\n\t\tvalidateLocalizationMap(this.name_localizations);\n\n\t\treturn { ...this };\n\t}\n}\n","import type { APIEmbed } from 'discord-api-types/v10';\n\n/**\n * Calculates the length of the embed.\n *\n * @param data - The embed data to check\n */\nexport function embedLength(data: APIEmbed) {\n\treturn (\n\t\t(data.title?.length ?? 0) +\n\t\t(data.description?.length ?? 0) +\n\t\t(data.fields?.reduce((prev, curr) => prev + curr.name.length + curr.value.length, 0) ?? 0) +\n\t\t(data.footer?.text.length ?? 0) +\n\t\t(data.author?.name.length ?? 0)\n\t);\n}\n"],"mappings":"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","names":["Assertions_exports","Assertions_exports","import_shapeshift","import_v10","import_v10","import_v10","import_v10","Assertions_exports","import_shapeshift","import_v10","import_v10","import_v10","Assertions_exports","placeholderValidator","import_shapeshift","import_v10","placeholderValidator","import_v10","import_v10","import_v10","Assertions_exports","import_shapeshift","import_v10","import_v10","import_v10","placeholderValidator","isEqual","Assertions_exports","import_shapeshift","import_v10","import_v10","Assertions_exports","descriptionPredicate","import_shapeshift","import_v10","import_v10","descriptionPredicate","descriptionPredicate","import_v10","import_v10","import_v10","import_v10","descriptionPredicate","import_v10","import_v10","Assertions_exports","validateRequiredParameters","import_shapeshift","validateRequiredParameters","validateRequiredParameters","Assertions_exports","assertReturnOfBuilder","validateRequiredParameters","import_shapeshift","import_v10","descriptionPredicate","validateRequiredParameters","assertReturnOfBuilder","import_ts_mixer","import_v10","validateRequiredParameters","import_v10","validateRequiredParameters","import_v10","import_v10","import_shapeshift","import_v10","import_shapeshift","import_v10","import_ts_mixer","import_shapeshift","booleanPredicate","import_shapeshift","import_v10","import_v10","import_shapeshift","import_v10","import_ts_mixer","numberValidator","import_v10","import_shapeshift","import_v10","import_ts_mixer","minLengthValidator","maxLengthValidator","import_v10","assertReturnOfBuilder","import_v10","import_ts_mixer","assertReturnOfBuilder","validateRequiredParameters","assertReturnOfBuilder","Assertions_exports","contextsPredicate","integrationTypesPredicate","validateDMPermission","validateDefaultMemberPermissions","validateDefaultPermission","validateName","validateRequiredParameters","import_shapeshift","import_v10","namePredicate","booleanPredicate","validateDefaultPermission","validateName","validateRequiredParameters","dmPermissionPredicate","validateDMPermission","memberPermissionPredicate","validateDefaultMemberPermissions","contextsPredicate","integrationTypesPredicate","contextsPredicate","integrationTypesPredicate","validateName","validateDefaultPermission","validateDefaultMemberPermissions","validateDMPermission","validateRequiredParameters"]} \ No newline at end of file diff --git a/node_modules/@discordjs/builders/dist/index.mjs b/node_modules/@discordjs/builders/dist/index.mjs index ce5a953..dae80e0 100644 --- a/node_modules/@discordjs/builders/dist/index.mjs +++ b/node_modules/@discordjs/builders/dist/index.mjs @@ -153,7 +153,7 @@ var EmbedBuilder = class { * * @remarks * This method behaves similarly - * to {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice | Array.prototype.splice()}. + * to {@link https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/splice | Array.prototype.splice()}. * The maximum amount of fields that can be added is 25. * * It's useful for modifying and adjusting order of the already-existing fields of an embed. @@ -498,7 +498,7 @@ __name(validateRequiredButtonParameters, "validateRequiredButtonParameters"); // src/components/ActionRow.ts import { - ComponentType as ComponentType16 + ComponentType as ComponentType22 } from "discord-api-types/v10"; // src/components/Component.ts @@ -537,7 +537,7 @@ var ComponentBuilder = class { }; // src/components/Components.ts -import { ComponentType as ComponentType15 } from "discord-api-types/v10"; +import { ComponentType as ComponentType21 } from "discord-api-types/v10"; // src/components/button/Button.ts import { @@ -665,12 +665,163 @@ var ButtonBuilder = class extends ComponentBuilder { } }; +// src/components/fileUpload/FileUpload.ts +import { ComponentType as ComponentType3 } from "discord-api-types/v10"; + +// src/components/fileUpload/Assertions.ts +var Assertions_exports3 = {}; +__export(Assertions_exports3, { + fileUploadPredicate: () => fileUploadPredicate +}); +import { s as s3 } from "@sapphire/shapeshift"; +import { ComponentType as ComponentType2 } from "discord-api-types/v10"; +var fileUploadPredicate = s3.object({ + type: s3.literal(ComponentType2.FileUpload), + id: idValidator.optional(), + custom_id: customIdValidator, + min_values: s3.number().greaterThanOrEqual(0).lessThanOrEqual(10).optional(), + max_values: s3.number().greaterThanOrEqual(1).lessThanOrEqual(10).optional(), + required: s3.boolean().optional() +}); + +// src/components/fileUpload/FileUpload.ts +var FileUploadBuilder = class extends ComponentBuilder { + static { + __name(this, "FileUploadBuilder"); + } + /** + * Creates a new file upload. + * + * @param data - The API data to create this file upload with + * @example + * Creating a file upload from an API data object: + * ```ts + * const fileUpload = new FileUploadBuilder({ + * custom_id: "file_upload", + * min_values: 2, + * max_values: 5, + * }); + * ``` + * @example + * Creating a file upload using setters and API data: + * ```ts + * const fileUpload = new FileUploadBuilder({ + * custom_id: "file_upload", + * min_values: 2, + * max_values: 5, + * }).setRequired(); + * ``` + */ + constructor(data = {}) { + super({ type: ComponentType3.FileUpload, ...data }); + } + /** + * Sets the custom id for this file upload. + * + * @param customId - The custom id to use + */ + setCustomId(customId) { + this.data.custom_id = customId; + return this; + } + /** + * Sets the minimum number of file uploads required. + * + * @param minValues - The minimum values that must be uploaded + */ + setMinValues(minValues) { + this.data.min_values = minValues; + return this; + } + /** + * Clears the minimum values. + */ + clearMinValues() { + this.data.min_values = void 0; + return this; + } + /** + * Sets the maximum number of file uploads required. + * + * @param maxValues - The maximum values that can be uploaded + */ + setMaxValues(maxValues) { + this.data.max_values = maxValues; + return this; + } + /** + * Clears the maximum values. + */ + clearMaxValues() { + this.data.max_values = void 0; + return this; + } + /** + * Sets whether this file upload is required. + * + * @param required - Whether this file upload is required + */ + setRequired(required = true) { + this.data.required = required; + return this; + } + /** + * {@inheritDoc ComponentBuilder.toJSON} + */ + toJSON() { + fileUploadPredicate.parse(this.data); + return this.data; + } +}; + +// src/components/label/Label.ts +import { ComponentType as ComponentType13 } from "discord-api-types/v10"; + // src/components/selectMenu/ChannelSelectMenu.ts import { - ComponentType as ComponentType2, + ComponentType as ComponentType5, SelectMenuDefaultValueType } from "discord-api-types/v10"; +// src/components/textInput/Assertions.ts +var Assertions_exports4 = {}; +__export(Assertions_exports4, { + labelValidator: () => labelValidator, + maxLengthValidator: () => maxLengthValidator, + minLengthValidator: () => minLengthValidator, + placeholderValidator: () => placeholderValidator2, + requiredValidator: () => requiredValidator, + textInputPredicate: () => textInputPredicate, + textInputStyleValidator: () => textInputStyleValidator, + validateRequiredParameters: () => validateRequiredParameters, + valueValidator: () => valueValidator +}); +import { s as s4 } from "@sapphire/shapeshift"; +import { ComponentType as ComponentType4, TextInputStyle } from "discord-api-types/v10"; +var textInputStyleValidator = s4.nativeEnum(TextInputStyle).setValidationEnabled(isValidationEnabled); +var minLengthValidator = s4.number().int().greaterThanOrEqual(0).lessThanOrEqual(4e3).setValidationEnabled(isValidationEnabled); +var maxLengthValidator = s4.number().int().greaterThanOrEqual(1).lessThanOrEqual(4e3).setValidationEnabled(isValidationEnabled); +var requiredValidator = s4.boolean().setValidationEnabled(isValidationEnabled); +var valueValidator = s4.string().lengthLessThanOrEqual(4e3).setValidationEnabled(isValidationEnabled); +var placeholderValidator2 = s4.string().lengthLessThanOrEqual(100).setValidationEnabled(isValidationEnabled); +var labelValidator = s4.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(45).setValidationEnabled(isValidationEnabled); +var textInputPredicate = s4.object({ + type: s4.literal(ComponentType4.TextInput), + custom_id: customIdValidator, + style: textInputStyleValidator, + id: idValidator.optional(), + min_length: minLengthValidator.optional(), + max_length: maxLengthValidator.optional(), + placeholder: placeholderValidator2.optional(), + value: valueValidator.optional(), + required: requiredValidator.optional() +}).setValidationEnabled(isValidationEnabled); +function validateRequiredParameters(customId, style) { + customIdValidator.parse(customId); + textInputStyleValidator.parse(style); +} +__name(validateRequiredParameters, "validateRequiredParameters"); + // src/components/selectMenu/BaseSelectMenu.ts var BaseSelectMenuBuilder = class extends ComponentBuilder { static { @@ -695,9 +846,9 @@ var BaseSelectMenuBuilder = class extends ComponentBuilder { return this; } /** - * Sets the maximum values that must be selected in the select menu. + * Sets the maximum values that can be selected in the select menu. * - * @param maxValues - The maximum values that must be selected + * @param maxValues - The maximum values that can be selected */ setMaxValues(maxValues) { this.data.max_values = minMaxValidator.parse(maxValues); @@ -721,6 +872,16 @@ var BaseSelectMenuBuilder = class extends ComponentBuilder { this.data.disabled = disabledValidator.parse(disabled); return this; } + /** + * Sets whether this select menu is required. + * + * @remarks Only for use in modals. + * @param required - Whether this select menu is required + */ + setRequired(required = true) { + this.data.required = requiredValidator.parse(required); + return this; + } /** * {@inheritDoc ComponentBuilder.toJSON} */ @@ -761,7 +922,7 @@ var ChannelSelectMenuBuilder = class extends BaseSelectMenuBuilder { * ``` */ constructor(data) { - super({ ...data, type: ComponentType2.ChannelSelect }); + super({ ...data, type: ComponentType5.ChannelSelect }); } /** * Adds channel types to this select menu. @@ -829,7 +990,7 @@ var ChannelSelectMenuBuilder = class extends BaseSelectMenuBuilder { // src/components/selectMenu/MentionableSelectMenu.ts import { - ComponentType as ComponentType3, + ComponentType as ComponentType6, SelectMenuDefaultValueType as SelectMenuDefaultValueType2 } from "discord-api-types/v10"; var MentionableSelectMenuBuilder = class extends BaseSelectMenuBuilder { @@ -859,7 +1020,7 @@ var MentionableSelectMenuBuilder = class extends BaseSelectMenuBuilder { * ``` */ constructor(data) { - super({ ...data, type: ComponentType3.MentionableSelect }); + super({ ...data, type: ComponentType6.MentionableSelect }); } /** * Adds default roles to this auto populated select menu. @@ -922,7 +1083,7 @@ var MentionableSelectMenuBuilder = class extends BaseSelectMenuBuilder { // src/components/selectMenu/RoleSelectMenu.ts import { - ComponentType as ComponentType4, + ComponentType as ComponentType7, SelectMenuDefaultValueType as SelectMenuDefaultValueType3 } from "discord-api-types/v10"; var RoleSelectMenuBuilder = class extends BaseSelectMenuBuilder { @@ -952,7 +1113,7 @@ var RoleSelectMenuBuilder = class extends BaseSelectMenuBuilder { * ``` */ constructor(data) { - super({ ...data, type: ComponentType4.RoleSelect }); + super({ ...data, type: ComponentType7.RoleSelect }); } /** * Adds default roles to this auto populated select menu. @@ -988,7 +1149,71 @@ var RoleSelectMenuBuilder = class extends BaseSelectMenuBuilder { }; // src/components/selectMenu/StringSelectMenu.ts -import { ComponentType as ComponentType5 } from "discord-api-types/v10"; +import { ComponentType as ComponentType9 } from "discord-api-types/v10"; + +// src/components/selectMenu/Assertions.ts +var Assertions_exports5 = {}; +__export(Assertions_exports5, { + selectMenuChannelPredicate: () => selectMenuChannelPredicate, + selectMenuMentionablePredicate: () => selectMenuMentionablePredicate, + selectMenuRolePredicate: () => selectMenuRolePredicate, + selectMenuStringOptionPredicate: () => selectMenuStringOptionPredicate, + selectMenuStringPredicate: () => selectMenuStringPredicate, + selectMenuUserPredicate: () => selectMenuUserPredicate +}); +import { Result, s as s5 } from "@sapphire/shapeshift"; +import { ChannelType as ChannelType2, ComponentType as ComponentType8, SelectMenuDefaultValueType as SelectMenuDefaultValueType4 } from "discord-api-types/v10"; +var selectMenuBasePredicate = s5.object({ + id: idValidator.optional(), + placeholder: s5.string().lengthLessThanOrEqual(150).optional(), + min_values: s5.number().greaterThanOrEqual(0).lessThanOrEqual(25).optional(), + max_values: s5.number().greaterThanOrEqual(0).lessThanOrEqual(25).optional(), + custom_id: customIdValidator, + disabled: s5.boolean().optional() +}); +var selectMenuChannelPredicate = selectMenuBasePredicate.extend({ + type: s5.literal(ComponentType8.ChannelSelect), + channel_types: s5.nativeEnum(ChannelType2).array().optional(), + default_values: s5.object({ id: s5.string(), type: s5.literal(SelectMenuDefaultValueType4.Channel) }).array().lengthLessThanOrEqual(25).optional() +}).setValidationEnabled(isValidationEnabled); +var selectMenuMentionablePredicate = selectMenuBasePredicate.extend({ + type: s5.literal(ComponentType8.MentionableSelect), + default_values: s5.object({ + id: s5.string(), + type: s5.union([s5.literal(SelectMenuDefaultValueType4.Role), s5.literal(SelectMenuDefaultValueType4.User)]) + }).array().lengthLessThanOrEqual(25).optional() +}).setValidationEnabled(isValidationEnabled); +var selectMenuRolePredicate = selectMenuBasePredicate.extend({ + type: s5.literal(ComponentType8.RoleSelect), + default_values: s5.object({ id: s5.string(), type: s5.literal(SelectMenuDefaultValueType4.Role) }).array().lengthLessThanOrEqual(25).optional() +}).setValidationEnabled(isValidationEnabled); +var selectMenuUserPredicate = selectMenuBasePredicate.extend({ + type: s5.literal(ComponentType8.UserSelect), + default_values: s5.object({ id: s5.string(), type: s5.literal(SelectMenuDefaultValueType4.User) }).array().lengthLessThanOrEqual(25).optional() +}).setValidationEnabled(isValidationEnabled); +var selectMenuStringOptionPredicate = s5.object({ + label: s5.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(100), + value: s5.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(100), + description: s5.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(100).optional(), + emoji: emojiValidator.optional(), + default: s5.boolean().optional() +}).setValidationEnabled(isValidationEnabled); +var selectMenuStringPredicate = selectMenuBasePredicate.extend({ + type: s5.literal(ComponentType8.StringSelect), + options: selectMenuStringOptionPredicate.array().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(25) +}).reshape((value) => { + if (value.min_values !== void 0 && value.options.length < value.min_values) { + return Result.err(new RangeError(`The number of options must be greater than or equal to min_values`)); + } + if (value.min_values !== void 0 && value.max_values !== void 0 && value.min_values > value.max_values) { + return Result.err( + new RangeError(`The maximum amount of options must be greater than or equal to the minimum amount of options`) + ); + } + return Result.ok(value); +}).setValidationEnabled(isValidationEnabled); + +// src/components/selectMenu/StringSelectMenu.ts var StringSelectMenuBuilder = class extends BaseSelectMenuBuilder { static { __name(this, "StringSelectMenuBuilder"); @@ -1030,7 +1255,7 @@ var StringSelectMenuBuilder = class extends BaseSelectMenuBuilder { */ constructor(data) { const { options, ...initData } = data ?? {}; - super({ ...initData, type: ComponentType5.StringSelect }); + super({ ...initData, type: ComponentType9.StringSelect }); this.options = options?.map((option) => new StringSelectMenuOptionBuilder(option)) ?? []; } /** @@ -1043,7 +1268,7 @@ var StringSelectMenuBuilder = class extends BaseSelectMenuBuilder { optionsLengthValidator.parse(this.options.length + normalizedOptions.length); this.options.push( ...normalizedOptions.map( - (normalizedOption) => normalizedOption instanceof StringSelectMenuOptionBuilder ? normalizedOption : new StringSelectMenuOptionBuilder(jsonOptionValidator.parse(normalizedOption)) + (normalizedOption) => normalizedOption instanceof StringSelectMenuOptionBuilder ? normalizedOption : new StringSelectMenuOptionBuilder(selectMenuStringOptionPredicate.parse(normalizedOption)) ) ); return this; @@ -1090,7 +1315,7 @@ var StringSelectMenuBuilder = class extends BaseSelectMenuBuilder { index, deleteCount, ...normalizedOptions.map( - (normalizedOption) => normalizedOption instanceof StringSelectMenuOptionBuilder ? normalizedOption : new StringSelectMenuOptionBuilder(jsonOptionValidator.parse(normalizedOption)) + (normalizedOption) => normalizedOption instanceof StringSelectMenuOptionBuilder ? normalizedOption : new StringSelectMenuOptionBuilder(selectMenuStringOptionPredicate.parse(normalizedOption)) ) ); optionsLengthValidator.parse(clone.length); @@ -1111,8 +1336,8 @@ var StringSelectMenuBuilder = class extends BaseSelectMenuBuilder { // src/components/selectMenu/UserSelectMenu.ts import { - ComponentType as ComponentType6, - SelectMenuDefaultValueType as SelectMenuDefaultValueType4 + ComponentType as ComponentType10, + SelectMenuDefaultValueType as SelectMenuDefaultValueType5 } from "discord-api-types/v10"; var UserSelectMenuBuilder = class extends BaseSelectMenuBuilder { static { @@ -1141,7 +1366,7 @@ var UserSelectMenuBuilder = class extends BaseSelectMenuBuilder { * ``` */ constructor(data) { - super({ ...data, type: ComponentType6.UserSelect }); + super({ ...data, type: ComponentType10.UserSelect }); } /** * Adds default users to this auto populated select menu. @@ -1155,7 +1380,7 @@ var UserSelectMenuBuilder = class extends BaseSelectMenuBuilder { this.data.default_values.push( ...normalizedValues.map((id) => ({ id, - type: SelectMenuDefaultValueType4.User + type: SelectMenuDefaultValueType5.User })) ); return this; @@ -1170,7 +1395,7 @@ var UserSelectMenuBuilder = class extends BaseSelectMenuBuilder { optionsLengthValidator.parse(normalizedValues.length); this.data.default_values = normalizedValues.map((id) => ({ id, - type: SelectMenuDefaultValueType4.User + type: SelectMenuDefaultValueType5.User })); return this; } @@ -1178,38 +1403,8 @@ var UserSelectMenuBuilder = class extends BaseSelectMenuBuilder { // src/components/textInput/TextInput.ts import { isJSONEncodable } from "@discordjs/util"; -import { ComponentType as ComponentType7 } from "discord-api-types/v10"; +import { ComponentType as ComponentType11 } from "discord-api-types/v10"; import isEqual from "fast-deep-equal"; - -// src/components/textInput/Assertions.ts -var Assertions_exports3 = {}; -__export(Assertions_exports3, { - labelValidator: () => labelValidator, - maxLengthValidator: () => maxLengthValidator, - minLengthValidator: () => minLengthValidator, - placeholderValidator: () => placeholderValidator2, - requiredValidator: () => requiredValidator, - textInputStyleValidator: () => textInputStyleValidator, - validateRequiredParameters: () => validateRequiredParameters, - valueValidator: () => valueValidator -}); -import { s as s3 } from "@sapphire/shapeshift"; -import { TextInputStyle } from "discord-api-types/v10"; -var textInputStyleValidator = s3.nativeEnum(TextInputStyle); -var minLengthValidator = s3.number().int().greaterThanOrEqual(0).lessThanOrEqual(4e3).setValidationEnabled(isValidationEnabled); -var maxLengthValidator = s3.number().int().greaterThanOrEqual(1).lessThanOrEqual(4e3).setValidationEnabled(isValidationEnabled); -var requiredValidator = s3.boolean(); -var valueValidator = s3.string().lengthLessThanOrEqual(4e3).setValidationEnabled(isValidationEnabled); -var placeholderValidator2 = s3.string().lengthLessThanOrEqual(100).setValidationEnabled(isValidationEnabled); -var labelValidator = s3.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(45).setValidationEnabled(isValidationEnabled); -function validateRequiredParameters(customId, style, label) { - customIdValidator.parse(customId); - textInputStyleValidator.parse(style); - labelValidator.parse(label); -} -__name(validateRequiredParameters, "validateRequiredParameters"); - -// src/components/textInput/TextInput.ts var TextInputBuilder = class extends ComponentBuilder { static { __name(this, "TextInputBuilder"); @@ -1223,7 +1418,7 @@ var TextInputBuilder = class extends ComponentBuilder { * ```ts * const textInput = new TextInputBuilder({ * custom_id: 'a cool text input', - * label: 'Type something', + * placeholder: 'Type something', * style: TextInputStyle.Short, * }); * ``` @@ -1231,14 +1426,14 @@ var TextInputBuilder = class extends ComponentBuilder { * Creating a text input using setters and API data: * ```ts * const textInput = new TextInputBuilder({ - * label: 'Type something else', + * placeholder: 'Type something else', * }) * .setCustomId('woah') * .setStyle(TextInputStyle.Paragraph); * ``` */ constructor(data) { - super({ type: ComponentType7.TextInput, ...data }); + super({ type: ComponentType11.TextInput, ...data }); } /** * Sets the custom id for this text input. @@ -1253,6 +1448,7 @@ var TextInputBuilder = class extends ComponentBuilder { * Sets the label for this text input. * * @param label - The label to use + * @deprecated Use a label builder to create a label (and optionally a description) instead. */ setLabel(label) { this.data.label = labelValidator.parse(label); @@ -1316,7 +1512,7 @@ var TextInputBuilder = class extends ComponentBuilder { * {@inheritDoc ComponentBuilder.toJSON} */ toJSON() { - validateRequiredParameters(this.data.custom_id, this.data.style, this.data.label); + validateRequiredParameters(this.data.custom_id, this.data.style); return { ...this.data }; @@ -1332,12 +1528,177 @@ var TextInputBuilder = class extends ComponentBuilder { } }; -// src/components/v2/Container.ts +// src/components/label/Assertions.ts +var Assertions_exports6 = {}; +__export(Assertions_exports6, { + labelPredicate: () => labelPredicate +}); +import { s as s6 } from "@sapphire/shapeshift"; import { ComponentType as ComponentType12 } from "discord-api-types/v10"; +var labelPredicate = s6.object({ + id: idValidator.optional(), + type: s6.literal(ComponentType12.Label), + label: s6.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(45), + description: s6.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(100).optional(), + component: s6.union([ + textInputPredicate, + selectMenuUserPredicate, + selectMenuRolePredicate, + selectMenuMentionablePredicate, + selectMenuChannelPredicate, + selectMenuStringPredicate, + fileUploadPredicate + ]) +}).setValidationEnabled(isValidationEnabled); + +// src/components/label/Label.ts +var LabelBuilder = class extends ComponentBuilder { + static { + __name(this, "LabelBuilder"); + } + /** + * @internal + */ + data; + /** + * Creates a new label. + * + * @param data - The API data to create this label with + * @example + * Creating a label from an API data object: + * ```ts + * const label = new LabelBuilder({ + * label: "label", + * component, + * }); + * ``` + * @example + * Creating a label using setters and API data: + * ```ts + * const label = new LabelBuilder({ + * label: 'label', + * component, + * }).setLabel('new text'); + * ``` + */ + constructor(data = {}) { + super({ type: ComponentType13.Label }); + const { component, ...rest } = data; + this.data = { + ...rest, + component: component ? createComponentBuilder(component) : void 0, + type: ComponentType13.Label + }; + } + /** + * Sets the label for this label. + * + * @param label - The label to use + */ + setLabel(label) { + this.data.label = label; + return this; + } + /** + * Sets the description for this label. + * + * @param description - The description to use + */ + setDescription(description) { + this.data.description = description; + return this; + } + /** + * Clears the description for this label. + */ + clearDescription() { + this.data.description = void 0; + return this; + } + /** + * Sets a string select menu component to this label. + * + * @param input - A function that returns a component builder or an already built builder + */ + setStringSelectMenuComponent(input) { + this.data.component = resolveBuilder(input, StringSelectMenuBuilder); + return this; + } + /** + * Sets a user select menu component to this label. + * + * @param input - A function that returns a component builder or an already built builder + */ + setUserSelectMenuComponent(input) { + this.data.component = resolveBuilder(input, UserSelectMenuBuilder); + return this; + } + /** + * Sets a role select menu component to this label. + * + * @param input - A function that returns a component builder or an already built builder + */ + setRoleSelectMenuComponent(input) { + this.data.component = resolveBuilder(input, RoleSelectMenuBuilder); + return this; + } + /** + * Sets a mentionable select menu component to this label. + * + * @param input - A function that returns a component builder or an already built builder + */ + setMentionableSelectMenuComponent(input) { + this.data.component = resolveBuilder(input, MentionableSelectMenuBuilder); + return this; + } + /** + * Sets a channel select menu component to this label. + * + * @param input - A function that returns a component builder or an already built builder + */ + setChannelSelectMenuComponent(input) { + this.data.component = resolveBuilder(input, ChannelSelectMenuBuilder); + return this; + } + /** + * Sets a text input component to this label. + * + * @param input - A function that returns a component builder or an already built builder + */ + setTextInputComponent(input) { + this.data.component = resolveBuilder(input, TextInputBuilder); + return this; + } + /** + * Sets a file upload component to this label. + * + * @param input - A function that returns a component builder or an already built builder + */ + setFileUploadComponent(input) { + this.data.component = resolveBuilder(input, FileUploadBuilder); + return this; + } + /** + * {@inheritDoc ComponentBuilder.toJSON} + */ + toJSON() { + const { component, ...rest } = this.data; + const data = { + ...rest, + // The label predicate validates the component. + component: component?.toJSON() + }; + labelPredicate.parse(data); + return data; + } +}; + +// src/components/v2/Container.ts +import { ComponentType as ComponentType18 } from "discord-api-types/v10"; // src/components/v2/Assertions.ts -var Assertions_exports4 = {}; -__export(Assertions_exports4, { +var Assertions_exports7 = {}; +__export(Assertions_exports7, { accessoryPredicate: () => accessoryPredicate, assertReturnOfBuilder: () => assertReturnOfBuilder, containerColorPredicate: () => containerColorPredicate, @@ -1350,11 +1711,11 @@ __export(Assertions_exports4, { unfurledMediaItemPredicate: () => unfurledMediaItemPredicate, validateComponentArray: () => validateComponentArray }); -import { s as s4 } from "@sapphire/shapeshift"; +import { s as s7 } from "@sapphire/shapeshift"; import { SeparatorSpacingSize } from "discord-api-types/v10"; // src/components/v2/Thumbnail.ts -import { ComponentType as ComponentType8 } from "discord-api-types/v10"; +import { ComponentType as ComponentType14 } from "discord-api-types/v10"; var ThumbnailBuilder = class extends ComponentBuilder { static { __name(this, "ThumbnailBuilder"); @@ -1386,7 +1747,7 @@ var ThumbnailBuilder = class extends ComponentBuilder { */ constructor(data = {}) { super({ - type: ComponentType8.Thumbnail, + type: ComponentType14.Thumbnail, ...data, media: data.media ? { url: data.media.url } : void 0 }); @@ -1435,33 +1796,33 @@ var ThumbnailBuilder = class extends ComponentBuilder { }; // src/components/v2/Assertions.ts -var unfurledMediaItemPredicate = s4.object({ - url: s4.string().url( +var unfurledMediaItemPredicate = s7.object({ + url: s7.string().url( { allowedProtocols: ["http:", "https:", "attachment:"] }, { message: "Invalid protocol for media URL. Must be http:, https:, or attachment:" } ) }).setValidationEnabled(isValidationEnabled); -var descriptionPredicate2 = s4.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(1024).setValidationEnabled(isValidationEnabled); -var filePredicate = s4.object({ - url: s4.string().url({ allowedProtocols: ["attachment:"] }, { message: "Invalid protocol for file URL. Must be attachment:" }) +var descriptionPredicate2 = s7.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(1024).setValidationEnabled(isValidationEnabled); +var filePredicate = s7.object({ + url: s7.string().url({ allowedProtocols: ["attachment:"] }, { message: "Invalid protocol for file URL. Must be attachment:" }) }).setValidationEnabled(isValidationEnabled); -var spoilerPredicate = s4.boolean(); -var dividerPredicate = s4.boolean(); -var spacingPredicate = s4.nativeEnum(SeparatorSpacingSize); -var textDisplayContentPredicate = s4.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(4e3).setValidationEnabled(isValidationEnabled); -var accessoryPredicate = s4.instance(ButtonBuilder).or(s4.instance(ThumbnailBuilder)).setValidationEnabled(isValidationEnabled); +var spoilerPredicate = s7.boolean(); +var dividerPredicate = s7.boolean(); +var spacingPredicate = s7.nativeEnum(SeparatorSpacingSize); +var textDisplayContentPredicate = s7.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(4e3).setValidationEnabled(isValidationEnabled); +var accessoryPredicate = s7.instance(ButtonBuilder).or(s7.instance(ThumbnailBuilder)).setValidationEnabled(isValidationEnabled); var containerColorPredicate = colorPredicate.nullish(); function assertReturnOfBuilder(input, ExpectedInstanceOf) { - s4.instance(ExpectedInstanceOf).setValidationEnabled(isValidationEnabled).parse(input); + s7.instance(ExpectedInstanceOf).setValidationEnabled(isValidationEnabled).parse(input); } __name(assertReturnOfBuilder, "assertReturnOfBuilder"); function validateComponentArray(input, min, max, ExpectedInstanceOf) { - (ExpectedInstanceOf ? s4.instance(ExpectedInstanceOf) : s4.instance(ComponentBuilder)).array().lengthGreaterThanOrEqual(min).lengthLessThanOrEqual(max).setValidationEnabled(isValidationEnabled).parse(input); + (ExpectedInstanceOf ? s7.instance(ExpectedInstanceOf) : s7.instance(ComponentBuilder)).array().lengthGreaterThanOrEqual(min).lengthLessThanOrEqual(max).setValidationEnabled(isValidationEnabled).parse(input); } __name(validateComponentArray, "validateComponentArray"); // src/components/v2/File.ts -import { ComponentType as ComponentType9 } from "discord-api-types/v10"; +import { ComponentType as ComponentType15 } from "discord-api-types/v10"; var FileBuilder = class extends ComponentBuilder { static { __name(this, "FileBuilder"); @@ -1492,7 +1853,7 @@ var FileBuilder = class extends ComponentBuilder { * ``` */ constructor(data = {}) { - super({ type: ComponentType9.File, ...data, file: data.file ? { url: data.file.url } : void 0 }); + super({ type: ComponentType15.File, ...data, file: data.file ? { url: data.file.url } : void 0 }); } /** * Sets the spoiler status of this file. @@ -1522,7 +1883,7 @@ var FileBuilder = class extends ComponentBuilder { }; // src/components/v2/Separator.ts -import { ComponentType as ComponentType10 } from "discord-api-types/v10"; +import { ComponentType as ComponentType16 } from "discord-api-types/v10"; var SeparatorBuilder = class extends ComponentBuilder { static { __name(this, "SeparatorBuilder"); @@ -1550,7 +1911,7 @@ var SeparatorBuilder = class extends ComponentBuilder { */ constructor(data = {}) { super({ - type: ComponentType10.Separator, + type: ComponentType16.Separator, ...data }); } @@ -1588,7 +1949,7 @@ var SeparatorBuilder = class extends ComponentBuilder { }; // src/components/v2/TextDisplay.ts -import { ComponentType as ComponentType11 } from "discord-api-types/v10"; +import { ComponentType as ComponentType17 } from "discord-api-types/v10"; var TextDisplayBuilder = class extends ComponentBuilder { static { __name(this, "TextDisplayBuilder"); @@ -1615,7 +1976,7 @@ var TextDisplayBuilder = class extends ComponentBuilder { */ constructor(data = {}) { super({ - type: ComponentType11.TextDisplay, + type: ComponentType17.TextDisplay, ...data }); } @@ -1673,11 +2034,12 @@ var ContainerBuilder = class extends ComponentBuilder { * }, * ], * }) - * .addComponents(separator, section); + * .addSeparatorComponents(separator) + * .addSectionComponents(section); * ``` */ constructor({ components, ...data } = {}) { - super({ type: ComponentType12.Container, ...data }); + super({ type: ComponentType18.Container, ...data }); this.components = components?.map((component) => createComponentBuilder(component)) ?? []; } /** @@ -1800,7 +2162,7 @@ var ContainerBuilder = class extends ComponentBuilder { }; // src/components/v2/MediaGallery.ts -import { ComponentType as ComponentType13 } from "discord-api-types/v10"; +import { ComponentType as ComponentType19 } from "discord-api-types/v10"; // src/components/v2/MediaGalleryItem.ts var MediaGalleryItemBuilder = class { @@ -1930,7 +2292,7 @@ var MediaGalleryBuilder = class extends ComponentBuilder { * ``` */ constructor({ items, ...data } = {}) { - super({ type: ComponentType13.MediaGallery, ...data }); + super({ type: ComponentType19.MediaGallery, ...data }); this.items = items?.map((item) => new MediaGalleryItemBuilder(item)) ?? []; } /** @@ -1980,7 +2342,7 @@ var MediaGalleryBuilder = class extends ComponentBuilder { }; // src/components/v2/Section.ts -import { ComponentType as ComponentType14 } from "discord-api-types/v10"; +import { ComponentType as ComponentType20 } from "discord-api-types/v10"; var SectionBuilder = class extends ComponentBuilder { static { __name(this, "SectionBuilder"); @@ -2029,7 +2391,7 @@ var SectionBuilder = class extends ComponentBuilder { * ``` */ constructor({ components, accessory, ...data } = {}) { - super({ type: ComponentType14.Section, ...data }); + super({ type: ComponentType20.Section, ...data }); this.components = components?.map((component) => createComponentBuilder(component)) ?? []; this.accessory = accessory ? createComponentBuilder(accessory) : void 0; } @@ -2104,36 +2466,40 @@ function createComponentBuilder(data) { return data; } switch (data.type) { - case ComponentType15.ActionRow: + case ComponentType21.ActionRow: return new ActionRowBuilder(data); - case ComponentType15.Button: + case ComponentType21.Button: return new ButtonBuilder(data); - case ComponentType15.StringSelect: + case ComponentType21.StringSelect: return new StringSelectMenuBuilder(data); - case ComponentType15.TextInput: + case ComponentType21.TextInput: return new TextInputBuilder(data); - case ComponentType15.UserSelect: + case ComponentType21.UserSelect: return new UserSelectMenuBuilder(data); - case ComponentType15.RoleSelect: + case ComponentType21.RoleSelect: return new RoleSelectMenuBuilder(data); - case ComponentType15.MentionableSelect: + case ComponentType21.MentionableSelect: return new MentionableSelectMenuBuilder(data); - case ComponentType15.ChannelSelect: + case ComponentType21.ChannelSelect: return new ChannelSelectMenuBuilder(data); - case ComponentType15.File: + case ComponentType21.File: return new FileBuilder(data); - case ComponentType15.Container: + case ComponentType21.Container: return new ContainerBuilder(data); - case ComponentType15.Section: + case ComponentType21.Section: return new SectionBuilder(data); - case ComponentType15.Separator: + case ComponentType21.Separator: return new SeparatorBuilder(data); - case ComponentType15.TextDisplay: + case ComponentType21.TextDisplay: return new TextDisplayBuilder(data); - case ComponentType15.Thumbnail: + case ComponentType21.Thumbnail: return new ThumbnailBuilder(data); - case ComponentType15.MediaGallery: + case ComponentType21.MediaGallery: return new MediaGalleryBuilder(data); + case ComponentType21.Label: + return new LabelBuilder(data); + case ComponentType21.FileUpload: + return new FileUploadBuilder(data); default: throw new Error(`Cannot properly serialize component type: ${data.type}`); } @@ -2198,7 +2564,7 @@ var ActionRowBuilder = class extends ComponentBuilder { * ``` */ constructor({ components, ...data } = {}) { - super({ type: ComponentType16.ActionRow, ...data }); + super({ type: ComponentType22.ActionRow, ...data }); this.components = components?.map((component) => createComponentBuilder(component)) ?? []; } /** @@ -2230,16 +2596,19 @@ var ActionRowBuilder = class extends ComponentBuilder { } }; +// src/interactions/modals/Modal.ts +import { ComponentType as ComponentType23 } from "discord-api-types/v10"; + // src/interactions/modals/Assertions.ts -var Assertions_exports5 = {}; -__export(Assertions_exports5, { +var Assertions_exports8 = {}; +__export(Assertions_exports8, { componentsValidator: () => componentsValidator, titleValidator: () => titleValidator, validateRequiredParameters: () => validateRequiredParameters2 }); -import { s as s5 } from "@sapphire/shapeshift"; -var titleValidator = s5.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(45).setValidationEnabled(isValidationEnabled); -var componentsValidator = s5.instance(ActionRowBuilder).array().lengthGreaterThanOrEqual(1).setValidationEnabled(isValidationEnabled); +import { s as s8 } from "@sapphire/shapeshift"; +var titleValidator = s8.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(45).setValidationEnabled(isValidationEnabled); +var componentsValidator = s8.union([s8.instance(ActionRowBuilder), s8.instance(LabelBuilder), s8.instance(TextDisplayBuilder)]).array().lengthGreaterThanOrEqual(1).setValidationEnabled(isValidationEnabled); function validateRequiredParameters2(customId, title, components) { customIdValidator.parse(customId); titleValidator.parse(title); @@ -2291,19 +2660,121 @@ var ModalBuilder = class { * Adds components to this modal. * * @param components - The components to add + * @deprecated Use {@link ModalBuilder.addLabelComponents} or {@link ModalBuilder.addTextDisplayComponents} instead */ addComponents(...components) { this.components.push( - ...normalizeArray(components).map( - (component) => component instanceof ActionRowBuilder ? component : new ActionRowBuilder(component) - ) + ...normalizeArray(components).map((component, idx) => { + if (component instanceof ActionRowBuilder || component instanceof LabelBuilder || component instanceof TextDisplayBuilder) { + return component; + } + if (component instanceof TextInputBuilder) { + return new ActionRowBuilder().addComponents(component); + } + if ("type" in component) { + if (component.type === ComponentType23.ActionRow) { + return new ActionRowBuilder(component); + } + if (component.type === ComponentType23.Label) { + return new LabelBuilder(component); + } + if (component.type === ComponentType23.TextDisplay) { + return new TextDisplayBuilder(component); + } + if (component.type === ComponentType23.TextInput) { + return new ActionRowBuilder().addComponents( + new TextInputBuilder(component) + ); + } + } + throw new TypeError(`Invalid component passed in ModalBuilder.addComponents at index ${idx}!`); + }) ); return this; } + /** + * Adds label components to this modal. + * + * @param components - The components to add + */ + addLabelComponents(...components) { + const normalized = normalizeArray(components); + const resolved = normalized.map((label) => resolveBuilder(label, LabelBuilder)); + this.components.push(...resolved); + return this; + } + /** + * Adds text display components to this modal. + * + * @param components - The components to add + */ + addTextDisplayComponents(...components) { + const normalized = normalizeArray(components); + const resolved = normalized.map((row) => resolveBuilder(row, TextDisplayBuilder)); + this.components.push(...resolved); + return this; + } + /** + * Adds action rows to this modal. + * + * @param components - The components to add + * @deprecated Use {@link ModalBuilder.addLabelComponents} instead + */ + addActionRowComponents(...components) { + const normalized = normalizeArray(components); + const resolved = normalized.map((row) => resolveBuilder(row, ActionRowBuilder)); + this.components.push(...resolved); + return this; + } + /** + * Sets the labels for this modal. + * + * @param components - The components to set + */ + setLabelComponents(...components) { + const normalized = normalizeArray(components); + this.spliceLabelComponents(0, this.components.length, ...normalized); + return this; + } + /** + * Removes, replaces, or inserts labels for this modal. + * + * @remarks + * This method behaves similarly + * to {@link https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/splice | Array.prototype.splice()}. + * The maximum amount of labels that can be added is 5. + * + * It's useful for modifying and adjusting order of the already-existing labels of a modal. + * @example + * Remove the first label: + * ```ts + * modal.spliceLabelComponents(0, 1); + * ``` + * @example + * Remove the first n labels: + * ```ts + * const n = 4; + * modal.spliceLabelComponents(0, n); + * ``` + * @example + * Remove the last label: + * ```ts + * modal.spliceLabelComponents(-1, 1); + * ``` + * @param index - The index to start at + * @param deleteCount - The number of labels to remove + * @param labels - The replacing label objects + */ + spliceLabelComponents(index, deleteCount, ...labels) { + const resolved = labels.map((label) => resolveBuilder(label, LabelBuilder)); + this.components.splice(index, deleteCount, ...resolved); + return this; + } /** * Sets components for this modal. * * @param components - The components to set + * @deprecated Use {@link ModalBuilder.setLabelComponents} instead */ setComponents(...components) { this.components.splice(0, this.components.length, ...normalizeArray(components)); @@ -2322,8 +2793,8 @@ var ModalBuilder = class { }; // src/interactions/slashCommands/Assertions.ts -var Assertions_exports6 = {}; -__export(Assertions_exports6, { +var Assertions_exports9 = {}; +__export(Assertions_exports9, { assertReturnOfBuilder: () => assertReturnOfBuilder2, contextsPredicate: () => contextsPredicate, integrationTypesPredicate: () => integrationTypesPredicate, @@ -2341,24 +2812,24 @@ __export(Assertions_exports6, { validateRequired: () => validateRequired, validateRequiredParameters: () => validateRequiredParameters3 }); -import { s as s6 } from "@sapphire/shapeshift"; +import { s as s9 } from "@sapphire/shapeshift"; import { ApplicationIntegrationType, InteractionContextType, Locale } from "discord-api-types/v10"; -var namePredicate = s6.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(32).regex(/^[\p{Ll}\p{Lm}\p{Lo}\p{N}\p{sc=Devanagari}\p{sc=Thai}_-]+$/u).setValidationEnabled(isValidationEnabled); +var namePredicate = s9.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(32).regex(/^[\p{Ll}\p{Lm}\p{Lo}\p{N}\p{sc=Devanagari}\p{sc=Thai}_-]+$/u).setValidationEnabled(isValidationEnabled); function validateName(name) { namePredicate.parse(name); } __name(validateName, "validateName"); -var descriptionPredicate3 = s6.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(100).setValidationEnabled(isValidationEnabled); -var localePredicate = s6.nativeEnum(Locale); +var descriptionPredicate3 = s9.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(100).setValidationEnabled(isValidationEnabled); +var localePredicate = s9.nativeEnum(Locale); function validateDescription(description) { descriptionPredicate3.parse(description); } __name(validateDescription, "validateDescription"); -var maxArrayLengthPredicate = s6.unknown().array().lengthLessThanOrEqual(25).setValidationEnabled(isValidationEnabled); +var maxArrayLengthPredicate = s9.unknown().array().lengthLessThanOrEqual(25).setValidationEnabled(isValidationEnabled); function validateLocale(locale) { return localePredicate.parse(locale); } @@ -2373,7 +2844,7 @@ function validateRequiredParameters3(name, description, options) { validateMaxOptionsLength(options); } __name(validateRequiredParameters3, "validateRequiredParameters"); -var booleanPredicate = s6.boolean(); +var booleanPredicate = s9.boolean(); function validateDefaultPermission(value) { booleanPredicate.parse(value); } @@ -2382,29 +2853,29 @@ function validateRequired(required) { booleanPredicate.parse(required); } __name(validateRequired, "validateRequired"); -var choicesLengthPredicate = s6.number().lessThanOrEqual(25).setValidationEnabled(isValidationEnabled); +var choicesLengthPredicate = s9.number().lessThanOrEqual(25).setValidationEnabled(isValidationEnabled); function validateChoicesLength(amountAdding, choices) { choicesLengthPredicate.parse((choices?.length ?? 0) + amountAdding); } __name(validateChoicesLength, "validateChoicesLength"); function assertReturnOfBuilder2(input, ExpectedInstanceOf) { - s6.instance(ExpectedInstanceOf).parse(input); + s9.instance(ExpectedInstanceOf).parse(input); } __name(assertReturnOfBuilder2, "assertReturnOfBuilder"); -var localizationMapPredicate = s6.object(Object.fromEntries(Object.values(Locale).map((locale) => [locale, s6.string().nullish()]))).strict().nullish().setValidationEnabled(isValidationEnabled); +var localizationMapPredicate = s9.object(Object.fromEntries(Object.values(Locale).map((locale) => [locale, s9.string().nullish()]))).strict().nullish().setValidationEnabled(isValidationEnabled); function validateLocalizationMap(value) { localizationMapPredicate.parse(value); } __name(validateLocalizationMap, "validateLocalizationMap"); -var dmPermissionPredicate = s6.boolean().nullish(); +var dmPermissionPredicate = s9.boolean().nullish(); function validateDMPermission(value) { dmPermissionPredicate.parse(value); } __name(validateDMPermission, "validateDMPermission"); -var memberPermissionPredicate = s6.union([ - s6.bigint().transform((value) => value.toString()), - s6.number().safeInt().transform((value) => value.toString()), - s6.string().regex(/^\d+$/) +var memberPermissionPredicate = s9.union([ + s9.bigint().transform((value) => value.toString()), + s9.number().safeInt().transform((value) => value.toString()), + s9.string().regex(/^\d+$/) ]).nullish(); function validateDefaultMemberPermissions(permissions) { return memberPermissionPredicate.parse(permissions); @@ -2414,11 +2885,11 @@ function validateNSFW(value) { booleanPredicate.parse(value); } __name(validateNSFW, "validateNSFW"); -var contextsPredicate = s6.array( - s6.nativeEnum(InteractionContextType).setValidationEnabled(isValidationEnabled) +var contextsPredicate = s9.array( + s9.nativeEnum(InteractionContextType).setValidationEnabled(isValidationEnabled) ); -var integrationTypesPredicate = s6.array( - s6.nativeEnum(ApplicationIntegrationType).setValidationEnabled(isValidationEnabled) +var integrationTypesPredicate = s9.array( + s9.nativeEnum(ApplicationIntegrationType).setValidationEnabled(isValidationEnabled) ); // src/interactions/slashCommands/SlashCommandBuilder.ts @@ -2728,21 +3199,21 @@ import { ApplicationCommandOptionType as ApplicationCommandOptionType3 } from "d import { mix } from "ts-mixer"; // src/interactions/slashCommands/mixins/ApplicationCommandOptionChannelTypesMixin.ts -import { s as s7 } from "@sapphire/shapeshift"; -import { ChannelType as ChannelType2 } from "discord-api-types/v10"; +import { s as s10 } from "@sapphire/shapeshift"; +import { ChannelType as ChannelType3 } from "discord-api-types/v10"; var allowedChannelTypes = [ - ChannelType2.GuildText, - ChannelType2.GuildVoice, - ChannelType2.GuildCategory, - ChannelType2.GuildAnnouncement, - ChannelType2.AnnouncementThread, - ChannelType2.PublicThread, - ChannelType2.PrivateThread, - ChannelType2.GuildStageVoice, - ChannelType2.GuildForum, - ChannelType2.GuildMedia + ChannelType3.GuildText, + ChannelType3.GuildVoice, + ChannelType3.GuildCategory, + ChannelType3.GuildAnnouncement, + ChannelType3.AnnouncementThread, + ChannelType3.PublicThread, + ChannelType3.PrivateThread, + ChannelType3.GuildStageVoice, + ChannelType3.GuildForum, + ChannelType3.GuildMedia ]; -var channelTypesPredicate = s7.array(s7.union(allowedChannelTypes.map((type) => s7.literal(type)))); +var channelTypesPredicate = s10.array(s10.union(allowedChannelTypes.map((type) => s10.literal(type)))); var ApplicationCommandOptionChannelTypesMixin = class { static { __name(this, "ApplicationCommandOptionChannelTypesMixin"); @@ -2785,7 +3256,7 @@ SlashCommandChannelOption = __decorateClass([ ], SlashCommandChannelOption); // src/interactions/slashCommands/options/integer.ts -import { s as s10 } from "@sapphire/shapeshift"; +import { s as s13 } from "@sapphire/shapeshift"; import { ApplicationCommandOptionType as ApplicationCommandOptionType5 } from "discord-api-types/v10"; import { mix as mix2 } from "ts-mixer"; @@ -2805,8 +3276,8 @@ var ApplicationCommandNumericOptionMinMaxValueMixin = class { }; // src/interactions/slashCommands/mixins/ApplicationCommandOptionWithAutocompleteMixin.ts -import { s as s8 } from "@sapphire/shapeshift"; -var booleanPredicate2 = s8.boolean(); +import { s as s11 } from "@sapphire/shapeshift"; +var booleanPredicate2 = s11.boolean(); var ApplicationCommandOptionWithAutocompleteMixin = class { static { __name(this, "ApplicationCommandOptionWithAutocompleteMixin"); @@ -2837,14 +3308,14 @@ var ApplicationCommandOptionWithAutocompleteMixin = class { }; // src/interactions/slashCommands/mixins/ApplicationCommandOptionWithChoicesMixin.ts -import { s as s9 } from "@sapphire/shapeshift"; +import { s as s12 } from "@sapphire/shapeshift"; import { ApplicationCommandOptionType as ApplicationCommandOptionType4 } from "discord-api-types/v10"; -var stringPredicate = s9.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(100); -var numberPredicate = s9.number().greaterThan(Number.NEGATIVE_INFINITY).lessThan(Number.POSITIVE_INFINITY); -var choicesPredicate = s9.object({ +var stringPredicate = s12.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(100); +var numberPredicate = s12.number().greaterThan(Number.NEGATIVE_INFINITY).lessThan(Number.POSITIVE_INFINITY); +var choicesPredicate = s12.object({ name: stringPredicate, name_localizations: localizationMapPredicate, - value: s9.union([stringPredicate, numberPredicate]) + value: s12.union([stringPredicate, numberPredicate]) }).array(); var ApplicationCommandOptionWithChoicesMixin = class { static { @@ -2903,7 +3374,7 @@ var ApplicationCommandOptionWithChoicesMixin = class { }; // src/interactions/slashCommands/options/integer.ts -var numberValidator = s10.number().int(); +var numberValidator = s13.number().int(); var SlashCommandIntegerOption = class extends ApplicationCommandOptionBase { /** * The type of this option. @@ -2965,10 +3436,10 @@ var SlashCommandMentionableOption = class extends ApplicationCommandOptionBase { }; // src/interactions/slashCommands/options/number.ts -import { s as s11 } from "@sapphire/shapeshift"; +import { s as s14 } from "@sapphire/shapeshift"; import { ApplicationCommandOptionType as ApplicationCommandOptionType7 } from "discord-api-types/v10"; import { mix as mix3 } from "ts-mixer"; -var numberValidator2 = s11.number(); +var numberValidator2 = s14.number(); var SlashCommandNumberOption = class extends ApplicationCommandOptionBase { /** * The type of this option. @@ -3030,11 +3501,11 @@ var SlashCommandRoleOption = class extends ApplicationCommandOptionBase { }; // src/interactions/slashCommands/options/string.ts -import { s as s12 } from "@sapphire/shapeshift"; +import { s as s15 } from "@sapphire/shapeshift"; import { ApplicationCommandOptionType as ApplicationCommandOptionType9 } from "discord-api-types/v10"; import { mix as mix4 } from "ts-mixer"; -var minLengthValidator2 = s12.number().greaterThanOrEqual(0).lessThanOrEqual(6e3); -var maxLengthValidator2 = s12.number().greaterThanOrEqual(1).lessThanOrEqual(6e3); +var minLengthValidator2 = s15.number().greaterThanOrEqual(0).lessThanOrEqual(6e3); +var maxLengthValidator2 = s15.number().greaterThanOrEqual(1).lessThanOrEqual(6e3); var SlashCommandStringOption = class extends ApplicationCommandOptionBase { /** * The type of this option. @@ -3383,8 +3854,8 @@ SlashCommandBuilder = __decorateClass([ ], SlashCommandBuilder); // src/interactions/contextMenuCommands/Assertions.ts -var Assertions_exports7 = {}; -__export(Assertions_exports7, { +var Assertions_exports10 = {}; +__export(Assertions_exports10, { contextsPredicate: () => contextsPredicate2, integrationTypesPredicate: () => integrationTypesPredicate2, validateDMPermission: () => validateDMPermission2, @@ -3394,11 +3865,11 @@ __export(Assertions_exports7, { validateRequiredParameters: () => validateRequiredParameters4, validateType: () => validateType }); -import { s as s13 } from "@sapphire/shapeshift"; +import { s as s16 } from "@sapphire/shapeshift"; import { ApplicationCommandType as ApplicationCommandType2, ApplicationIntegrationType as ApplicationIntegrationType2, InteractionContextType as InteractionContextType2 } from "discord-api-types/v10"; -var namePredicate2 = s13.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(32).regex(/\S/).setValidationEnabled(isValidationEnabled); -var typePredicate = s13.union([s13.literal(ApplicationCommandType2.User), s13.literal(ApplicationCommandType2.Message)]).setValidationEnabled(isValidationEnabled); -var booleanPredicate3 = s13.boolean(); +var namePredicate2 = s16.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(32).regex(/\S/).setValidationEnabled(isValidationEnabled); +var typePredicate = s16.union([s16.literal(ApplicationCommandType2.User), s16.literal(ApplicationCommandType2.Message)]).setValidationEnabled(isValidationEnabled); +var booleanPredicate3 = s16.boolean(); function validateDefaultPermission2(value) { booleanPredicate3.parse(value); } @@ -3416,25 +3887,25 @@ function validateRequiredParameters4(name, type) { validateType(type); } __name(validateRequiredParameters4, "validateRequiredParameters"); -var dmPermissionPredicate2 = s13.boolean().nullish(); +var dmPermissionPredicate2 = s16.boolean().nullish(); function validateDMPermission2(value) { dmPermissionPredicate2.parse(value); } __name(validateDMPermission2, "validateDMPermission"); -var memberPermissionPredicate2 = s13.union([ - s13.bigint().transform((value) => value.toString()), - s13.number().safeInt().transform((value) => value.toString()), - s13.string().regex(/^\d+$/) +var memberPermissionPredicate2 = s16.union([ + s16.bigint().transform((value) => value.toString()), + s16.number().safeInt().transform((value) => value.toString()), + s16.string().regex(/^\d+$/) ]).nullish(); function validateDefaultMemberPermissions2(permissions) { return memberPermissionPredicate2.parse(permissions); } __name(validateDefaultMemberPermissions2, "validateDefaultMemberPermissions"); -var contextsPredicate2 = s13.array( - s13.nativeEnum(InteractionContextType2).setValidationEnabled(isValidationEnabled) +var contextsPredicate2 = s16.array( + s16.nativeEnum(InteractionContextType2).setValidationEnabled(isValidationEnabled) ); -var integrationTypesPredicate2 = s13.array( - s13.nativeEnum(ApplicationIntegrationType2).setValidationEnabled(isValidationEnabled) +var integrationTypesPredicate2 = s16.array( + s16.nativeEnum(ApplicationIntegrationType2).setValidationEnabled(isValidationEnabled) ); // src/interactions/contextMenuCommands/ContextMenuCommandBuilder.ts @@ -3615,7 +4086,7 @@ function embedLength(data) { __name(embedLength, "embedLength"); // src/index.ts -var version = "1.11.3"; +var version = "1.13.1"; export { ActionRowBuilder, ApplicationCommandNumericOptionMinMaxValueMixin, @@ -3628,20 +4099,25 @@ export { ChannelSelectMenuBuilder, Assertions_exports2 as ComponentAssertions, ComponentBuilder, - Assertions_exports4 as ComponentsV2Assertions, + Assertions_exports7 as ComponentsV2Assertions, ContainerBuilder, - Assertions_exports7 as ContextMenuCommandAssertions, + Assertions_exports10 as ContextMenuCommandAssertions, ContextMenuCommandBuilder, Assertions_exports as EmbedAssertions, EmbedBuilder, FileBuilder, + Assertions_exports3 as FileUploadAssertions, + FileUploadBuilder, + Assertions_exports6 as LabelAssertions, + LabelBuilder, MediaGalleryBuilder, MediaGalleryItemBuilder, MentionableSelectMenuBuilder, - Assertions_exports5 as ModalAssertions, + Assertions_exports8 as ModalAssertions, ModalBuilder, RoleSelectMenuBuilder, SectionBuilder, + Assertions_exports5 as SelectMenuAssertions, StringSelectMenuBuilder as SelectMenuBuilder, StringSelectMenuOptionBuilder as SelectMenuOptionBuilder, SeparatorBuilder, @@ -3649,7 +4125,7 @@ export { SharedSlashCommand, SharedSlashCommandOptions, SharedSlashCommandSubcommands, - Assertions_exports6 as SlashCommandAssertions, + Assertions_exports9 as SlashCommandAssertions, SlashCommandAttachmentOption, SlashCommandBooleanOption, SlashCommandBuilder, @@ -3665,7 +4141,7 @@ export { StringSelectMenuBuilder, StringSelectMenuOptionBuilder, TextDisplayBuilder, - Assertions_exports3 as TextInputAssertions, + Assertions_exports4 as TextInputAssertions, TextInputBuilder, ThumbnailBuilder, UserSelectMenuBuilder, diff --git a/node_modules/@discordjs/builders/dist/index.mjs.map b/node_modules/@discordjs/builders/dist/index.mjs.map index 58b2ce3..5280271 100644 --- a/node_modules/@discordjs/builders/dist/index.mjs.map +++ b/node_modules/@discordjs/builders/dist/index.mjs.map @@ -1 +1 @@ -{"version":3,"sources":["../src/messages/embed/Assertions.ts","../src/util/validation.ts","../src/util/normalizeArray.ts","../src/messages/embed/Embed.ts","../src/index.ts","../src/components/Assertions.ts","../src/components/selectMenu/StringSelectMenuOption.ts","../src/components/ActionRow.ts","../src/components/Component.ts","../src/components/Components.ts","../src/components/button/Button.ts","../src/components/selectMenu/ChannelSelectMenu.ts","../src/components/selectMenu/BaseSelectMenu.ts","../src/components/selectMenu/MentionableSelectMenu.ts","../src/components/selectMenu/RoleSelectMenu.ts","../src/components/selectMenu/StringSelectMenu.ts","../src/components/selectMenu/UserSelectMenu.ts","../src/components/textInput/TextInput.ts","../src/components/textInput/Assertions.ts","../src/components/v2/Container.ts","../src/components/v2/Assertions.ts","../src/components/v2/Thumbnail.ts","../src/components/v2/File.ts","../src/components/v2/Separator.ts","../src/components/v2/TextDisplay.ts","../src/components/v2/MediaGallery.ts","../src/components/v2/MediaGalleryItem.ts","../src/components/v2/Section.ts","../src/interactions/modals/Assertions.ts","../src/interactions/modals/Modal.ts","../src/interactions/slashCommands/Assertions.ts","../src/interactions/slashCommands/SlashCommandBuilder.ts","../src/interactions/slashCommands/mixins/NameAndDescription.ts","../src/interactions/slashCommands/mixins/SharedSlashCommand.ts","../src/interactions/slashCommands/options/attachment.ts","../src/interactions/slashCommands/mixins/ApplicationCommandOptionBase.ts","../src/interactions/slashCommands/options/boolean.ts","../src/interactions/slashCommands/options/channel.ts","../src/interactions/slashCommands/mixins/ApplicationCommandOptionChannelTypesMixin.ts","../src/interactions/slashCommands/options/integer.ts","../src/interactions/slashCommands/mixins/ApplicationCommandNumericOptionMinMaxValueMixin.ts","../src/interactions/slashCommands/mixins/ApplicationCommandOptionWithAutocompleteMixin.ts","../src/interactions/slashCommands/mixins/ApplicationCommandOptionWithChoicesMixin.ts","../src/interactions/slashCommands/options/mentionable.ts","../src/interactions/slashCommands/options/number.ts","../src/interactions/slashCommands/options/role.ts","../src/interactions/slashCommands/options/string.ts","../src/interactions/slashCommands/options/user.ts","../src/interactions/slashCommands/mixins/SharedSlashCommandOptions.ts","../src/interactions/slashCommands/SlashCommandSubcommands.ts","../src/interactions/slashCommands/mixins/SharedSubcommands.ts","../src/interactions/contextMenuCommands/Assertions.ts","../src/interactions/contextMenuCommands/ContextMenuCommandBuilder.ts","../src/util/componentUtil.ts"],"sourcesContent":["import { s } from '@sapphire/shapeshift';\nimport type { APIEmbedField } from 'discord-api-types/v10';\nimport { isValidationEnabled } from '../../util/validation.js';\n\nexport const fieldNamePredicate = s.string().lengthLessThanOrEqual(256).setValidationEnabled(isValidationEnabled);\n\nexport const fieldValuePredicate = s.string().lengthLessThanOrEqual(1_024).setValidationEnabled(isValidationEnabled);\n\nexport const fieldInlinePredicate = s.boolean().optional();\n\nexport const embedFieldPredicate = s\n\t.object({\n\t\tname: fieldNamePredicate,\n\t\tvalue: fieldValuePredicate,\n\t\tinline: fieldInlinePredicate,\n\t})\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const embedFieldsArrayPredicate = embedFieldPredicate.array().setValidationEnabled(isValidationEnabled);\n\nexport const fieldLengthPredicate = s.number().lessThanOrEqual(25).setValidationEnabled(isValidationEnabled);\n\nexport function validateFieldLength(amountAdding: number, fields?: APIEmbedField[]): void {\n\tfieldLengthPredicate.parse((fields?.length ?? 0) + amountAdding);\n}\n\nexport const authorNamePredicate = fieldNamePredicate\n\t.lengthGreaterThanOrEqual(1)\n\t.nullable()\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const imageURLPredicate = s\n\t.string()\n\t.url({\n\t\tallowedProtocols: ['http:', 'https:', 'attachment:'],\n\t})\n\t.nullish()\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const urlPredicate = s\n\t.string()\n\t.url({\n\t\tallowedProtocols: ['http:', 'https:'],\n\t})\n\t.nullish()\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const embedAuthorPredicate = s\n\t.object({\n\t\tname: authorNamePredicate,\n\t\ticonURL: imageURLPredicate,\n\t\turl: urlPredicate,\n\t})\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const RGBPredicate = s\n\t.number()\n\t.int()\n\t.greaterThanOrEqual(0)\n\t.lessThanOrEqual(255)\n\t.setValidationEnabled(isValidationEnabled);\nexport const colorPredicate = s\n\t.number()\n\t.int()\n\t.greaterThanOrEqual(0)\n\t.lessThanOrEqual(0xffffff)\n\t.or(s.tuple([RGBPredicate, RGBPredicate, RGBPredicate]))\n\t.nullable()\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const descriptionPredicate = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(4_096)\n\t.nullable()\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const footerTextPredicate = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(2_048)\n\t.nullable()\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const embedFooterPredicate = s\n\t.object({\n\t\ttext: footerTextPredicate,\n\t\ticonURL: imageURLPredicate,\n\t})\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const timestampPredicate = s.union([s.number(), s.date()]).nullable().setValidationEnabled(isValidationEnabled);\n\nexport const titlePredicate = fieldNamePredicate\n\t.lengthGreaterThanOrEqual(1)\n\t.nullable()\n\t.setValidationEnabled(isValidationEnabled);\n","let validate = true;\n\n/**\n * Enables validators.\n *\n * @returns Whether validation is occurring.\n */\nexport function enableValidators() {\n\treturn (validate = true);\n}\n\n/**\n * Disables validators.\n *\n * @returns Whether validation is occurring.\n */\nexport function disableValidators() {\n\treturn (validate = false);\n}\n\n/**\n * Checks whether validation is occurring.\n */\nexport function isValidationEnabled() {\n\treturn validate;\n}\n","/**\n * Normalizes data that is a rest parameter or an array into an array with a depth of 1.\n *\n * @typeParam ItemType - The data that must satisfy {@link RestOrArray}.\n * @param arr - The (possibly variadic) data to normalize\n */\nexport function normalizeArray(arr: RestOrArray): ItemType[] {\n\tif (Array.isArray(arr[0])) return [...arr[0]];\n\treturn arr as ItemType[];\n}\n\n/**\n * Represents data that may be an array or came from a rest parameter.\n *\n * @remarks\n * This type is used throughout builders to ensure both an array and variadic arguments\n * may be used. It is normalized with {@link normalizeArray}.\n */\nexport type RestOrArray = Type[] | [Type[]];\n","import type { APIEmbed, APIEmbedAuthor, APIEmbedField, APIEmbedFooter, APIEmbedImage } from 'discord-api-types/v10';\nimport { normalizeArray, type RestOrArray } from '../../util/normalizeArray.js';\nimport {\n\tcolorPredicate,\n\tdescriptionPredicate,\n\tembedAuthorPredicate,\n\tembedFieldsArrayPredicate,\n\tembedFooterPredicate,\n\timageURLPredicate,\n\ttimestampPredicate,\n\ttitlePredicate,\n\turlPredicate,\n\tvalidateFieldLength,\n} from './Assertions.js';\n\n/**\n * A tuple satisfying the RGB color model.\n *\n * @see {@link https://developer.mozilla.org/docs/Glossary/RGB}\n */\nexport type RGBTuple = [red: number, green: number, blue: number];\n\n/**\n * The base icon data typically used in payloads.\n */\nexport interface IconData {\n\t/**\n\t * The URL of the icon.\n\t */\n\ticonURL?: string;\n\t/**\n\t * The proxy URL of the icon.\n\t */\n\tproxyIconURL?: string;\n}\n\n/**\n * Represents the author data of an embed.\n */\nexport interface EmbedAuthorData extends IconData, Omit {}\n\n/**\n * Represents the author options of an embed.\n */\nexport interface EmbedAuthorOptions extends Omit {}\n\n/**\n * Represents the footer data of an embed.\n */\nexport interface EmbedFooterData extends IconData, Omit {}\n\n/**\n * Represents the footer options of an embed.\n */\nexport interface EmbedFooterOptions extends Omit {}\n\n/**\n * Represents the image data of an embed.\n */\nexport interface EmbedImageData extends Omit {\n\t/**\n\t * The proxy URL for the image.\n\t */\n\tproxyURL?: string;\n}\n\n/**\n * A builder that creates API-compatible JSON data for embeds.\n */\nexport class EmbedBuilder {\n\t/**\n\t * The API data associated with this embed.\n\t */\n\tpublic readonly data: APIEmbed;\n\n\t/**\n\t * Creates a new embed from API data.\n\t *\n\t * @param data - The API data to create this embed with\n\t */\n\tpublic constructor(data: APIEmbed = {}) {\n\t\tthis.data = { ...data };\n\t\tif (data.timestamp) this.data.timestamp = new Date(data.timestamp).toISOString();\n\t}\n\n\t/**\n\t * Appends fields to the embed.\n\t *\n\t * @remarks\n\t * This method accepts either an array of fields or a variable number of field parameters.\n\t * The maximum amount of fields that can be added is 25.\n\t * @example\n\t * Using an array:\n\t * ```ts\n\t * const fields: APIEmbedField[] = ...;\n\t * const embed = new EmbedBuilder()\n\t * \t.addFields(fields);\n\t * ```\n\t * @example\n\t * Using rest parameters (variadic):\n\t * ```ts\n\t * const embed = new EmbedBuilder()\n\t * \t.addFields(\n\t * \t\t{ name: 'Field 1', value: 'Value 1' },\n\t * \t\t{ name: 'Field 2', value: 'Value 2' },\n\t * \t);\n\t * ```\n\t * @param fields - The fields to add\n\t */\n\tpublic addFields(...fields: RestOrArray): this {\n\t\tconst normalizedFields = normalizeArray(fields);\n\t\t// Ensure adding these fields won't exceed the 25 field limit\n\t\tvalidateFieldLength(normalizedFields.length, this.data.fields);\n\n\t\t// Data assertions\n\t\tembedFieldsArrayPredicate.parse(normalizedFields);\n\n\t\tif (this.data.fields) this.data.fields.push(...normalizedFields);\n\t\telse this.data.fields = normalizedFields;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Removes, replaces, or inserts fields for this embed.\n\t *\n\t * @remarks\n\t * This method behaves similarly\n\t * to {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice | Array.prototype.splice()}.\n\t * The maximum amount of fields that can be added is 25.\n\t *\n\t * It's useful for modifying and adjusting order of the already-existing fields of an embed.\n\t * @example\n\t * Remove the first field:\n\t * ```ts\n\t * embed.spliceFields(0, 1);\n\t * ```\n\t * @example\n\t * Remove the first n fields:\n\t * ```ts\n\t * const n = 4;\n\t * embed.spliceFields(0, n);\n\t * ```\n\t * @example\n\t * Remove the last field:\n\t * ```ts\n\t * embed.spliceFields(-1, 1);\n\t * ```\n\t * @param index - The index to start at\n\t * @param deleteCount - The number of fields to remove\n\t * @param fields - The replacing field objects\n\t */\n\tpublic spliceFields(index: number, deleteCount: number, ...fields: APIEmbedField[]): this {\n\t\t// Ensure adding these fields won't exceed the 25 field limit\n\t\tvalidateFieldLength(fields.length - deleteCount, this.data.fields);\n\n\t\t// Data assertions\n\t\tembedFieldsArrayPredicate.parse(fields);\n\t\tif (this.data.fields) this.data.fields.splice(index, deleteCount, ...fields);\n\t\telse this.data.fields = fields;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the fields for this embed.\n\t *\n\t * @remarks\n\t * This method is an alias for {@link EmbedBuilder.spliceFields}. More specifically,\n\t * it splices the entire array of fields, replacing them with the provided fields.\n\t *\n\t * You can set a maximum of 25 fields.\n\t * @param fields - The fields to set\n\t */\n\tpublic setFields(...fields: RestOrArray): this {\n\t\tthis.spliceFields(0, this.data.fields?.length ?? 0, ...normalizeArray(fields));\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the author of this embed.\n\t *\n\t * @param options - The options to use\n\t */\n\n\tpublic setAuthor(options: EmbedAuthorOptions | null): this {\n\t\tif (options === null) {\n\t\t\tthis.data.author = undefined;\n\t\t\treturn this;\n\t\t}\n\n\t\t// Data assertions\n\t\tembedAuthorPredicate.parse(options);\n\n\t\tthis.data.author = { name: options.name, url: options.url, icon_url: options.iconURL };\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the color of this embed.\n\t *\n\t * @param color - The color to use\n\t */\n\tpublic setColor(color: RGBTuple | number | null): this {\n\t\t// Data assertions\n\t\tcolorPredicate.parse(color);\n\n\t\tif (Array.isArray(color)) {\n\t\t\tconst [red, green, blue] = color;\n\t\t\tthis.data.color = (red << 16) + (green << 8) + blue;\n\t\t\treturn this;\n\t\t}\n\n\t\tthis.data.color = color ?? undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the description of this embed.\n\t *\n\t * @param description - The description to use\n\t */\n\tpublic setDescription(description: string | null): this {\n\t\t// Data assertions\n\t\tdescriptionPredicate.parse(description);\n\n\t\tthis.data.description = description ?? undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the footer of this embed.\n\t *\n\t * @param options - The footer to use\n\t */\n\tpublic setFooter(options: EmbedFooterOptions | null): this {\n\t\tif (options === null) {\n\t\t\tthis.data.footer = undefined;\n\t\t\treturn this;\n\t\t}\n\n\t\t// Data assertions\n\t\tembedFooterPredicate.parse(options);\n\n\t\tthis.data.footer = { text: options.text, icon_url: options.iconURL };\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the image of this embed.\n\t *\n\t * @param url - The image URL to use\n\t */\n\tpublic setImage(url: string | null): this {\n\t\t// Data assertions\n\t\timageURLPredicate.parse(url);\n\n\t\tthis.data.image = url ? { url } : undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the thumbnail of this embed.\n\t *\n\t * @param url - The thumbnail URL to use\n\t */\n\tpublic setThumbnail(url: string | null): this {\n\t\t// Data assertions\n\t\timageURLPredicate.parse(url);\n\n\t\tthis.data.thumbnail = url ? { url } : undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the timestamp of this embed.\n\t *\n\t * @param timestamp - The timestamp or date to use\n\t */\n\tpublic setTimestamp(timestamp: Date | number | null = Date.now()): this {\n\t\t// Data assertions\n\t\ttimestampPredicate.parse(timestamp);\n\n\t\tthis.data.timestamp = timestamp ? new Date(timestamp).toISOString() : undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the title for this embed.\n\t *\n\t * @param title - The title to use\n\t */\n\tpublic setTitle(title: string | null): this {\n\t\t// Data assertions\n\t\ttitlePredicate.parse(title);\n\n\t\tthis.data.title = title ?? undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the URL of this embed.\n\t *\n\t * @param url - The URL to use\n\t */\n\tpublic setURL(url: string | null): this {\n\t\t// Data assertions\n\t\turlPredicate.parse(url);\n\n\t\tthis.data.url = url ?? undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Serializes this builder to API-compatible JSON data.\n\t *\n\t * @remarks\n\t * This method runs validations on the data before serializing it.\n\t * As such, it may throw an error if the data is invalid.\n\t */\n\tpublic toJSON(): APIEmbed {\n\t\treturn { ...this.data };\n\t}\n}\n","export * as EmbedAssertions from './messages/embed/Assertions.js';\nexport * from './messages/embed/Embed.js';\n// TODO: Consider removing this dep in the next major version\nexport * from '@discordjs/formatters';\n\nexport * as ComponentAssertions from './components/Assertions.js';\nexport * from './components/ActionRow.js';\nexport * from './components/button/Button.js';\nexport * from './components/Component.js';\nexport * from './components/Components.js';\nexport * from './components/textInput/TextInput.js';\nexport * as TextInputAssertions from './components/textInput/Assertions.js';\nexport * from './interactions/modals/Modal.js';\nexport * as ModalAssertions from './interactions/modals/Assertions.js';\n\nexport * from './components/selectMenu/BaseSelectMenu.js';\nexport * from './components/selectMenu/ChannelSelectMenu.js';\nexport * from './components/selectMenu/MentionableSelectMenu.js';\nexport * from './components/selectMenu/RoleSelectMenu.js';\nexport * from './components/selectMenu/StringSelectMenu.js';\n// TODO: Remove those aliases in v2\nexport {\n\t/**\n\t * @deprecated Will be removed in the next major version, use {@link StringSelectMenuBuilder} instead.\n\t */\n\tStringSelectMenuBuilder as SelectMenuBuilder,\n} from './components/selectMenu/StringSelectMenu.js';\nexport {\n\t/**\n\t * @deprecated Will be removed in the next major version, use {@link StringSelectMenuOptionBuilder} instead.\n\t */\n\tStringSelectMenuOptionBuilder as SelectMenuOptionBuilder,\n} from './components/selectMenu/StringSelectMenuOption.js';\nexport * from './components/selectMenu/StringSelectMenuOption.js';\nexport * from './components/selectMenu/UserSelectMenu.js';\n\nexport * as ComponentsV2Assertions from './components/v2/Assertions.js';\nexport * from './components/v2/Container.js';\nexport * from './components/v2/File.js';\nexport * from './components/v2/MediaGallery.js';\nexport * from './components/v2/MediaGalleryItem.js';\nexport * from './components/v2/Section.js';\nexport * from './components/v2/Separator.js';\nexport * from './components/v2/TextDisplay.js';\nexport * from './components/v2/Thumbnail.js';\n\nexport * as SlashCommandAssertions from './interactions/slashCommands/Assertions.js';\nexport * from './interactions/slashCommands/SlashCommandBuilder.js';\nexport * from './interactions/slashCommands/SlashCommandSubcommands.js';\nexport * from './interactions/slashCommands/options/boolean.js';\nexport * from './interactions/slashCommands/options/channel.js';\nexport * from './interactions/slashCommands/options/integer.js';\nexport * from './interactions/slashCommands/options/mentionable.js';\nexport * from './interactions/slashCommands/options/number.js';\nexport * from './interactions/slashCommands/options/role.js';\nexport * from './interactions/slashCommands/options/attachment.js';\nexport * from './interactions/slashCommands/options/string.js';\nexport * from './interactions/slashCommands/options/user.js';\nexport * from './interactions/slashCommands/mixins/ApplicationCommandNumericOptionMinMaxValueMixin.js';\nexport * from './interactions/slashCommands/mixins/ApplicationCommandOptionBase.js';\nexport * from './interactions/slashCommands/mixins/ApplicationCommandOptionChannelTypesMixin.js';\nexport * from './interactions/slashCommands/mixins/ApplicationCommandOptionWithAutocompleteMixin.js';\nexport * from './interactions/slashCommands/mixins/ApplicationCommandOptionWithChoicesMixin.js';\nexport * from './interactions/slashCommands/mixins/NameAndDescription.js';\nexport * from './interactions/slashCommands/mixins/SharedSlashCommandOptions.js';\nexport * from './interactions/slashCommands/mixins/SharedSubcommands.js';\nexport * from './interactions/slashCommands/mixins/SharedSlashCommand.js';\n\nexport * as ContextMenuCommandAssertions from './interactions/contextMenuCommands/Assertions.js';\nexport * from './interactions/contextMenuCommands/ContextMenuCommandBuilder.js';\n\nexport * from './util/componentUtil.js';\nexport * from './util/normalizeArray.js';\nexport * from './util/validation.js';\n\n/**\n * The {@link https://github.com/discordjs/discord.js/blob/main/packages/builders#readme | @discordjs/builders} version\n * that you are currently using.\n *\n * @privateRemarks This needs to explicitly be `string` so it is not typed as a \"const string\" that gets injected by esbuild.\n */\nexport const version = '1.11.3' as string;\n","import { s } from '@sapphire/shapeshift';\nimport { ButtonStyle, ChannelType, type APIMessageComponentEmoji } from 'discord-api-types/v10';\nimport { isValidationEnabled } from '../util/validation.js';\nimport { StringSelectMenuOptionBuilder } from './selectMenu/StringSelectMenuOption.js';\n\nexport const idValidator = s\n\t.number()\n\t.safeInt()\n\t.greaterThanOrEqual(1)\n\t.lessThan(4_294_967_296) // 2^32 - 1\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const customIdValidator = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(100)\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const emojiValidator = s\n\t.object({\n\t\tid: s.string(),\n\t\tname: s.string(),\n\t\tanimated: s.boolean(),\n\t})\n\t.partial()\n\t.strict()\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const disabledValidator = s.boolean();\n\nexport const buttonLabelValidator = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(80)\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const buttonStyleValidator = s.nativeEnum(ButtonStyle);\n\nexport const placeholderValidator = s.string().lengthLessThanOrEqual(150).setValidationEnabled(isValidationEnabled);\nexport const minMaxValidator = s\n\t.number()\n\t.int()\n\t.greaterThanOrEqual(0)\n\t.lessThanOrEqual(25)\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const labelValueDescriptionValidator = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(100)\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const jsonOptionValidator = s\n\t.object({\n\t\tlabel: labelValueDescriptionValidator,\n\t\tvalue: labelValueDescriptionValidator,\n\t\tdescription: labelValueDescriptionValidator.optional(),\n\t\temoji: emojiValidator.optional(),\n\t\tdefault: s.boolean().optional(),\n\t})\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const optionValidator = s.instance(StringSelectMenuOptionBuilder).setValidationEnabled(isValidationEnabled);\n\nexport const optionsValidator = optionValidator\n\t.array()\n\t.lengthGreaterThanOrEqual(0)\n\t.setValidationEnabled(isValidationEnabled);\nexport const optionsLengthValidator = s\n\t.number()\n\t.int()\n\t.greaterThanOrEqual(0)\n\t.lessThanOrEqual(25)\n\t.setValidationEnabled(isValidationEnabled);\n\nexport function validateRequiredSelectMenuParameters(options: StringSelectMenuOptionBuilder[], customId?: string) {\n\tcustomIdValidator.parse(customId);\n\toptionsValidator.parse(options);\n}\n\nexport const defaultValidator = s.boolean();\n\nexport function validateRequiredSelectMenuOptionParameters(label?: string, value?: string) {\n\tlabelValueDescriptionValidator.parse(label);\n\tlabelValueDescriptionValidator.parse(value);\n}\n\nexport const channelTypesValidator = s.nativeEnum(ChannelType).array().setValidationEnabled(isValidationEnabled);\n\nexport const urlValidator = s\n\t.string()\n\t.url({\n\t\tallowedProtocols: ['http:', 'https:', 'discord:'],\n\t})\n\t.setValidationEnabled(isValidationEnabled);\n\nexport function validateRequiredButtonParameters(\n\tstyle?: ButtonStyle,\n\tlabel?: string,\n\temoji?: APIMessageComponentEmoji,\n\tcustomId?: string,\n\tskuId?: string,\n\turl?: string,\n) {\n\tif (style === ButtonStyle.Premium) {\n\t\tif (!skuId) {\n\t\t\tthrow new RangeError('Premium buttons must have an SKU id.');\n\t\t}\n\n\t\tif (customId || label || url || emoji) {\n\t\t\tthrow new RangeError('Premium buttons cannot have a custom id, label, URL, or emoji.');\n\t\t}\n\t} else {\n\t\tif (skuId) {\n\t\t\tthrow new RangeError('Non-premium buttons must not have an SKU id.');\n\t\t}\n\n\t\tif (url && customId) {\n\t\t\tthrow new RangeError('URL and custom id are mutually exclusive.');\n\t\t}\n\n\t\tif (!label && !emoji) {\n\t\t\tthrow new RangeError('Non-premium buttons must have a label and/or an emoji.');\n\t\t}\n\n\t\tif (style === ButtonStyle.Link) {\n\t\t\tif (!url) {\n\t\t\t\tthrow new RangeError('Link buttons must have a URL.');\n\t\t\t}\n\t\t} else if (url) {\n\t\t\tthrow new RangeError('Non-premium and non-link buttons cannot have a URL.');\n\t\t}\n\t}\n}\n","import type { JSONEncodable } from '@discordjs/util';\nimport type { APIMessageComponentEmoji, APISelectMenuOption } from 'discord-api-types/v10';\nimport {\n\tdefaultValidator,\n\temojiValidator,\n\tlabelValueDescriptionValidator,\n\tvalidateRequiredSelectMenuOptionParameters,\n} from '../Assertions.js';\n\n/**\n * A builder that creates API-compatible JSON data for string select menu options.\n */\nexport class StringSelectMenuOptionBuilder implements JSONEncodable {\n\t/**\n\t * Creates a new string select menu option from API data.\n\t *\n\t * @param data - The API data to create this string select menu option with\n\t * @example\n\t * Creating a string select menu option from an API data object:\n\t * ```ts\n\t * const selectMenuOption = new SelectMenuOptionBuilder({\n\t * \tlabel: 'catchy label',\n\t * \tvalue: '1',\n\t * });\n\t * ```\n\t * @example\n\t * Creating a string select menu option using setters and API data:\n\t * ```ts\n\t * const selectMenuOption = new SelectMenuOptionBuilder({\n\t * \tdefault: true,\n\t * \tvalue: '1',\n\t * })\n\t * \t.setLabel('woah');\n\t * ```\n\t */\n\tpublic constructor(public data: Partial = {}) {}\n\n\t/**\n\t * Sets the label for this option.\n\t *\n\t * @param label - The label to use\n\t */\n\tpublic setLabel(label: string) {\n\t\tthis.data.label = labelValueDescriptionValidator.parse(label);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the value for this option.\n\t *\n\t * @param value - The value to use\n\t */\n\tpublic setValue(value: string) {\n\t\tthis.data.value = labelValueDescriptionValidator.parse(value);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the description for this option.\n\t *\n\t * @param description - The description to use\n\t */\n\tpublic setDescription(description: string) {\n\t\tthis.data.description = labelValueDescriptionValidator.parse(description);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets whether this option is selected by default.\n\t *\n\t * @param isDefault - Whether this option is selected by default\n\t */\n\tpublic setDefault(isDefault = true) {\n\t\tthis.data.default = defaultValidator.parse(isDefault);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the emoji to display for this option.\n\t *\n\t * @param emoji - The emoji to use\n\t */\n\tpublic setEmoji(emoji: APIMessageComponentEmoji) {\n\t\tthis.data.emoji = emojiValidator.parse(emoji);\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc BaseSelectMenuBuilder.toJSON}\n\t */\n\tpublic toJSON(): APISelectMenuOption {\n\t\tvalidateRequiredSelectMenuOptionParameters(this.data.label, this.data.value);\n\n\t\treturn {\n\t\t\t...this.data,\n\t\t} as APISelectMenuOption;\n\t}\n}\n","/* eslint-disable jsdoc/check-param-names */\n\nimport {\n\ttype APIActionRowComponent,\n\tComponentType,\n\ttype APIComponentInMessageActionRow,\n\ttype APIComponentInModalActionRow,\n\ttype APIComponentInActionRow,\n} from 'discord-api-types/v10';\nimport { normalizeArray, type RestOrArray } from '../util/normalizeArray.js';\nimport { ComponentBuilder } from './Component.js';\nimport { createComponentBuilder } from './Components.js';\nimport type { ButtonBuilder } from './button/Button.js';\nimport type { ChannelSelectMenuBuilder } from './selectMenu/ChannelSelectMenu.js';\nimport type { MentionableSelectMenuBuilder } from './selectMenu/MentionableSelectMenu.js';\nimport type { RoleSelectMenuBuilder } from './selectMenu/RoleSelectMenu.js';\nimport type { StringSelectMenuBuilder } from './selectMenu/StringSelectMenu.js';\nimport type { UserSelectMenuBuilder } from './selectMenu/UserSelectMenu.js';\nimport type { TextInputBuilder } from './textInput/TextInput.js';\n\n/**\n * The builders that may be used for modals.\n */\nexport type ModalComponentBuilder = ActionRowBuilder | ModalActionRowComponentBuilder;\n\n/**\n * The builders that may be used within an action row for messages.\n */\nexport type MessageActionRowComponentBuilder =\n\t| ButtonBuilder\n\t| ChannelSelectMenuBuilder\n\t| MentionableSelectMenuBuilder\n\t| RoleSelectMenuBuilder\n\t| StringSelectMenuBuilder\n\t| UserSelectMenuBuilder;\n\n/**\n * The builders that may be used within an action row for modals.\n */\nexport type ModalActionRowComponentBuilder = TextInputBuilder;\n\n/**\n * Any builder.\n */\nexport type AnyComponentBuilder = MessageActionRowComponentBuilder | ModalActionRowComponentBuilder;\n\n/**\n * A builder that creates API-compatible JSON data for action rows.\n *\n * @typeParam ComponentType - The types of components this action row holds\n */\nexport class ActionRowBuilder extends ComponentBuilder<\n\tAPIActionRowComponent\n> {\n\t/**\n\t * The components within this action row.\n\t */\n\tpublic readonly components: ComponentType[];\n\n\t/**\n\t * Creates a new action row from API data.\n\t *\n\t * @param data - The API data to create this action row with\n\t * @example\n\t * Creating an action row from an API data object:\n\t * ```ts\n\t * const actionRow = new ActionRowBuilder({\n\t * \tcomponents: [\n\t * \t\t{\n\t * \t\t\tcustom_id: \"custom id\",\n\t * \t\t\tlabel: \"Type something\",\n\t * \t\t\tstyle: TextInputStyle.Short,\n\t * \t\t\ttype: ComponentType.TextInput,\n\t * \t\t},\n\t * \t],\n\t * });\n\t * ```\n\t * @example\n\t * Creating an action row using setters and API data:\n\t * ```ts\n\t * const actionRow = new ActionRowBuilder({\n\t * \tcomponents: [\n\t * \t\t{\n\t * \t\t\tcustom_id: \"custom id\",\n\t * \t\t\tlabel: \"Click me\",\n\t * \t\t\tstyle: ButtonStyle.Primary,\n\t * \t\t\ttype: ComponentType.Button,\n\t * \t\t},\n\t * \t],\n\t * })\n\t * \t.addComponents(button2, button3);\n\t * ```\n\t */\n\tpublic constructor({ components, ...data }: Partial> = {}) {\n\t\tsuper({ type: ComponentType.ActionRow, ...data });\n\t\tthis.components = (components?.map((component) => createComponentBuilder(component)) ?? []) as ComponentType[];\n\t}\n\n\t/**\n\t * Adds components to this action row.\n\t *\n\t * @param components - The components to add\n\t */\n\tpublic addComponents(...components: RestOrArray) {\n\t\tthis.components.push(...normalizeArray(components));\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets components for this action row.\n\t *\n\t * @param components - The components to set\n\t */\n\tpublic setComponents(...components: RestOrArray) {\n\t\tthis.components.splice(0, this.components.length, ...normalizeArray(components));\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic toJSON(): APIActionRowComponent> {\n\t\treturn {\n\t\t\t...this.data,\n\t\t\tcomponents: this.components.map((component) => component.toJSON()),\n\t\t} as APIActionRowComponent>;\n\t}\n}\n","import type { JSONEncodable } from '@discordjs/util';\nimport type {\n\tAPIActionRowComponent,\n\tAPIComponentInActionRow,\n\tAPIBaseComponent,\n\tComponentType,\n\tAPIMessageComponent,\n} from 'discord-api-types/v10';\nimport { idValidator } from './Assertions';\n\n/**\n * Any action row component data represented as an object.\n */\nexport type AnyAPIActionRowComponent =\n\t| APIActionRowComponent\n\t| APIComponentInActionRow\n\t| APIMessageComponent;\n\n/**\n * The base component builder that contains common symbols for all sorts of components.\n *\n * @typeParam DataType - The type of internal API data that is stored within the component\n */\nexport abstract class ComponentBuilder<\n\tDataType extends Partial> = APIBaseComponent,\n> implements JSONEncodable\n{\n\t/**\n\t * The API data associated with this component.\n\t */\n\tpublic readonly data: Partial;\n\n\t/**\n\t * Serializes this builder to API-compatible JSON data.\n\t *\n\t * @remarks\n\t * This method runs validations on the data before serializing it.\n\t * As such, it may throw an error if the data is invalid.\n\t */\n\tpublic abstract toJSON(): AnyAPIActionRowComponent;\n\n\t/**\n\t * Constructs a new kind of component.\n\t *\n\t * @param data - The data to construct a component out of\n\t */\n\tpublic constructor(data: Partial) {\n\t\tthis.data = data;\n\t}\n\n\t/**\n\t * Sets the id (not the custom id) for this component.\n\t *\n\t * @param id - The id for this component\n\t */\n\tpublic setId(id: number) {\n\t\tthis.data.id = idValidator.parse(id);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Clears the id of this component, defaulting to a default incremented id.\n\t */\n\tpublic clearId() {\n\t\tthis.data.id = undefined;\n\t\treturn this;\n\t}\n}\n","import type { JSONEncodable } from '@discordjs/util';\nimport { ComponentType, type APIMessageComponent, type APIModalComponent } from 'discord-api-types/v10';\nimport {\n\tActionRowBuilder,\n\ttype MessageActionRowComponentBuilder,\n\ttype AnyComponentBuilder,\n\ttype ModalComponentBuilder,\n} from './ActionRow.js';\nimport { ComponentBuilder } from './Component.js';\nimport { ButtonBuilder } from './button/Button.js';\nimport { ChannelSelectMenuBuilder } from './selectMenu/ChannelSelectMenu.js';\nimport { MentionableSelectMenuBuilder } from './selectMenu/MentionableSelectMenu.js';\nimport { RoleSelectMenuBuilder } from './selectMenu/RoleSelectMenu.js';\nimport { StringSelectMenuBuilder } from './selectMenu/StringSelectMenu.js';\nimport { UserSelectMenuBuilder } from './selectMenu/UserSelectMenu.js';\nimport { TextInputBuilder } from './textInput/TextInput.js';\nimport { ContainerBuilder } from './v2/Container.js';\nimport { FileBuilder } from './v2/File.js';\nimport { MediaGalleryBuilder } from './v2/MediaGallery.js';\nimport { SectionBuilder } from './v2/Section.js';\nimport { SeparatorBuilder } from './v2/Separator.js';\nimport { TextDisplayBuilder } from './v2/TextDisplay.js';\nimport { ThumbnailBuilder } from './v2/Thumbnail.js';\n\n/**\n * The builders that may be used for messages.\n */\nexport type MessageComponentBuilder =\n\t| ActionRowBuilder\n\t| ContainerBuilder\n\t| FileBuilder\n\t| MediaGalleryBuilder\n\t| MessageActionRowComponentBuilder\n\t| SectionBuilder\n\t| SeparatorBuilder\n\t| TextDisplayBuilder\n\t| ThumbnailBuilder;\n\n/**\n * Components here are mapped to their respective builder.\n */\nexport interface MappedComponentTypes {\n\t/**\n\t * The action row component type is associated with an {@link ActionRowBuilder}.\n\t */\n\t[ComponentType.ActionRow]: ActionRowBuilder;\n\t/**\n\t * The button component type is associated with a {@link ButtonBuilder}.\n\t */\n\t[ComponentType.Button]: ButtonBuilder;\n\t/**\n\t * The string select component type is associated with a {@link StringSelectMenuBuilder}.\n\t */\n\t[ComponentType.StringSelect]: StringSelectMenuBuilder;\n\t/**\n\t * The text input component type is associated with a {@link TextInputBuilder}.\n\t */\n\t[ComponentType.TextInput]: TextInputBuilder;\n\t/**\n\t * The user select component type is associated with a {@link UserSelectMenuBuilder}.\n\t */\n\t[ComponentType.UserSelect]: UserSelectMenuBuilder;\n\t/**\n\t * The role select component type is associated with a {@link RoleSelectMenuBuilder}.\n\t */\n\t[ComponentType.RoleSelect]: RoleSelectMenuBuilder;\n\t/**\n\t * The mentionable select component type is associated with a {@link MentionableSelectMenuBuilder}.\n\t */\n\t[ComponentType.MentionableSelect]: MentionableSelectMenuBuilder;\n\t/**\n\t * The channel select component type is associated with a {@link ChannelSelectMenuBuilder}.\n\t */\n\t[ComponentType.ChannelSelect]: ChannelSelectMenuBuilder;\n\t/**\n\t * The file component type is associated with a {@link FileBuilder}.\n\t */\n\t[ComponentType.File]: FileBuilder;\n\t/**\n\t * The separator component type is associated with a {@link SeparatorBuilder}.\n\t */\n\t[ComponentType.Separator]: SeparatorBuilder;\n\t/**\n\t * The container component type is associated with a {@link ContainerBuilder}.\n\t */\n\t[ComponentType.Container]: ContainerBuilder;\n\t/**\n\t * The text display component type is associated with a {@link TextDisplayBuilder}.\n\t */\n\t[ComponentType.TextDisplay]: TextDisplayBuilder;\n\t/**\n\t * The thumbnail component type is associated with a {@link ThumbnailBuilder}.\n\t */\n\t[ComponentType.Thumbnail]: ThumbnailBuilder;\n\t/**\n\t * The section component type is associated with a {@link SectionBuilder}.\n\t */\n\t[ComponentType.Section]: SectionBuilder;\n\t/**\n\t * The media gallery component type is associated with a {@link MediaGalleryBuilder}.\n\t */\n\t[ComponentType.MediaGallery]: MediaGalleryBuilder;\n}\n\n/**\n * Factory for creating components from API data.\n *\n * @typeParam ComponentType - The type of component to use\n * @param data - The API data to transform to a component class\n */\nexport function createComponentBuilder(\n\t// eslint-disable-next-line @typescript-eslint/sort-type-constituents\n\tdata: (APIModalComponent | APIMessageComponent) & { type: ComponentType },\n): MappedComponentTypes[ComponentType];\n\n/**\n * Factory for creating components from API data.\n *\n * @typeParam ComponentBuilder - The type of component to use\n * @param data - The API data to transform to a component class\n */\nexport function createComponentBuilder(\n\tdata: ComponentBuilder,\n): ComponentBuilder;\n\nexport function createComponentBuilder(\n\tdata: APIMessageComponent | APIModalComponent | MessageComponentBuilder,\n): ComponentBuilder {\n\tif (data instanceof ComponentBuilder) {\n\t\treturn data;\n\t}\n\n\tswitch (data.type) {\n\t\tcase ComponentType.ActionRow:\n\t\t\treturn new ActionRowBuilder(data);\n\t\tcase ComponentType.Button:\n\t\t\treturn new ButtonBuilder(data);\n\t\tcase ComponentType.StringSelect:\n\t\t\treturn new StringSelectMenuBuilder(data);\n\t\tcase ComponentType.TextInput:\n\t\t\treturn new TextInputBuilder(data);\n\t\tcase ComponentType.UserSelect:\n\t\t\treturn new UserSelectMenuBuilder(data);\n\t\tcase ComponentType.RoleSelect:\n\t\t\treturn new RoleSelectMenuBuilder(data);\n\t\tcase ComponentType.MentionableSelect:\n\t\t\treturn new MentionableSelectMenuBuilder(data);\n\t\tcase ComponentType.ChannelSelect:\n\t\t\treturn new ChannelSelectMenuBuilder(data);\n\t\tcase ComponentType.File:\n\t\t\treturn new FileBuilder(data);\n\t\tcase ComponentType.Container:\n\t\t\treturn new ContainerBuilder(data);\n\t\tcase ComponentType.Section:\n\t\t\treturn new SectionBuilder(data);\n\t\tcase ComponentType.Separator:\n\t\t\treturn new SeparatorBuilder(data);\n\t\tcase ComponentType.TextDisplay:\n\t\t\treturn new TextDisplayBuilder(data);\n\t\tcase ComponentType.Thumbnail:\n\t\t\treturn new ThumbnailBuilder(data);\n\t\tcase ComponentType.MediaGallery:\n\t\t\treturn new MediaGalleryBuilder(data);\n\t\tdefault:\n\t\t\t// @ts-expect-error This case can still occur if we get a newer unsupported component type\n\t\t\tthrow new Error(`Cannot properly serialize component type: ${data.type}`);\n\t}\n}\n\nfunction isBuilder>(\n\tbuilder: unknown,\n\tConstructor: new () => Builder,\n): builder is Builder {\n\treturn builder instanceof Constructor;\n}\n\nexport function resolveBuilder, Builder extends JSONEncodable>(\n\tbuilder: Builder | ComponentType | ((builder: Builder) => Builder),\n\tConstructor: new (data?: ComponentType) => Builder,\n) {\n\tif (isBuilder(builder, Constructor)) {\n\t\treturn builder;\n\t}\n\n\tif (typeof builder === 'function') {\n\t\treturn builder(new Constructor());\n\t}\n\n\treturn new Constructor(builder);\n}\n","import {\n\tComponentType,\n\ttype APIButtonComponent,\n\ttype APIButtonComponentWithCustomId,\n\ttype APIButtonComponentWithSKUId,\n\ttype APIButtonComponentWithURL,\n\ttype APIMessageComponentEmoji,\n\ttype ButtonStyle,\n\ttype Snowflake,\n} from 'discord-api-types/v10';\nimport {\n\tbuttonLabelValidator,\n\tbuttonStyleValidator,\n\tcustomIdValidator,\n\tdisabledValidator,\n\temojiValidator,\n\turlValidator,\n\tvalidateRequiredButtonParameters,\n} from '../Assertions.js';\nimport { ComponentBuilder } from '../Component.js';\n\n/**\n * A builder that creates API-compatible JSON data for buttons.\n */\nexport class ButtonBuilder extends ComponentBuilder {\n\t/**\n\t * Creates a new button from API data.\n\t *\n\t * @param data - The API data to create this button with\n\t * @example\n\t * Creating a button from an API data object:\n\t * ```ts\n\t * const button = new ButtonBuilder({\n\t * \tcustom_id: 'a cool button',\n\t * \tstyle: ButtonStyle.Primary,\n\t * \tlabel: 'Click Me',\n\t * \temoji: {\n\t * \t\tname: 'smile',\n\t * \t\tid: '123456789012345678',\n\t * \t},\n\t * });\n\t * ```\n\t * @example\n\t * Creating a button using setters and API data:\n\t * ```ts\n\t * const button = new ButtonBuilder({\n\t * \tstyle: ButtonStyle.Secondary,\n\t * \tlabel: 'Click Me',\n\t * })\n\t * \t.setEmoji({ name: '🙂' })\n\t * \t.setCustomId('another cool button');\n\t * ```\n\t */\n\tpublic constructor(data?: Partial) {\n\t\tsuper({ type: ComponentType.Button, ...data });\n\t}\n\n\t/**\n\t * Sets the style of this button.\n\t *\n\t * @param style - The style to use\n\t */\n\tpublic setStyle(style: ButtonStyle) {\n\t\tthis.data.style = buttonStyleValidator.parse(style);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the URL for this button.\n\t *\n\t * @remarks\n\t * This method is only available to buttons using the `Link` button style.\n\t * Only three types of URL schemes are currently supported: `https://`, `http://`, and `discord://`.\n\t * @param url - The URL to use\n\t */\n\tpublic setURL(url: string) {\n\t\t(this.data as APIButtonComponentWithURL).url = urlValidator.parse(url);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the custom id for this button.\n\t *\n\t * @remarks\n\t * This method is only applicable to buttons that are not using the `Link` button style.\n\t * @param customId - The custom id to use\n\t */\n\tpublic setCustomId(customId: string) {\n\t\t(this.data as APIButtonComponentWithCustomId).custom_id = customIdValidator.parse(customId);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the SKU id that represents a purchasable SKU for this button.\n\t *\n\t * @remarks Only available when using premium-style buttons.\n\t * @param skuId - The SKU id to use\n\t */\n\tpublic setSKUId(skuId: Snowflake) {\n\t\t(this.data as APIButtonComponentWithSKUId).sku_id = skuId;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the emoji to display on this button.\n\t *\n\t * @param emoji - The emoji to use\n\t */\n\tpublic setEmoji(emoji: APIMessageComponentEmoji) {\n\t\t(this.data as Exclude).emoji = emojiValidator.parse(emoji);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets whether this button is disabled.\n\t *\n\t * @param disabled - Whether to disable this button\n\t */\n\tpublic setDisabled(disabled = true) {\n\t\tthis.data.disabled = disabledValidator.parse(disabled);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the label for this button.\n\t *\n\t * @param label - The label to use\n\t */\n\tpublic setLabel(label: string) {\n\t\t(this.data as Exclude).label = buttonLabelValidator.parse(label);\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic toJSON(): APIButtonComponent {\n\t\tvalidateRequiredButtonParameters(\n\t\t\tthis.data.style,\n\t\t\t(this.data as Exclude).label,\n\t\t\t(this.data as Exclude).emoji,\n\t\t\t(this.data as APIButtonComponentWithCustomId).custom_id,\n\t\t\t(this.data as APIButtonComponentWithSKUId).sku_id,\n\t\t\t(this.data as APIButtonComponentWithURL).url,\n\t\t);\n\n\t\treturn {\n\t\t\t...this.data,\n\t\t} as APIButtonComponent;\n\t}\n}\n","import {\n\ttype APIChannelSelectComponent,\n\ttype ChannelType,\n\ttype Snowflake,\n\tComponentType,\n\tSelectMenuDefaultValueType,\n} from 'discord-api-types/v10';\nimport { type RestOrArray, normalizeArray } from '../../util/normalizeArray.js';\nimport { channelTypesValidator, customIdValidator, optionsLengthValidator } from '../Assertions.js';\nimport { BaseSelectMenuBuilder } from './BaseSelectMenu.js';\n\n/**\n * A builder that creates API-compatible JSON data for channel select menus.\n */\nexport class ChannelSelectMenuBuilder extends BaseSelectMenuBuilder {\n\t/**\n\t * Creates a new select menu from API data.\n\t *\n\t * @param data - The API data to create this select menu with\n\t * @example\n\t * Creating a select menu from an API data object:\n\t * ```ts\n\t * const selectMenu = new ChannelSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * \tplaceholder: 'select an option',\n\t * \tmax_values: 2,\n\t * });\n\t * ```\n\t * @example\n\t * Creating a select menu using setters and API data:\n\t * ```ts\n\t * const selectMenu = new ChannelSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * })\n\t * \t.addChannelTypes(ChannelType.GuildText, ChannelType.GuildAnnouncement)\n\t * \t.setMinValues(2);\n\t * ```\n\t */\n\tpublic constructor(data?: Partial) {\n\t\tsuper({ ...data, type: ComponentType.ChannelSelect });\n\t}\n\n\t/**\n\t * Adds channel types to this select menu.\n\t *\n\t * @param types - The channel types to use\n\t */\n\tpublic addChannelTypes(...types: RestOrArray) {\n\t\tconst normalizedTypes = normalizeArray(types);\n\t\tthis.data.channel_types ??= [];\n\t\tthis.data.channel_types.push(...channelTypesValidator.parse(normalizedTypes));\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets channel types for this select menu.\n\t *\n\t * @param types - The channel types to use\n\t */\n\tpublic setChannelTypes(...types: RestOrArray) {\n\t\tconst normalizedTypes = normalizeArray(types);\n\t\tthis.data.channel_types ??= [];\n\t\tthis.data.channel_types.splice(0, this.data.channel_types.length, ...channelTypesValidator.parse(normalizedTypes));\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds default channels to this auto populated select menu.\n\t *\n\t * @param channels - The channels to add\n\t */\n\tpublic addDefaultChannels(...channels: RestOrArray) {\n\t\tconst normalizedValues = normalizeArray(channels);\n\t\toptionsLengthValidator.parse((this.data.default_values?.length ?? 0) + normalizedValues.length);\n\t\tthis.data.default_values ??= [];\n\n\t\tthis.data.default_values.push(\n\t\t\t...normalizedValues.map((id) => ({\n\t\t\t\tid,\n\t\t\t\ttype: SelectMenuDefaultValueType.Channel as const,\n\t\t\t})),\n\t\t);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets default channels for this auto populated select menu.\n\t *\n\t * @param channels - The channels to set\n\t */\n\tpublic setDefaultChannels(...channels: RestOrArray) {\n\t\tconst normalizedValues = normalizeArray(channels);\n\t\toptionsLengthValidator.parse(normalizedValues.length);\n\n\t\tthis.data.default_values = normalizedValues.map((id) => ({\n\t\t\tid,\n\t\t\ttype: SelectMenuDefaultValueType.Channel as const,\n\t\t}));\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc BaseSelectMenuBuilder.toJSON}\n\t */\n\tpublic override toJSON(): APIChannelSelectComponent {\n\t\tcustomIdValidator.parse(this.data.custom_id);\n\n\t\treturn {\n\t\t\t...this.data,\n\t\t} as APIChannelSelectComponent;\n\t}\n}\n","import type { APISelectMenuComponent } from 'discord-api-types/v10';\nimport { customIdValidator, disabledValidator, minMaxValidator, placeholderValidator } from '../Assertions.js';\nimport { ComponentBuilder } from '../Component.js';\n\n/**\n * The base select menu builder that contains common symbols for select menu builders.\n *\n * @typeParam SelectMenuType - The type of select menu this would be instantiated for.\n */\nexport abstract class BaseSelectMenuBuilder<\n\tSelectMenuType extends APISelectMenuComponent,\n> extends ComponentBuilder {\n\t/**\n\t * Sets the placeholder for this select menu.\n\t *\n\t * @param placeholder - The placeholder to use\n\t */\n\tpublic setPlaceholder(placeholder: string) {\n\t\tthis.data.placeholder = placeholderValidator.parse(placeholder);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the minimum values that must be selected in the select menu.\n\t *\n\t * @param minValues - The minimum values that must be selected\n\t */\n\tpublic setMinValues(minValues: number) {\n\t\tthis.data.min_values = minMaxValidator.parse(minValues);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the maximum values that must be selected in the select menu.\n\t *\n\t * @param maxValues - The maximum values that must be selected\n\t */\n\tpublic setMaxValues(maxValues: number) {\n\t\tthis.data.max_values = minMaxValidator.parse(maxValues);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the custom id for this select menu.\n\t *\n\t * @param customId - The custom id to use\n\t */\n\tpublic setCustomId(customId: string) {\n\t\tthis.data.custom_id = customIdValidator.parse(customId);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets whether this select menu is disabled.\n\t *\n\t * @param disabled - Whether this select menu is disabled\n\t */\n\tpublic setDisabled(disabled = true) {\n\t\tthis.data.disabled = disabledValidator.parse(disabled);\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic toJSON(): SelectMenuType {\n\t\tcustomIdValidator.parse(this.data.custom_id);\n\t\treturn {\n\t\t\t...this.data,\n\t\t} as SelectMenuType;\n\t}\n}\n","import {\n\ttype APIMentionableSelectComponent,\n\ttype APISelectMenuDefaultValue,\n\ttype Snowflake,\n\tComponentType,\n\tSelectMenuDefaultValueType,\n} from 'discord-api-types/v10';\nimport { type RestOrArray, normalizeArray } from '../../util/normalizeArray.js';\nimport { optionsLengthValidator } from '../Assertions.js';\nimport { BaseSelectMenuBuilder } from './BaseSelectMenu.js';\n\n/**\n * A builder that creates API-compatible JSON data for mentionable select menus.\n */\nexport class MentionableSelectMenuBuilder extends BaseSelectMenuBuilder {\n\t/**\n\t * Creates a new select menu from API data.\n\t *\n\t * @param data - The API data to create this select menu with\n\t * @example\n\t * Creating a select menu from an API data object:\n\t * ```ts\n\t * const selectMenu = new MentionableSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * \tplaceholder: 'select an option',\n\t * \tmax_values: 2,\n\t * });\n\t * ```\n\t * @example\n\t * Creating a select menu using setters and API data:\n\t * ```ts\n\t * const selectMenu = new MentionableSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * })\n\t * \t.setMinValues(1);\n\t * ```\n\t */\n\tpublic constructor(data?: Partial) {\n\t\tsuper({ ...data, type: ComponentType.MentionableSelect });\n\t}\n\n\t/**\n\t * Adds default roles to this auto populated select menu.\n\t *\n\t * @param roles - The roles to add\n\t */\n\tpublic addDefaultRoles(...roles: RestOrArray) {\n\t\tconst normalizedValues = normalizeArray(roles);\n\t\toptionsLengthValidator.parse((this.data.default_values?.length ?? 0) + normalizedValues.length);\n\t\tthis.data.default_values ??= [];\n\n\t\tthis.data.default_values.push(\n\t\t\t...normalizedValues.map((id) => ({\n\t\t\t\tid,\n\t\t\t\ttype: SelectMenuDefaultValueType.Role as const,\n\t\t\t})),\n\t\t);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds default users to this auto populated select menu.\n\t *\n\t * @param users - The users to add\n\t */\n\tpublic addDefaultUsers(...users: RestOrArray) {\n\t\tconst normalizedValues = normalizeArray(users);\n\t\toptionsLengthValidator.parse((this.data.default_values?.length ?? 0) + normalizedValues.length);\n\t\tthis.data.default_values ??= [];\n\n\t\tthis.data.default_values.push(\n\t\t\t...normalizedValues.map((id) => ({\n\t\t\t\tid,\n\t\t\t\ttype: SelectMenuDefaultValueType.User as const,\n\t\t\t})),\n\t\t);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds default values to this auto populated select menu.\n\t *\n\t * @param values - The values to add\n\t */\n\tpublic addDefaultValues(\n\t\t...values: RestOrArray<\n\t\t\t| APISelectMenuDefaultValue\n\t\t\t| APISelectMenuDefaultValue\n\t\t>\n\t) {\n\t\tconst normalizedValues = normalizeArray(values);\n\t\toptionsLengthValidator.parse((this.data.default_values?.length ?? 0) + normalizedValues.length);\n\t\tthis.data.default_values ??= [];\n\t\tthis.data.default_values.push(...normalizedValues);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets default values for this auto populated select menu.\n\t *\n\t * @param values - The values to set\n\t */\n\tpublic setDefaultValues(\n\t\t...values: RestOrArray<\n\t\t\t| APISelectMenuDefaultValue\n\t\t\t| APISelectMenuDefaultValue\n\t\t>\n\t) {\n\t\tconst normalizedValues = normalizeArray(values);\n\t\toptionsLengthValidator.parse(normalizedValues.length);\n\t\tthis.data.default_values = normalizedValues;\n\t\treturn this;\n\t}\n}\n","import {\n\ttype APIRoleSelectComponent,\n\ttype Snowflake,\n\tComponentType,\n\tSelectMenuDefaultValueType,\n} from 'discord-api-types/v10';\nimport { type RestOrArray, normalizeArray } from '../../util/normalizeArray.js';\nimport { optionsLengthValidator } from '../Assertions.js';\nimport { BaseSelectMenuBuilder } from './BaseSelectMenu.js';\n\n/**\n * A builder that creates API-compatible JSON data for role select menus.\n */\nexport class RoleSelectMenuBuilder extends BaseSelectMenuBuilder {\n\t/**\n\t * Creates a new select menu from API data.\n\t *\n\t * @param data - The API data to create this select menu with\n\t * @example\n\t * Creating a select menu from an API data object:\n\t * ```ts\n\t * const selectMenu = new RoleSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * \tplaceholder: 'select an option',\n\t * \tmax_values: 2,\n\t * });\n\t * ```\n\t * @example\n\t * Creating a select menu using setters and API data:\n\t * ```ts\n\t * const selectMenu = new RoleSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * })\n\t * \t.setMinValues(1);\n\t * ```\n\t */\n\tpublic constructor(data?: Partial) {\n\t\tsuper({ ...data, type: ComponentType.RoleSelect });\n\t}\n\n\t/**\n\t * Adds default roles to this auto populated select menu.\n\t *\n\t * @param roles - The roles to add\n\t */\n\tpublic addDefaultRoles(...roles: RestOrArray) {\n\t\tconst normalizedValues = normalizeArray(roles);\n\t\toptionsLengthValidator.parse((this.data.default_values?.length ?? 0) + normalizedValues.length);\n\t\tthis.data.default_values ??= [];\n\n\t\tthis.data.default_values.push(\n\t\t\t...normalizedValues.map((id) => ({\n\t\t\t\tid,\n\t\t\t\ttype: SelectMenuDefaultValueType.Role as const,\n\t\t\t})),\n\t\t);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets default roles for this auto populated select menu.\n\t *\n\t * @param roles - The roles to set\n\t */\n\tpublic setDefaultRoles(...roles: RestOrArray) {\n\t\tconst normalizedValues = normalizeArray(roles);\n\t\toptionsLengthValidator.parse(normalizedValues.length);\n\n\t\tthis.data.default_values = normalizedValues.map((id) => ({\n\t\t\tid,\n\t\t\ttype: SelectMenuDefaultValueType.Role as const,\n\t\t}));\n\n\t\treturn this;\n\t}\n}\n","import { ComponentType } from 'discord-api-types/v10';\nimport type { APIStringSelectComponent, APISelectMenuOption } from 'discord-api-types/v10';\nimport { normalizeArray, type RestOrArray } from '../../util/normalizeArray.js';\nimport { jsonOptionValidator, optionsLengthValidator, validateRequiredSelectMenuParameters } from '../Assertions.js';\nimport { BaseSelectMenuBuilder } from './BaseSelectMenu.js';\nimport { StringSelectMenuOptionBuilder } from './StringSelectMenuOption.js';\n\n/**\n * A builder that creates API-compatible JSON data for string select menus.\n */\nexport class StringSelectMenuBuilder extends BaseSelectMenuBuilder {\n\t/**\n\t * The options within this select menu.\n\t */\n\tpublic readonly options: StringSelectMenuOptionBuilder[];\n\n\t/**\n\t * Creates a new select menu from API data.\n\t *\n\t * @param data - The API data to create this select menu with\n\t * @example\n\t * Creating a select menu from an API data object:\n\t * ```ts\n\t * const selectMenu = new StringSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * \tplaceholder: 'select an option',\n\t * \tmax_values: 2,\n\t * \toptions: [\n\t * \t\t{ label: 'option 1', value: '1' },\n\t * \t\t{ label: 'option 2', value: '2' },\n\t * \t\t{ label: 'option 3', value: '3' },\n\t * \t],\n\t * });\n\t * ```\n\t * @example\n\t * Creating a select menu using setters and API data:\n\t * ```ts\n\t * const selectMenu = new StringSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * })\n\t * \t.setMinValues(1)\n\t * \t.addOptions({\n\t * \t\tlabel: 'Catchy',\n\t * \t\tvalue: 'catch',\n\t * \t});\n\t * ```\n\t */\n\tpublic constructor(data?: Partial) {\n\t\tconst { options, ...initData } = data ?? {};\n\t\tsuper({ ...initData, type: ComponentType.StringSelect });\n\t\tthis.options = options?.map((option: APISelectMenuOption) => new StringSelectMenuOptionBuilder(option)) ?? [];\n\t}\n\n\t/**\n\t * Adds options to this select menu.\n\t *\n\t * @param options - The options to add\n\t */\n\tpublic addOptions(...options: RestOrArray) {\n\t\tconst normalizedOptions = normalizeArray(options);\n\t\toptionsLengthValidator.parse(this.options.length + normalizedOptions.length);\n\t\tthis.options.push(\n\t\t\t...normalizedOptions.map((normalizedOption) =>\n\t\t\t\tnormalizedOption instanceof StringSelectMenuOptionBuilder\n\t\t\t\t\t? normalizedOption\n\t\t\t\t\t: new StringSelectMenuOptionBuilder(jsonOptionValidator.parse(normalizedOption)),\n\t\t\t),\n\t\t);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the options for this select menu.\n\t *\n\t * @param options - The options to set\n\t */\n\tpublic setOptions(...options: RestOrArray) {\n\t\treturn this.spliceOptions(0, this.options.length, ...options);\n\t}\n\n\t/**\n\t * Removes, replaces, or inserts options for this select menu.\n\t *\n\t * @remarks\n\t * This method behaves similarly\n\t * to {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice | Array.prototype.splice()}.\n\t * It's useful for modifying and adjusting the order of existing options.\n\t * @example\n\t * Remove the first option:\n\t * ```ts\n\t * selectMenu.spliceOptions(0, 1);\n\t * ```\n\t * @example\n\t * Remove the first n option:\n\t * ```ts\n\t * const n = 4;\n\t * selectMenu.spliceOptions(0, n);\n\t * ```\n\t * @example\n\t * Remove the last option:\n\t * ```ts\n\t * selectMenu.spliceOptions(-1, 1);\n\t * ```\n\t * @param index - The index to start at\n\t * @param deleteCount - The number of options to remove\n\t * @param options - The replacing option objects or builders\n\t */\n\tpublic spliceOptions(\n\t\tindex: number,\n\t\tdeleteCount: number,\n\t\t...options: RestOrArray\n\t) {\n\t\tconst normalizedOptions = normalizeArray(options);\n\n\t\tconst clone = [...this.options];\n\n\t\tclone.splice(\n\t\t\tindex,\n\t\t\tdeleteCount,\n\t\t\t...normalizedOptions.map((normalizedOption) =>\n\t\t\t\tnormalizedOption instanceof StringSelectMenuOptionBuilder\n\t\t\t\t\t? normalizedOption\n\t\t\t\t\t: new StringSelectMenuOptionBuilder(jsonOptionValidator.parse(normalizedOption)),\n\t\t\t),\n\t\t);\n\n\t\toptionsLengthValidator.parse(clone.length);\n\t\tthis.options.splice(0, this.options.length, ...clone);\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc BaseSelectMenuBuilder.toJSON}\n\t */\n\tpublic override toJSON(): APIStringSelectComponent {\n\t\tvalidateRequiredSelectMenuParameters(this.options, this.data.custom_id);\n\n\t\treturn {\n\t\t\t...this.data,\n\t\t\toptions: this.options.map((option) => option.toJSON()),\n\t\t} as APIStringSelectComponent;\n\t}\n}\n","import {\n\ttype APIUserSelectComponent,\n\ttype Snowflake,\n\tComponentType,\n\tSelectMenuDefaultValueType,\n} from 'discord-api-types/v10';\nimport { type RestOrArray, normalizeArray } from '../../util/normalizeArray.js';\nimport { optionsLengthValidator } from '../Assertions.js';\nimport { BaseSelectMenuBuilder } from './BaseSelectMenu.js';\n\n/**\n * A builder that creates API-compatible JSON data for user select menus.\n */\nexport class UserSelectMenuBuilder extends BaseSelectMenuBuilder {\n\t/**\n\t * Creates a new select menu from API data.\n\t *\n\t * @param data - The API data to create this select menu with\n\t * @example\n\t * Creating a select menu from an API data object:\n\t * ```ts\n\t * const selectMenu = new UserSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * \tplaceholder: 'select an option',\n\t * \tmax_values: 2,\n\t * });\n\t * ```\n\t * @example\n\t * Creating a select menu using setters and API data:\n\t * ```ts\n\t * const selectMenu = new UserSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * })\n\t * \t.setMinValues(1);\n\t * ```\n\t */\n\tpublic constructor(data?: Partial) {\n\t\tsuper({ ...data, type: ComponentType.UserSelect });\n\t}\n\n\t/**\n\t * Adds default users to this auto populated select menu.\n\t *\n\t * @param users - The users to add\n\t */\n\tpublic addDefaultUsers(...users: RestOrArray) {\n\t\tconst normalizedValues = normalizeArray(users);\n\t\toptionsLengthValidator.parse((this.data.default_values?.length ?? 0) + normalizedValues.length);\n\t\tthis.data.default_values ??= [];\n\n\t\tthis.data.default_values.push(\n\t\t\t...normalizedValues.map((id) => ({\n\t\t\t\tid,\n\t\t\t\ttype: SelectMenuDefaultValueType.User as const,\n\t\t\t})),\n\t\t);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets default users for this auto populated select menu.\n\t *\n\t * @param users - The users to set\n\t */\n\tpublic setDefaultUsers(...users: RestOrArray) {\n\t\tconst normalizedValues = normalizeArray(users);\n\t\toptionsLengthValidator.parse(normalizedValues.length);\n\n\t\tthis.data.default_values = normalizedValues.map((id) => ({\n\t\t\tid,\n\t\t\ttype: SelectMenuDefaultValueType.User as const,\n\t\t}));\n\n\t\treturn this;\n\t}\n}\n","import { isJSONEncodable, type Equatable, type JSONEncodable } from '@discordjs/util';\nimport { ComponentType, type TextInputStyle, type APITextInputComponent } from 'discord-api-types/v10';\nimport isEqual from 'fast-deep-equal';\nimport { customIdValidator } from '../Assertions.js';\nimport { ComponentBuilder } from '../Component.js';\nimport {\n\tmaxLengthValidator,\n\tminLengthValidator,\n\tplaceholderValidator,\n\trequiredValidator,\n\tvalueValidator,\n\tvalidateRequiredParameters,\n\tlabelValidator,\n\ttextInputStyleValidator,\n} from './Assertions.js';\n\n/**\n * A builder that creates API-compatible JSON data for text inputs.\n */\nexport class TextInputBuilder\n\textends ComponentBuilder\n\timplements Equatable>\n{\n\t/**\n\t * Creates a new text input from API data.\n\t *\n\t * @param data - The API data to create this text input with\n\t * @example\n\t * Creating a text input from an API data object:\n\t * ```ts\n\t * const textInput = new TextInputBuilder({\n\t * \tcustom_id: 'a cool text input',\n\t * \tlabel: 'Type something',\n\t * \tstyle: TextInputStyle.Short,\n\t * });\n\t * ```\n\t * @example\n\t * Creating a text input using setters and API data:\n\t * ```ts\n\t * const textInput = new TextInputBuilder({\n\t * \tlabel: 'Type something else',\n\t * })\n\t * \t.setCustomId('woah')\n\t * \t.setStyle(TextInputStyle.Paragraph);\n\t * ```\n\t */\n\tpublic constructor(data?: APITextInputComponent & { type?: ComponentType.TextInput }) {\n\t\tsuper({ type: ComponentType.TextInput, ...data });\n\t}\n\n\t/**\n\t * Sets the custom id for this text input.\n\t *\n\t * @param customId - The custom id to use\n\t */\n\tpublic setCustomId(customId: string) {\n\t\tthis.data.custom_id = customIdValidator.parse(customId);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the label for this text input.\n\t *\n\t * @param label - The label to use\n\t */\n\tpublic setLabel(label: string) {\n\t\tthis.data.label = labelValidator.parse(label);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the style for this text input.\n\t *\n\t * @param style - The style to use\n\t */\n\tpublic setStyle(style: TextInputStyle) {\n\t\tthis.data.style = textInputStyleValidator.parse(style);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the minimum length of text for this text input.\n\t *\n\t * @param minLength - The minimum length of text for this text input\n\t */\n\tpublic setMinLength(minLength: number) {\n\t\tthis.data.min_length = minLengthValidator.parse(minLength);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the maximum length of text for this text input.\n\t *\n\t * @param maxLength - The maximum length of text for this text input\n\t */\n\tpublic setMaxLength(maxLength: number) {\n\t\tthis.data.max_length = maxLengthValidator.parse(maxLength);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the placeholder for this text input.\n\t *\n\t * @param placeholder - The placeholder to use\n\t */\n\tpublic setPlaceholder(placeholder: string) {\n\t\tthis.data.placeholder = placeholderValidator.parse(placeholder);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the value for this text input.\n\t *\n\t * @param value - The value to use\n\t */\n\tpublic setValue(value: string) {\n\t\tthis.data.value = valueValidator.parse(value);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets whether this text input is required.\n\t *\n\t * @param required - Whether this text input is required\n\t */\n\tpublic setRequired(required = true) {\n\t\tthis.data.required = requiredValidator.parse(required);\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic toJSON(): APITextInputComponent {\n\t\tvalidateRequiredParameters(this.data.custom_id, this.data.style, this.data.label);\n\n\t\treturn {\n\t\t\t...this.data,\n\t\t} as APITextInputComponent;\n\t}\n\n\t/**\n\t * Whether this is equal to another structure.\n\t */\n\tpublic equals(other: APITextInputComponent | JSONEncodable): boolean {\n\t\tif (isJSONEncodable(other)) {\n\t\t\treturn isEqual(other.toJSON(), this.data);\n\t\t}\n\n\t\treturn isEqual(other, this.data);\n\t}\n}\n","import { s } from '@sapphire/shapeshift';\nimport { TextInputStyle } from 'discord-api-types/v10';\nimport { isValidationEnabled } from '../../util/validation.js';\nimport { customIdValidator } from '../Assertions.js';\n\nexport const textInputStyleValidator = s.nativeEnum(TextInputStyle);\nexport const minLengthValidator = s\n\t.number()\n\t.int()\n\t.greaterThanOrEqual(0)\n\t.lessThanOrEqual(4_000)\n\t.setValidationEnabled(isValidationEnabled);\nexport const maxLengthValidator = s\n\t.number()\n\t.int()\n\t.greaterThanOrEqual(1)\n\t.lessThanOrEqual(4_000)\n\t.setValidationEnabled(isValidationEnabled);\nexport const requiredValidator = s.boolean();\nexport const valueValidator = s.string().lengthLessThanOrEqual(4_000).setValidationEnabled(isValidationEnabled);\nexport const placeholderValidator = s.string().lengthLessThanOrEqual(100).setValidationEnabled(isValidationEnabled);\nexport const labelValidator = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(45)\n\t.setValidationEnabled(isValidationEnabled);\n\nexport function validateRequiredParameters(customId?: string, style?: TextInputStyle, label?: string) {\n\tcustomIdValidator.parse(customId);\n\ttextInputStyleValidator.parse(style);\n\tlabelValidator.parse(label);\n}\n","/* eslint-disable jsdoc/check-param-names */\n\nimport type {\n\tAPIActionRowComponent,\n\tAPIComponentInContainer,\n\tAPIComponentInMessageActionRow,\n\tAPIContainerComponent,\n\tAPIFileComponent,\n\tAPIMediaGalleryComponent,\n\tAPISectionComponent,\n\tAPISeparatorComponent,\n\tAPITextDisplayComponent,\n} from 'discord-api-types/v10';\nimport { ComponentType } from 'discord-api-types/v10';\nimport type { RGBTuple } from '../../index.js';\nimport { MediaGalleryBuilder, SectionBuilder } from '../../index.js';\nimport { normalizeArray, type RestOrArray } from '../../util/normalizeArray.js';\nimport type { AnyComponentBuilder, MessageActionRowComponentBuilder } from '../ActionRow.js';\nimport { ActionRowBuilder } from '../ActionRow.js';\nimport { ComponentBuilder } from '../Component.js';\nimport { createComponentBuilder, resolveBuilder } from '../Components.js';\nimport { containerColorPredicate, spoilerPredicate } from './Assertions.js';\nimport { FileBuilder } from './File.js';\nimport { SeparatorBuilder } from './Separator.js';\nimport { TextDisplayBuilder } from './TextDisplay.js';\n\n/**\n * The builders that may be used within a container.\n */\nexport type ContainerComponentBuilder =\n\t| ActionRowBuilder\n\t| FileBuilder\n\t| MediaGalleryBuilder\n\t| SectionBuilder\n\t| SeparatorBuilder\n\t| TextDisplayBuilder;\n\n/**\n * A builder that creates API-compatible JSON data for a container.\n */\nexport class ContainerBuilder extends ComponentBuilder {\n\t/**\n\t * The components within this container.\n\t */\n\tpublic readonly components: ContainerComponentBuilder[];\n\n\t/**\n\t * Creates a new container from API data.\n\t *\n\t * @param data - The API data to create this container with\n\t * @example\n\t * Creating a container from an API data object:\n\t * ```ts\n\t * const container = new ContainerBuilder({\n\t * \tcomponents: [\n\t * \t\t{\n\t * \t\t\tcontent: \"Some text here\",\n\t * \t\t\ttype: ComponentType.TextDisplay,\n\t * \t\t},\n\t * \t],\n\t * });\n\t * ```\n\t * @example\n\t * Creating a container using setters and API data:\n\t * ```ts\n\t * const container = new ContainerBuilder({\n\t * \tcomponents: [\n\t * \t\t{\n\t * \t\t\tcontent: \"# Heading\",\n\t * \t\t\ttype: ComponentType.TextDisplay,\n\t * \t\t},\n\t * \t],\n\t * })\n\t * \t.addComponents(separator, section);\n\t * ```\n\t */\n\tpublic constructor({ components, ...data }: Partial = {}) {\n\t\tsuper({ type: ComponentType.Container, ...data });\n\t\tthis.components = (components?.map((component) => createComponentBuilder(component)) ??\n\t\t\t[]) as ContainerComponentBuilder[];\n\t}\n\n\t/**\n\t * Sets the accent color of this container.\n\t *\n\t * @param color - The color to use\n\t */\n\tpublic setAccentColor(color?: RGBTuple | number): this {\n\t\t// Data assertions\n\t\tcontainerColorPredicate.parse(color);\n\n\t\tif (Array.isArray(color)) {\n\t\t\tconst [red, green, blue] = color;\n\t\t\tthis.data.accent_color = (red << 16) + (green << 8) + blue;\n\t\t\treturn this;\n\t\t}\n\n\t\tthis.data.accent_color = color;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Clears the accent color of this container.\n\t */\n\tpublic clearAccentColor() {\n\t\tthis.data.accent_color = undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds action row components to this container.\n\t *\n\t * @param components - The action row components to add\n\t */\n\tpublic addActionRowComponents(\n\t\t...components: RestOrArray<\n\t\t\t| ActionRowBuilder\n\t\t\t| APIActionRowComponent\n\t\t\t| ((builder: ActionRowBuilder) => ActionRowBuilder)\n\t\t>\n\t) {\n\t\tthis.components.push(\n\t\t\t...normalizeArray(components).map((component) => resolveBuilder(component, ActionRowBuilder)),\n\t\t);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds file components to this container.\n\t *\n\t * @param components - The file components to add\n\t */\n\tpublic addFileComponents(\n\t\t...components: RestOrArray FileBuilder)>\n\t) {\n\t\tthis.components.push(...normalizeArray(components).map((component) => resolveBuilder(component, FileBuilder)));\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds media gallery components to this container.\n\t *\n\t * @param components - The media gallery components to add\n\t */\n\tpublic addMediaGalleryComponents(\n\t\t...components: RestOrArray<\n\t\t\tAPIMediaGalleryComponent | MediaGalleryBuilder | ((builder: MediaGalleryBuilder) => MediaGalleryBuilder)\n\t\t>\n\t) {\n\t\tthis.components.push(\n\t\t\t...normalizeArray(components).map((component) => resolveBuilder(component, MediaGalleryBuilder)),\n\t\t);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds section components to this container.\n\t *\n\t * @param components - The section components to add\n\t */\n\tpublic addSectionComponents(\n\t\t...components: RestOrArray SectionBuilder)>\n\t) {\n\t\tthis.components.push(...normalizeArray(components).map((component) => resolveBuilder(component, SectionBuilder)));\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds separator components to this container.\n\t *\n\t * @param components - The separator components to add\n\t */\n\tpublic addSeparatorComponents(\n\t\t...components: RestOrArray<\n\t\t\tAPISeparatorComponent | SeparatorBuilder | ((builder: SeparatorBuilder) => SeparatorBuilder)\n\t\t>\n\t) {\n\t\tthis.components.push(...normalizeArray(components).map((component) => resolveBuilder(component, SeparatorBuilder)));\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds text display components to this container.\n\t *\n\t * @param components - The text display components to add\n\t */\n\tpublic addTextDisplayComponents(\n\t\t...components: RestOrArray<\n\t\t\tAPITextDisplayComponent | TextDisplayBuilder | ((builder: TextDisplayBuilder) => TextDisplayBuilder)\n\t\t>\n\t) {\n\t\tthis.components.push(\n\t\t\t...normalizeArray(components).map((component) => resolveBuilder(component, TextDisplayBuilder)),\n\t\t);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Removes, replaces, or inserts components for this container.\n\t *\n\t * @param index - The index to start removing, replacing or inserting components\n\t * @param deleteCount - The amount of components to remove\n\t * @param components - The components to set\n\t */\n\tpublic spliceComponents(\n\t\tindex: number,\n\t\tdeleteCount: number,\n\t\t...components: RestOrArray\n\t) {\n\t\tthis.components.splice(\n\t\t\tindex,\n\t\t\tdeleteCount,\n\t\t\t...normalizeArray(components).map((component) =>\n\t\t\t\tcomponent instanceof ComponentBuilder ? component : createComponentBuilder(component),\n\t\t\t),\n\t\t);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the spoiler status of this container.\n\t *\n\t * @param spoiler - The spoiler status to use\n\t */\n\tpublic setSpoiler(spoiler = true) {\n\t\tthis.data.spoiler = spoilerPredicate.parse(spoiler);\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic toJSON(): APIContainerComponent {\n\t\treturn {\n\t\t\t...this.data,\n\t\t\tcomponents: this.components.map((component) => component.toJSON()),\n\t\t} as APIContainerComponent;\n\t}\n}\n","import { s } from '@sapphire/shapeshift';\nimport { SeparatorSpacingSize } from 'discord-api-types/v10';\nimport { colorPredicate } from '../../messages/embed/Assertions';\nimport { isValidationEnabled } from '../../util/validation';\nimport { ComponentBuilder } from '../Component';\nimport { ButtonBuilder } from '../button/Button';\nimport type { ContainerComponentBuilder } from './Container';\nimport type { MediaGalleryItemBuilder } from './MediaGalleryItem';\nimport type { TextDisplayBuilder } from './TextDisplay';\nimport { ThumbnailBuilder } from './Thumbnail';\n\nexport const unfurledMediaItemPredicate = s\n\t.object({\n\t\turl: s\n\t\t\t.string()\n\t\t\t.url(\n\t\t\t\t{ allowedProtocols: ['http:', 'https:', 'attachment:'] },\n\t\t\t\t{ message: 'Invalid protocol for media URL. Must be http:, https:, or attachment:' },\n\t\t\t),\n\t})\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const descriptionPredicate = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(1_024)\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const filePredicate = s\n\t.object({\n\t\turl: s\n\t\t\t.string()\n\t\t\t.url({ allowedProtocols: ['attachment:'] }, { message: 'Invalid protocol for file URL. Must be attachment:' }),\n\t})\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const spoilerPredicate = s.boolean();\n\nexport const dividerPredicate = s.boolean();\n\nexport const spacingPredicate = s.nativeEnum(SeparatorSpacingSize);\n\nexport const textDisplayContentPredicate = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(4_000)\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const accessoryPredicate = s\n\t.instance(ButtonBuilder)\n\t.or(s.instance(ThumbnailBuilder))\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const containerColorPredicate = colorPredicate.nullish();\n\nexport function assertReturnOfBuilder(\n\tinput: unknown,\n\tExpectedInstanceOf: new () => ReturnType,\n): asserts input is ReturnType {\n\ts.instance(ExpectedInstanceOf).setValidationEnabled(isValidationEnabled).parse(input);\n}\n\nexport function validateComponentArray<\n\tReturnType extends ContainerComponentBuilder | MediaGalleryItemBuilder = ContainerComponentBuilder,\n>(input: unknown, min: number, max: number, ExpectedInstanceOf?: new () => ReturnType): asserts input is ReturnType[] {\n\t(ExpectedInstanceOf ? s.instance(ExpectedInstanceOf) : s.instance(ComponentBuilder))\n\t\t.array()\n\t\t.lengthGreaterThanOrEqual(min)\n\t\t.lengthLessThanOrEqual(max)\n\t\t.setValidationEnabled(isValidationEnabled)\n\t\t.parse(input);\n}\n","import type { APIThumbnailComponent } from 'discord-api-types/v10';\nimport { ComponentType } from 'discord-api-types/v10';\nimport { ComponentBuilder } from '../Component';\nimport { descriptionPredicate, spoilerPredicate, unfurledMediaItemPredicate } from './Assertions';\n\nexport class ThumbnailBuilder extends ComponentBuilder {\n\t/**\n\t * Creates a new thumbnail from API data.\n\t *\n\t * @param data - The API data to create this thumbnail with\n\t * @example\n\t * Creating a thumbnail from an API data object:\n\t * ```ts\n\t * const thumbnail = new ThumbnailBuilder({\n\t * \tdescription: 'some text',\n\t * media: {\n\t * url: 'https://cdn.discordapp.com/embed/avatars/4.png',\n\t * },\n\t * });\n\t * ```\n\t * @example\n\t * Creating a thumbnail using setters and API data:\n\t * ```ts\n\t * const thumbnail = new ThumbnailBuilder({\n\t * \tmedia: {\n\t * url: 'attachment://image.png',\n\t * },\n\t * })\n\t * \t.setDescription('alt text');\n\t * ```\n\t */\n\tpublic constructor(data: Partial = {}) {\n\t\tsuper({\n\t\t\ttype: ComponentType.Thumbnail,\n\t\t\t...data,\n\t\t\tmedia: data.media ? { url: data.media.url } : undefined,\n\t\t});\n\t}\n\n\t/**\n\t * Sets the description of this thumbnail.\n\t *\n\t * @param description - The description to use\n\t */\n\tpublic setDescription(description: string) {\n\t\tthis.data.description = descriptionPredicate.parse(description);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Clears the description of this thumbnail.\n\t */\n\tpublic clearDescription() {\n\t\tthis.data.description = undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the spoiler status of this thumbnail.\n\t *\n\t * @param spoiler - The spoiler status to use\n\t */\n\tpublic setSpoiler(spoiler = true) {\n\t\tthis.data.spoiler = spoilerPredicate.parse(spoiler);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the media URL of this thumbnail.\n\t *\n\t * @param url - The URL to use\n\t */\n\tpublic setURL(url: string) {\n\t\tthis.data.media = unfurledMediaItemPredicate.parse({ url });\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritdoc ComponentBuilder.toJSON}\n\t */\n\tpublic override toJSON(): APIThumbnailComponent {\n\t\tunfurledMediaItemPredicate.parse(this.data.media);\n\n\t\treturn { ...this.data } as APIThumbnailComponent;\n\t}\n}\n","import { ComponentType, type APIFileComponent } from 'discord-api-types/v10';\nimport { ComponentBuilder } from '../Component';\nimport { filePredicate, spoilerPredicate } from './Assertions';\n\nexport class FileBuilder extends ComponentBuilder {\n\t/**\n\t * Creates a new file from API data.\n\t *\n\t * @param data - The API data to create this file with\n\t * @example\n\t * Creating a file from an API data object:\n\t * ```ts\n\t * const file = new FileBuilder({\n\t * \tspoiler: true,\n\t * \tfile: {\n\t * \t\turl: 'attachment://file.png',\n\t * \t},\n\t * });\n\t * ```\n\t * @example\n\t * Creating a file using setters and API data:\n\t * ```ts\n\t * const file = new FileBuilder({\n\t * \tfile: {\n\t * \t\turl: 'attachment://image.jpg',\n\t * \t},\n\t * })\n\t * \t.setSpoiler(false);\n\t * ```\n\t */\n\tpublic constructor(data: Partial = {}) {\n\t\tsuper({ type: ComponentType.File, ...data, file: data.file ? { url: data.file.url } : undefined });\n\t}\n\n\t/**\n\t * Sets the spoiler status of this file.\n\t *\n\t * @param spoiler - The spoiler status to use\n\t */\n\tpublic setSpoiler(spoiler = true) {\n\t\tthis.data.spoiler = spoilerPredicate.parse(spoiler);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the media URL of this file.\n\t *\n\t * @param url - The URL to use\n\t */\n\tpublic setURL(url: string) {\n\t\tthis.data.file = filePredicate.parse({ url });\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic override toJSON(): APIFileComponent {\n\t\tfilePredicate.parse(this.data.file);\n\n\t\treturn { ...this.data, file: { ...this.data.file } } as APIFileComponent;\n\t}\n}\n","import type { SeparatorSpacingSize, APISeparatorComponent } from 'discord-api-types/v10';\nimport { ComponentType } from 'discord-api-types/v10';\nimport { ComponentBuilder } from '../Component';\nimport { dividerPredicate, spacingPredicate } from './Assertions';\n\nexport class SeparatorBuilder extends ComponentBuilder {\n\t/**\n\t * Creates a new separator from API data.\n\t *\n\t * @param data - The API data to create this separator with\n\t * @example\n\t * Creating a separator from an API data object:\n\t * ```ts\n\t * const separator = new SeparatorBuilder({\n\t * \tspacing: SeparatorSpacingSize.Small,\n\t * divider: true,\n\t * });\n\t * ```\n\t * @example\n\t * Creating a separator using setters and API data:\n\t * ```ts\n\t * const separator = new SeparatorBuilder({\n\t * \tspacing: SeparatorSpacingSize.Large,\n\t * })\n\t * \t.setDivider(false);\n\t * ```\n\t */\n\tpublic constructor(data: Partial = {}) {\n\t\tsuper({\n\t\t\ttype: ComponentType.Separator,\n\t\t\t...data,\n\t\t});\n\t}\n\n\t/**\n\t * Sets whether this separator should show a divider line.\n\t *\n\t * @param divider - Whether to show a divider line\n\t */\n\tpublic setDivider(divider = true) {\n\t\tthis.data.divider = dividerPredicate.parse(divider);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the spacing of this separator.\n\t *\n\t * @param spacing - The spacing to use\n\t */\n\tpublic setSpacing(spacing: SeparatorSpacingSize) {\n\t\tthis.data.spacing = spacingPredicate.parse(spacing);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Clears the spacing of this separator.\n\t */\n\tpublic clearSpacing() {\n\t\tthis.data.spacing = undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic override toJSON(): APISeparatorComponent {\n\t\treturn { ...this.data } as APISeparatorComponent;\n\t}\n}\n","import type { APITextDisplayComponent } from 'discord-api-types/v10';\nimport { ComponentType } from 'discord-api-types/v10';\nimport { ComponentBuilder } from '../Component';\nimport { textDisplayContentPredicate } from './Assertions';\n\nexport class TextDisplayBuilder extends ComponentBuilder {\n\t/**\n\t * Creates a new text display from API data.\n\t *\n\t * @param data - The API data to create this text display with\n\t * @example\n\t * Creating a text display from an API data object:\n\t * ```ts\n\t * const textDisplay = new TextDisplayBuilder({\n\t * \tcontent: 'some text',\n\t * });\n\t * ```\n\t * @example\n\t * Creating a text display using setters and API data:\n\t * ```ts\n\t * const textDisplay = new TextDisplayBuilder({\n\t * \tcontent: 'old text',\n\t * })\n\t * \t.setContent('new text');\n\t * ```\n\t */\n\tpublic constructor(data: Partial = {}) {\n\t\tsuper({\n\t\t\ttype: ComponentType.TextDisplay,\n\t\t\t...data,\n\t\t});\n\t}\n\n\t/**\n\t * Sets the text of this text display.\n\t *\n\t * @param content - The text to use\n\t */\n\tpublic setContent(content: string) {\n\t\tthis.data.content = textDisplayContentPredicate.parse(content);\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic override toJSON(): APITextDisplayComponent {\n\t\ttextDisplayContentPredicate.parse(this.data.content);\n\n\t\treturn { ...this.data } as APITextDisplayComponent;\n\t}\n}\n","/* eslint-disable jsdoc/check-param-names */\n\nimport type { APIMediaGalleryComponent, APIMediaGalleryItem } from 'discord-api-types/v10';\nimport { ComponentType } from 'discord-api-types/v10';\nimport { normalizeArray, type RestOrArray } from '../../util/normalizeArray.js';\nimport { ComponentBuilder } from '../Component.js';\nimport { resolveBuilder } from '../Components.js';\nimport { assertReturnOfBuilder, validateComponentArray } from './Assertions.js';\nimport { MediaGalleryItemBuilder } from './MediaGalleryItem.js';\n\n/**\n * A builder that creates API-compatible JSON data for a container.\n */\nexport class MediaGalleryBuilder extends ComponentBuilder {\n\t/**\n\t * The components within this container.\n\t */\n\tpublic readonly items: MediaGalleryItemBuilder[];\n\n\t/**\n\t * Creates a new media gallery from API data.\n\t *\n\t * @param data - The API data to create this media gallery with\n\t * @example\n\t * Creating a media gallery from an API data object:\n\t * ```ts\n\t * const mediaGallery = new MediaGalleryBuilder({\n\t * \titems: [\n\t * \t\t{\n\t * \t\t\tdescription: \"Some text here\",\n\t * \t\t\tmedia: {\n\t * \t\t\t\turl: 'https://cdn.discordapp.com/embed/avatars/2.png',\n\t * \t\t\t},\n\t * \t\t},\n\t * \t],\n\t * });\n\t * ```\n\t * @example\n\t * Creating a media gallery using setters and API data:\n\t * ```ts\n\t * const mediaGallery = new MediaGalleryBuilder({\n\t * \titems: [\n\t * \t\t{\n\t * \t\t\tdescription: \"alt text\",\n\t * \t\t\tmedia: {\n\t * \t\t\t\turl: 'https://cdn.discordapp.com/embed/avatars/5.png',\n\t * \t\t\t},\n\t * \t\t},\n\t * \t],\n\t * })\n\t * \t.addItems(item2, item3);\n\t * ```\n\t */\n\tpublic constructor({ items, ...data }: Partial = {}) {\n\t\tsuper({ type: ComponentType.MediaGallery, ...data });\n\t\tthis.items = items?.map((item) => new MediaGalleryItemBuilder(item)) ?? [];\n\t}\n\n\t/**\n\t * Adds items to this media gallery.\n\t *\n\t * @param items - The items to add\n\t */\n\tpublic addItems(\n\t\t...items: RestOrArray<\n\t\t\tAPIMediaGalleryItem | MediaGalleryItemBuilder | ((builder: MediaGalleryItemBuilder) => MediaGalleryItemBuilder)\n\t\t>\n\t) {\n\t\tthis.items.push(\n\t\t\t...normalizeArray(items).map((input) => {\n\t\t\t\tconst result = resolveBuilder(input, MediaGalleryItemBuilder);\n\n\t\t\t\tassertReturnOfBuilder(result, MediaGalleryItemBuilder);\n\t\t\t\treturn result;\n\t\t\t}),\n\t\t);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Removes, replaces, or inserts media gallery items for this media gallery.\n\t *\n\t * @param index - The index to start removing, replacing or inserting items\n\t * @param deleteCount - The amount of items to remove\n\t * @param items - The items to insert\n\t */\n\tpublic spliceItems(\n\t\tindex: number,\n\t\tdeleteCount: number,\n\t\t...items: RestOrArray<\n\t\t\tAPIMediaGalleryItem | MediaGalleryItemBuilder | ((builder: MediaGalleryItemBuilder) => MediaGalleryItemBuilder)\n\t\t>\n\t) {\n\t\tthis.items.splice(\n\t\t\tindex,\n\t\t\tdeleteCount,\n\t\t\t...normalizeArray(items).map((input) => {\n\t\t\t\tconst result = resolveBuilder(input, MediaGalleryItemBuilder);\n\n\t\t\t\tassertReturnOfBuilder(result, MediaGalleryItemBuilder);\n\t\t\t\treturn result;\n\t\t\t}),\n\t\t);\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic toJSON(): APIMediaGalleryComponent {\n\t\tvalidateComponentArray(this.items, 1, 10, MediaGalleryItemBuilder);\n\t\treturn {\n\t\t\t...this.data,\n\t\t\titems: this.items.map((item) => item.toJSON()),\n\t\t} as APIMediaGalleryComponent;\n\t}\n}\n","import type { JSONEncodable } from '@discordjs/util';\nimport type { APIMediaGalleryItem } from 'discord-api-types/v10';\nimport { descriptionPredicate, spoilerPredicate, unfurledMediaItemPredicate } from './Assertions';\n\nexport class MediaGalleryItemBuilder implements JSONEncodable {\n\t/**\n\t * The API data associated with this media gallery item.\n\t */\n\tpublic readonly data: Partial;\n\n\t/**\n\t * Creates a new media gallery item from API data.\n\t *\n\t * @param data - The API data to create this media gallery item with\n\t * @example\n\t * Creating a media gallery item from an API data object:\n\t * ```ts\n\t * const item = new MediaGalleryItemBuilder({\n\t * \tdescription: \"Some text here\",\n\t * \tmedia: {\n\t * \t\turl: 'https://cdn.discordapp.com/embed/avatars/2.png',\n\t * \t},\n\t * });\n\t * ```\n\t * @example\n\t * Creating a media gallery item using setters and API data:\n\t * ```ts\n\t * const item = new MediaGalleryItemBuilder({\n\t * \tmedia: {\n\t * \t\turl: 'https://cdn.discordapp.com/embed/avatars/5.png',\n\t * \t},\n\t * })\n\t * \t.setDescription(\"alt text\");\n\t * ```\n\t */\n\tpublic constructor(data: Partial = {}) {\n\t\tthis.data = data;\n\t}\n\n\t/**\n\t * Sets the description of this media gallery item.\n\t *\n\t * @param description - The description to use\n\t */\n\tpublic setDescription(description: string) {\n\t\tthis.data.description = descriptionPredicate.parse(description);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Clears the description of this media gallery item.\n\t */\n\tpublic clearDescription() {\n\t\tthis.data.description = undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the spoiler status of this media gallery item.\n\t *\n\t * @param spoiler - The spoiler status to use\n\t */\n\tpublic setSpoiler(spoiler = true) {\n\t\tthis.data.spoiler = spoilerPredicate.parse(spoiler);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the media URL of this media gallery item.\n\t *\n\t * @param url - The URL to use\n\t */\n\tpublic setURL(url: string) {\n\t\tthis.data.media = unfurledMediaItemPredicate.parse({ url });\n\t\treturn this;\n\t}\n\n\t/**\n\t * Serializes this builder to API-compatible JSON data.\n\t *\n\t * @remarks\n\t * This method runs validations on the data before serializing it.\n\t * As such, it may throw an error if the data is invalid.\n\t */\n\tpublic toJSON(): APIMediaGalleryItem {\n\t\tunfurledMediaItemPredicate.parse(this.data.media);\n\n\t\treturn { ...this.data } as APIMediaGalleryItem;\n\t}\n}\n","/* eslint-disable jsdoc/check-param-names */\n\nimport type {\n\tAPIButtonComponent,\n\tAPISectionComponent,\n\tAPITextDisplayComponent,\n\tAPIThumbnailComponent,\n} from 'discord-api-types/v10';\nimport { ComponentType } from 'discord-api-types/v10';\nimport { ButtonBuilder, ThumbnailBuilder } from '../../index.js';\nimport { normalizeArray, type RestOrArray } from '../../util/normalizeArray.js';\nimport { ComponentBuilder } from '../Component.js';\nimport { createComponentBuilder, resolveBuilder } from '../Components.js';\nimport { accessoryPredicate, assertReturnOfBuilder, validateComponentArray } from './Assertions.js';\nimport { TextDisplayBuilder } from './TextDisplay.js';\n\n/**\n * A builder that creates API-compatible JSON data for a section.\n */\nexport class SectionBuilder extends ComponentBuilder {\n\t/**\n\t * The components within this section.\n\t */\n\tpublic readonly components: ComponentBuilder[];\n\n\t/**\n\t * The accessory of this section.\n\t */\n\tpublic readonly accessory?: ButtonBuilder | ThumbnailBuilder;\n\n\t/**\n\t * Creates a new section from API data.\n\t *\n\t * @param data - The API data to create this section with\n\t * @example\n\t * Creating a section from an API data object:\n\t * ```ts\n\t * const section = new SectionBuilder({\n\t * \tcomponents: [\n\t * \t\t{\n\t * \t\t\tcontent: \"Some text here\",\n\t * \t\t\ttype: ComponentType.TextDisplay,\n\t * \t\t},\n\t * \t],\n\t * accessory: {\n\t * media: {\n\t * url: 'https://cdn.discordapp.com/embed/avatars/3.png',\n\t * },\n\t * }\n\t * });\n\t * ```\n\t * @example\n\t * Creating a section using setters and API data:\n\t * ```ts\n\t * const section = new SectionBuilder({\n\t * \tcomponents: [\n\t * \t\t{\n\t * \t\t\tcontent: \"# Heading\",\n\t * \t\t\ttype: ComponentType.TextDisplay,\n\t * \t\t},\n\t * \t],\n\t * })\n\t * \t.setPrimaryButtonAccessory(button);\n\t * ```\n\t */\n\tpublic constructor({ components, accessory, ...data }: Partial = {}) {\n\t\tsuper({ type: ComponentType.Section, ...data });\n\t\tthis.components = (components?.map((component) => createComponentBuilder(component)) ?? []) as ComponentBuilder[];\n\t\tthis.accessory = accessory ? createComponentBuilder(accessory) : undefined;\n\t}\n\n\t/**\n\t * Sets the accessory of this section to a button.\n\t *\n\t * @param accessory - The accessory to use\n\t */\n\tpublic setButtonAccessory(\n\t\taccessory: APIButtonComponent | ButtonBuilder | ((builder: ButtonBuilder) => ButtonBuilder),\n\t): this {\n\t\tReflect.set(this, 'accessory', accessoryPredicate.parse(resolveBuilder(accessory, ButtonBuilder)));\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the accessory of this section to a thumbnail.\n\t *\n\t * @param accessory - The accessory to use\n\t */\n\tpublic setThumbnailAccessory(\n\t\taccessory: APIThumbnailComponent | ThumbnailBuilder | ((builder: ThumbnailBuilder) => ThumbnailBuilder),\n\t): this {\n\t\tReflect.set(this, 'accessory', accessoryPredicate.parse(resolveBuilder(accessory, ThumbnailBuilder)));\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds text display components to this section.\n\t *\n\t * @param components - The text display components to add\n\t */\n\tpublic addTextDisplayComponents(\n\t\t...components: RestOrArray TextDisplayBuilder)>\n\t) {\n\t\tthis.components.push(\n\t\t\t...normalizeArray(components).map((input) => {\n\t\t\t\tconst result = resolveBuilder(input, TextDisplayBuilder);\n\n\t\t\t\tassertReturnOfBuilder(result, TextDisplayBuilder);\n\t\t\t\treturn result;\n\t\t\t}),\n\t\t);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Removes, replaces, or inserts text display components for this section.\n\t *\n\t * @param index - The index to start removing, replacing or inserting text display components\n\t * @param deleteCount - The amount of text display components to remove\n\t * @param components - The text display components to insert\n\t */\n\tpublic spliceTextDisplayComponents(\n\t\tindex: number,\n\t\tdeleteCount: number,\n\t\t...components: RestOrArray<\n\t\t\tAPITextDisplayComponent | TextDisplayBuilder | ((builder: TextDisplayBuilder) => TextDisplayBuilder)\n\t\t>\n\t) {\n\t\tthis.components.splice(\n\t\t\tindex,\n\t\t\tdeleteCount,\n\t\t\t...normalizeArray(components).map((input) => {\n\t\t\t\tconst result = resolveBuilder(input, TextDisplayBuilder);\n\n\t\t\t\tassertReturnOfBuilder(result, TextDisplayBuilder);\n\t\t\t\treturn result;\n\t\t\t}),\n\t\t);\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic toJSON(): APISectionComponent {\n\t\tvalidateComponentArray(this.components, 1, 3, TextDisplayBuilder);\n\t\treturn {\n\t\t\t...this.data,\n\t\t\tcomponents: this.components.map((component) => component.toJSON()),\n\t\t\taccessory: accessoryPredicate.parse(this.accessory).toJSON(),\n\t\t} as APISectionComponent;\n\t}\n}\n","import { s } from '@sapphire/shapeshift';\nimport { ActionRowBuilder, type ModalActionRowComponentBuilder } from '../../components/ActionRow.js';\nimport { customIdValidator } from '../../components/Assertions.js';\nimport { isValidationEnabled } from '../../util/validation.js';\n\nexport const titleValidator = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(45)\n\t.setValidationEnabled(isValidationEnabled);\nexport const componentsValidator = s\n\t.instance(ActionRowBuilder)\n\t.array()\n\t.lengthGreaterThanOrEqual(1)\n\t.setValidationEnabled(isValidationEnabled);\n\nexport function validateRequiredParameters(\n\tcustomId?: string,\n\ttitle?: string,\n\tcomponents?: ActionRowBuilder[],\n) {\n\tcustomIdValidator.parse(customId);\n\ttitleValidator.parse(title);\n\tcomponentsValidator.parse(components);\n}\n","/* eslint-disable jsdoc/check-param-names */\n\nimport type { JSONEncodable } from '@discordjs/util';\nimport type {\n\tAPIActionRowComponent,\n\tAPIComponentInModalActionRow,\n\tAPIModalInteractionResponseCallbackData,\n} from 'discord-api-types/v10';\nimport { ActionRowBuilder, type ModalActionRowComponentBuilder } from '../../components/ActionRow.js';\nimport { customIdValidator } from '../../components/Assertions.js';\nimport { createComponentBuilder } from '../../components/Components.js';\nimport { normalizeArray, type RestOrArray } from '../../util/normalizeArray.js';\nimport { titleValidator, validateRequiredParameters } from './Assertions.js';\n\n/**\n * A builder that creates API-compatible JSON data for modals.\n */\nexport class ModalBuilder implements JSONEncodable {\n\t/**\n\t * The API data associated with this modal.\n\t */\n\tpublic readonly data: Partial;\n\n\t/**\n\t * The components within this modal.\n\t */\n\tpublic readonly components: ActionRowBuilder[] = [];\n\n\t/**\n\t * Creates a new modal from API data.\n\t *\n\t * @param data - The API data to create this modal with\n\t */\n\tpublic constructor({ components, ...data }: Partial = {}) {\n\t\tthis.data = { ...data };\n\t\tthis.components = (components?.map((component) => createComponentBuilder(component)) ??\n\t\t\t[]) as ActionRowBuilder[];\n\t}\n\n\t/**\n\t * Sets the title of this modal.\n\t *\n\t * @param title - The title to use\n\t */\n\tpublic setTitle(title: string) {\n\t\tthis.data.title = titleValidator.parse(title);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the custom id of this modal.\n\t *\n\t * @param customId - The custom id to use\n\t */\n\tpublic setCustomId(customId: string) {\n\t\tthis.data.custom_id = customIdValidator.parse(customId);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds components to this modal.\n\t *\n\t * @param components - The components to add\n\t */\n\tpublic addComponents(\n\t\t...components: RestOrArray<\n\t\t\tActionRowBuilder | APIActionRowComponent\n\t\t>\n\t) {\n\t\tthis.components.push(\n\t\t\t...normalizeArray(components).map((component) =>\n\t\t\t\tcomponent instanceof ActionRowBuilder\n\t\t\t\t\t? component\n\t\t\t\t\t: new ActionRowBuilder(component),\n\t\t\t),\n\t\t);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets components for this modal.\n\t *\n\t * @param components - The components to set\n\t */\n\tpublic setComponents(...components: RestOrArray>) {\n\t\tthis.components.splice(0, this.components.length, ...normalizeArray(components));\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic toJSON(): APIModalInteractionResponseCallbackData {\n\t\tvalidateRequiredParameters(this.data.custom_id, this.data.title, this.components);\n\n\t\treturn {\n\t\t\t...this.data,\n\t\t\tcomponents: this.components.map((component) => component.toJSON()),\n\t\t} as APIModalInteractionResponseCallbackData;\n\t}\n}\n","import { s } from '@sapphire/shapeshift';\nimport {\n\tApplicationIntegrationType,\n\tInteractionContextType,\n\tLocale,\n\ttype APIApplicationCommandOptionChoice,\n\ttype LocalizationMap,\n} from 'discord-api-types/v10';\nimport { isValidationEnabled } from '../../util/validation.js';\nimport type { ToAPIApplicationCommandOptions } from './SlashCommandBuilder.js';\nimport type { SlashCommandSubcommandBuilder, SlashCommandSubcommandGroupBuilder } from './SlashCommandSubcommands.js';\nimport type { ApplicationCommandOptionBase } from './mixins/ApplicationCommandOptionBase.js';\n\nconst namePredicate = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(32)\n\t.regex(/^[\\p{Ll}\\p{Lm}\\p{Lo}\\p{N}\\p{sc=Devanagari}\\p{sc=Thai}_-]+$/u)\n\t.setValidationEnabled(isValidationEnabled);\n\nexport function validateName(name: unknown): asserts name is string {\n\tnamePredicate.parse(name);\n}\n\nconst descriptionPredicate = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(100)\n\t.setValidationEnabled(isValidationEnabled);\nconst localePredicate = s.nativeEnum(Locale);\n\nexport function validateDescription(description: unknown): asserts description is string {\n\tdescriptionPredicate.parse(description);\n}\n\nconst maxArrayLengthPredicate = s.unknown().array().lengthLessThanOrEqual(25).setValidationEnabled(isValidationEnabled);\nexport function validateLocale(locale: unknown) {\n\treturn localePredicate.parse(locale);\n}\n\nexport function validateMaxOptionsLength(options: unknown): asserts options is ToAPIApplicationCommandOptions[] {\n\tmaxArrayLengthPredicate.parse(options);\n}\n\nexport function validateRequiredParameters(\n\tname: string,\n\tdescription: string,\n\toptions: ToAPIApplicationCommandOptions[],\n) {\n\t// Assert name matches all conditions\n\tvalidateName(name);\n\n\t// Assert description conditions\n\tvalidateDescription(description);\n\n\t// Assert options conditions\n\tvalidateMaxOptionsLength(options);\n}\n\nconst booleanPredicate = s.boolean();\n\nexport function validateDefaultPermission(value: unknown): asserts value is boolean {\n\tbooleanPredicate.parse(value);\n}\n\nexport function validateRequired(required: unknown): asserts required is boolean {\n\tbooleanPredicate.parse(required);\n}\n\nconst choicesLengthPredicate = s.number().lessThanOrEqual(25).setValidationEnabled(isValidationEnabled);\n\nexport function validateChoicesLength(amountAdding: number, choices?: APIApplicationCommandOptionChoice[]): void {\n\tchoicesLengthPredicate.parse((choices?.length ?? 0) + amountAdding);\n}\n\nexport function assertReturnOfBuilder<\n\tReturnType extends ApplicationCommandOptionBase | SlashCommandSubcommandBuilder | SlashCommandSubcommandGroupBuilder,\n>(input: unknown, ExpectedInstanceOf: new () => ReturnType): asserts input is ReturnType {\n\ts.instance(ExpectedInstanceOf).parse(input);\n}\n\nexport const localizationMapPredicate = s\n\t.object(Object.fromEntries(Object.values(Locale).map((locale) => [locale, s.string().nullish()])))\n\t.strict()\n\t.nullish()\n\t.setValidationEnabled(isValidationEnabled);\n\nexport function validateLocalizationMap(value: unknown): asserts value is LocalizationMap {\n\tlocalizationMapPredicate.parse(value);\n}\n\nconst dmPermissionPredicate = s.boolean().nullish();\n\nexport function validateDMPermission(value: unknown): asserts value is boolean | null | undefined {\n\tdmPermissionPredicate.parse(value);\n}\n\nconst memberPermissionPredicate = s\n\t.union([\n\t\ts.bigint().transform((value) => value.toString()),\n\t\ts\n\t\t\t.number()\n\t\t\t.safeInt()\n\t\t\t.transform((value) => value.toString()),\n\t\ts.string().regex(/^\\d+$/),\n\t])\n\t.nullish();\n\nexport function validateDefaultMemberPermissions(permissions: unknown) {\n\treturn memberPermissionPredicate.parse(permissions);\n}\n\nexport function validateNSFW(value: unknown): asserts value is boolean {\n\tbooleanPredicate.parse(value);\n}\n\nexport const contextsPredicate = s.array(\n\ts.nativeEnum(InteractionContextType).setValidationEnabled(isValidationEnabled),\n);\n\nexport const integrationTypesPredicate = s.array(\n\ts.nativeEnum(ApplicationIntegrationType).setValidationEnabled(isValidationEnabled),\n);\n","import type {\n\tAPIApplicationCommandOption,\n\tApplicationIntegrationType,\n\tInteractionContextType,\n\tLocalizationMap,\n\tPermissions,\n} from 'discord-api-types/v10';\nimport { mix } from 'ts-mixer';\nimport { SharedNameAndDescription } from './mixins/NameAndDescription.js';\nimport { SharedSlashCommand } from './mixins/SharedSlashCommand.js';\nimport { SharedSlashCommandOptions } from './mixins/SharedSlashCommandOptions.js';\nimport { SharedSlashCommandSubcommands } from './mixins/SharedSubcommands.js';\n\n/**\n * A builder that creates API-compatible JSON data for slash commands.\n */\n@mix(SharedSlashCommandOptions, SharedNameAndDescription, SharedSlashCommandSubcommands, SharedSlashCommand)\nexport class SlashCommandBuilder {\n\t/**\n\t * The name of this command.\n\t */\n\tpublic readonly name: string = undefined!;\n\n\t/**\n\t * The name localizations of this command.\n\t */\n\tpublic readonly name_localizations?: LocalizationMap;\n\n\t/**\n\t * The description of this command.\n\t */\n\tpublic readonly description: string = undefined!;\n\n\t/**\n\t * The description localizations of this command.\n\t */\n\tpublic readonly description_localizations?: LocalizationMap;\n\n\t/**\n\t * The options of this command.\n\t */\n\tpublic readonly options: ToAPIApplicationCommandOptions[] = [];\n\n\t/**\n\t * The contexts for this command.\n\t */\n\tpublic readonly contexts?: InteractionContextType[];\n\n\t/**\n\t * Whether this command is enabled by default when the application is added to a guild.\n\t *\n\t * @deprecated Use {@link SharedSlashCommand.setDefaultMemberPermissions} or {@link SharedSlashCommand.setDMPermission} instead.\n\t */\n\tpublic readonly default_permission: boolean | undefined = undefined;\n\n\t/**\n\t * The set of permissions represented as a bit set for the command.\n\t */\n\tpublic readonly default_member_permissions: Permissions | null | undefined = undefined;\n\n\t/**\n\t * Indicates whether the command is available in direct messages with the application.\n\t *\n\t * @remarks\n\t * By default, commands are visible. This property is only for global commands.\n\t * @deprecated\n\t * Use {@link SlashCommandBuilder.contexts} instead.\n\t */\n\tpublic readonly dm_permission: boolean | undefined = undefined;\n\n\t/**\n\t * The integration types for this command.\n\t */\n\tpublic readonly integration_types?: ApplicationIntegrationType[];\n\n\t/**\n\t * Whether this command is NSFW.\n\t */\n\tpublic readonly nsfw: boolean | undefined = undefined;\n}\n\nexport interface SlashCommandBuilder\n\textends SharedNameAndDescription,\n\t\tSharedSlashCommandOptions,\n\t\tSharedSlashCommandSubcommands,\n\t\tSharedSlashCommand {}\n\n/**\n * An interface specifically for slash command subcommands.\n */\nexport interface SlashCommandSubcommandsOnlyBuilder\n\textends SharedNameAndDescription,\n\t\tSharedSlashCommandSubcommands,\n\t\tSharedSlashCommand {}\n\n/**\n * An interface specifically for slash command options.\n */\nexport interface SlashCommandOptionsOnlyBuilder\n\textends SharedNameAndDescription,\n\t\tSharedSlashCommandOptions,\n\t\tSharedSlashCommand {}\n\n/**\n * An interface that ensures the `toJSON()` call will return something\n * that can be serialized into API-compatible data.\n */\nexport interface ToAPIApplicationCommandOptions {\n\ttoJSON(): APIApplicationCommandOption;\n}\n","import type { LocaleString, LocalizationMap } from 'discord-api-types/v10';\nimport { validateDescription, validateLocale, validateName } from '../Assertions.js';\n\n/**\n * This mixin holds name and description symbols for slash commands.\n */\nexport class SharedNameAndDescription {\n\t/**\n\t * The name of this command.\n\t */\n\tpublic readonly name!: string;\n\n\t/**\n\t * The name localizations of this command.\n\t */\n\tpublic readonly name_localizations?: LocalizationMap;\n\n\t/**\n\t * The description of this command.\n\t */\n\tpublic readonly description!: string;\n\n\t/**\n\t * The description localizations of this command.\n\t */\n\tpublic readonly description_localizations?: LocalizationMap;\n\n\t/**\n\t * Sets the name of this command.\n\t *\n\t * @param name - The name to use\n\t */\n\tpublic setName(name: string): this {\n\t\t// Assert the name matches the conditions\n\t\tvalidateName(name);\n\n\t\tReflect.set(this, 'name', name);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the description of this command.\n\t *\n\t * @param description - The description to use\n\t */\n\tpublic setDescription(description: string) {\n\t\t// Assert the description matches the conditions\n\t\tvalidateDescription(description);\n\n\t\tReflect.set(this, 'description', description);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets a name localization for this command.\n\t *\n\t * @param locale - The locale to set\n\t * @param localizedName - The localized name for the given `locale`\n\t */\n\tpublic setNameLocalization(locale: LocaleString, localizedName: string | null) {\n\t\tif (!this.name_localizations) {\n\t\t\tReflect.set(this, 'name_localizations', {});\n\t\t}\n\n\t\tconst parsedLocale = validateLocale(locale);\n\n\t\tif (localizedName === null) {\n\t\t\tthis.name_localizations![parsedLocale] = null;\n\t\t\treturn this;\n\t\t}\n\n\t\tvalidateName(localizedName);\n\n\t\tthis.name_localizations![parsedLocale] = localizedName;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the name localizations for this command.\n\t *\n\t * @param localizedNames - The object of localized names to set\n\t */\n\tpublic setNameLocalizations(localizedNames: LocalizationMap | null) {\n\t\tif (localizedNames === null) {\n\t\t\tReflect.set(this, 'name_localizations', null);\n\t\t\treturn this;\n\t\t}\n\n\t\tReflect.set(this, 'name_localizations', {});\n\n\t\tfor (const args of Object.entries(localizedNames)) {\n\t\t\tthis.setNameLocalization(...(args as [LocaleString, string | null]));\n\t\t}\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets a description localization for this command.\n\t *\n\t * @param locale - The locale to set\n\t * @param localizedDescription - The localized description for the given locale\n\t */\n\tpublic setDescriptionLocalization(locale: LocaleString, localizedDescription: string | null) {\n\t\tif (!this.description_localizations) {\n\t\t\tReflect.set(this, 'description_localizations', {});\n\t\t}\n\n\t\tconst parsedLocale = validateLocale(locale);\n\n\t\tif (localizedDescription === null) {\n\t\t\tthis.description_localizations![parsedLocale] = null;\n\t\t\treturn this;\n\t\t}\n\n\t\tvalidateDescription(localizedDescription);\n\n\t\tthis.description_localizations![parsedLocale] = localizedDescription;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the description localizations for this command.\n\t *\n\t * @param localizedDescriptions - The object of localized descriptions to set\n\t */\n\tpublic setDescriptionLocalizations(localizedDescriptions: LocalizationMap | null) {\n\t\tif (localizedDescriptions === null) {\n\t\t\tReflect.set(this, 'description_localizations', null);\n\t\t\treturn this;\n\t\t}\n\n\t\tReflect.set(this, 'description_localizations', {});\n\t\tfor (const args of Object.entries(localizedDescriptions)) {\n\t\t\tthis.setDescriptionLocalization(...(args as [LocaleString, string | null]));\n\t\t}\n\n\t\treturn this;\n\t}\n}\n","import {\n\tApplicationCommandType,\n\ttype ApplicationIntegrationType,\n\ttype InteractionContextType,\n\ttype LocalizationMap,\n\ttype Permissions,\n\ttype RESTPostAPIChatInputApplicationCommandsJSONBody,\n} from 'discord-api-types/v10';\nimport type { RestOrArray } from '../../../util/normalizeArray.js';\nimport { normalizeArray } from '../../../util/normalizeArray.js';\nimport {\n\tcontextsPredicate,\n\tintegrationTypesPredicate,\n\tvalidateDMPermission,\n\tvalidateDefaultMemberPermissions,\n\tvalidateDefaultPermission,\n\tvalidateLocalizationMap,\n\tvalidateNSFW,\n\tvalidateRequiredParameters,\n} from '../Assertions.js';\nimport type { ToAPIApplicationCommandOptions } from '../SlashCommandBuilder.js';\n\n/**\n * This mixin holds symbols that can be shared in slashcommands independent of options or subcommands.\n */\nexport class SharedSlashCommand {\n\tpublic readonly name: string = undefined!;\n\n\tpublic readonly name_localizations?: LocalizationMap;\n\n\tpublic readonly description: string = undefined!;\n\n\tpublic readonly description_localizations?: LocalizationMap;\n\n\tpublic readonly options: ToAPIApplicationCommandOptions[] = [];\n\n\tpublic readonly contexts?: InteractionContextType[];\n\n\t/**\n\t * @deprecated Use {@link SharedSlashCommand.setDefaultMemberPermissions} or {@link SharedSlashCommand.setDMPermission} instead.\n\t */\n\tpublic readonly default_permission: boolean | undefined = undefined;\n\n\tpublic readonly default_member_permissions: Permissions | null | undefined = undefined;\n\n\t/**\n\t * @deprecated Use {@link SharedSlashCommand.contexts} instead.\n\t */\n\tpublic readonly dm_permission: boolean | undefined = undefined;\n\n\tpublic readonly integration_types?: ApplicationIntegrationType[];\n\n\tpublic readonly nsfw: boolean | undefined = undefined;\n\n\t/**\n\t * Sets the contexts of this command.\n\t *\n\t * @param contexts - The contexts\n\t */\n\tpublic setContexts(...contexts: RestOrArray) {\n\t\tReflect.set(this, 'contexts', contextsPredicate.parse(normalizeArray(contexts)));\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the integration types of this command.\n\t *\n\t * @param integrationTypes - The integration types\n\t */\n\tpublic setIntegrationTypes(...integrationTypes: RestOrArray) {\n\t\tReflect.set(this, 'integration_types', integrationTypesPredicate.parse(normalizeArray(integrationTypes)));\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets whether the command is enabled by default when the application is added to a guild.\n\t *\n\t * @remarks\n\t * If set to `false`, you will have to later `PUT` the permissions for this command.\n\t * @param value - Whether or not to enable this command by default\n\t * @see {@link https://discord.com/developers/docs/interactions/application-commands#permissions}\n\t * @deprecated Use {@link SharedSlashCommand.setDefaultMemberPermissions} or {@link SharedSlashCommand.setDMPermission} instead.\n\t */\n\tpublic setDefaultPermission(value: boolean) {\n\t\t// Assert the value matches the conditions\n\t\tvalidateDefaultPermission(value);\n\n\t\tReflect.set(this, 'default_permission', value);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the default permissions a member should have in order to run the command.\n\t *\n\t * @remarks\n\t * You can set this to `'0'` to disable the command by default.\n\t * @param permissions - The permissions bit field to set\n\t * @see {@link https://discord.com/developers/docs/interactions/application-commands#permissions}\n\t */\n\tpublic setDefaultMemberPermissions(permissions: Permissions | bigint | number | null | undefined) {\n\t\t// Assert the value and parse it\n\t\tconst permissionValue = validateDefaultMemberPermissions(permissions);\n\n\t\tReflect.set(this, 'default_member_permissions', permissionValue);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets if the command is available in direct messages with the application.\n\t *\n\t * @remarks\n\t * By default, commands are visible. This method is only for global commands.\n\t * @param enabled - Whether the command should be enabled in direct messages\n\t * @see {@link https://discord.com/developers/docs/interactions/application-commands#permissions}\n\t * @deprecated\n\t * Use {@link SharedSlashCommand.setContexts} instead.\n\t */\n\tpublic setDMPermission(enabled: boolean | null | undefined) {\n\t\t// Assert the value matches the conditions\n\t\tvalidateDMPermission(enabled);\n\n\t\tReflect.set(this, 'dm_permission', enabled);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets whether this command is NSFW.\n\t *\n\t * @param nsfw - Whether this command is NSFW\n\t */\n\tpublic setNSFW(nsfw = true) {\n\t\t// Assert the value matches the conditions\n\t\tvalidateNSFW(nsfw);\n\t\tReflect.set(this, 'nsfw', nsfw);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Serializes this builder to API-compatible JSON data.\n\t *\n\t * @remarks\n\t * This method runs validations on the data before serializing it.\n\t * As such, it may throw an error if the data is invalid.\n\t */\n\tpublic toJSON(): RESTPostAPIChatInputApplicationCommandsJSONBody {\n\t\tvalidateRequiredParameters(this.name, this.description, this.options);\n\n\t\tvalidateLocalizationMap(this.name_localizations);\n\t\tvalidateLocalizationMap(this.description_localizations);\n\n\t\treturn {\n\t\t\t...this,\n\t\t\ttype: ApplicationCommandType.ChatInput,\n\t\t\toptions: this.options.map((option) => option.toJSON()),\n\t\t};\n\t}\n}\n","import { ApplicationCommandOptionType, type APIApplicationCommandAttachmentOption } from 'discord-api-types/v10';\nimport { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js';\n\n/**\n * A slash command attachment option.\n */\nexport class SlashCommandAttachmentOption extends ApplicationCommandOptionBase {\n\t/**\n\t * The type of this option.\n\t */\n\tpublic override readonly type = ApplicationCommandOptionType.Attachment as const;\n\n\t/**\n\t * {@inheritDoc ApplicationCommandOptionBase.toJSON}\n\t */\n\tpublic toJSON(): APIApplicationCommandAttachmentOption {\n\t\tthis.runRequiredValidations();\n\n\t\treturn { ...this };\n\t}\n}\n","import type { APIApplicationCommandBasicOption, ApplicationCommandOptionType } from 'discord-api-types/v10';\nimport { validateRequiredParameters, validateRequired, validateLocalizationMap } from '../Assertions.js';\nimport { SharedNameAndDescription } from './NameAndDescription.js';\n\n/**\n * The base application command option builder that contains common symbols for application command builders.\n */\nexport abstract class ApplicationCommandOptionBase extends SharedNameAndDescription {\n\t/**\n\t * The type of this option.\n\t */\n\tpublic abstract readonly type: ApplicationCommandOptionType;\n\n\t/**\n\t * Whether this option is required.\n\t *\n\t * @defaultValue `false`\n\t */\n\tpublic readonly required: boolean = false;\n\n\t/**\n\t * Sets whether this option is required.\n\t *\n\t * @param required - Whether this option should be required\n\t */\n\tpublic setRequired(required: boolean) {\n\t\t// Assert that you actually passed a boolean\n\t\tvalidateRequired(required);\n\n\t\tReflect.set(this, 'required', required);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Serializes this builder to API-compatible JSON data.\n\t *\n\t * @remarks\n\t * This method runs validations on the data before serializing it.\n\t * As such, it may throw an error if the data is invalid.\n\t */\n\tpublic abstract toJSON(): APIApplicationCommandBasicOption;\n\n\t/**\n\t * This method runs required validators on this builder.\n\t */\n\tprotected runRequiredValidations() {\n\t\tvalidateRequiredParameters(this.name, this.description, []);\n\n\t\t// Validate localizations\n\t\tvalidateLocalizationMap(this.name_localizations);\n\t\tvalidateLocalizationMap(this.description_localizations);\n\n\t\t// Assert that you actually passed a boolean\n\t\tvalidateRequired(this.required);\n\t}\n}\n","import { ApplicationCommandOptionType, type APIApplicationCommandBooleanOption } from 'discord-api-types/v10';\nimport { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js';\n\n/**\n * A slash command boolean option.\n */\nexport class SlashCommandBooleanOption extends ApplicationCommandOptionBase {\n\t/**\n\t * The type of this option.\n\t */\n\tpublic readonly type = ApplicationCommandOptionType.Boolean as const;\n\n\t/**\n\t * {@inheritDoc ApplicationCommandOptionBase.toJSON}\n\t */\n\tpublic toJSON(): APIApplicationCommandBooleanOption {\n\t\tthis.runRequiredValidations();\n\n\t\treturn { ...this };\n\t}\n}\n","import { ApplicationCommandOptionType, type APIApplicationCommandChannelOption } from 'discord-api-types/v10';\nimport { mix } from 'ts-mixer';\nimport { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js';\nimport { ApplicationCommandOptionChannelTypesMixin } from '../mixins/ApplicationCommandOptionChannelTypesMixin.js';\n\n/**\n * A slash command channel option.\n */\n@mix(ApplicationCommandOptionChannelTypesMixin)\nexport class SlashCommandChannelOption extends ApplicationCommandOptionBase {\n\t/**\n\t * The type of this option.\n\t */\n\tpublic override readonly type = ApplicationCommandOptionType.Channel as const;\n\n\t/**\n\t * {@inheritDoc ApplicationCommandOptionBase.toJSON}\n\t */\n\tpublic toJSON(): APIApplicationCommandChannelOption {\n\t\tthis.runRequiredValidations();\n\n\t\treturn { ...this };\n\t}\n}\n\nexport interface SlashCommandChannelOption extends ApplicationCommandOptionChannelTypesMixin {}\n","import { s } from '@sapphire/shapeshift';\nimport { ChannelType } from 'discord-api-types/v10';\nimport { normalizeArray, type RestOrArray } from '../../../util/normalizeArray';\n\n/**\n * The allowed channel types used for a channel option in a slash command builder.\n *\n * @privateRemarks This can't be dynamic because const enums are erased at runtime.\n * @internal\n */\nconst allowedChannelTypes = [\n\tChannelType.GuildText,\n\tChannelType.GuildVoice,\n\tChannelType.GuildCategory,\n\tChannelType.GuildAnnouncement,\n\tChannelType.AnnouncementThread,\n\tChannelType.PublicThread,\n\tChannelType.PrivateThread,\n\tChannelType.GuildStageVoice,\n\tChannelType.GuildForum,\n\tChannelType.GuildMedia,\n] as const;\n\n/**\n * The type of allowed channel types used for a channel option.\n */\nexport type ApplicationCommandOptionAllowedChannelTypes = (typeof allowedChannelTypes)[number];\n\nconst channelTypesPredicate = s.array(s.union(allowedChannelTypes.map((type) => s.literal(type))));\n\n/**\n * This mixin holds channel type symbols used for options.\n */\nexport class ApplicationCommandOptionChannelTypesMixin {\n\t/**\n\t * The channel types of this option.\n\t */\n\tpublic readonly channel_types?: ApplicationCommandOptionAllowedChannelTypes[];\n\n\t/**\n\t * Adds channel types to this option.\n\t *\n\t * @param channelTypes - The channel types\n\t */\n\tpublic addChannelTypes(...channelTypes: RestOrArray) {\n\t\tif (this.channel_types === undefined) {\n\t\t\tReflect.set(this, 'channel_types', []);\n\t\t}\n\n\t\tthis.channel_types!.push(...channelTypesPredicate.parse(normalizeArray(channelTypes)));\n\n\t\treturn this;\n\t}\n}\n","import { s } from '@sapphire/shapeshift';\nimport { ApplicationCommandOptionType, type APIApplicationCommandIntegerOption } from 'discord-api-types/v10';\nimport { mix } from 'ts-mixer';\nimport { ApplicationCommandNumericOptionMinMaxValueMixin } from '../mixins/ApplicationCommandNumericOptionMinMaxValueMixin.js';\nimport { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js';\nimport { ApplicationCommandOptionWithAutocompleteMixin } from '../mixins/ApplicationCommandOptionWithAutocompleteMixin.js';\nimport { ApplicationCommandOptionWithChoicesMixin } from '../mixins/ApplicationCommandOptionWithChoicesMixin.js';\n\nconst numberValidator = s.number().int();\n\n/**\n * A slash command integer option.\n */\n@mix(\n\tApplicationCommandNumericOptionMinMaxValueMixin,\n\tApplicationCommandOptionWithAutocompleteMixin,\n\tApplicationCommandOptionWithChoicesMixin,\n)\nexport class SlashCommandIntegerOption\n\textends ApplicationCommandOptionBase\n\timplements ApplicationCommandNumericOptionMinMaxValueMixin\n{\n\t/**\n\t * The type of this option.\n\t */\n\tpublic readonly type = ApplicationCommandOptionType.Integer as const;\n\n\t/**\n\t * {@inheritDoc ApplicationCommandNumericOptionMinMaxValueMixin.setMaxValue}\n\t */\n\tpublic setMaxValue(max: number): this {\n\t\tnumberValidator.parse(max);\n\n\t\tReflect.set(this, 'max_value', max);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ApplicationCommandNumericOptionMinMaxValueMixin.setMinValue}\n\t */\n\tpublic setMinValue(min: number): this {\n\t\tnumberValidator.parse(min);\n\n\t\tReflect.set(this, 'min_value', min);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ApplicationCommandOptionBase.toJSON}\n\t */\n\tpublic toJSON(): APIApplicationCommandIntegerOption {\n\t\tthis.runRequiredValidations();\n\n\t\tif (this.autocomplete && Array.isArray(this.choices) && this.choices.length > 0) {\n\t\t\tthrow new RangeError('Autocomplete and choices are mutually exclusive to each other.');\n\t\t}\n\n\t\treturn { ...this } as APIApplicationCommandIntegerOption;\n\t}\n}\n\nexport interface SlashCommandIntegerOption\n\textends ApplicationCommandNumericOptionMinMaxValueMixin,\n\t\tApplicationCommandOptionWithChoicesMixin,\n\t\tApplicationCommandOptionWithAutocompleteMixin {}\n","/**\n * This mixin holds minimum and maximum symbols used for options.\n */\nexport abstract class ApplicationCommandNumericOptionMinMaxValueMixin {\n\t/**\n\t * The maximum value of this option.\n\t */\n\tpublic readonly max_value?: number;\n\n\t/**\n\t * The minimum value of this option.\n\t */\n\tpublic readonly min_value?: number;\n\n\t/**\n\t * Sets the maximum number value of this option.\n\t *\n\t * @param max - The maximum value this option can be\n\t */\n\tpublic abstract setMaxValue(max: number): this;\n\n\t/**\n\t * Sets the minimum number value of this option.\n\t *\n\t * @param min - The minimum value this option can be\n\t */\n\tpublic abstract setMinValue(min: number): this;\n}\n","import { s } from '@sapphire/shapeshift';\nimport type { ApplicationCommandOptionType } from 'discord-api-types/v10';\n\nconst booleanPredicate = s.boolean();\n\n/**\n * This mixin holds choices and autocomplete symbols used for options.\n */\nexport class ApplicationCommandOptionWithAutocompleteMixin {\n\t/**\n\t * Whether this option utilizes autocomplete.\n\t */\n\tpublic readonly autocomplete?: boolean;\n\n\t/**\n\t * The type of this option.\n\t *\n\t * @privateRemarks Since this is present and this is a mixin, this is needed.\n\t */\n\tpublic readonly type!: ApplicationCommandOptionType;\n\n\t/**\n\t * Whether this option uses autocomplete.\n\t *\n\t * @param autocomplete - Whether this option should use autocomplete\n\t */\n\tpublic setAutocomplete(autocomplete: boolean): this {\n\t\t// Assert that you actually passed a boolean\n\t\tbooleanPredicate.parse(autocomplete);\n\n\t\tif (autocomplete && 'choices' in this && Array.isArray(this.choices) && this.choices.length > 0) {\n\t\t\tthrow new RangeError('Autocomplete and choices are mutually exclusive to each other.');\n\t\t}\n\n\t\tReflect.set(this, 'autocomplete', autocomplete);\n\n\t\treturn this;\n\t}\n}\n","import { s } from '@sapphire/shapeshift';\nimport { ApplicationCommandOptionType, type APIApplicationCommandOptionChoice } from 'discord-api-types/v10';\nimport { normalizeArray, type RestOrArray } from '../../../util/normalizeArray.js';\nimport { localizationMapPredicate, validateChoicesLength } from '../Assertions.js';\n\nconst stringPredicate = s.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(100);\nconst numberPredicate = s.number().greaterThan(Number.NEGATIVE_INFINITY).lessThan(Number.POSITIVE_INFINITY);\nconst choicesPredicate = s\n\t.object({\n\t\tname: stringPredicate,\n\t\tname_localizations: localizationMapPredicate,\n\t\tvalue: s.union([stringPredicate, numberPredicate]),\n\t})\n\t.array();\n\n/**\n * This mixin holds choices and autocomplete symbols used for options.\n */\nexport class ApplicationCommandOptionWithChoicesMixin {\n\t/**\n\t * The choices of this option.\n\t */\n\tpublic readonly choices?: APIApplicationCommandOptionChoice[];\n\n\t/**\n\t * The type of this option.\n\t *\n\t * @privateRemarks Since this is present and this is a mixin, this is needed.\n\t */\n\tpublic readonly type!: ApplicationCommandOptionType;\n\n\t/**\n\t * Adds multiple choices to this option.\n\t *\n\t * @param choices - The choices to add\n\t */\n\tpublic addChoices(...choices: RestOrArray>): this {\n\t\tconst normalizedChoices = normalizeArray(choices);\n\t\tif (normalizedChoices.length > 0 && 'autocomplete' in this && this.autocomplete) {\n\t\t\tthrow new RangeError('Autocomplete and choices are mutually exclusive to each other.');\n\t\t}\n\n\t\tchoicesPredicate.parse(normalizedChoices);\n\n\t\tif (this.choices === undefined) {\n\t\t\tReflect.set(this, 'choices', []);\n\t\t}\n\n\t\tvalidateChoicesLength(normalizedChoices.length, this.choices);\n\n\t\tfor (const { name, name_localizations, value } of normalizedChoices) {\n\t\t\t// Validate the value\n\t\t\tif (this.type === ApplicationCommandOptionType.String) {\n\t\t\t\tstringPredicate.parse(value);\n\t\t\t} else {\n\t\t\t\tnumberPredicate.parse(value);\n\t\t\t}\n\n\t\t\tthis.choices!.push({ name, name_localizations, value });\n\t\t}\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets multiple choices for this option.\n\t *\n\t * @param choices - The choices to set\n\t */\n\tpublic setChoices>(...choices: RestOrArray): this {\n\t\tconst normalizedChoices = normalizeArray(choices);\n\t\tif (normalizedChoices.length > 0 && 'autocomplete' in this && this.autocomplete) {\n\t\t\tthrow new RangeError('Autocomplete and choices are mutually exclusive to each other.');\n\t\t}\n\n\t\tchoicesPredicate.parse(normalizedChoices);\n\n\t\tReflect.set(this, 'choices', []);\n\t\tthis.addChoices(normalizedChoices);\n\n\t\treturn this;\n\t}\n}\n","import { ApplicationCommandOptionType, type APIApplicationCommandMentionableOption } from 'discord-api-types/v10';\nimport { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js';\n\n/**\n * A slash command mentionable option.\n */\nexport class SlashCommandMentionableOption extends ApplicationCommandOptionBase {\n\t/**\n\t * The type of this option.\n\t */\n\tpublic readonly type = ApplicationCommandOptionType.Mentionable as const;\n\n\t/**\n\t * {@inheritDoc ApplicationCommandOptionBase.toJSON}\n\t */\n\tpublic toJSON(): APIApplicationCommandMentionableOption {\n\t\tthis.runRequiredValidations();\n\n\t\treturn { ...this };\n\t}\n}\n","import { s } from '@sapphire/shapeshift';\nimport { ApplicationCommandOptionType, type APIApplicationCommandNumberOption } from 'discord-api-types/v10';\nimport { mix } from 'ts-mixer';\nimport { ApplicationCommandNumericOptionMinMaxValueMixin } from '../mixins/ApplicationCommandNumericOptionMinMaxValueMixin.js';\nimport { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js';\nimport { ApplicationCommandOptionWithAutocompleteMixin } from '../mixins/ApplicationCommandOptionWithAutocompleteMixin.js';\nimport { ApplicationCommandOptionWithChoicesMixin } from '../mixins/ApplicationCommandOptionWithChoicesMixin.js';\n\nconst numberValidator = s.number();\n\n/**\n * A slash command number option.\n */\n@mix(\n\tApplicationCommandNumericOptionMinMaxValueMixin,\n\tApplicationCommandOptionWithAutocompleteMixin,\n\tApplicationCommandOptionWithChoicesMixin,\n)\nexport class SlashCommandNumberOption\n\textends ApplicationCommandOptionBase\n\timplements ApplicationCommandNumericOptionMinMaxValueMixin\n{\n\t/**\n\t * The type of this option.\n\t */\n\tpublic readonly type = ApplicationCommandOptionType.Number as const;\n\n\t/**\n\t * {@inheritDoc ApplicationCommandNumericOptionMinMaxValueMixin.setMaxValue}\n\t */\n\tpublic setMaxValue(max: number): this {\n\t\tnumberValidator.parse(max);\n\n\t\tReflect.set(this, 'max_value', max);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ApplicationCommandNumericOptionMinMaxValueMixin.setMinValue}\n\t */\n\tpublic setMinValue(min: number): this {\n\t\tnumberValidator.parse(min);\n\n\t\tReflect.set(this, 'min_value', min);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ApplicationCommandOptionBase.toJSON}\n\t */\n\tpublic toJSON(): APIApplicationCommandNumberOption {\n\t\tthis.runRequiredValidations();\n\n\t\tif (this.autocomplete && Array.isArray(this.choices) && this.choices.length > 0) {\n\t\t\tthrow new RangeError('Autocomplete and choices are mutually exclusive to each other.');\n\t\t}\n\n\t\treturn { ...this } as APIApplicationCommandNumberOption;\n\t}\n}\n\nexport interface SlashCommandNumberOption\n\textends ApplicationCommandNumericOptionMinMaxValueMixin,\n\t\tApplicationCommandOptionWithChoicesMixin,\n\t\tApplicationCommandOptionWithAutocompleteMixin {}\n","import { ApplicationCommandOptionType, type APIApplicationCommandRoleOption } from 'discord-api-types/v10';\nimport { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js';\n\n/**\n * A slash command role option.\n */\nexport class SlashCommandRoleOption extends ApplicationCommandOptionBase {\n\t/**\n\t * The type of this option.\n\t */\n\tpublic override readonly type = ApplicationCommandOptionType.Role as const;\n\n\t/**\n\t * {@inheritDoc ApplicationCommandOptionBase.toJSON}\n\t */\n\tpublic toJSON(): APIApplicationCommandRoleOption {\n\t\tthis.runRequiredValidations();\n\n\t\treturn { ...this };\n\t}\n}\n","import { s } from '@sapphire/shapeshift';\nimport { ApplicationCommandOptionType, type APIApplicationCommandStringOption } from 'discord-api-types/v10';\nimport { mix } from 'ts-mixer';\nimport { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js';\nimport { ApplicationCommandOptionWithAutocompleteMixin } from '../mixins/ApplicationCommandOptionWithAutocompleteMixin.js';\nimport { ApplicationCommandOptionWithChoicesMixin } from '../mixins/ApplicationCommandOptionWithChoicesMixin.js';\n\nconst minLengthValidator = s.number().greaterThanOrEqual(0).lessThanOrEqual(6_000);\nconst maxLengthValidator = s.number().greaterThanOrEqual(1).lessThanOrEqual(6_000);\n\n/**\n * A slash command string option.\n */\n@mix(ApplicationCommandOptionWithAutocompleteMixin, ApplicationCommandOptionWithChoicesMixin)\nexport class SlashCommandStringOption extends ApplicationCommandOptionBase {\n\t/**\n\t * The type of this option.\n\t */\n\tpublic readonly type = ApplicationCommandOptionType.String as const;\n\n\t/**\n\t * The maximum length of this option.\n\t */\n\tpublic readonly max_length?: number;\n\n\t/**\n\t * The minimum length of this option.\n\t */\n\tpublic readonly min_length?: number;\n\n\t/**\n\t * Sets the maximum length of this string option.\n\t *\n\t * @param max - The maximum length this option can be\n\t */\n\tpublic setMaxLength(max: number): this {\n\t\tmaxLengthValidator.parse(max);\n\n\t\tReflect.set(this, 'max_length', max);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the minimum length of this string option.\n\t *\n\t * @param min - The minimum length this option can be\n\t */\n\tpublic setMinLength(min: number): this {\n\t\tminLengthValidator.parse(min);\n\n\t\tReflect.set(this, 'min_length', min);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ApplicationCommandOptionBase.toJSON}\n\t */\n\tpublic toJSON(): APIApplicationCommandStringOption {\n\t\tthis.runRequiredValidations();\n\n\t\tif (this.autocomplete && Array.isArray(this.choices) && this.choices.length > 0) {\n\t\t\tthrow new RangeError('Autocomplete and choices are mutually exclusive to each other.');\n\t\t}\n\n\t\treturn { ...this } as APIApplicationCommandStringOption;\n\t}\n}\n\nexport interface SlashCommandStringOption\n\textends ApplicationCommandOptionWithChoicesMixin,\n\t\tApplicationCommandOptionWithAutocompleteMixin {}\n","import { ApplicationCommandOptionType, type APIApplicationCommandUserOption } from 'discord-api-types/v10';\nimport { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js';\n\n/**\n * A slash command user option.\n */\nexport class SlashCommandUserOption extends ApplicationCommandOptionBase {\n\t/**\n\t * The type of this option.\n\t */\n\tpublic readonly type = ApplicationCommandOptionType.User as const;\n\n\t/**\n\t * {@inheritDoc ApplicationCommandOptionBase.toJSON}\n\t */\n\tpublic toJSON(): APIApplicationCommandUserOption {\n\t\tthis.runRequiredValidations();\n\n\t\treturn { ...this };\n\t}\n}\n","import { assertReturnOfBuilder, validateMaxOptionsLength } from '../Assertions.js';\nimport type { ToAPIApplicationCommandOptions } from '../SlashCommandBuilder';\nimport { SlashCommandAttachmentOption } from '../options/attachment.js';\nimport { SlashCommandBooleanOption } from '../options/boolean.js';\nimport { SlashCommandChannelOption } from '../options/channel.js';\nimport { SlashCommandIntegerOption } from '../options/integer.js';\nimport { SlashCommandMentionableOption } from '../options/mentionable.js';\nimport { SlashCommandNumberOption } from '../options/number.js';\nimport { SlashCommandRoleOption } from '../options/role.js';\nimport { SlashCommandStringOption } from '../options/string.js';\nimport { SlashCommandUserOption } from '../options/user.js';\nimport type { ApplicationCommandOptionBase } from './ApplicationCommandOptionBase.js';\n\n/**\n * This mixin holds symbols that can be shared in slash command options.\n *\n * @typeParam TypeAfterAddingOptions - The type this class should return after adding an option.\n */\nexport class SharedSlashCommandOptions<\n\tTypeAfterAddingOptions extends SharedSlashCommandOptions,\n> {\n\tpublic readonly options!: ToAPIApplicationCommandOptions[];\n\n\t/**\n\t * Adds a boolean option.\n\t *\n\t * @param input - A function that returns an option builder or an already built builder\n\t */\n\tpublic addBooleanOption(\n\t\tinput: SlashCommandBooleanOption | ((builder: SlashCommandBooleanOption) => SlashCommandBooleanOption),\n\t) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandBooleanOption);\n\t}\n\n\t/**\n\t * Adds a user option.\n\t *\n\t * @param input - A function that returns an option builder or an already built builder\n\t */\n\tpublic addUserOption(input: SlashCommandUserOption | ((builder: SlashCommandUserOption) => SlashCommandUserOption)) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandUserOption);\n\t}\n\n\t/**\n\t * Adds a channel option.\n\t *\n\t * @param input - A function that returns an option builder or an already built builder\n\t */\n\tpublic addChannelOption(\n\t\tinput: SlashCommandChannelOption | ((builder: SlashCommandChannelOption) => SlashCommandChannelOption),\n\t) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandChannelOption);\n\t}\n\n\t/**\n\t * Adds a role option.\n\t *\n\t * @param input - A function that returns an option builder or an already built builder\n\t */\n\tpublic addRoleOption(input: SlashCommandRoleOption | ((builder: SlashCommandRoleOption) => SlashCommandRoleOption)) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandRoleOption);\n\t}\n\n\t/**\n\t * Adds an attachment option.\n\t *\n\t * @param input - A function that returns an option builder or an already built builder\n\t */\n\tpublic addAttachmentOption(\n\t\tinput: SlashCommandAttachmentOption | ((builder: SlashCommandAttachmentOption) => SlashCommandAttachmentOption),\n\t) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandAttachmentOption);\n\t}\n\n\t/**\n\t * Adds a mentionable option.\n\t *\n\t * @param input - A function that returns an option builder or an already built builder\n\t */\n\tpublic addMentionableOption(\n\t\tinput: SlashCommandMentionableOption | ((builder: SlashCommandMentionableOption) => SlashCommandMentionableOption),\n\t) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandMentionableOption);\n\t}\n\n\t/**\n\t * Adds a string option.\n\t *\n\t * @param input - A function that returns an option builder or an already built builder\n\t */\n\tpublic addStringOption(\n\t\tinput: SlashCommandStringOption | ((builder: SlashCommandStringOption) => SlashCommandStringOption),\n\t) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandStringOption);\n\t}\n\n\t/**\n\t * Adds an integer option.\n\t *\n\t * @param input - A function that returns an option builder or an already built builder\n\t */\n\tpublic addIntegerOption(\n\t\tinput: SlashCommandIntegerOption | ((builder: SlashCommandIntegerOption) => SlashCommandIntegerOption),\n\t) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandIntegerOption);\n\t}\n\n\t/**\n\t * Adds a number option.\n\t *\n\t * @param input - A function that returns an option builder or an already built builder\n\t */\n\tpublic addNumberOption(\n\t\tinput: SlashCommandNumberOption | ((builder: SlashCommandNumberOption) => SlashCommandNumberOption),\n\t) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandNumberOption);\n\t}\n\n\t/**\n\t * Where the actual adding magic happens. ✨\n\t *\n\t * @param input - The input. What else?\n\t * @param Instance - The instance of whatever is being added\n\t * @internal\n\t */\n\tprivate _sharedAddOptionMethod(\n\t\tinput: OptionBuilder | ((builder: OptionBuilder) => OptionBuilder),\n\t\tInstance: new () => OptionBuilder,\n\t): TypeAfterAddingOptions {\n\t\tconst { options } = this;\n\n\t\t// First, assert options conditions - we cannot have more than 25 options\n\t\tvalidateMaxOptionsLength(options);\n\n\t\t// Get the final result\n\t\tconst result = typeof input === 'function' ? input(new Instance()) : input;\n\n\t\tassertReturnOfBuilder(result, Instance);\n\n\t\t// Push it\n\t\toptions.push(result);\n\n\t\treturn this as unknown as TypeAfterAddingOptions;\n\t}\n}\n","import {\n\tApplicationCommandOptionType,\n\ttype APIApplicationCommandSubcommandGroupOption,\n\ttype APIApplicationCommandSubcommandOption,\n} from 'discord-api-types/v10';\nimport { mix } from 'ts-mixer';\nimport { assertReturnOfBuilder, validateMaxOptionsLength, validateRequiredParameters } from './Assertions.js';\nimport type { ToAPIApplicationCommandOptions } from './SlashCommandBuilder.js';\nimport type { ApplicationCommandOptionBase } from './mixins/ApplicationCommandOptionBase.js';\nimport { SharedNameAndDescription } from './mixins/NameAndDescription.js';\nimport { SharedSlashCommandOptions } from './mixins/SharedSlashCommandOptions.js';\n\n/**\n * Represents a folder for subcommands.\n *\n * @see {@link https://discord.com/developers/docs/interactions/application-commands#subcommands-and-subcommand-groups}\n */\n@mix(SharedNameAndDescription)\nexport class SlashCommandSubcommandGroupBuilder implements ToAPIApplicationCommandOptions {\n\t/**\n\t * The name of this subcommand group.\n\t */\n\tpublic readonly name: string = undefined!;\n\n\t/**\n\t * The description of this subcommand group.\n\t */\n\tpublic readonly description: string = undefined!;\n\n\t/**\n\t * The subcommands within this subcommand group.\n\t */\n\tpublic readonly options: SlashCommandSubcommandBuilder[] = [];\n\n\t/**\n\t * Adds a new subcommand to this group.\n\t *\n\t * @param input - A function that returns a subcommand builder or an already built builder\n\t */\n\tpublic addSubcommand(\n\t\tinput:\n\t\t\t| SlashCommandSubcommandBuilder\n\t\t\t| ((subcommandGroup: SlashCommandSubcommandBuilder) => SlashCommandSubcommandBuilder),\n\t) {\n\t\tconst { options } = this;\n\n\t\t// First, assert options conditions - we cannot have more than 25 options\n\t\tvalidateMaxOptionsLength(options);\n\n\t\t// Get the final result\n\t\t// eslint-disable-next-line @typescript-eslint/no-use-before-define\n\t\tconst result = typeof input === 'function' ? input(new SlashCommandSubcommandBuilder()) : input;\n\n\t\t// eslint-disable-next-line @typescript-eslint/no-use-before-define\n\t\tassertReturnOfBuilder(result, SlashCommandSubcommandBuilder);\n\n\t\t// Push it\n\t\toptions.push(result);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Serializes this builder to API-compatible JSON data.\n\t *\n\t * @remarks\n\t * This method runs validations on the data before serializing it.\n\t * As such, it may throw an error if the data is invalid.\n\t */\n\tpublic toJSON(): APIApplicationCommandSubcommandGroupOption {\n\t\tvalidateRequiredParameters(this.name, this.description, this.options);\n\n\t\treturn {\n\t\t\ttype: ApplicationCommandOptionType.SubcommandGroup,\n\t\t\tname: this.name,\n\t\t\tname_localizations: this.name_localizations,\n\t\t\tdescription: this.description,\n\t\t\tdescription_localizations: this.description_localizations,\n\t\t\toptions: this.options.map((option) => option.toJSON()),\n\t\t};\n\t}\n}\n\nexport interface SlashCommandSubcommandGroupBuilder extends SharedNameAndDescription {}\n\n/**\n * A builder that creates API-compatible JSON data for slash command subcommands.\n *\n * @see {@link https://discord.com/developers/docs/interactions/application-commands#subcommands-and-subcommand-groups}\n */\n@mix(SharedNameAndDescription, SharedSlashCommandOptions)\nexport class SlashCommandSubcommandBuilder implements ToAPIApplicationCommandOptions {\n\t/**\n\t * The name of this subcommand.\n\t */\n\tpublic readonly name: string = undefined!;\n\n\t/**\n\t * The description of this subcommand.\n\t */\n\tpublic readonly description: string = undefined!;\n\n\t/**\n\t * The options within this subcommand.\n\t */\n\tpublic readonly options: ApplicationCommandOptionBase[] = [];\n\n\t/**\n\t * Serializes this builder to API-compatible JSON data.\n\t *\n\t * @remarks\n\t * This method runs validations on the data before serializing it.\n\t * As such, it may throw an error if the data is invalid.\n\t */\n\tpublic toJSON(): APIApplicationCommandSubcommandOption {\n\t\tvalidateRequiredParameters(this.name, this.description, this.options);\n\n\t\treturn {\n\t\t\ttype: ApplicationCommandOptionType.Subcommand,\n\t\t\tname: this.name,\n\t\t\tname_localizations: this.name_localizations,\n\t\t\tdescription: this.description,\n\t\t\tdescription_localizations: this.description_localizations,\n\t\t\toptions: this.options.map((option) => option.toJSON()),\n\t\t};\n\t}\n}\n\nexport interface SlashCommandSubcommandBuilder\n\textends SharedNameAndDescription,\n\t\tSharedSlashCommandOptions {}\n","import { assertReturnOfBuilder, validateMaxOptionsLength } from '../Assertions.js';\nimport type { ToAPIApplicationCommandOptions } from '../SlashCommandBuilder.js';\nimport { SlashCommandSubcommandBuilder, SlashCommandSubcommandGroupBuilder } from '../SlashCommandSubcommands.js';\n\n/**\n * This mixin holds symbols that can be shared in slash subcommands.\n *\n * @typeParam TypeAfterAddingSubcommands - The type this class should return after adding a subcommand or subcommand group.\n */\nexport class SharedSlashCommandSubcommands<\n\tTypeAfterAddingSubcommands extends SharedSlashCommandSubcommands,\n> {\n\tpublic readonly options: ToAPIApplicationCommandOptions[] = [];\n\n\t/**\n\t * Adds a new subcommand group to this command.\n\t *\n\t * @param input - A function that returns a subcommand group builder or an already built builder\n\t */\n\tpublic addSubcommandGroup(\n\t\tinput:\n\t\t\t| SlashCommandSubcommandGroupBuilder\n\t\t\t| ((subcommandGroup: SlashCommandSubcommandGroupBuilder) => SlashCommandSubcommandGroupBuilder),\n\t): TypeAfterAddingSubcommands {\n\t\tconst { options } = this;\n\n\t\t// First, assert options conditions - we cannot have more than 25 options\n\t\tvalidateMaxOptionsLength(options);\n\n\t\t// Get the final result\n\t\tconst result = typeof input === 'function' ? input(new SlashCommandSubcommandGroupBuilder()) : input;\n\n\t\tassertReturnOfBuilder(result, SlashCommandSubcommandGroupBuilder);\n\n\t\t// Push it\n\t\toptions.push(result);\n\n\t\treturn this as unknown as TypeAfterAddingSubcommands;\n\t}\n\n\t/**\n\t * Adds a new subcommand to this command.\n\t *\n\t * @param input - A function that returns a subcommand builder or an already built builder\n\t */\n\tpublic addSubcommand(\n\t\tinput:\n\t\t\t| SlashCommandSubcommandBuilder\n\t\t\t| ((subcommandGroup: SlashCommandSubcommandBuilder) => SlashCommandSubcommandBuilder),\n\t): TypeAfterAddingSubcommands {\n\t\tconst { options } = this;\n\n\t\t// First, assert options conditions - we cannot have more than 25 options\n\t\tvalidateMaxOptionsLength(options);\n\n\t\t// Get the final result\n\t\tconst result = typeof input === 'function' ? input(new SlashCommandSubcommandBuilder()) : input;\n\n\t\tassertReturnOfBuilder(result, SlashCommandSubcommandBuilder);\n\n\t\t// Push it\n\t\toptions.push(result);\n\n\t\treturn this as unknown as TypeAfterAddingSubcommands;\n\t}\n}\n","import { s } from '@sapphire/shapeshift';\nimport { ApplicationCommandType, ApplicationIntegrationType, InteractionContextType } from 'discord-api-types/v10';\nimport { isValidationEnabled } from '../../util/validation.js';\nimport type { ContextMenuCommandType } from './ContextMenuCommandBuilder.js';\n\nconst namePredicate = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(32)\n\t.regex(/\\S/)\n\t.setValidationEnabled(isValidationEnabled);\nconst typePredicate = s\n\t.union([s.literal(ApplicationCommandType.User), s.literal(ApplicationCommandType.Message)])\n\t.setValidationEnabled(isValidationEnabled);\nconst booleanPredicate = s.boolean();\n\nexport function validateDefaultPermission(value: unknown): asserts value is boolean {\n\tbooleanPredicate.parse(value);\n}\n\nexport function validateName(name: unknown): asserts name is string {\n\tnamePredicate.parse(name);\n}\n\nexport function validateType(type: unknown): asserts type is ContextMenuCommandType {\n\ttypePredicate.parse(type);\n}\n\nexport function validateRequiredParameters(name: string, type: number) {\n\t// Assert name matches all conditions\n\tvalidateName(name);\n\n\t// Assert type is valid\n\tvalidateType(type);\n}\n\nconst dmPermissionPredicate = s.boolean().nullish();\n\nexport function validateDMPermission(value: unknown): asserts value is boolean | null | undefined {\n\tdmPermissionPredicate.parse(value);\n}\n\nconst memberPermissionPredicate = s\n\t.union([\n\t\ts.bigint().transform((value) => value.toString()),\n\t\ts\n\t\t\t.number()\n\t\t\t.safeInt()\n\t\t\t.transform((value) => value.toString()),\n\t\ts.string().regex(/^\\d+$/),\n\t])\n\t.nullish();\n\nexport function validateDefaultMemberPermissions(permissions: unknown) {\n\treturn memberPermissionPredicate.parse(permissions);\n}\n\nexport const contextsPredicate = s.array(\n\ts.nativeEnum(InteractionContextType).setValidationEnabled(isValidationEnabled),\n);\n\nexport const integrationTypesPredicate = s.array(\n\ts.nativeEnum(ApplicationIntegrationType).setValidationEnabled(isValidationEnabled),\n);\n","import type {\n\tApplicationCommandType,\n\tApplicationIntegrationType,\n\tInteractionContextType,\n\tLocaleString,\n\tLocalizationMap,\n\tPermissions,\n\tRESTPostAPIContextMenuApplicationCommandsJSONBody,\n} from 'discord-api-types/v10';\nimport type { RestOrArray } from '../../util/normalizeArray.js';\nimport { normalizeArray } from '../../util/normalizeArray.js';\nimport { validateLocale, validateLocalizationMap } from '../slashCommands/Assertions.js';\nimport {\n\tvalidateRequiredParameters,\n\tvalidateName,\n\tvalidateType,\n\tvalidateDefaultPermission,\n\tvalidateDefaultMemberPermissions,\n\tvalidateDMPermission,\n\tcontextsPredicate,\n\tintegrationTypesPredicate,\n} from './Assertions.js';\n\n/**\n * The type a context menu command can be.\n */\nexport type ContextMenuCommandType = ApplicationCommandType.Message | ApplicationCommandType.User;\n\n/**\n * A builder that creates API-compatible JSON data for context menu commands.\n */\nexport class ContextMenuCommandBuilder {\n\t/**\n\t * The name of this command.\n\t */\n\tpublic readonly name: string = undefined!;\n\n\t/**\n\t * The name localizations of this command.\n\t */\n\tpublic readonly name_localizations?: LocalizationMap;\n\n\t/**\n\t * The type of this command.\n\t */\n\tpublic readonly type: ContextMenuCommandType = undefined!;\n\n\t/**\n\t * The contexts for this command.\n\t */\n\tpublic readonly contexts?: InteractionContextType[];\n\n\t/**\n\t * Whether this command is enabled by default when the application is added to a guild.\n\t *\n\t * @deprecated Use {@link ContextMenuCommandBuilder.setDefaultMemberPermissions} or {@link ContextMenuCommandBuilder.setDMPermission} instead.\n\t */\n\tpublic readonly default_permission: boolean | undefined = undefined;\n\n\t/**\n\t * The set of permissions represented as a bit set for the command.\n\t */\n\tpublic readonly default_member_permissions: Permissions | null | undefined = undefined;\n\n\t/**\n\t * Indicates whether the command is available in direct messages with the application.\n\t *\n\t * @remarks\n\t * By default, commands are visible. This property is only for global commands.\n\t * @deprecated\n\t * Use {@link ContextMenuCommandBuilder.contexts} instead.\n\t */\n\tpublic readonly dm_permission: boolean | undefined = undefined;\n\n\t/**\n\t * The integration types for this command.\n\t */\n\tpublic readonly integration_types?: ApplicationIntegrationType[];\n\n\t/**\n\t * Sets the contexts of this command.\n\t *\n\t * @param contexts - The contexts\n\t */\n\tpublic setContexts(...contexts: RestOrArray) {\n\t\tReflect.set(this, 'contexts', contextsPredicate.parse(normalizeArray(contexts)));\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets integration types of this command.\n\t *\n\t * @param integrationTypes - The integration types\n\t */\n\tpublic setIntegrationTypes(...integrationTypes: RestOrArray) {\n\t\tReflect.set(this, 'integration_types', integrationTypesPredicate.parse(normalizeArray(integrationTypes)));\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the name of this command.\n\t *\n\t * @param name - The name to use\n\t */\n\tpublic setName(name: string) {\n\t\t// Assert the name matches the conditions\n\t\tvalidateName(name);\n\n\t\tReflect.set(this, 'name', name);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the type of this command.\n\t *\n\t * @param type - The type to use\n\t */\n\tpublic setType(type: ContextMenuCommandType) {\n\t\t// Assert the type is valid\n\t\tvalidateType(type);\n\n\t\tReflect.set(this, 'type', type);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets whether the command is enabled by default when the application is added to a guild.\n\t *\n\t * @remarks\n\t * If set to `false`, you will have to later `PUT` the permissions for this command.\n\t * @param value - Whether to enable this command by default\n\t * @see {@link https://discord.com/developers/docs/interactions/application-commands#permissions}\n\t * @deprecated Use {@link ContextMenuCommandBuilder.setDefaultMemberPermissions} or {@link ContextMenuCommandBuilder.setDMPermission} instead.\n\t */\n\tpublic setDefaultPermission(value: boolean) {\n\t\t// Assert the value matches the conditions\n\t\tvalidateDefaultPermission(value);\n\n\t\tReflect.set(this, 'default_permission', value);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the default permissions a member should have in order to run this command.\n\t *\n\t * @remarks\n\t * You can set this to `'0'` to disable the command by default.\n\t * @param permissions - The permissions bit field to set\n\t * @see {@link https://discord.com/developers/docs/interactions/application-commands#permissions}\n\t */\n\tpublic setDefaultMemberPermissions(permissions: Permissions | bigint | number | null | undefined) {\n\t\t// Assert the value and parse it\n\t\tconst permissionValue = validateDefaultMemberPermissions(permissions);\n\n\t\tReflect.set(this, 'default_member_permissions', permissionValue);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets if the command is available in direct messages with the application.\n\t *\n\t * @remarks\n\t * By default, commands are visible. This method is only for global commands.\n\t * @param enabled - Whether the command should be enabled in direct messages\n\t * @see {@link https://discord.com/developers/docs/interactions/application-commands#permissions}\n\t * @deprecated Use {@link ContextMenuCommandBuilder.setContexts} instead.\n\t */\n\tpublic setDMPermission(enabled: boolean | null | undefined) {\n\t\t// Assert the value matches the conditions\n\t\tvalidateDMPermission(enabled);\n\n\t\tReflect.set(this, 'dm_permission', enabled);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets a name localization for this command.\n\t *\n\t * @param locale - The locale to set\n\t * @param localizedName - The localized name for the given `locale`\n\t */\n\tpublic setNameLocalization(locale: LocaleString, localizedName: string | null) {\n\t\tif (!this.name_localizations) {\n\t\t\tReflect.set(this, 'name_localizations', {});\n\t\t}\n\n\t\tconst parsedLocale = validateLocale(locale);\n\n\t\tif (localizedName === null) {\n\t\t\tthis.name_localizations![parsedLocale] = null;\n\t\t\treturn this;\n\t\t}\n\n\t\tvalidateName(localizedName);\n\n\t\tthis.name_localizations![parsedLocale] = localizedName;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the name localizations for this command.\n\t *\n\t * @param localizedNames - The object of localized names to set\n\t */\n\tpublic setNameLocalizations(localizedNames: LocalizationMap | null) {\n\t\tif (localizedNames === null) {\n\t\t\tReflect.set(this, 'name_localizations', null);\n\t\t\treturn this;\n\t\t}\n\n\t\tReflect.set(this, 'name_localizations', {});\n\n\t\tfor (const args of Object.entries(localizedNames))\n\t\t\tthis.setNameLocalization(...(args as [LocaleString, string | null]));\n\t\treturn this;\n\t}\n\n\t/**\n\t * Serializes this builder to API-compatible JSON data.\n\t *\n\t * @remarks\n\t * This method runs validations on the data before serializing it.\n\t * As such, it may throw an error if the data is invalid.\n\t */\n\tpublic toJSON(): RESTPostAPIContextMenuApplicationCommandsJSONBody {\n\t\tvalidateRequiredParameters(this.name, this.type);\n\n\t\tvalidateLocalizationMap(this.name_localizations);\n\n\t\treturn { ...this };\n\t}\n}\n","import type { APIEmbed } from 'discord-api-types/v10';\n\n/**\n * Calculates the length of the embed.\n *\n * @param data - The embed data to check\n */\nexport function embedLength(data: APIEmbed) {\n\treturn (\n\t\t(data.title?.length ?? 0) +\n\t\t(data.description?.length ?? 0) +\n\t\t(data.fields?.reduce((prev, curr) => prev + curr.name.length + curr.value.length, 0) ?? 0) +\n\t\t(data.footer?.text.length ?? 0) +\n\t\t(data.author?.name.length ?? 0)\n\t);\n}\n"],"mappings":"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","names":["Assertions_exports","s","s","ComponentType","ComponentType","ComponentType","ComponentType","ComponentType","SelectMenuDefaultValueType","ComponentType","SelectMenuDefaultValueType","ComponentType","SelectMenuDefaultValueType","ComponentType","SelectMenuDefaultValueType","ComponentType","ComponentType","ComponentType","SelectMenuDefaultValueType","ComponentType","SelectMenuDefaultValueType","ComponentType","Assertions_exports","placeholderValidator","s","s","placeholderValidator","ComponentType","placeholderValidator","ComponentType","Assertions_exports","descriptionPredicate","s","ComponentType","ComponentType","descriptionPredicate","s","descriptionPredicate","ComponentType","ComponentType","ComponentType","ComponentType","ComponentType","ComponentType","ComponentType","ComponentType","descriptionPredicate","ComponentType","ComponentType","ComponentType","ComponentType","ComponentType","Assertions_exports","validateRequiredParameters","s","s","validateRequiredParameters","validateRequiredParameters","Assertions_exports","assertReturnOfBuilder","validateRequiredParameters","s","s","descriptionPredicate","validateRequiredParameters","assertReturnOfBuilder","mix","validateRequiredParameters","validateRequiredParameters","ApplicationCommandOptionType","ApplicationCommandOptionType","ApplicationCommandOptionType","s","ChannelType","ChannelType","s","ApplicationCommandOptionType","s","ApplicationCommandOptionType","mix","s","booleanPredicate","s","s","ApplicationCommandOptionType","s","ApplicationCommandOptionType","s","ApplicationCommandOptionType","mix","ApplicationCommandOptionType","ApplicationCommandOptionType","s","ApplicationCommandOptionType","mix","numberValidator","s","ApplicationCommandOptionType","mix","ApplicationCommandOptionType","ApplicationCommandOptionType","s","ApplicationCommandOptionType","mix","minLengthValidator","s","maxLengthValidator","ApplicationCommandOptionType","mix","ApplicationCommandOptionType","ApplicationCommandOptionType","assertReturnOfBuilder","ApplicationCommandOptionType","mix","assertReturnOfBuilder","validateRequiredParameters","ApplicationCommandOptionType","mix","assertReturnOfBuilder","mix","Assertions_exports","contextsPredicate","integrationTypesPredicate","validateDMPermission","validateDefaultMemberPermissions","validateDefaultPermission","validateName","validateRequiredParameters","s","ApplicationCommandType","ApplicationIntegrationType","InteractionContextType","namePredicate","s","ApplicationCommandType","booleanPredicate","validateDefaultPermission","validateName","validateRequiredParameters","dmPermissionPredicate","validateDMPermission","memberPermissionPredicate","validateDefaultMemberPermissions","contextsPredicate","InteractionContextType","integrationTypesPredicate","ApplicationIntegrationType","contextsPredicate","integrationTypesPredicate","validateName","validateDefaultPermission","validateDefaultMemberPermissions","validateDMPermission","validateRequiredParameters"]} \ No newline at end of file +{"version":3,"sources":["../src/messages/embed/Assertions.ts","../src/util/validation.ts","../src/util/normalizeArray.ts","../src/messages/embed/Embed.ts","../src/index.ts","../src/components/Assertions.ts","../src/components/selectMenu/StringSelectMenuOption.ts","../src/components/ActionRow.ts","../src/components/Component.ts","../src/components/Components.ts","../src/components/button/Button.ts","../src/components/fileUpload/FileUpload.ts","../src/components/fileUpload/Assertions.ts","../src/components/label/Label.ts","../src/components/selectMenu/ChannelSelectMenu.ts","../src/components/textInput/Assertions.ts","../src/components/selectMenu/BaseSelectMenu.ts","../src/components/selectMenu/MentionableSelectMenu.ts","../src/components/selectMenu/RoleSelectMenu.ts","../src/components/selectMenu/StringSelectMenu.ts","../src/components/selectMenu/Assertions.ts","../src/components/selectMenu/UserSelectMenu.ts","../src/components/textInput/TextInput.ts","../src/components/label/Assertions.ts","../src/components/v2/Container.ts","../src/components/v2/Assertions.ts","../src/components/v2/Thumbnail.ts","../src/components/v2/File.ts","../src/components/v2/Separator.ts","../src/components/v2/TextDisplay.ts","../src/components/v2/MediaGallery.ts","../src/components/v2/MediaGalleryItem.ts","../src/components/v2/Section.ts","../src/interactions/modals/Modal.ts","../src/interactions/modals/Assertions.ts","../src/interactions/slashCommands/Assertions.ts","../src/interactions/slashCommands/SlashCommandBuilder.ts","../src/interactions/slashCommands/mixins/NameAndDescription.ts","../src/interactions/slashCommands/mixins/SharedSlashCommand.ts","../src/interactions/slashCommands/options/attachment.ts","../src/interactions/slashCommands/mixins/ApplicationCommandOptionBase.ts","../src/interactions/slashCommands/options/boolean.ts","../src/interactions/slashCommands/options/channel.ts","../src/interactions/slashCommands/mixins/ApplicationCommandOptionChannelTypesMixin.ts","../src/interactions/slashCommands/options/integer.ts","../src/interactions/slashCommands/mixins/ApplicationCommandNumericOptionMinMaxValueMixin.ts","../src/interactions/slashCommands/mixins/ApplicationCommandOptionWithAutocompleteMixin.ts","../src/interactions/slashCommands/mixins/ApplicationCommandOptionWithChoicesMixin.ts","../src/interactions/slashCommands/options/mentionable.ts","../src/interactions/slashCommands/options/number.ts","../src/interactions/slashCommands/options/role.ts","../src/interactions/slashCommands/options/string.ts","../src/interactions/slashCommands/options/user.ts","../src/interactions/slashCommands/mixins/SharedSlashCommandOptions.ts","../src/interactions/slashCommands/SlashCommandSubcommands.ts","../src/interactions/slashCommands/mixins/SharedSubcommands.ts","../src/interactions/contextMenuCommands/Assertions.ts","../src/interactions/contextMenuCommands/ContextMenuCommandBuilder.ts","../src/util/componentUtil.ts"],"sourcesContent":["import { s } from '@sapphire/shapeshift';\nimport type { APIEmbedField } from 'discord-api-types/v10';\nimport { isValidationEnabled } from '../../util/validation.js';\n\nexport const fieldNamePredicate = s.string().lengthLessThanOrEqual(256).setValidationEnabled(isValidationEnabled);\n\nexport const fieldValuePredicate = s.string().lengthLessThanOrEqual(1_024).setValidationEnabled(isValidationEnabled);\n\nexport const fieldInlinePredicate = s.boolean().optional();\n\nexport const embedFieldPredicate = s\n\t.object({\n\t\tname: fieldNamePredicate,\n\t\tvalue: fieldValuePredicate,\n\t\tinline: fieldInlinePredicate,\n\t})\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const embedFieldsArrayPredicate = embedFieldPredicate.array().setValidationEnabled(isValidationEnabled);\n\nexport const fieldLengthPredicate = s.number().lessThanOrEqual(25).setValidationEnabled(isValidationEnabled);\n\nexport function validateFieldLength(amountAdding: number, fields?: APIEmbedField[]): void {\n\tfieldLengthPredicate.parse((fields?.length ?? 0) + amountAdding);\n}\n\nexport const authorNamePredicate = fieldNamePredicate\n\t.lengthGreaterThanOrEqual(1)\n\t.nullable()\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const imageURLPredicate = s\n\t.string()\n\t.url({\n\t\tallowedProtocols: ['http:', 'https:', 'attachment:'],\n\t})\n\t.nullish()\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const urlPredicate = s\n\t.string()\n\t.url({\n\t\tallowedProtocols: ['http:', 'https:'],\n\t})\n\t.nullish()\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const embedAuthorPredicate = s\n\t.object({\n\t\tname: authorNamePredicate,\n\t\ticonURL: imageURLPredicate,\n\t\turl: urlPredicate,\n\t})\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const RGBPredicate = s\n\t.number()\n\t.int()\n\t.greaterThanOrEqual(0)\n\t.lessThanOrEqual(255)\n\t.setValidationEnabled(isValidationEnabled);\nexport const colorPredicate = s\n\t.number()\n\t.int()\n\t.greaterThanOrEqual(0)\n\t.lessThanOrEqual(0xffffff)\n\t.or(s.tuple([RGBPredicate, RGBPredicate, RGBPredicate]))\n\t.nullable()\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const descriptionPredicate = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(4_096)\n\t.nullable()\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const footerTextPredicate = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(2_048)\n\t.nullable()\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const embedFooterPredicate = s\n\t.object({\n\t\ttext: footerTextPredicate,\n\t\ticonURL: imageURLPredicate,\n\t})\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const timestampPredicate = s.union([s.number(), s.date()]).nullable().setValidationEnabled(isValidationEnabled);\n\nexport const titlePredicate = fieldNamePredicate\n\t.lengthGreaterThanOrEqual(1)\n\t.nullable()\n\t.setValidationEnabled(isValidationEnabled);\n","let validate = true;\n\n/**\n * Enables validators.\n *\n * @returns Whether validation is occurring.\n */\nexport function enableValidators() {\n\treturn (validate = true);\n}\n\n/**\n * Disables validators.\n *\n * @returns Whether validation is occurring.\n */\nexport function disableValidators() {\n\treturn (validate = false);\n}\n\n/**\n * Checks whether validation is occurring.\n */\nexport function isValidationEnabled() {\n\treturn validate;\n}\n","/**\n * Normalizes data that is a rest parameter or an array into an array with a depth of 1.\n *\n * @typeParam ItemType - The data that must satisfy {@link RestOrArray}.\n * @param arr - The (possibly variadic) data to normalize\n */\nexport function normalizeArray(arr: RestOrArray): ItemType[] {\n\tif (Array.isArray(arr[0])) return [...arr[0]];\n\treturn arr as ItemType[];\n}\n\n/**\n * Represents data that may be an array or came from a rest parameter.\n *\n * @remarks\n * This type is used throughout builders to ensure both an array and variadic arguments\n * may be used. It is normalized with {@link normalizeArray}.\n */\nexport type RestOrArray = Type[] | [Type[]];\n","import type { APIEmbed, APIEmbedAuthor, APIEmbedField, APIEmbedFooter, APIEmbedImage } from 'discord-api-types/v10';\nimport { normalizeArray, type RestOrArray } from '../../util/normalizeArray.js';\nimport {\n\tcolorPredicate,\n\tdescriptionPredicate,\n\tembedAuthorPredicate,\n\tembedFieldsArrayPredicate,\n\tembedFooterPredicate,\n\timageURLPredicate,\n\ttimestampPredicate,\n\ttitlePredicate,\n\turlPredicate,\n\tvalidateFieldLength,\n} from './Assertions.js';\n\n/**\n * A tuple satisfying the RGB color model.\n *\n * @see {@link https://developer.mozilla.org/docs/Glossary/RGB}\n */\nexport type RGBTuple = [red: number, green: number, blue: number];\n\n/**\n * The base icon data typically used in payloads.\n */\nexport interface IconData {\n\t/**\n\t * The URL of the icon.\n\t */\n\ticonURL?: string;\n\t/**\n\t * The proxy URL of the icon.\n\t */\n\tproxyIconURL?: string;\n}\n\n/**\n * Represents the author data of an embed.\n */\nexport interface EmbedAuthorData extends IconData, Omit {}\n\n/**\n * Represents the author options of an embed.\n */\nexport interface EmbedAuthorOptions extends Omit {}\n\n/**\n * Represents the footer data of an embed.\n */\nexport interface EmbedFooterData extends IconData, Omit {}\n\n/**\n * Represents the footer options of an embed.\n */\nexport interface EmbedFooterOptions extends Omit {}\n\n/**\n * Represents the image data of an embed.\n */\nexport interface EmbedImageData extends Omit {\n\t/**\n\t * The proxy URL for the image.\n\t */\n\tproxyURL?: string;\n}\n\n/**\n * A builder that creates API-compatible JSON data for embeds.\n */\nexport class EmbedBuilder {\n\t/**\n\t * The API data associated with this embed.\n\t */\n\tpublic readonly data: APIEmbed;\n\n\t/**\n\t * Creates a new embed from API data.\n\t *\n\t * @param data - The API data to create this embed with\n\t */\n\tpublic constructor(data: APIEmbed = {}) {\n\t\tthis.data = { ...data };\n\t\tif (data.timestamp) this.data.timestamp = new Date(data.timestamp).toISOString();\n\t}\n\n\t/**\n\t * Appends fields to the embed.\n\t *\n\t * @remarks\n\t * This method accepts either an array of fields or a variable number of field parameters.\n\t * The maximum amount of fields that can be added is 25.\n\t * @example\n\t * Using an array:\n\t * ```ts\n\t * const fields: APIEmbedField[] = ...;\n\t * const embed = new EmbedBuilder()\n\t * \t.addFields(fields);\n\t * ```\n\t * @example\n\t * Using rest parameters (variadic):\n\t * ```ts\n\t * const embed = new EmbedBuilder()\n\t * \t.addFields(\n\t * \t\t{ name: 'Field 1', value: 'Value 1' },\n\t * \t\t{ name: 'Field 2', value: 'Value 2' },\n\t * \t);\n\t * ```\n\t * @param fields - The fields to add\n\t */\n\tpublic addFields(...fields: RestOrArray): this {\n\t\tconst normalizedFields = normalizeArray(fields);\n\t\t// Ensure adding these fields won't exceed the 25 field limit\n\t\tvalidateFieldLength(normalizedFields.length, this.data.fields);\n\n\t\t// Data assertions\n\t\tembedFieldsArrayPredicate.parse(normalizedFields);\n\n\t\tif (this.data.fields) this.data.fields.push(...normalizedFields);\n\t\telse this.data.fields = normalizedFields;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Removes, replaces, or inserts fields for this embed.\n\t *\n\t * @remarks\n\t * This method behaves similarly\n\t * to {@link https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/splice | Array.prototype.splice()}.\n\t * The maximum amount of fields that can be added is 25.\n\t *\n\t * It's useful for modifying and adjusting order of the already-existing fields of an embed.\n\t * @example\n\t * Remove the first field:\n\t * ```ts\n\t * embed.spliceFields(0, 1);\n\t * ```\n\t * @example\n\t * Remove the first n fields:\n\t * ```ts\n\t * const n = 4;\n\t * embed.spliceFields(0, n);\n\t * ```\n\t * @example\n\t * Remove the last field:\n\t * ```ts\n\t * embed.spliceFields(-1, 1);\n\t * ```\n\t * @param index - The index to start at\n\t * @param deleteCount - The number of fields to remove\n\t * @param fields - The replacing field objects\n\t */\n\tpublic spliceFields(index: number, deleteCount: number, ...fields: APIEmbedField[]): this {\n\t\t// Ensure adding these fields won't exceed the 25 field limit\n\t\tvalidateFieldLength(fields.length - deleteCount, this.data.fields);\n\n\t\t// Data assertions\n\t\tembedFieldsArrayPredicate.parse(fields);\n\t\tif (this.data.fields) this.data.fields.splice(index, deleteCount, ...fields);\n\t\telse this.data.fields = fields;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the fields for this embed.\n\t *\n\t * @remarks\n\t * This method is an alias for {@link EmbedBuilder.spliceFields}. More specifically,\n\t * it splices the entire array of fields, replacing them with the provided fields.\n\t *\n\t * You can set a maximum of 25 fields.\n\t * @param fields - The fields to set\n\t */\n\tpublic setFields(...fields: RestOrArray): this {\n\t\tthis.spliceFields(0, this.data.fields?.length ?? 0, ...normalizeArray(fields));\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the author of this embed.\n\t *\n\t * @param options - The options to use\n\t */\n\n\tpublic setAuthor(options: EmbedAuthorOptions | null): this {\n\t\tif (options === null) {\n\t\t\tthis.data.author = undefined;\n\t\t\treturn this;\n\t\t}\n\n\t\t// Data assertions\n\t\tembedAuthorPredicate.parse(options);\n\n\t\tthis.data.author = { name: options.name, url: options.url, icon_url: options.iconURL };\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the color of this embed.\n\t *\n\t * @param color - The color to use\n\t */\n\tpublic setColor(color: RGBTuple | number | null): this {\n\t\t// Data assertions\n\t\tcolorPredicate.parse(color);\n\n\t\tif (Array.isArray(color)) {\n\t\t\tconst [red, green, blue] = color;\n\t\t\tthis.data.color = (red << 16) + (green << 8) + blue;\n\t\t\treturn this;\n\t\t}\n\n\t\tthis.data.color = color ?? undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the description of this embed.\n\t *\n\t * @param description - The description to use\n\t */\n\tpublic setDescription(description: string | null): this {\n\t\t// Data assertions\n\t\tdescriptionPredicate.parse(description);\n\n\t\tthis.data.description = description ?? undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the footer of this embed.\n\t *\n\t * @param options - The footer to use\n\t */\n\tpublic setFooter(options: EmbedFooterOptions | null): this {\n\t\tif (options === null) {\n\t\t\tthis.data.footer = undefined;\n\t\t\treturn this;\n\t\t}\n\n\t\t// Data assertions\n\t\tembedFooterPredicate.parse(options);\n\n\t\tthis.data.footer = { text: options.text, icon_url: options.iconURL };\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the image of this embed.\n\t *\n\t * @param url - The image URL to use\n\t */\n\tpublic setImage(url: string | null): this {\n\t\t// Data assertions\n\t\timageURLPredicate.parse(url);\n\n\t\tthis.data.image = url ? { url } : undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the thumbnail of this embed.\n\t *\n\t * @param url - The thumbnail URL to use\n\t */\n\tpublic setThumbnail(url: string | null): this {\n\t\t// Data assertions\n\t\timageURLPredicate.parse(url);\n\n\t\tthis.data.thumbnail = url ? { url } : undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the timestamp of this embed.\n\t *\n\t * @param timestamp - The timestamp or date to use\n\t */\n\tpublic setTimestamp(timestamp: Date | number | null = Date.now()): this {\n\t\t// Data assertions\n\t\ttimestampPredicate.parse(timestamp);\n\n\t\tthis.data.timestamp = timestamp ? new Date(timestamp).toISOString() : undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the title for this embed.\n\t *\n\t * @param title - The title to use\n\t */\n\tpublic setTitle(title: string | null): this {\n\t\t// Data assertions\n\t\ttitlePredicate.parse(title);\n\n\t\tthis.data.title = title ?? undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the URL of this embed.\n\t *\n\t * @param url - The URL to use\n\t */\n\tpublic setURL(url: string | null): this {\n\t\t// Data assertions\n\t\turlPredicate.parse(url);\n\n\t\tthis.data.url = url ?? undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Serializes this builder to API-compatible JSON data.\n\t *\n\t * @remarks\n\t * This method runs validations on the data before serializing it.\n\t * As such, it may throw an error if the data is invalid.\n\t */\n\tpublic toJSON(): APIEmbed {\n\t\treturn { ...this.data };\n\t}\n}\n","export * as EmbedAssertions from './messages/embed/Assertions.js';\nexport * from './messages/embed/Embed.js';\n// TODO: Consider removing this dep in the next major version\nexport * from '@discordjs/formatters';\n\nexport * as ComponentAssertions from './components/Assertions.js';\nexport * from './components/ActionRow.js';\nexport * from './components/button/Button.js';\nexport * from './components/Component.js';\nexport * from './components/Components.js';\nexport * from './components/textInput/TextInput.js';\nexport * as TextInputAssertions from './components/textInput/Assertions.js';\nexport * from './interactions/modals/Modal.js';\nexport * as ModalAssertions from './interactions/modals/Assertions.js';\n\nexport * from './components/selectMenu/BaseSelectMenu.js';\nexport * from './components/selectMenu/ChannelSelectMenu.js';\nexport * from './components/selectMenu/MentionableSelectMenu.js';\nexport * from './components/selectMenu/RoleSelectMenu.js';\nexport * from './components/selectMenu/StringSelectMenu.js';\n// TODO: Remove those aliases in v2\nexport {\n\t/**\n\t * @deprecated Will be removed in the next major version, use {@link StringSelectMenuBuilder} instead.\n\t */\n\tStringSelectMenuBuilder as SelectMenuBuilder,\n} from './components/selectMenu/StringSelectMenu.js';\nexport {\n\t/**\n\t * @deprecated Will be removed in the next major version, use {@link StringSelectMenuOptionBuilder} instead.\n\t */\n\tStringSelectMenuOptionBuilder as SelectMenuOptionBuilder,\n} from './components/selectMenu/StringSelectMenuOption.js';\nexport * as SelectMenuAssertions from './components/selectMenu/Assertions.js';\nexport * from './components/selectMenu/StringSelectMenuOption.js';\nexport * from './components/selectMenu/UserSelectMenu.js';\n\nexport * from './components/fileUpload/FileUpload.js';\nexport * as FileUploadAssertions from './components/fileUpload/Assertions.js';\n\nexport * from './components/label/Label.js';\nexport * as LabelAssertions from './components/label/Assertions.js';\n\nexport * as ComponentsV2Assertions from './components/v2/Assertions.js';\nexport * from './components/v2/Container.js';\nexport * from './components/v2/File.js';\nexport * from './components/v2/MediaGallery.js';\nexport * from './components/v2/MediaGalleryItem.js';\nexport * from './components/v2/Section.js';\nexport * from './components/v2/Separator.js';\nexport * from './components/v2/TextDisplay.js';\nexport * from './components/v2/Thumbnail.js';\n\nexport * as SlashCommandAssertions from './interactions/slashCommands/Assertions.js';\nexport * from './interactions/slashCommands/SlashCommandBuilder.js';\nexport * from './interactions/slashCommands/SlashCommandSubcommands.js';\nexport * from './interactions/slashCommands/options/boolean.js';\nexport * from './interactions/slashCommands/options/channel.js';\nexport * from './interactions/slashCommands/options/integer.js';\nexport * from './interactions/slashCommands/options/mentionable.js';\nexport * from './interactions/slashCommands/options/number.js';\nexport * from './interactions/slashCommands/options/role.js';\nexport * from './interactions/slashCommands/options/attachment.js';\nexport * from './interactions/slashCommands/options/string.js';\nexport * from './interactions/slashCommands/options/user.js';\nexport * from './interactions/slashCommands/mixins/ApplicationCommandNumericOptionMinMaxValueMixin.js';\nexport * from './interactions/slashCommands/mixins/ApplicationCommandOptionBase.js';\nexport * from './interactions/slashCommands/mixins/ApplicationCommandOptionChannelTypesMixin.js';\nexport * from './interactions/slashCommands/mixins/ApplicationCommandOptionWithAutocompleteMixin.js';\nexport * from './interactions/slashCommands/mixins/ApplicationCommandOptionWithChoicesMixin.js';\nexport * from './interactions/slashCommands/mixins/NameAndDescription.js';\nexport * from './interactions/slashCommands/mixins/SharedSlashCommandOptions.js';\nexport * from './interactions/slashCommands/mixins/SharedSubcommands.js';\nexport * from './interactions/slashCommands/mixins/SharedSlashCommand.js';\n\nexport * as ContextMenuCommandAssertions from './interactions/contextMenuCommands/Assertions.js';\nexport * from './interactions/contextMenuCommands/ContextMenuCommandBuilder.js';\n\nexport * from './util/componentUtil.js';\nexport * from './util/normalizeArray.js';\nexport * from './util/validation.js';\n\n/**\n * The {@link https://github.com/discordjs/discord.js/blob/main/packages/builders#readme | @discordjs/builders} version\n * that you are currently using.\n *\n * @privateRemarks This needs to explicitly be `string` so it is not typed as a \"const string\" that gets injected by esbuild.\n */\nexport const version = '1.13.1' as string;\n","import { s } from '@sapphire/shapeshift';\nimport { ButtonStyle, ChannelType, type APIMessageComponentEmoji } from 'discord-api-types/v10';\nimport { isValidationEnabled } from '../util/validation.js';\nimport { StringSelectMenuOptionBuilder } from './selectMenu/StringSelectMenuOption.js';\n\nexport const idValidator = s\n\t.number()\n\t.safeInt()\n\t.greaterThanOrEqual(1)\n\t.lessThan(4_294_967_296) // 2^32 - 1\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const customIdValidator = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(100)\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const emojiValidator = s\n\t.object({\n\t\tid: s.string(),\n\t\tname: s.string(),\n\t\tanimated: s.boolean(),\n\t})\n\t.partial()\n\t.strict()\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const disabledValidator = s.boolean();\n\nexport const buttonLabelValidator = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(80)\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const buttonStyleValidator = s.nativeEnum(ButtonStyle);\n\nexport const placeholderValidator = s.string().lengthLessThanOrEqual(150).setValidationEnabled(isValidationEnabled);\nexport const minMaxValidator = s\n\t.number()\n\t.int()\n\t.greaterThanOrEqual(0)\n\t.lessThanOrEqual(25)\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const labelValueDescriptionValidator = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(100)\n\t.setValidationEnabled(isValidationEnabled);\n\n/**\n * @deprecated Replaced with selectMenuStringOptionPredicate.\n */\nexport const jsonOptionValidator = s\n\t.object({\n\t\tlabel: labelValueDescriptionValidator,\n\t\tvalue: labelValueDescriptionValidator,\n\t\tdescription: labelValueDescriptionValidator.optional(),\n\t\temoji: emojiValidator.optional(),\n\t\tdefault: s.boolean().optional(),\n\t})\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const optionValidator = s.instance(StringSelectMenuOptionBuilder).setValidationEnabled(isValidationEnabled);\n\nexport const optionsValidator = optionValidator\n\t.array()\n\t.lengthGreaterThanOrEqual(0)\n\t.setValidationEnabled(isValidationEnabled);\nexport const optionsLengthValidator = s\n\t.number()\n\t.int()\n\t.greaterThanOrEqual(0)\n\t.lessThanOrEqual(25)\n\t.setValidationEnabled(isValidationEnabled);\n\nexport function validateRequiredSelectMenuParameters(options: StringSelectMenuOptionBuilder[], customId?: string) {\n\tcustomIdValidator.parse(customId);\n\toptionsValidator.parse(options);\n}\n\nexport const defaultValidator = s.boolean();\n\nexport function validateRequiredSelectMenuOptionParameters(label?: string, value?: string) {\n\tlabelValueDescriptionValidator.parse(label);\n\tlabelValueDescriptionValidator.parse(value);\n}\n\nexport const channelTypesValidator = s.nativeEnum(ChannelType).array().setValidationEnabled(isValidationEnabled);\n\nexport const urlValidator = s\n\t.string()\n\t.url({\n\t\tallowedProtocols: ['http:', 'https:', 'discord:'],\n\t})\n\t.setValidationEnabled(isValidationEnabled);\n\nexport function validateRequiredButtonParameters(\n\tstyle?: ButtonStyle,\n\tlabel?: string,\n\temoji?: APIMessageComponentEmoji,\n\tcustomId?: string,\n\tskuId?: string,\n\turl?: string,\n) {\n\tif (style === ButtonStyle.Premium) {\n\t\tif (!skuId) {\n\t\t\tthrow new RangeError('Premium buttons must have an SKU id.');\n\t\t}\n\n\t\tif (customId || label || url || emoji) {\n\t\t\tthrow new RangeError('Premium buttons cannot have a custom id, label, URL, or emoji.');\n\t\t}\n\t} else {\n\t\tif (skuId) {\n\t\t\tthrow new RangeError('Non-premium buttons must not have an SKU id.');\n\t\t}\n\n\t\tif (url && customId) {\n\t\t\tthrow new RangeError('URL and custom id are mutually exclusive.');\n\t\t}\n\n\t\tif (!label && !emoji) {\n\t\t\tthrow new RangeError('Non-premium buttons must have a label and/or an emoji.');\n\t\t}\n\n\t\tif (style === ButtonStyle.Link) {\n\t\t\tif (!url) {\n\t\t\t\tthrow new RangeError('Link buttons must have a URL.');\n\t\t\t}\n\t\t} else if (url) {\n\t\t\tthrow new RangeError('Non-premium and non-link buttons cannot have a URL.');\n\t\t}\n\t}\n}\n","import type { JSONEncodable } from '@discordjs/util';\nimport type { APIMessageComponentEmoji, APISelectMenuOption } from 'discord-api-types/v10';\nimport {\n\tdefaultValidator,\n\temojiValidator,\n\tlabelValueDescriptionValidator,\n\tvalidateRequiredSelectMenuOptionParameters,\n} from '../Assertions.js';\n\n/**\n * A builder that creates API-compatible JSON data for string select menu options.\n */\nexport class StringSelectMenuOptionBuilder implements JSONEncodable {\n\t/**\n\t * Creates a new string select menu option from API data.\n\t *\n\t * @param data - The API data to create this string select menu option with\n\t * @example\n\t * Creating a string select menu option from an API data object:\n\t * ```ts\n\t * const selectMenuOption = new SelectMenuOptionBuilder({\n\t * \tlabel: 'catchy label',\n\t * \tvalue: '1',\n\t * });\n\t * ```\n\t * @example\n\t * Creating a string select menu option using setters and API data:\n\t * ```ts\n\t * const selectMenuOption = new SelectMenuOptionBuilder({\n\t * \tdefault: true,\n\t * \tvalue: '1',\n\t * })\n\t * \t.setLabel('woah');\n\t * ```\n\t */\n\tpublic constructor(public data: Partial = {}) {}\n\n\t/**\n\t * Sets the label for this option.\n\t *\n\t * @param label - The label to use\n\t */\n\tpublic setLabel(label: string) {\n\t\tthis.data.label = labelValueDescriptionValidator.parse(label);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the value for this option.\n\t *\n\t * @param value - The value to use\n\t */\n\tpublic setValue(value: string) {\n\t\tthis.data.value = labelValueDescriptionValidator.parse(value);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the description for this option.\n\t *\n\t * @param description - The description to use\n\t */\n\tpublic setDescription(description: string) {\n\t\tthis.data.description = labelValueDescriptionValidator.parse(description);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets whether this option is selected by default.\n\t *\n\t * @param isDefault - Whether this option is selected by default\n\t */\n\tpublic setDefault(isDefault = true) {\n\t\tthis.data.default = defaultValidator.parse(isDefault);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the emoji to display for this option.\n\t *\n\t * @param emoji - The emoji to use\n\t */\n\tpublic setEmoji(emoji: APIMessageComponentEmoji) {\n\t\tthis.data.emoji = emojiValidator.parse(emoji);\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc BaseSelectMenuBuilder.toJSON}\n\t */\n\tpublic toJSON(): APISelectMenuOption {\n\t\tvalidateRequiredSelectMenuOptionParameters(this.data.label, this.data.value);\n\n\t\treturn {\n\t\t\t...this.data,\n\t\t} as APISelectMenuOption;\n\t}\n}\n","/* eslint-disable jsdoc/check-param-names */\n\nimport {\n\ttype APIActionRowComponent,\n\tComponentType,\n\ttype APIComponentInMessageActionRow,\n\ttype APIComponentInModalActionRow,\n\ttype APIComponentInActionRow,\n} from 'discord-api-types/v10';\nimport { normalizeArray, type RestOrArray } from '../util/normalizeArray.js';\nimport { ComponentBuilder } from './Component.js';\nimport { createComponentBuilder } from './Components.js';\nimport type { ButtonBuilder } from './button/Button.js';\nimport type { ChannelSelectMenuBuilder } from './selectMenu/ChannelSelectMenu.js';\nimport type { MentionableSelectMenuBuilder } from './selectMenu/MentionableSelectMenu.js';\nimport type { RoleSelectMenuBuilder } from './selectMenu/RoleSelectMenu.js';\nimport type { StringSelectMenuBuilder } from './selectMenu/StringSelectMenu.js';\nimport type { UserSelectMenuBuilder } from './selectMenu/UserSelectMenu.js';\nimport type { TextInputBuilder } from './textInput/TextInput.js';\n\n/**\n * The builders that may be used for modals.\n */\nexport type ModalComponentBuilder = ActionRowBuilder | ModalActionRowComponentBuilder;\n\n/**\n * The builders that may be used within an action row for messages.\n */\nexport type MessageActionRowComponentBuilder =\n\t| ButtonBuilder\n\t| ChannelSelectMenuBuilder\n\t| MentionableSelectMenuBuilder\n\t| RoleSelectMenuBuilder\n\t| StringSelectMenuBuilder\n\t| UserSelectMenuBuilder;\n\n/**\n * The builders that may be used within an action row for modals.\n */\nexport type ModalActionRowComponentBuilder = TextInputBuilder;\n\n/**\n * Any builder.\n */\nexport type AnyComponentBuilder = MessageActionRowComponentBuilder | ModalActionRowComponentBuilder;\n\n/**\n * A builder that creates API-compatible JSON data for action rows.\n *\n * @typeParam ComponentType - The types of components this action row holds\n */\nexport class ActionRowBuilder extends ComponentBuilder<\n\tAPIActionRowComponent\n> {\n\t/**\n\t * The components within this action row.\n\t */\n\tpublic readonly components: ComponentType[];\n\n\t/**\n\t * Creates a new action row from API data.\n\t *\n\t * @param data - The API data to create this action row with\n\t * @example\n\t * Creating an action row from an API data object:\n\t * ```ts\n\t * const actionRow = new ActionRowBuilder({\n\t * \tcomponents: [\n\t * \t\t{\n\t * \t\t\tcustom_id: \"custom id\",\n\t * \t\t\tlabel: \"Type something\",\n\t * \t\t\tstyle: TextInputStyle.Short,\n\t * \t\t\ttype: ComponentType.TextInput,\n\t * \t\t},\n\t * \t],\n\t * });\n\t * ```\n\t * @example\n\t * Creating an action row using setters and API data:\n\t * ```ts\n\t * const actionRow = new ActionRowBuilder({\n\t * \tcomponents: [\n\t * \t\t{\n\t * \t\t\tcustom_id: \"custom id\",\n\t * \t\t\tlabel: \"Click me\",\n\t * \t\t\tstyle: ButtonStyle.Primary,\n\t * \t\t\ttype: ComponentType.Button,\n\t * \t\t},\n\t * \t],\n\t * })\n\t * \t.addComponents(button2, button3);\n\t * ```\n\t */\n\tpublic constructor({ components, ...data }: Partial> = {}) {\n\t\tsuper({ type: ComponentType.ActionRow, ...data });\n\t\tthis.components = (components?.map((component) => createComponentBuilder(component)) ?? []) as ComponentType[];\n\t}\n\n\t/**\n\t * Adds components to this action row.\n\t *\n\t * @param components - The components to add\n\t */\n\tpublic addComponents(...components: RestOrArray) {\n\t\tthis.components.push(...normalizeArray(components));\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets components for this action row.\n\t *\n\t * @param components - The components to set\n\t */\n\tpublic setComponents(...components: RestOrArray) {\n\t\tthis.components.splice(0, this.components.length, ...normalizeArray(components));\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic toJSON(): APIActionRowComponent> {\n\t\treturn {\n\t\t\t...this.data,\n\t\t\tcomponents: this.components.map((component) => component.toJSON()),\n\t\t} as APIActionRowComponent>;\n\t}\n}\n","import type { JSONEncodable } from '@discordjs/util';\nimport type {\n\tAPIActionRowComponent,\n\tAPIComponentInActionRow,\n\tAPIBaseComponent,\n\tComponentType,\n\tAPIMessageComponent,\n\tAPIModalComponent,\n} from 'discord-api-types/v10';\nimport { idValidator } from './Assertions';\n\n/**\n * Any action row component data represented as an object.\n */\nexport type AnyAPIActionRowComponent =\n\t| APIActionRowComponent\n\t| APIComponentInActionRow\n\t| APIMessageComponent\n\t| APIModalComponent;\n\n/**\n * The base component builder that contains common symbols for all sorts of components.\n *\n * @typeParam DataType - The type of internal API data that is stored within the component\n */\nexport abstract class ComponentBuilder<\n\tDataType extends Partial> = APIBaseComponent,\n> implements JSONEncodable\n{\n\t/**\n\t * The API data associated with this component.\n\t */\n\tpublic readonly data: Partial;\n\n\t/**\n\t * Serializes this builder to API-compatible JSON data.\n\t *\n\t * @remarks\n\t * This method runs validations on the data before serializing it.\n\t * As such, it may throw an error if the data is invalid.\n\t */\n\tpublic abstract toJSON(): AnyAPIActionRowComponent;\n\n\t/**\n\t * Constructs a new kind of component.\n\t *\n\t * @param data - The data to construct a component out of\n\t */\n\tpublic constructor(data: Partial) {\n\t\tthis.data = data;\n\t}\n\n\t/**\n\t * Sets the id (not the custom id) for this component.\n\t *\n\t * @param id - The id for this component\n\t */\n\tpublic setId(id: number) {\n\t\tthis.data.id = idValidator.parse(id);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Clears the id of this component, defaulting to a default incremented id.\n\t */\n\tpublic clearId() {\n\t\tthis.data.id = undefined;\n\t\treturn this;\n\t}\n}\n","import type { JSONEncodable } from '@discordjs/util';\nimport { ComponentType, type APIMessageComponent, type APIModalComponent } from 'discord-api-types/v10';\nimport {\n\tActionRowBuilder,\n\ttype MessageActionRowComponentBuilder,\n\ttype AnyComponentBuilder,\n\ttype ModalComponentBuilder,\n} from './ActionRow.js';\nimport { ComponentBuilder } from './Component.js';\nimport { ButtonBuilder } from './button/Button.js';\nimport { FileUploadBuilder } from './fileUpload/FileUpload.js';\nimport { LabelBuilder } from './label/Label.js';\nimport { ChannelSelectMenuBuilder } from './selectMenu/ChannelSelectMenu.js';\nimport { MentionableSelectMenuBuilder } from './selectMenu/MentionableSelectMenu.js';\nimport { RoleSelectMenuBuilder } from './selectMenu/RoleSelectMenu.js';\nimport { StringSelectMenuBuilder } from './selectMenu/StringSelectMenu.js';\nimport { UserSelectMenuBuilder } from './selectMenu/UserSelectMenu.js';\nimport { TextInputBuilder } from './textInput/TextInput.js';\nimport { ContainerBuilder } from './v2/Container.js';\nimport { FileBuilder } from './v2/File.js';\nimport { MediaGalleryBuilder } from './v2/MediaGallery.js';\nimport { SectionBuilder } from './v2/Section.js';\nimport { SeparatorBuilder } from './v2/Separator.js';\nimport { TextDisplayBuilder } from './v2/TextDisplay.js';\nimport { ThumbnailBuilder } from './v2/Thumbnail.js';\n\n/**\n * The builders that may be used for messages.\n */\nexport type MessageComponentBuilder =\n\t| ActionRowBuilder\n\t| ContainerBuilder\n\t| FileBuilder\n\t| MediaGalleryBuilder\n\t| MessageActionRowComponentBuilder\n\t| SectionBuilder\n\t| SeparatorBuilder\n\t| TextDisplayBuilder\n\t| ThumbnailBuilder;\n\n/**\n * Components here are mapped to their respective builder.\n */\nexport interface MappedComponentTypes {\n\t/**\n\t * The action row component type is associated with an {@link ActionRowBuilder}.\n\t */\n\t[ComponentType.ActionRow]: ActionRowBuilder;\n\t/**\n\t * The button component type is associated with a {@link ButtonBuilder}.\n\t */\n\t[ComponentType.Button]: ButtonBuilder;\n\t/**\n\t * The string select component type is associated with a {@link StringSelectMenuBuilder}.\n\t */\n\t[ComponentType.StringSelect]: StringSelectMenuBuilder;\n\t/**\n\t * The text input component type is associated with a {@link TextInputBuilder}.\n\t */\n\t[ComponentType.TextInput]: TextInputBuilder;\n\t/**\n\t * The user select component type is associated with a {@link UserSelectMenuBuilder}.\n\t */\n\t[ComponentType.UserSelect]: UserSelectMenuBuilder;\n\t/**\n\t * The role select component type is associated with a {@link RoleSelectMenuBuilder}.\n\t */\n\t[ComponentType.RoleSelect]: RoleSelectMenuBuilder;\n\t/**\n\t * The mentionable select component type is associated with a {@link MentionableSelectMenuBuilder}.\n\t */\n\t[ComponentType.MentionableSelect]: MentionableSelectMenuBuilder;\n\t/**\n\t * The channel select component type is associated with a {@link ChannelSelectMenuBuilder}.\n\t */\n\t[ComponentType.ChannelSelect]: ChannelSelectMenuBuilder;\n\t/**\n\t * The file component type is associated with a {@link FileBuilder}.\n\t */\n\t[ComponentType.File]: FileBuilder;\n\t/**\n\t * The separator component type is associated with a {@link SeparatorBuilder}.\n\t */\n\t[ComponentType.Separator]: SeparatorBuilder;\n\t/**\n\t * The container component type is associated with a {@link ContainerBuilder}.\n\t */\n\t[ComponentType.Container]: ContainerBuilder;\n\t/**\n\t * The text display component type is associated with a {@link TextDisplayBuilder}.\n\t */\n\t[ComponentType.TextDisplay]: TextDisplayBuilder;\n\t/**\n\t * The thumbnail component type is associated with a {@link ThumbnailBuilder}.\n\t */\n\t[ComponentType.Thumbnail]: ThumbnailBuilder;\n\t/**\n\t * The section component type is associated with a {@link SectionBuilder}.\n\t */\n\t[ComponentType.Section]: SectionBuilder;\n\t/**\n\t * The media gallery component type is associated with a {@link MediaGalleryBuilder}.\n\t */\n\t[ComponentType.MediaGallery]: MediaGalleryBuilder;\n\t/**\n\t * The label component type is associated with a {@link LabelBuilder}.\n\t */\n\t[ComponentType.Label]: LabelBuilder;\n\t/**\n\t * The file upload component type is associated with a {@link FileUploadBuilder}.\n\t */\n\t[ComponentType.FileUpload]: FileUploadBuilder;\n}\n\n/**\n * Factory for creating components from API data.\n *\n * @typeParam ComponentType - The type of component to use\n * @param data - The API data to transform to a component class\n */\nexport function createComponentBuilder(\n\t// eslint-disable-next-line @typescript-eslint/sort-type-constituents\n\tdata: (APIModalComponent | APIMessageComponent) & { type: ComponentType },\n): MappedComponentTypes[ComponentType];\n\n/**\n * Factory for creating components from API data.\n *\n * @typeParam ComponentBuilder - The type of component to use\n * @param data - The API data to transform to a component class\n */\nexport function createComponentBuilder(\n\tdata: ComponentBuilder,\n): ComponentBuilder;\n\nexport function createComponentBuilder(\n\tdata: APIMessageComponent | APIModalComponent | MessageComponentBuilder,\n): ComponentBuilder {\n\tif (data instanceof ComponentBuilder) {\n\t\treturn data;\n\t}\n\n\tswitch (data.type) {\n\t\tcase ComponentType.ActionRow:\n\t\t\treturn new ActionRowBuilder(data);\n\t\tcase ComponentType.Button:\n\t\t\treturn new ButtonBuilder(data);\n\t\tcase ComponentType.StringSelect:\n\t\t\treturn new StringSelectMenuBuilder(data);\n\t\tcase ComponentType.TextInput:\n\t\t\treturn new TextInputBuilder(data);\n\t\tcase ComponentType.UserSelect:\n\t\t\treturn new UserSelectMenuBuilder(data);\n\t\tcase ComponentType.RoleSelect:\n\t\t\treturn new RoleSelectMenuBuilder(data);\n\t\tcase ComponentType.MentionableSelect:\n\t\t\treturn new MentionableSelectMenuBuilder(data);\n\t\tcase ComponentType.ChannelSelect:\n\t\t\treturn new ChannelSelectMenuBuilder(data);\n\t\tcase ComponentType.File:\n\t\t\treturn new FileBuilder(data);\n\t\tcase ComponentType.Container:\n\t\t\treturn new ContainerBuilder(data);\n\t\tcase ComponentType.Section:\n\t\t\treturn new SectionBuilder(data);\n\t\tcase ComponentType.Separator:\n\t\t\treturn new SeparatorBuilder(data);\n\t\tcase ComponentType.TextDisplay:\n\t\t\treturn new TextDisplayBuilder(data);\n\t\tcase ComponentType.Thumbnail:\n\t\t\treturn new ThumbnailBuilder(data);\n\t\tcase ComponentType.MediaGallery:\n\t\t\treturn new MediaGalleryBuilder(data);\n\t\tcase ComponentType.Label:\n\t\t\treturn new LabelBuilder(data);\n\t\tcase ComponentType.FileUpload:\n\t\t\treturn new FileUploadBuilder(data);\n\t\tdefault:\n\t\t\t// @ts-expect-error This case can still occur if we get a newer unsupported component type\n\t\t\tthrow new Error(`Cannot properly serialize component type: ${data.type}`);\n\t}\n}\n\nfunction isBuilder>(\n\tbuilder: unknown,\n\tConstructor: new () => Builder,\n): builder is Builder {\n\treturn builder instanceof Constructor;\n}\n\nexport function resolveBuilder, Builder extends JSONEncodable>(\n\tbuilder: Builder | ComponentType | ((builder: Builder) => Builder),\n\tConstructor: new (data?: ComponentType) => Builder,\n) {\n\tif (isBuilder(builder, Constructor)) {\n\t\treturn builder;\n\t}\n\n\tif (typeof builder === 'function') {\n\t\treturn builder(new Constructor());\n\t}\n\n\treturn new Constructor(builder);\n}\n","import {\n\tComponentType,\n\ttype APIButtonComponent,\n\ttype APIButtonComponentWithCustomId,\n\ttype APIButtonComponentWithSKUId,\n\ttype APIButtonComponentWithURL,\n\ttype APIMessageComponentEmoji,\n\ttype ButtonStyle,\n\ttype Snowflake,\n} from 'discord-api-types/v10';\nimport {\n\tbuttonLabelValidator,\n\tbuttonStyleValidator,\n\tcustomIdValidator,\n\tdisabledValidator,\n\temojiValidator,\n\turlValidator,\n\tvalidateRequiredButtonParameters,\n} from '../Assertions.js';\nimport { ComponentBuilder } from '../Component.js';\n\n/**\n * A builder that creates API-compatible JSON data for buttons.\n */\nexport class ButtonBuilder extends ComponentBuilder {\n\t/**\n\t * Creates a new button from API data.\n\t *\n\t * @param data - The API data to create this button with\n\t * @example\n\t * Creating a button from an API data object:\n\t * ```ts\n\t * const button = new ButtonBuilder({\n\t * \tcustom_id: 'a cool button',\n\t * \tstyle: ButtonStyle.Primary,\n\t * \tlabel: 'Click Me',\n\t * \temoji: {\n\t * \t\tname: 'smile',\n\t * \t\tid: '123456789012345678',\n\t * \t},\n\t * });\n\t * ```\n\t * @example\n\t * Creating a button using setters and API data:\n\t * ```ts\n\t * const button = new ButtonBuilder({\n\t * \tstyle: ButtonStyle.Secondary,\n\t * \tlabel: 'Click Me',\n\t * })\n\t * \t.setEmoji({ name: '🙂' })\n\t * \t.setCustomId('another cool button');\n\t * ```\n\t */\n\tpublic constructor(data?: Partial) {\n\t\tsuper({ type: ComponentType.Button, ...data });\n\t}\n\n\t/**\n\t * Sets the style of this button.\n\t *\n\t * @param style - The style to use\n\t */\n\tpublic setStyle(style: ButtonStyle) {\n\t\tthis.data.style = buttonStyleValidator.parse(style);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the URL for this button.\n\t *\n\t * @remarks\n\t * This method is only available to buttons using the `Link` button style.\n\t * Only three types of URL schemes are currently supported: `https://`, `http://`, and `discord://`.\n\t * @param url - The URL to use\n\t */\n\tpublic setURL(url: string) {\n\t\t(this.data as APIButtonComponentWithURL).url = urlValidator.parse(url);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the custom id for this button.\n\t *\n\t * @remarks\n\t * This method is only applicable to buttons that are not using the `Link` button style.\n\t * @param customId - The custom id to use\n\t */\n\tpublic setCustomId(customId: string) {\n\t\t(this.data as APIButtonComponentWithCustomId).custom_id = customIdValidator.parse(customId);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the SKU id that represents a purchasable SKU for this button.\n\t *\n\t * @remarks Only available when using premium-style buttons.\n\t * @param skuId - The SKU id to use\n\t */\n\tpublic setSKUId(skuId: Snowflake) {\n\t\t(this.data as APIButtonComponentWithSKUId).sku_id = skuId;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the emoji to display on this button.\n\t *\n\t * @param emoji - The emoji to use\n\t */\n\tpublic setEmoji(emoji: APIMessageComponentEmoji) {\n\t\t(this.data as Exclude).emoji = emojiValidator.parse(emoji);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets whether this button is disabled.\n\t *\n\t * @param disabled - Whether to disable this button\n\t */\n\tpublic setDisabled(disabled = true) {\n\t\tthis.data.disabled = disabledValidator.parse(disabled);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the label for this button.\n\t *\n\t * @param label - The label to use\n\t */\n\tpublic setLabel(label: string) {\n\t\t(this.data as Exclude).label = buttonLabelValidator.parse(label);\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic toJSON(): APIButtonComponent {\n\t\tvalidateRequiredButtonParameters(\n\t\t\tthis.data.style,\n\t\t\t(this.data as Exclude).label,\n\t\t\t(this.data as Exclude).emoji,\n\t\t\t(this.data as APIButtonComponentWithCustomId).custom_id,\n\t\t\t(this.data as APIButtonComponentWithSKUId).sku_id,\n\t\t\t(this.data as APIButtonComponentWithURL).url,\n\t\t);\n\n\t\treturn {\n\t\t\t...this.data,\n\t\t} as APIButtonComponent;\n\t}\n}\n","import { type APIFileUploadComponent, ComponentType } from 'discord-api-types/v10';\nimport { ComponentBuilder } from '../Component.js';\nimport { fileUploadPredicate } from './Assertions.js';\n\n/**\n * A builder that creates API-compatible JSON data for file uploads.\n */\nexport class FileUploadBuilder extends ComponentBuilder {\n\t/**\n\t * Creates a new file upload.\n\t *\n\t * @param data - The API data to create this file upload with\n\t * @example\n\t * Creating a file upload from an API data object:\n\t * ```ts\n\t * const fileUpload = new FileUploadBuilder({\n\t * \tcustom_id: \"file_upload\",\n\t * min_values: 2,\n\t * max_values: 5,\n\t * });\n\t * ```\n\t * @example\n\t * Creating a file upload using setters and API data:\n\t * ```ts\n\t * const fileUpload = new FileUploadBuilder({\n\t * \tcustom_id: \"file_upload\",\n\t * min_values: 2,\n\t * max_values: 5,\n\t * }).setRequired();\n\t * ```\n\t */\n\tpublic constructor(data: Partial = {}) {\n\t\tsuper({ type: ComponentType.FileUpload, ...data });\n\t}\n\n\t/**\n\t * Sets the custom id for this file upload.\n\t *\n\t * @param customId - The custom id to use\n\t */\n\tpublic setCustomId(customId: string) {\n\t\tthis.data.custom_id = customId;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the minimum number of file uploads required.\n\t *\n\t * @param minValues - The minimum values that must be uploaded\n\t */\n\tpublic setMinValues(minValues: number) {\n\t\tthis.data.min_values = minValues;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Clears the minimum values.\n\t */\n\tpublic clearMinValues() {\n\t\tthis.data.min_values = undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the maximum number of file uploads required.\n\t *\n\t * @param maxValues - The maximum values that can be uploaded\n\t */\n\tpublic setMaxValues(maxValues: number) {\n\t\tthis.data.max_values = maxValues;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Clears the maximum values.\n\t */\n\tpublic clearMaxValues() {\n\t\tthis.data.max_values = undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets whether this file upload is required.\n\t *\n\t * @param required - Whether this file upload is required\n\t */\n\tpublic setRequired(required = true) {\n\t\tthis.data.required = required;\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic toJSON(): APIFileUploadComponent {\n\t\tfileUploadPredicate.parse(this.data);\n\t\treturn this.data as APIFileUploadComponent;\n\t}\n}\n","import { s } from '@sapphire/shapeshift';\nimport { ComponentType } from 'discord-api-types/v10';\nimport { customIdValidator, idValidator } from '../Assertions.js';\n\nexport const fileUploadPredicate = s.object({\n\ttype: s.literal(ComponentType.FileUpload),\n\tid: idValidator.optional(),\n\tcustom_id: customIdValidator,\n\tmin_values: s.number().greaterThanOrEqual(0).lessThanOrEqual(10).optional(),\n\tmax_values: s.number().greaterThanOrEqual(1).lessThanOrEqual(10).optional(),\n\trequired: s.boolean().optional(),\n});\n","import type {\n\tAPIChannelSelectComponent,\n\tAPIFileUploadComponent,\n\tAPILabelComponent,\n\tAPIMentionableSelectComponent,\n\tAPIRoleSelectComponent,\n\tAPIStringSelectComponent,\n\tAPITextInputComponent,\n\tAPIUserSelectComponent,\n} from 'discord-api-types/v10';\nimport { ComponentType } from 'discord-api-types/v10';\nimport { ComponentBuilder } from '../Component.js';\nimport { createComponentBuilder, resolveBuilder } from '../Components.js';\nimport { FileUploadBuilder } from '../fileUpload/FileUpload.js';\nimport { ChannelSelectMenuBuilder } from '../selectMenu/ChannelSelectMenu.js';\nimport { MentionableSelectMenuBuilder } from '../selectMenu/MentionableSelectMenu.js';\nimport { RoleSelectMenuBuilder } from '../selectMenu/RoleSelectMenu.js';\nimport { StringSelectMenuBuilder } from '../selectMenu/StringSelectMenu.js';\nimport { UserSelectMenuBuilder } from '../selectMenu/UserSelectMenu.js';\nimport { TextInputBuilder } from '../textInput/TextInput.js';\nimport { labelPredicate } from './Assertions.js';\n\nexport interface LabelBuilderData extends Partial> {\n\tcomponent?:\n\t\t| ChannelSelectMenuBuilder\n\t\t| FileUploadBuilder\n\t\t| MentionableSelectMenuBuilder\n\t\t| RoleSelectMenuBuilder\n\t\t| StringSelectMenuBuilder\n\t\t| TextInputBuilder\n\t\t| UserSelectMenuBuilder;\n}\n\n/**\n * A builder that creates API-compatible JSON data for labels.\n */\nexport class LabelBuilder extends ComponentBuilder {\n\t/**\n\t * @internal\n\t */\n\tpublic override readonly data: LabelBuilderData;\n\n\t/**\n\t * Creates a new label.\n\t *\n\t * @param data - The API data to create this label with\n\t * @example\n\t * Creating a label from an API data object:\n\t * ```ts\n\t * const label = new LabelBuilder({\n\t * \tlabel: \"label\",\n\t * \tcomponent,\n\t * });\n\t * ```\n\t * @example\n\t * Creating a label using setters and API data:\n\t * ```ts\n\t * const label = new LabelBuilder({\n\t * \tlabel: 'label',\n\t * \tcomponent,\n\t * }).setLabel('new text');\n\t * ```\n\t */\n\tpublic constructor(data: Partial = {}) {\n\t\tsuper({ type: ComponentType.Label });\n\n\t\tconst { component, ...rest } = data;\n\n\t\tthis.data = {\n\t\t\t...rest,\n\t\t\tcomponent: component ? createComponentBuilder(component) : undefined,\n\t\t\ttype: ComponentType.Label,\n\t\t};\n\t}\n\n\t/**\n\t * Sets the label for this label.\n\t *\n\t * @param label - The label to use\n\t */\n\tpublic setLabel(label: string) {\n\t\tthis.data.label = label;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the description for this label.\n\t *\n\t * @param description - The description to use\n\t */\n\tpublic setDescription(description: string) {\n\t\tthis.data.description = description;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Clears the description for this label.\n\t */\n\tpublic clearDescription() {\n\t\tthis.data.description = undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets a string select menu component to this label.\n\t *\n\t * @param input - A function that returns a component builder or an already built builder\n\t */\n\tpublic setStringSelectMenuComponent(\n\t\tinput:\n\t\t\t| APIStringSelectComponent\n\t\t\t| StringSelectMenuBuilder\n\t\t\t| ((builder: StringSelectMenuBuilder) => StringSelectMenuBuilder),\n\t): this {\n\t\tthis.data.component = resolveBuilder(input, StringSelectMenuBuilder);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets a user select menu component to this label.\n\t *\n\t * @param input - A function that returns a component builder or an already built builder\n\t */\n\tpublic setUserSelectMenuComponent(\n\t\tinput: APIUserSelectComponent | UserSelectMenuBuilder | ((builder: UserSelectMenuBuilder) => UserSelectMenuBuilder),\n\t): this {\n\t\tthis.data.component = resolveBuilder(input, UserSelectMenuBuilder);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets a role select menu component to this label.\n\t *\n\t * @param input - A function that returns a component builder or an already built builder\n\t */\n\tpublic setRoleSelectMenuComponent(\n\t\tinput: APIRoleSelectComponent | RoleSelectMenuBuilder | ((builder: RoleSelectMenuBuilder) => RoleSelectMenuBuilder),\n\t): this {\n\t\tthis.data.component = resolveBuilder(input, RoleSelectMenuBuilder);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets a mentionable select menu component to this label.\n\t *\n\t * @param input - A function that returns a component builder or an already built builder\n\t */\n\tpublic setMentionableSelectMenuComponent(\n\t\tinput:\n\t\t\t| APIMentionableSelectComponent\n\t\t\t| MentionableSelectMenuBuilder\n\t\t\t| ((builder: MentionableSelectMenuBuilder) => MentionableSelectMenuBuilder),\n\t): this {\n\t\tthis.data.component = resolveBuilder(input, MentionableSelectMenuBuilder);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets a channel select menu component to this label.\n\t *\n\t * @param input - A function that returns a component builder or an already built builder\n\t */\n\tpublic setChannelSelectMenuComponent(\n\t\tinput:\n\t\t\t| APIChannelSelectComponent\n\t\t\t| ChannelSelectMenuBuilder\n\t\t\t| ((builder: ChannelSelectMenuBuilder) => ChannelSelectMenuBuilder),\n\t): this {\n\t\tthis.data.component = resolveBuilder(input, ChannelSelectMenuBuilder);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets a text input component to this label.\n\t *\n\t * @param input - A function that returns a component builder or an already built builder\n\t */\n\tpublic setTextInputComponent(\n\t\tinput: APITextInputComponent | TextInputBuilder | ((builder: TextInputBuilder) => TextInputBuilder),\n\t): this {\n\t\tthis.data.component = resolveBuilder(input, TextInputBuilder);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets a file upload component to this label.\n\t *\n\t * @param input - A function that returns a component builder or an already built builder\n\t */\n\tpublic setFileUploadComponent(\n\t\tinput: APIFileUploadComponent | FileUploadBuilder | ((builder: FileUploadBuilder) => FileUploadBuilder),\n\t): this {\n\t\tthis.data.component = resolveBuilder(input, FileUploadBuilder);\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic override toJSON(): APILabelComponent {\n\t\tconst { component, ...rest } = this.data;\n\n\t\tconst data = {\n\t\t\t...rest,\n\t\t\t// The label predicate validates the component.\n\t\t\tcomponent: component?.toJSON(),\n\t\t};\n\n\t\tlabelPredicate.parse(data);\n\n\t\treturn data as APILabelComponent;\n\t}\n}\n","import {\n\ttype APIChannelSelectComponent,\n\ttype ChannelType,\n\ttype Snowflake,\n\tComponentType,\n\tSelectMenuDefaultValueType,\n} from 'discord-api-types/v10';\nimport { type RestOrArray, normalizeArray } from '../../util/normalizeArray.js';\nimport { channelTypesValidator, customIdValidator, optionsLengthValidator } from '../Assertions.js';\nimport { BaseSelectMenuBuilder } from './BaseSelectMenu.js';\n\n/**\n * A builder that creates API-compatible JSON data for channel select menus.\n */\nexport class ChannelSelectMenuBuilder extends BaseSelectMenuBuilder {\n\t/**\n\t * Creates a new select menu from API data.\n\t *\n\t * @param data - The API data to create this select menu with\n\t * @example\n\t * Creating a select menu from an API data object:\n\t * ```ts\n\t * const selectMenu = new ChannelSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * \tplaceholder: 'select an option',\n\t * \tmax_values: 2,\n\t * });\n\t * ```\n\t * @example\n\t * Creating a select menu using setters and API data:\n\t * ```ts\n\t * const selectMenu = new ChannelSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * })\n\t * \t.addChannelTypes(ChannelType.GuildText, ChannelType.GuildAnnouncement)\n\t * \t.setMinValues(2);\n\t * ```\n\t */\n\tpublic constructor(data?: Partial) {\n\t\tsuper({ ...data, type: ComponentType.ChannelSelect });\n\t}\n\n\t/**\n\t * Adds channel types to this select menu.\n\t *\n\t * @param types - The channel types to use\n\t */\n\tpublic addChannelTypes(...types: RestOrArray) {\n\t\tconst normalizedTypes = normalizeArray(types);\n\t\tthis.data.channel_types ??= [];\n\t\tthis.data.channel_types.push(...channelTypesValidator.parse(normalizedTypes));\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets channel types for this select menu.\n\t *\n\t * @param types - The channel types to use\n\t */\n\tpublic setChannelTypes(...types: RestOrArray) {\n\t\tconst normalizedTypes = normalizeArray(types);\n\t\tthis.data.channel_types ??= [];\n\t\tthis.data.channel_types.splice(0, this.data.channel_types.length, ...channelTypesValidator.parse(normalizedTypes));\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds default channels to this auto populated select menu.\n\t *\n\t * @param channels - The channels to add\n\t */\n\tpublic addDefaultChannels(...channels: RestOrArray) {\n\t\tconst normalizedValues = normalizeArray(channels);\n\t\toptionsLengthValidator.parse((this.data.default_values?.length ?? 0) + normalizedValues.length);\n\t\tthis.data.default_values ??= [];\n\n\t\tthis.data.default_values.push(\n\t\t\t...normalizedValues.map((id) => ({\n\t\t\t\tid,\n\t\t\t\ttype: SelectMenuDefaultValueType.Channel as const,\n\t\t\t})),\n\t\t);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets default channels for this auto populated select menu.\n\t *\n\t * @param channels - The channels to set\n\t */\n\tpublic setDefaultChannels(...channels: RestOrArray) {\n\t\tconst normalizedValues = normalizeArray(channels);\n\t\toptionsLengthValidator.parse(normalizedValues.length);\n\n\t\tthis.data.default_values = normalizedValues.map((id) => ({\n\t\t\tid,\n\t\t\ttype: SelectMenuDefaultValueType.Channel as const,\n\t\t}));\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc BaseSelectMenuBuilder.toJSON}\n\t */\n\tpublic override toJSON(): APIChannelSelectComponent {\n\t\tcustomIdValidator.parse(this.data.custom_id);\n\n\t\treturn {\n\t\t\t...this.data,\n\t\t} as APIChannelSelectComponent;\n\t}\n}\n","import { s } from '@sapphire/shapeshift';\nimport { ComponentType, TextInputStyle } from 'discord-api-types/v10';\nimport { isValidationEnabled } from '../../util/validation.js';\nimport { customIdValidator, idValidator } from '../Assertions.js';\n\nexport const textInputStyleValidator = s.nativeEnum(TextInputStyle).setValidationEnabled(isValidationEnabled);\nexport const minLengthValidator = s\n\t.number()\n\t.int()\n\t.greaterThanOrEqual(0)\n\t.lessThanOrEqual(4_000)\n\t.setValidationEnabled(isValidationEnabled);\nexport const maxLengthValidator = s\n\t.number()\n\t.int()\n\t.greaterThanOrEqual(1)\n\t.lessThanOrEqual(4_000)\n\t.setValidationEnabled(isValidationEnabled);\nexport const requiredValidator = s.boolean().setValidationEnabled(isValidationEnabled);\nexport const valueValidator = s.string().lengthLessThanOrEqual(4_000).setValidationEnabled(isValidationEnabled);\nexport const placeholderValidator = s.string().lengthLessThanOrEqual(100).setValidationEnabled(isValidationEnabled);\nexport const labelValidator = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(45)\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const textInputPredicate = s\n\t.object({\n\t\ttype: s.literal(ComponentType.TextInput),\n\t\tcustom_id: customIdValidator,\n\t\tstyle: textInputStyleValidator,\n\t\tid: idValidator.optional(),\n\t\tmin_length: minLengthValidator.optional(),\n\t\tmax_length: maxLengthValidator.optional(),\n\t\tplaceholder: placeholderValidator.optional(),\n\t\tvalue: valueValidator.optional(),\n\t\trequired: requiredValidator.optional(),\n\t})\n\t.setValidationEnabled(isValidationEnabled);\n\nexport function validateRequiredParameters(customId?: string, style?: TextInputStyle) {\n\tcustomIdValidator.parse(customId);\n\ttextInputStyleValidator.parse(style);\n}\n","import type { APISelectMenuComponent } from 'discord-api-types/v10';\nimport { customIdValidator, disabledValidator, minMaxValidator, placeholderValidator } from '../Assertions.js';\nimport { ComponentBuilder } from '../Component.js';\nimport { requiredValidator } from '../textInput/Assertions.js';\n\n/**\n * The base select menu builder that contains common symbols for select menu builders.\n *\n * @typeParam SelectMenuType - The type of select menu this would be instantiated for.\n */\nexport abstract class BaseSelectMenuBuilder<\n\tSelectMenuType extends APISelectMenuComponent,\n> extends ComponentBuilder {\n\t/**\n\t * Sets the placeholder for this select menu.\n\t *\n\t * @param placeholder - The placeholder to use\n\t */\n\tpublic setPlaceholder(placeholder: string) {\n\t\tthis.data.placeholder = placeholderValidator.parse(placeholder);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the minimum values that must be selected in the select menu.\n\t *\n\t * @param minValues - The minimum values that must be selected\n\t */\n\tpublic setMinValues(minValues: number) {\n\t\tthis.data.min_values = minMaxValidator.parse(minValues);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the maximum values that can be selected in the select menu.\n\t *\n\t * @param maxValues - The maximum values that can be selected\n\t */\n\tpublic setMaxValues(maxValues: number) {\n\t\tthis.data.max_values = minMaxValidator.parse(maxValues);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the custom id for this select menu.\n\t *\n\t * @param customId - The custom id to use\n\t */\n\tpublic setCustomId(customId: string) {\n\t\tthis.data.custom_id = customIdValidator.parse(customId);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets whether this select menu is disabled.\n\t *\n\t * @param disabled - Whether this select menu is disabled\n\t */\n\tpublic setDisabled(disabled = true) {\n\t\tthis.data.disabled = disabledValidator.parse(disabled);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets whether this select menu is required.\n\t *\n\t * @remarks Only for use in modals.\n\t * @param required - Whether this select menu is required\n\t */\n\tpublic setRequired(required = true) {\n\t\tthis.data.required = requiredValidator.parse(required);\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic toJSON(): SelectMenuType {\n\t\tcustomIdValidator.parse(this.data.custom_id);\n\t\treturn {\n\t\t\t...this.data,\n\t\t} as SelectMenuType;\n\t}\n}\n","import {\n\ttype APIMentionableSelectComponent,\n\ttype APISelectMenuDefaultValue,\n\ttype Snowflake,\n\tComponentType,\n\tSelectMenuDefaultValueType,\n} from 'discord-api-types/v10';\nimport { type RestOrArray, normalizeArray } from '../../util/normalizeArray.js';\nimport { optionsLengthValidator } from '../Assertions.js';\nimport { BaseSelectMenuBuilder } from './BaseSelectMenu.js';\n\n/**\n * A builder that creates API-compatible JSON data for mentionable select menus.\n */\nexport class MentionableSelectMenuBuilder extends BaseSelectMenuBuilder {\n\t/**\n\t * Creates a new select menu from API data.\n\t *\n\t * @param data - The API data to create this select menu with\n\t * @example\n\t * Creating a select menu from an API data object:\n\t * ```ts\n\t * const selectMenu = new MentionableSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * \tplaceholder: 'select an option',\n\t * \tmax_values: 2,\n\t * });\n\t * ```\n\t * @example\n\t * Creating a select menu using setters and API data:\n\t * ```ts\n\t * const selectMenu = new MentionableSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * })\n\t * \t.setMinValues(1);\n\t * ```\n\t */\n\tpublic constructor(data?: Partial) {\n\t\tsuper({ ...data, type: ComponentType.MentionableSelect });\n\t}\n\n\t/**\n\t * Adds default roles to this auto populated select menu.\n\t *\n\t * @param roles - The roles to add\n\t */\n\tpublic addDefaultRoles(...roles: RestOrArray) {\n\t\tconst normalizedValues = normalizeArray(roles);\n\t\toptionsLengthValidator.parse((this.data.default_values?.length ?? 0) + normalizedValues.length);\n\t\tthis.data.default_values ??= [];\n\n\t\tthis.data.default_values.push(\n\t\t\t...normalizedValues.map((id) => ({\n\t\t\t\tid,\n\t\t\t\ttype: SelectMenuDefaultValueType.Role as const,\n\t\t\t})),\n\t\t);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds default users to this auto populated select menu.\n\t *\n\t * @param users - The users to add\n\t */\n\tpublic addDefaultUsers(...users: RestOrArray) {\n\t\tconst normalizedValues = normalizeArray(users);\n\t\toptionsLengthValidator.parse((this.data.default_values?.length ?? 0) + normalizedValues.length);\n\t\tthis.data.default_values ??= [];\n\n\t\tthis.data.default_values.push(\n\t\t\t...normalizedValues.map((id) => ({\n\t\t\t\tid,\n\t\t\t\ttype: SelectMenuDefaultValueType.User as const,\n\t\t\t})),\n\t\t);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds default values to this auto populated select menu.\n\t *\n\t * @param values - The values to add\n\t */\n\tpublic addDefaultValues(\n\t\t...values: RestOrArray<\n\t\t\t| APISelectMenuDefaultValue\n\t\t\t| APISelectMenuDefaultValue\n\t\t>\n\t) {\n\t\tconst normalizedValues = normalizeArray(values);\n\t\toptionsLengthValidator.parse((this.data.default_values?.length ?? 0) + normalizedValues.length);\n\t\tthis.data.default_values ??= [];\n\t\tthis.data.default_values.push(...normalizedValues);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets default values for this auto populated select menu.\n\t *\n\t * @param values - The values to set\n\t */\n\tpublic setDefaultValues(\n\t\t...values: RestOrArray<\n\t\t\t| APISelectMenuDefaultValue\n\t\t\t| APISelectMenuDefaultValue\n\t\t>\n\t) {\n\t\tconst normalizedValues = normalizeArray(values);\n\t\toptionsLengthValidator.parse(normalizedValues.length);\n\t\tthis.data.default_values = normalizedValues;\n\t\treturn this;\n\t}\n}\n","import {\n\ttype APIRoleSelectComponent,\n\ttype Snowflake,\n\tComponentType,\n\tSelectMenuDefaultValueType,\n} from 'discord-api-types/v10';\nimport { type RestOrArray, normalizeArray } from '../../util/normalizeArray.js';\nimport { optionsLengthValidator } from '../Assertions.js';\nimport { BaseSelectMenuBuilder } from './BaseSelectMenu.js';\n\n/**\n * A builder that creates API-compatible JSON data for role select menus.\n */\nexport class RoleSelectMenuBuilder extends BaseSelectMenuBuilder {\n\t/**\n\t * Creates a new select menu from API data.\n\t *\n\t * @param data - The API data to create this select menu with\n\t * @example\n\t * Creating a select menu from an API data object:\n\t * ```ts\n\t * const selectMenu = new RoleSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * \tplaceholder: 'select an option',\n\t * \tmax_values: 2,\n\t * });\n\t * ```\n\t * @example\n\t * Creating a select menu using setters and API data:\n\t * ```ts\n\t * const selectMenu = new RoleSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * })\n\t * \t.setMinValues(1);\n\t * ```\n\t */\n\tpublic constructor(data?: Partial) {\n\t\tsuper({ ...data, type: ComponentType.RoleSelect });\n\t}\n\n\t/**\n\t * Adds default roles to this auto populated select menu.\n\t *\n\t * @param roles - The roles to add\n\t */\n\tpublic addDefaultRoles(...roles: RestOrArray) {\n\t\tconst normalizedValues = normalizeArray(roles);\n\t\toptionsLengthValidator.parse((this.data.default_values?.length ?? 0) + normalizedValues.length);\n\t\tthis.data.default_values ??= [];\n\n\t\tthis.data.default_values.push(\n\t\t\t...normalizedValues.map((id) => ({\n\t\t\t\tid,\n\t\t\t\ttype: SelectMenuDefaultValueType.Role as const,\n\t\t\t})),\n\t\t);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets default roles for this auto populated select menu.\n\t *\n\t * @param roles - The roles to set\n\t */\n\tpublic setDefaultRoles(...roles: RestOrArray) {\n\t\tconst normalizedValues = normalizeArray(roles);\n\t\toptionsLengthValidator.parse(normalizedValues.length);\n\n\t\tthis.data.default_values = normalizedValues.map((id) => ({\n\t\t\tid,\n\t\t\ttype: SelectMenuDefaultValueType.Role as const,\n\t\t}));\n\n\t\treturn this;\n\t}\n}\n","import { ComponentType } from 'discord-api-types/v10';\nimport type { APIStringSelectComponent, APISelectMenuOption } from 'discord-api-types/v10';\nimport { normalizeArray, type RestOrArray } from '../../util/normalizeArray.js';\nimport { optionsLengthValidator, validateRequiredSelectMenuParameters } from '../Assertions.js';\nimport { selectMenuStringOptionPredicate } from './Assertions.js';\nimport { BaseSelectMenuBuilder } from './BaseSelectMenu.js';\nimport { StringSelectMenuOptionBuilder } from './StringSelectMenuOption.js';\n\n/**\n * A builder that creates API-compatible JSON data for string select menus.\n */\nexport class StringSelectMenuBuilder extends BaseSelectMenuBuilder {\n\t/**\n\t * The options within this select menu.\n\t */\n\tpublic readonly options: StringSelectMenuOptionBuilder[];\n\n\t/**\n\t * Creates a new select menu from API data.\n\t *\n\t * @param data - The API data to create this select menu with\n\t * @example\n\t * Creating a select menu from an API data object:\n\t * ```ts\n\t * const selectMenu = new StringSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * \tplaceholder: 'select an option',\n\t * \tmax_values: 2,\n\t * \toptions: [\n\t * \t\t{ label: 'option 1', value: '1' },\n\t * \t\t{ label: 'option 2', value: '2' },\n\t * \t\t{ label: 'option 3', value: '3' },\n\t * \t],\n\t * });\n\t * ```\n\t * @example\n\t * Creating a select menu using setters and API data:\n\t * ```ts\n\t * const selectMenu = new StringSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * })\n\t * \t.setMinValues(1)\n\t * \t.addOptions({\n\t * \t\tlabel: 'Catchy',\n\t * \t\tvalue: 'catch',\n\t * \t});\n\t * ```\n\t */\n\tpublic constructor(data?: Partial) {\n\t\tconst { options, ...initData } = data ?? {};\n\t\tsuper({ ...initData, type: ComponentType.StringSelect });\n\t\tthis.options = options?.map((option: APISelectMenuOption) => new StringSelectMenuOptionBuilder(option)) ?? [];\n\t}\n\n\t/**\n\t * Adds options to this select menu.\n\t *\n\t * @param options - The options to add\n\t */\n\tpublic addOptions(...options: RestOrArray) {\n\t\tconst normalizedOptions = normalizeArray(options);\n\t\toptionsLengthValidator.parse(this.options.length + normalizedOptions.length);\n\t\tthis.options.push(\n\t\t\t...normalizedOptions.map((normalizedOption) =>\n\t\t\t\tnormalizedOption instanceof StringSelectMenuOptionBuilder\n\t\t\t\t\t? normalizedOption\n\t\t\t\t\t: new StringSelectMenuOptionBuilder(selectMenuStringOptionPredicate.parse(normalizedOption)),\n\t\t\t),\n\t\t);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the options for this select menu.\n\t *\n\t * @param options - The options to set\n\t */\n\tpublic setOptions(...options: RestOrArray) {\n\t\treturn this.spliceOptions(0, this.options.length, ...options);\n\t}\n\n\t/**\n\t * Removes, replaces, or inserts options for this select menu.\n\t *\n\t * @remarks\n\t * This method behaves similarly\n\t * to {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice | Array.prototype.splice()}.\n\t * It's useful for modifying and adjusting the order of existing options.\n\t * @example\n\t * Remove the first option:\n\t * ```ts\n\t * selectMenu.spliceOptions(0, 1);\n\t * ```\n\t * @example\n\t * Remove the first n option:\n\t * ```ts\n\t * const n = 4;\n\t * selectMenu.spliceOptions(0, n);\n\t * ```\n\t * @example\n\t * Remove the last option:\n\t * ```ts\n\t * selectMenu.spliceOptions(-1, 1);\n\t * ```\n\t * @param index - The index to start at\n\t * @param deleteCount - The number of options to remove\n\t * @param options - The replacing option objects or builders\n\t */\n\tpublic spliceOptions(\n\t\tindex: number,\n\t\tdeleteCount: number,\n\t\t...options: RestOrArray\n\t) {\n\t\tconst normalizedOptions = normalizeArray(options);\n\n\t\tconst clone = [...this.options];\n\n\t\tclone.splice(\n\t\t\tindex,\n\t\t\tdeleteCount,\n\t\t\t...normalizedOptions.map((normalizedOption) =>\n\t\t\t\tnormalizedOption instanceof StringSelectMenuOptionBuilder\n\t\t\t\t\t? normalizedOption\n\t\t\t\t\t: new StringSelectMenuOptionBuilder(selectMenuStringOptionPredicate.parse(normalizedOption)),\n\t\t\t),\n\t\t);\n\n\t\toptionsLengthValidator.parse(clone.length);\n\t\tthis.options.splice(0, this.options.length, ...clone);\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc BaseSelectMenuBuilder.toJSON}\n\t */\n\tpublic override toJSON(): APIStringSelectComponent {\n\t\tvalidateRequiredSelectMenuParameters(this.options, this.data.custom_id);\n\n\t\treturn {\n\t\t\t...this.data,\n\t\t\toptions: this.options.map((option) => option.toJSON()),\n\t\t} as APIStringSelectComponent;\n\t}\n}\n","import { Result, s } from '@sapphire/shapeshift';\nimport { ChannelType, ComponentType, SelectMenuDefaultValueType } from 'discord-api-types/v10';\nimport { isValidationEnabled } from '../../util/validation.js';\nimport { customIdValidator, emojiValidator, idValidator } from '../Assertions.js';\n\nconst selectMenuBasePredicate = s.object({\n\tid: idValidator.optional(),\n\tplaceholder: s.string().lengthLessThanOrEqual(150).optional(),\n\tmin_values: s.number().greaterThanOrEqual(0).lessThanOrEqual(25).optional(),\n\tmax_values: s.number().greaterThanOrEqual(0).lessThanOrEqual(25).optional(),\n\tcustom_id: customIdValidator,\n\tdisabled: s.boolean().optional(),\n});\n\nexport const selectMenuChannelPredicate = selectMenuBasePredicate\n\t.extend({\n\t\ttype: s.literal(ComponentType.ChannelSelect),\n\t\tchannel_types: s.nativeEnum(ChannelType).array().optional(),\n\t\tdefault_values: s\n\t\t\t.object({ id: s.string(), type: s.literal(SelectMenuDefaultValueType.Channel) })\n\t\t\t.array()\n\t\t\t.lengthLessThanOrEqual(25)\n\t\t\t.optional(),\n\t})\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const selectMenuMentionablePredicate = selectMenuBasePredicate\n\t.extend({\n\t\ttype: s.literal(ComponentType.MentionableSelect),\n\t\tdefault_values: s\n\t\t\t.object({\n\t\t\t\tid: s.string(),\n\t\t\t\ttype: s.union([s.literal(SelectMenuDefaultValueType.Role), s.literal(SelectMenuDefaultValueType.User)]),\n\t\t\t})\n\t\t\t.array()\n\t\t\t.lengthLessThanOrEqual(25)\n\t\t\t.optional(),\n\t})\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const selectMenuRolePredicate = selectMenuBasePredicate\n\t.extend({\n\t\ttype: s.literal(ComponentType.RoleSelect),\n\t\tdefault_values: s\n\t\t\t.object({ id: s.string(), type: s.literal(SelectMenuDefaultValueType.Role) })\n\t\t\t.array()\n\t\t\t.lengthLessThanOrEqual(25)\n\t\t\t.optional(),\n\t})\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const selectMenuUserPredicate = selectMenuBasePredicate\n\t.extend({\n\t\ttype: s.literal(ComponentType.UserSelect),\n\t\tdefault_values: s\n\t\t\t.object({ id: s.string(), type: s.literal(SelectMenuDefaultValueType.User) })\n\t\t\t.array()\n\t\t\t.lengthLessThanOrEqual(25)\n\t\t\t.optional(),\n\t})\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const selectMenuStringOptionPredicate = s\n\t.object({\n\t\tlabel: s.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(100),\n\t\tvalue: s.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(100),\n\t\tdescription: s.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(100).optional(),\n\t\temoji: emojiValidator.optional(),\n\t\tdefault: s.boolean().optional(),\n\t})\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const selectMenuStringPredicate = selectMenuBasePredicate\n\t.extend({\n\t\ttype: s.literal(ComponentType.StringSelect),\n\t\toptions: selectMenuStringOptionPredicate.array().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(25),\n\t})\n\t.reshape((value) => {\n\t\tif (value.min_values !== undefined && value.options.length < value.min_values) {\n\t\t\treturn Result.err(new RangeError(`The number of options must be greater than or equal to min_values`));\n\t\t}\n\n\t\tif (value.min_values !== undefined && value.max_values !== undefined && value.min_values > value.max_values) {\n\t\t\treturn Result.err(\n\t\t\t\tnew RangeError(`The maximum amount of options must be greater than or equal to the minimum amount of options`),\n\t\t\t);\n\t\t}\n\n\t\treturn Result.ok(value);\n\t})\n\t.setValidationEnabled(isValidationEnabled);\n","import {\n\ttype APIUserSelectComponent,\n\ttype Snowflake,\n\tComponentType,\n\tSelectMenuDefaultValueType,\n} from 'discord-api-types/v10';\nimport { type RestOrArray, normalizeArray } from '../../util/normalizeArray.js';\nimport { optionsLengthValidator } from '../Assertions.js';\nimport { BaseSelectMenuBuilder } from './BaseSelectMenu.js';\n\n/**\n * A builder that creates API-compatible JSON data for user select menus.\n */\nexport class UserSelectMenuBuilder extends BaseSelectMenuBuilder {\n\t/**\n\t * Creates a new select menu from API data.\n\t *\n\t * @param data - The API data to create this select menu with\n\t * @example\n\t * Creating a select menu from an API data object:\n\t * ```ts\n\t * const selectMenu = new UserSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * \tplaceholder: 'select an option',\n\t * \tmax_values: 2,\n\t * });\n\t * ```\n\t * @example\n\t * Creating a select menu using setters and API data:\n\t * ```ts\n\t * const selectMenu = new UserSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * })\n\t * \t.setMinValues(1);\n\t * ```\n\t */\n\tpublic constructor(data?: Partial) {\n\t\tsuper({ ...data, type: ComponentType.UserSelect });\n\t}\n\n\t/**\n\t * Adds default users to this auto populated select menu.\n\t *\n\t * @param users - The users to add\n\t */\n\tpublic addDefaultUsers(...users: RestOrArray) {\n\t\tconst normalizedValues = normalizeArray(users);\n\t\toptionsLengthValidator.parse((this.data.default_values?.length ?? 0) + normalizedValues.length);\n\t\tthis.data.default_values ??= [];\n\n\t\tthis.data.default_values.push(\n\t\t\t...normalizedValues.map((id) => ({\n\t\t\t\tid,\n\t\t\t\ttype: SelectMenuDefaultValueType.User as const,\n\t\t\t})),\n\t\t);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets default users for this auto populated select menu.\n\t *\n\t * @param users - The users to set\n\t */\n\tpublic setDefaultUsers(...users: RestOrArray) {\n\t\tconst normalizedValues = normalizeArray(users);\n\t\toptionsLengthValidator.parse(normalizedValues.length);\n\n\t\tthis.data.default_values = normalizedValues.map((id) => ({\n\t\t\tid,\n\t\t\ttype: SelectMenuDefaultValueType.User as const,\n\t\t}));\n\n\t\treturn this;\n\t}\n}\n","import { isJSONEncodable, type Equatable, type JSONEncodable } from '@discordjs/util';\nimport { ComponentType, type TextInputStyle, type APITextInputComponent } from 'discord-api-types/v10';\nimport isEqual from 'fast-deep-equal';\nimport { customIdValidator } from '../Assertions.js';\nimport { ComponentBuilder } from '../Component.js';\nimport {\n\tmaxLengthValidator,\n\tminLengthValidator,\n\tplaceholderValidator,\n\trequiredValidator,\n\tvalueValidator,\n\tvalidateRequiredParameters,\n\tlabelValidator,\n\ttextInputStyleValidator,\n} from './Assertions.js';\n\n/**\n * A builder that creates API-compatible JSON data for text inputs.\n */\nexport class TextInputBuilder\n\textends ComponentBuilder\n\timplements Equatable>\n{\n\t/**\n\t * Creates a new text input from API data.\n\t *\n\t * @param data - The API data to create this text input with\n\t * @example\n\t * Creating a text input from an API data object:\n\t * ```ts\n\t * const textInput = new TextInputBuilder({\n\t * \tcustom_id: 'a cool text input',\n\t * \tplaceholder: 'Type something',\n\t * \tstyle: TextInputStyle.Short,\n\t * });\n\t * ```\n\t * @example\n\t * Creating a text input using setters and API data:\n\t * ```ts\n\t * const textInput = new TextInputBuilder({\n\t * \tplaceholder: 'Type something else',\n\t * })\n\t * \t.setCustomId('woah')\n\t * \t.setStyle(TextInputStyle.Paragraph);\n\t * ```\n\t */\n\tpublic constructor(data?: APITextInputComponent & { type?: ComponentType.TextInput }) {\n\t\tsuper({ type: ComponentType.TextInput, ...data });\n\t}\n\n\t/**\n\t * Sets the custom id for this text input.\n\t *\n\t * @param customId - The custom id to use\n\t */\n\tpublic setCustomId(customId: string) {\n\t\tthis.data.custom_id = customIdValidator.parse(customId);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the label for this text input.\n\t *\n\t * @param label - The label to use\n\t * @deprecated Use a label builder to create a label (and optionally a description) instead.\n\t */\n\tpublic setLabel(label: string) {\n\t\tthis.data.label = labelValidator.parse(label);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the style for this text input.\n\t *\n\t * @param style - The style to use\n\t */\n\tpublic setStyle(style: TextInputStyle) {\n\t\tthis.data.style = textInputStyleValidator.parse(style);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the minimum length of text for this text input.\n\t *\n\t * @param minLength - The minimum length of text for this text input\n\t */\n\tpublic setMinLength(minLength: number) {\n\t\tthis.data.min_length = minLengthValidator.parse(minLength);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the maximum length of text for this text input.\n\t *\n\t * @param maxLength - The maximum length of text for this text input\n\t */\n\tpublic setMaxLength(maxLength: number) {\n\t\tthis.data.max_length = maxLengthValidator.parse(maxLength);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the placeholder for this text input.\n\t *\n\t * @param placeholder - The placeholder to use\n\t */\n\tpublic setPlaceholder(placeholder: string) {\n\t\tthis.data.placeholder = placeholderValidator.parse(placeholder);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the value for this text input.\n\t *\n\t * @param value - The value to use\n\t */\n\tpublic setValue(value: string) {\n\t\tthis.data.value = valueValidator.parse(value);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets whether this text input is required.\n\t *\n\t * @param required - Whether this text input is required\n\t */\n\tpublic setRequired(required = true) {\n\t\tthis.data.required = requiredValidator.parse(required);\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic toJSON(): APITextInputComponent {\n\t\tvalidateRequiredParameters(this.data.custom_id, this.data.style);\n\n\t\treturn {\n\t\t\t...this.data,\n\t\t} as APITextInputComponent;\n\t}\n\n\t/**\n\t * Whether this is equal to another structure.\n\t */\n\tpublic equals(other: APITextInputComponent | JSONEncodable): boolean {\n\t\tif (isJSONEncodable(other)) {\n\t\t\treturn isEqual(other.toJSON(), this.data);\n\t\t}\n\n\t\treturn isEqual(other, this.data);\n\t}\n}\n","import { s } from '@sapphire/shapeshift';\nimport { ComponentType } from 'discord-api-types/v10';\nimport { isValidationEnabled } from '../../util/validation.js';\nimport { idValidator } from '../Assertions.js';\nimport { fileUploadPredicate } from '../fileUpload/Assertions.js';\nimport {\n\tselectMenuChannelPredicate,\n\tselectMenuMentionablePredicate,\n\tselectMenuRolePredicate,\n\tselectMenuStringPredicate,\n\tselectMenuUserPredicate,\n} from '../selectMenu/Assertions.js';\nimport { textInputPredicate } from '../textInput/Assertions.js';\n\nexport const labelPredicate = s\n\t.object({\n\t\tid: idValidator.optional(),\n\t\ttype: s.literal(ComponentType.Label),\n\t\tlabel: s.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(45),\n\t\tdescription: s.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(100).optional(),\n\t\tcomponent: s.union([\n\t\t\ttextInputPredicate,\n\t\t\tselectMenuUserPredicate,\n\t\t\tselectMenuRolePredicate,\n\t\t\tselectMenuMentionablePredicate,\n\t\t\tselectMenuChannelPredicate,\n\t\t\tselectMenuStringPredicate,\n\t\t\tfileUploadPredicate,\n\t\t]),\n\t})\n\t.setValidationEnabled(isValidationEnabled);\n","/* eslint-disable jsdoc/check-param-names */\n\nimport type {\n\tAPIActionRowComponent,\n\tAPIComponentInContainer,\n\tAPIComponentInMessageActionRow,\n\tAPIContainerComponent,\n\tAPIFileComponent,\n\tAPIMediaGalleryComponent,\n\tAPISectionComponent,\n\tAPISeparatorComponent,\n\tAPITextDisplayComponent,\n} from 'discord-api-types/v10';\nimport { ComponentType } from 'discord-api-types/v10';\nimport type { RGBTuple } from '../../index.js';\nimport { MediaGalleryBuilder, SectionBuilder } from '../../index.js';\nimport { normalizeArray, type RestOrArray } from '../../util/normalizeArray.js';\nimport type { AnyComponentBuilder, MessageActionRowComponentBuilder } from '../ActionRow.js';\nimport { ActionRowBuilder } from '../ActionRow.js';\nimport { ComponentBuilder } from '../Component.js';\nimport { createComponentBuilder, resolveBuilder } from '../Components.js';\nimport { containerColorPredicate, spoilerPredicate } from './Assertions.js';\nimport { FileBuilder } from './File.js';\nimport { SeparatorBuilder } from './Separator.js';\nimport { TextDisplayBuilder } from './TextDisplay.js';\n\n/**\n * The builders that may be used within a container.\n */\nexport type ContainerComponentBuilder =\n\t| ActionRowBuilder\n\t| FileBuilder\n\t| MediaGalleryBuilder\n\t| SectionBuilder\n\t| SeparatorBuilder\n\t| TextDisplayBuilder;\n\n/**\n * A builder that creates API-compatible JSON data for a container.\n */\nexport class ContainerBuilder extends ComponentBuilder {\n\t/**\n\t * The components within this container.\n\t */\n\tpublic readonly components: ContainerComponentBuilder[];\n\n\t/**\n\t * Creates a new container from API data.\n\t *\n\t * @param data - The API data to create this container with\n\t * @example\n\t * Creating a container from an API data object:\n\t * ```ts\n\t * const container = new ContainerBuilder({\n\t * \tcomponents: [\n\t * \t\t{\n\t * \t\t\tcontent: \"Some text here\",\n\t * \t\t\ttype: ComponentType.TextDisplay,\n\t * \t\t},\n\t * \t],\n\t * });\n\t * ```\n\t * @example\n\t * Creating a container using setters and API data:\n\t * ```ts\n\t * const container = new ContainerBuilder({\n\t * \tcomponents: [\n\t * \t\t{\n\t * \t\t\tcontent: \"# Heading\",\n\t * \t\t\ttype: ComponentType.TextDisplay,\n\t * \t\t},\n\t * \t],\n\t * })\n\t * .addSeparatorComponents(separator)\n\t * .addSectionComponents(section);\n\t * ```\n\t */\n\tpublic constructor({ components, ...data }: Partial = {}) {\n\t\tsuper({ type: ComponentType.Container, ...data });\n\t\tthis.components = (components?.map((component) => createComponentBuilder(component)) ??\n\t\t\t[]) as ContainerComponentBuilder[];\n\t}\n\n\t/**\n\t * Sets the accent color of this container.\n\t *\n\t * @param color - The color to use\n\t */\n\tpublic setAccentColor(color?: RGBTuple | number): this {\n\t\t// Data assertions\n\t\tcontainerColorPredicate.parse(color);\n\n\t\tif (Array.isArray(color)) {\n\t\t\tconst [red, green, blue] = color;\n\t\t\tthis.data.accent_color = (red << 16) + (green << 8) + blue;\n\t\t\treturn this;\n\t\t}\n\n\t\tthis.data.accent_color = color;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Clears the accent color of this container.\n\t */\n\tpublic clearAccentColor() {\n\t\tthis.data.accent_color = undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds action row components to this container.\n\t *\n\t * @param components - The action row components to add\n\t */\n\tpublic addActionRowComponents(\n\t\t...components: RestOrArray<\n\t\t\t| ActionRowBuilder\n\t\t\t| APIActionRowComponent\n\t\t\t| ((builder: ActionRowBuilder) => ActionRowBuilder)\n\t\t>\n\t) {\n\t\tthis.components.push(\n\t\t\t...normalizeArray(components).map((component) => resolveBuilder(component, ActionRowBuilder)),\n\t\t);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds file components to this container.\n\t *\n\t * @param components - The file components to add\n\t */\n\tpublic addFileComponents(\n\t\t...components: RestOrArray FileBuilder)>\n\t) {\n\t\tthis.components.push(...normalizeArray(components).map((component) => resolveBuilder(component, FileBuilder)));\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds media gallery components to this container.\n\t *\n\t * @param components - The media gallery components to add\n\t */\n\tpublic addMediaGalleryComponents(\n\t\t...components: RestOrArray<\n\t\t\tAPIMediaGalleryComponent | MediaGalleryBuilder | ((builder: MediaGalleryBuilder) => MediaGalleryBuilder)\n\t\t>\n\t) {\n\t\tthis.components.push(\n\t\t\t...normalizeArray(components).map((component) => resolveBuilder(component, MediaGalleryBuilder)),\n\t\t);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds section components to this container.\n\t *\n\t * @param components - The section components to add\n\t */\n\tpublic addSectionComponents(\n\t\t...components: RestOrArray SectionBuilder)>\n\t) {\n\t\tthis.components.push(...normalizeArray(components).map((component) => resolveBuilder(component, SectionBuilder)));\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds separator components to this container.\n\t *\n\t * @param components - The separator components to add\n\t */\n\tpublic addSeparatorComponents(\n\t\t...components: RestOrArray<\n\t\t\tAPISeparatorComponent | SeparatorBuilder | ((builder: SeparatorBuilder) => SeparatorBuilder)\n\t\t>\n\t) {\n\t\tthis.components.push(...normalizeArray(components).map((component) => resolveBuilder(component, SeparatorBuilder)));\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds text display components to this container.\n\t *\n\t * @param components - The text display components to add\n\t */\n\tpublic addTextDisplayComponents(\n\t\t...components: RestOrArray<\n\t\t\tAPITextDisplayComponent | TextDisplayBuilder | ((builder: TextDisplayBuilder) => TextDisplayBuilder)\n\t\t>\n\t) {\n\t\tthis.components.push(\n\t\t\t...normalizeArray(components).map((component) => resolveBuilder(component, TextDisplayBuilder)),\n\t\t);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Removes, replaces, or inserts components for this container.\n\t *\n\t * @param index - The index to start removing, replacing or inserting components\n\t * @param deleteCount - The amount of components to remove\n\t * @param components - The components to set\n\t */\n\tpublic spliceComponents(\n\t\tindex: number,\n\t\tdeleteCount: number,\n\t\t...components: RestOrArray\n\t) {\n\t\tthis.components.splice(\n\t\t\tindex,\n\t\t\tdeleteCount,\n\t\t\t...normalizeArray(components).map((component) =>\n\t\t\t\tcomponent instanceof ComponentBuilder ? component : createComponentBuilder(component),\n\t\t\t),\n\t\t);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the spoiler status of this container.\n\t *\n\t * @param spoiler - The spoiler status to use\n\t */\n\tpublic setSpoiler(spoiler = true) {\n\t\tthis.data.spoiler = spoilerPredicate.parse(spoiler);\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic toJSON(): APIContainerComponent {\n\t\treturn {\n\t\t\t...this.data,\n\t\t\tcomponents: this.components.map((component) => component.toJSON()),\n\t\t} as APIContainerComponent;\n\t}\n}\n","import { s } from '@sapphire/shapeshift';\nimport { SeparatorSpacingSize } from 'discord-api-types/v10';\nimport { colorPredicate } from '../../messages/embed/Assertions';\nimport { isValidationEnabled } from '../../util/validation';\nimport { ComponentBuilder } from '../Component';\nimport { ButtonBuilder } from '../button/Button';\nimport type { ContainerComponentBuilder } from './Container';\nimport type { MediaGalleryItemBuilder } from './MediaGalleryItem';\nimport type { TextDisplayBuilder } from './TextDisplay';\nimport { ThumbnailBuilder } from './Thumbnail';\n\nexport const unfurledMediaItemPredicate = s\n\t.object({\n\t\turl: s\n\t\t\t.string()\n\t\t\t.url(\n\t\t\t\t{ allowedProtocols: ['http:', 'https:', 'attachment:'] },\n\t\t\t\t{ message: 'Invalid protocol for media URL. Must be http:, https:, or attachment:' },\n\t\t\t),\n\t})\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const descriptionPredicate = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(1_024)\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const filePredicate = s\n\t.object({\n\t\turl: s\n\t\t\t.string()\n\t\t\t.url({ allowedProtocols: ['attachment:'] }, { message: 'Invalid protocol for file URL. Must be attachment:' }),\n\t})\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const spoilerPredicate = s.boolean();\n\nexport const dividerPredicate = s.boolean();\n\nexport const spacingPredicate = s.nativeEnum(SeparatorSpacingSize);\n\nexport const textDisplayContentPredicate = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(4_000)\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const accessoryPredicate = s\n\t.instance(ButtonBuilder)\n\t.or(s.instance(ThumbnailBuilder))\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const containerColorPredicate = colorPredicate.nullish();\n\nexport function assertReturnOfBuilder(\n\tinput: unknown,\n\tExpectedInstanceOf: new () => ReturnType,\n): asserts input is ReturnType {\n\ts.instance(ExpectedInstanceOf).setValidationEnabled(isValidationEnabled).parse(input);\n}\n\nexport function validateComponentArray<\n\tReturnType extends ContainerComponentBuilder | MediaGalleryItemBuilder = ContainerComponentBuilder,\n>(input: unknown, min: number, max: number, ExpectedInstanceOf?: new () => ReturnType): asserts input is ReturnType[] {\n\t(ExpectedInstanceOf ? s.instance(ExpectedInstanceOf) : s.instance(ComponentBuilder))\n\t\t.array()\n\t\t.lengthGreaterThanOrEqual(min)\n\t\t.lengthLessThanOrEqual(max)\n\t\t.setValidationEnabled(isValidationEnabled)\n\t\t.parse(input);\n}\n","import type { APIThumbnailComponent } from 'discord-api-types/v10';\nimport { ComponentType } from 'discord-api-types/v10';\nimport { ComponentBuilder } from '../Component';\nimport { descriptionPredicate, spoilerPredicate, unfurledMediaItemPredicate } from './Assertions';\n\nexport class ThumbnailBuilder extends ComponentBuilder {\n\t/**\n\t * Creates a new thumbnail from API data.\n\t *\n\t * @param data - The API data to create this thumbnail with\n\t * @example\n\t * Creating a thumbnail from an API data object:\n\t * ```ts\n\t * const thumbnail = new ThumbnailBuilder({\n\t * \tdescription: 'some text',\n\t * media: {\n\t * url: 'https://cdn.discordapp.com/embed/avatars/4.png',\n\t * },\n\t * });\n\t * ```\n\t * @example\n\t * Creating a thumbnail using setters and API data:\n\t * ```ts\n\t * const thumbnail = new ThumbnailBuilder({\n\t * \tmedia: {\n\t * url: 'attachment://image.png',\n\t * },\n\t * })\n\t * \t.setDescription('alt text');\n\t * ```\n\t */\n\tpublic constructor(data: Partial = {}) {\n\t\tsuper({\n\t\t\ttype: ComponentType.Thumbnail,\n\t\t\t...data,\n\t\t\tmedia: data.media ? { url: data.media.url } : undefined,\n\t\t});\n\t}\n\n\t/**\n\t * Sets the description of this thumbnail.\n\t *\n\t * @param description - The description to use\n\t */\n\tpublic setDescription(description: string) {\n\t\tthis.data.description = descriptionPredicate.parse(description);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Clears the description of this thumbnail.\n\t */\n\tpublic clearDescription() {\n\t\tthis.data.description = undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the spoiler status of this thumbnail.\n\t *\n\t * @param spoiler - The spoiler status to use\n\t */\n\tpublic setSpoiler(spoiler = true) {\n\t\tthis.data.spoiler = spoilerPredicate.parse(spoiler);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the media URL of this thumbnail.\n\t *\n\t * @param url - The URL to use\n\t */\n\tpublic setURL(url: string) {\n\t\tthis.data.media = unfurledMediaItemPredicate.parse({ url });\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritdoc ComponentBuilder.toJSON}\n\t */\n\tpublic override toJSON(): APIThumbnailComponent {\n\t\tunfurledMediaItemPredicate.parse(this.data.media);\n\n\t\treturn { ...this.data } as APIThumbnailComponent;\n\t}\n}\n","import { ComponentType, type APIFileComponent } from 'discord-api-types/v10';\nimport { ComponentBuilder } from '../Component';\nimport { filePredicate, spoilerPredicate } from './Assertions';\n\nexport class FileBuilder extends ComponentBuilder {\n\t/**\n\t * Creates a new file from API data.\n\t *\n\t * @param data - The API data to create this file with\n\t * @example\n\t * Creating a file from an API data object:\n\t * ```ts\n\t * const file = new FileBuilder({\n\t * \tspoiler: true,\n\t * \tfile: {\n\t * \t\turl: 'attachment://file.png',\n\t * \t},\n\t * });\n\t * ```\n\t * @example\n\t * Creating a file using setters and API data:\n\t * ```ts\n\t * const file = new FileBuilder({\n\t * \tfile: {\n\t * \t\turl: 'attachment://image.jpg',\n\t * \t},\n\t * })\n\t * \t.setSpoiler(false);\n\t * ```\n\t */\n\tpublic constructor(data: Partial = {}) {\n\t\tsuper({ type: ComponentType.File, ...data, file: data.file ? { url: data.file.url } : undefined });\n\t}\n\n\t/**\n\t * Sets the spoiler status of this file.\n\t *\n\t * @param spoiler - The spoiler status to use\n\t */\n\tpublic setSpoiler(spoiler = true) {\n\t\tthis.data.spoiler = spoilerPredicate.parse(spoiler);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the media URL of this file.\n\t *\n\t * @param url - The URL to use\n\t */\n\tpublic setURL(url: string) {\n\t\tthis.data.file = filePredicate.parse({ url });\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic override toJSON(): APIFileComponent {\n\t\tfilePredicate.parse(this.data.file);\n\n\t\treturn { ...this.data, file: { ...this.data.file } } as APIFileComponent;\n\t}\n}\n","import type { SeparatorSpacingSize, APISeparatorComponent } from 'discord-api-types/v10';\nimport { ComponentType } from 'discord-api-types/v10';\nimport { ComponentBuilder } from '../Component';\nimport { dividerPredicate, spacingPredicate } from './Assertions';\n\nexport class SeparatorBuilder extends ComponentBuilder {\n\t/**\n\t * Creates a new separator from API data.\n\t *\n\t * @param data - The API data to create this separator with\n\t * @example\n\t * Creating a separator from an API data object:\n\t * ```ts\n\t * const separator = new SeparatorBuilder({\n\t * \tspacing: SeparatorSpacingSize.Small,\n\t * divider: true,\n\t * });\n\t * ```\n\t * @example\n\t * Creating a separator using setters and API data:\n\t * ```ts\n\t * const separator = new SeparatorBuilder({\n\t * \tspacing: SeparatorSpacingSize.Large,\n\t * })\n\t * \t.setDivider(false);\n\t * ```\n\t */\n\tpublic constructor(data: Partial = {}) {\n\t\tsuper({\n\t\t\ttype: ComponentType.Separator,\n\t\t\t...data,\n\t\t});\n\t}\n\n\t/**\n\t * Sets whether this separator should show a divider line.\n\t *\n\t * @param divider - Whether to show a divider line\n\t */\n\tpublic setDivider(divider = true) {\n\t\tthis.data.divider = dividerPredicate.parse(divider);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the spacing of this separator.\n\t *\n\t * @param spacing - The spacing to use\n\t */\n\tpublic setSpacing(spacing: SeparatorSpacingSize) {\n\t\tthis.data.spacing = spacingPredicate.parse(spacing);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Clears the spacing of this separator.\n\t */\n\tpublic clearSpacing() {\n\t\tthis.data.spacing = undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic override toJSON(): APISeparatorComponent {\n\t\treturn { ...this.data } as APISeparatorComponent;\n\t}\n}\n","import type { APITextDisplayComponent } from 'discord-api-types/v10';\nimport { ComponentType } from 'discord-api-types/v10';\nimport { ComponentBuilder } from '../Component';\nimport { textDisplayContentPredicate } from './Assertions';\n\nexport class TextDisplayBuilder extends ComponentBuilder {\n\t/**\n\t * Creates a new text display from API data.\n\t *\n\t * @param data - The API data to create this text display with\n\t * @example\n\t * Creating a text display from an API data object:\n\t * ```ts\n\t * const textDisplay = new TextDisplayBuilder({\n\t * \tcontent: 'some text',\n\t * });\n\t * ```\n\t * @example\n\t * Creating a text display using setters and API data:\n\t * ```ts\n\t * const textDisplay = new TextDisplayBuilder({\n\t * \tcontent: 'old text',\n\t * })\n\t * \t.setContent('new text');\n\t * ```\n\t */\n\tpublic constructor(data: Partial = {}) {\n\t\tsuper({\n\t\t\ttype: ComponentType.TextDisplay,\n\t\t\t...data,\n\t\t});\n\t}\n\n\t/**\n\t * Sets the text of this text display.\n\t *\n\t * @param content - The text to use\n\t */\n\tpublic setContent(content: string) {\n\t\tthis.data.content = textDisplayContentPredicate.parse(content);\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic override toJSON(): APITextDisplayComponent {\n\t\ttextDisplayContentPredicate.parse(this.data.content);\n\n\t\treturn { ...this.data } as APITextDisplayComponent;\n\t}\n}\n","/* eslint-disable jsdoc/check-param-names */\n\nimport type { APIMediaGalleryComponent, APIMediaGalleryItem } from 'discord-api-types/v10';\nimport { ComponentType } from 'discord-api-types/v10';\nimport { normalizeArray, type RestOrArray } from '../../util/normalizeArray.js';\nimport { ComponentBuilder } from '../Component.js';\nimport { resolveBuilder } from '../Components.js';\nimport { assertReturnOfBuilder, validateComponentArray } from './Assertions.js';\nimport { MediaGalleryItemBuilder } from './MediaGalleryItem.js';\n\n/**\n * A builder that creates API-compatible JSON data for a container.\n */\nexport class MediaGalleryBuilder extends ComponentBuilder {\n\t/**\n\t * The components within this container.\n\t */\n\tpublic readonly items: MediaGalleryItemBuilder[];\n\n\t/**\n\t * Creates a new media gallery from API data.\n\t *\n\t * @param data - The API data to create this media gallery with\n\t * @example\n\t * Creating a media gallery from an API data object:\n\t * ```ts\n\t * const mediaGallery = new MediaGalleryBuilder({\n\t * \titems: [\n\t * \t\t{\n\t * \t\t\tdescription: \"Some text here\",\n\t * \t\t\tmedia: {\n\t * \t\t\t\turl: 'https://cdn.discordapp.com/embed/avatars/2.png',\n\t * \t\t\t},\n\t * \t\t},\n\t * \t],\n\t * });\n\t * ```\n\t * @example\n\t * Creating a media gallery using setters and API data:\n\t * ```ts\n\t * const mediaGallery = new MediaGalleryBuilder({\n\t * \titems: [\n\t * \t\t{\n\t * \t\t\tdescription: \"alt text\",\n\t * \t\t\tmedia: {\n\t * \t\t\t\turl: 'https://cdn.discordapp.com/embed/avatars/5.png',\n\t * \t\t\t},\n\t * \t\t},\n\t * \t],\n\t * })\n\t * \t.addItems(item2, item3);\n\t * ```\n\t */\n\tpublic constructor({ items, ...data }: Partial = {}) {\n\t\tsuper({ type: ComponentType.MediaGallery, ...data });\n\t\tthis.items = items?.map((item) => new MediaGalleryItemBuilder(item)) ?? [];\n\t}\n\n\t/**\n\t * Adds items to this media gallery.\n\t *\n\t * @param items - The items to add\n\t */\n\tpublic addItems(\n\t\t...items: RestOrArray<\n\t\t\tAPIMediaGalleryItem | MediaGalleryItemBuilder | ((builder: MediaGalleryItemBuilder) => MediaGalleryItemBuilder)\n\t\t>\n\t) {\n\t\tthis.items.push(\n\t\t\t...normalizeArray(items).map((input) => {\n\t\t\t\tconst result = resolveBuilder(input, MediaGalleryItemBuilder);\n\n\t\t\t\tassertReturnOfBuilder(result, MediaGalleryItemBuilder);\n\t\t\t\treturn result;\n\t\t\t}),\n\t\t);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Removes, replaces, or inserts media gallery items for this media gallery.\n\t *\n\t * @param index - The index to start removing, replacing or inserting items\n\t * @param deleteCount - The amount of items to remove\n\t * @param items - The items to insert\n\t */\n\tpublic spliceItems(\n\t\tindex: number,\n\t\tdeleteCount: number,\n\t\t...items: RestOrArray<\n\t\t\tAPIMediaGalleryItem | MediaGalleryItemBuilder | ((builder: MediaGalleryItemBuilder) => MediaGalleryItemBuilder)\n\t\t>\n\t) {\n\t\tthis.items.splice(\n\t\t\tindex,\n\t\t\tdeleteCount,\n\t\t\t...normalizeArray(items).map((input) => {\n\t\t\t\tconst result = resolveBuilder(input, MediaGalleryItemBuilder);\n\n\t\t\t\tassertReturnOfBuilder(result, MediaGalleryItemBuilder);\n\t\t\t\treturn result;\n\t\t\t}),\n\t\t);\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic toJSON(): APIMediaGalleryComponent {\n\t\tvalidateComponentArray(this.items, 1, 10, MediaGalleryItemBuilder);\n\t\treturn {\n\t\t\t...this.data,\n\t\t\titems: this.items.map((item) => item.toJSON()),\n\t\t} as APIMediaGalleryComponent;\n\t}\n}\n","import type { JSONEncodable } from '@discordjs/util';\nimport type { APIMediaGalleryItem } from 'discord-api-types/v10';\nimport { descriptionPredicate, spoilerPredicate, unfurledMediaItemPredicate } from './Assertions';\n\nexport class MediaGalleryItemBuilder implements JSONEncodable {\n\t/**\n\t * The API data associated with this media gallery item.\n\t */\n\tpublic readonly data: Partial;\n\n\t/**\n\t * Creates a new media gallery item from API data.\n\t *\n\t * @param data - The API data to create this media gallery item with\n\t * @example\n\t * Creating a media gallery item from an API data object:\n\t * ```ts\n\t * const item = new MediaGalleryItemBuilder({\n\t * \tdescription: \"Some text here\",\n\t * \tmedia: {\n\t * \t\turl: 'https://cdn.discordapp.com/embed/avatars/2.png',\n\t * \t},\n\t * });\n\t * ```\n\t * @example\n\t * Creating a media gallery item using setters and API data:\n\t * ```ts\n\t * const item = new MediaGalleryItemBuilder({\n\t * \tmedia: {\n\t * \t\turl: 'https://cdn.discordapp.com/embed/avatars/5.png',\n\t * \t},\n\t * })\n\t * \t.setDescription(\"alt text\");\n\t * ```\n\t */\n\tpublic constructor(data: Partial = {}) {\n\t\tthis.data = data;\n\t}\n\n\t/**\n\t * Sets the description of this media gallery item.\n\t *\n\t * @param description - The description to use\n\t */\n\tpublic setDescription(description: string) {\n\t\tthis.data.description = descriptionPredicate.parse(description);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Clears the description of this media gallery item.\n\t */\n\tpublic clearDescription() {\n\t\tthis.data.description = undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the spoiler status of this media gallery item.\n\t *\n\t * @param spoiler - The spoiler status to use\n\t */\n\tpublic setSpoiler(spoiler = true) {\n\t\tthis.data.spoiler = spoilerPredicate.parse(spoiler);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the media URL of this media gallery item.\n\t *\n\t * @param url - The URL to use\n\t */\n\tpublic setURL(url: string) {\n\t\tthis.data.media = unfurledMediaItemPredicate.parse({ url });\n\t\treturn this;\n\t}\n\n\t/**\n\t * Serializes this builder to API-compatible JSON data.\n\t *\n\t * @remarks\n\t * This method runs validations on the data before serializing it.\n\t * As such, it may throw an error if the data is invalid.\n\t */\n\tpublic toJSON(): APIMediaGalleryItem {\n\t\tunfurledMediaItemPredicate.parse(this.data.media);\n\n\t\treturn { ...this.data } as APIMediaGalleryItem;\n\t}\n}\n","/* eslint-disable jsdoc/check-param-names */\n\nimport type {\n\tAPIButtonComponent,\n\tAPISectionComponent,\n\tAPITextDisplayComponent,\n\tAPIThumbnailComponent,\n} from 'discord-api-types/v10';\nimport { ComponentType } from 'discord-api-types/v10';\nimport { ButtonBuilder, ThumbnailBuilder } from '../../index.js';\nimport { normalizeArray, type RestOrArray } from '../../util/normalizeArray.js';\nimport { ComponentBuilder } from '../Component.js';\nimport { createComponentBuilder, resolveBuilder } from '../Components.js';\nimport { accessoryPredicate, assertReturnOfBuilder, validateComponentArray } from './Assertions.js';\nimport { TextDisplayBuilder } from './TextDisplay.js';\n\n/**\n * A builder that creates API-compatible JSON data for a section.\n */\nexport class SectionBuilder extends ComponentBuilder {\n\t/**\n\t * The components within this section.\n\t */\n\tpublic readonly components: ComponentBuilder[];\n\n\t/**\n\t * The accessory of this section.\n\t */\n\tpublic readonly accessory?: ButtonBuilder | ThumbnailBuilder;\n\n\t/**\n\t * Creates a new section from API data.\n\t *\n\t * @param data - The API data to create this section with\n\t * @example\n\t * Creating a section from an API data object:\n\t * ```ts\n\t * const section = new SectionBuilder({\n\t * \tcomponents: [\n\t * \t\t{\n\t * \t\t\tcontent: \"Some text here\",\n\t * \t\t\ttype: ComponentType.TextDisplay,\n\t * \t\t},\n\t * \t],\n\t * accessory: {\n\t * media: {\n\t * url: 'https://cdn.discordapp.com/embed/avatars/3.png',\n\t * },\n\t * }\n\t * });\n\t * ```\n\t * @example\n\t * Creating a section using setters and API data:\n\t * ```ts\n\t * const section = new SectionBuilder({\n\t * \tcomponents: [\n\t * \t\t{\n\t * \t\t\tcontent: \"# Heading\",\n\t * \t\t\ttype: ComponentType.TextDisplay,\n\t * \t\t},\n\t * \t],\n\t * })\n\t * \t.setPrimaryButtonAccessory(button);\n\t * ```\n\t */\n\tpublic constructor({ components, accessory, ...data }: Partial = {}) {\n\t\tsuper({ type: ComponentType.Section, ...data });\n\t\tthis.components = (components?.map((component) => createComponentBuilder(component)) ?? []) as ComponentBuilder[];\n\t\tthis.accessory = accessory ? createComponentBuilder(accessory) : undefined;\n\t}\n\n\t/**\n\t * Sets the accessory of this section to a button.\n\t *\n\t * @param accessory - The accessory to use\n\t */\n\tpublic setButtonAccessory(\n\t\taccessory: APIButtonComponent | ButtonBuilder | ((builder: ButtonBuilder) => ButtonBuilder),\n\t): this {\n\t\tReflect.set(this, 'accessory', accessoryPredicate.parse(resolveBuilder(accessory, ButtonBuilder)));\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the accessory of this section to a thumbnail.\n\t *\n\t * @param accessory - The accessory to use\n\t */\n\tpublic setThumbnailAccessory(\n\t\taccessory: APIThumbnailComponent | ThumbnailBuilder | ((builder: ThumbnailBuilder) => ThumbnailBuilder),\n\t): this {\n\t\tReflect.set(this, 'accessory', accessoryPredicate.parse(resolveBuilder(accessory, ThumbnailBuilder)));\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds text display components to this section.\n\t *\n\t * @param components - The text display components to add\n\t */\n\tpublic addTextDisplayComponents(\n\t\t...components: RestOrArray TextDisplayBuilder)>\n\t) {\n\t\tthis.components.push(\n\t\t\t...normalizeArray(components).map((input) => {\n\t\t\t\tconst result = resolveBuilder(input, TextDisplayBuilder);\n\n\t\t\t\tassertReturnOfBuilder(result, TextDisplayBuilder);\n\t\t\t\treturn result;\n\t\t\t}),\n\t\t);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Removes, replaces, or inserts text display components for this section.\n\t *\n\t * @param index - The index to start removing, replacing or inserting text display components\n\t * @param deleteCount - The amount of text display components to remove\n\t * @param components - The text display components to insert\n\t */\n\tpublic spliceTextDisplayComponents(\n\t\tindex: number,\n\t\tdeleteCount: number,\n\t\t...components: RestOrArray<\n\t\t\tAPITextDisplayComponent | TextDisplayBuilder | ((builder: TextDisplayBuilder) => TextDisplayBuilder)\n\t\t>\n\t) {\n\t\tthis.components.splice(\n\t\t\tindex,\n\t\t\tdeleteCount,\n\t\t\t...normalizeArray(components).map((input) => {\n\t\t\t\tconst result = resolveBuilder(input, TextDisplayBuilder);\n\n\t\t\t\tassertReturnOfBuilder(result, TextDisplayBuilder);\n\t\t\t\treturn result;\n\t\t\t}),\n\t\t);\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic toJSON(): APISectionComponent {\n\t\tvalidateComponentArray(this.components, 1, 3, TextDisplayBuilder);\n\t\treturn {\n\t\t\t...this.data,\n\t\t\tcomponents: this.components.map((component) => component.toJSON()),\n\t\t\taccessory: accessoryPredicate.parse(this.accessory).toJSON(),\n\t\t} as APISectionComponent;\n\t}\n}\n","/* eslint-disable jsdoc/check-param-names */\n\nimport type { JSONEncodable } from '@discordjs/util';\nimport type {\n\tAPITextInputComponent,\n\tAPIActionRowComponent,\n\tAPIComponentInModalActionRow,\n\tAPILabelComponent,\n\tAPIModalInteractionResponseCallbackData,\n\tAPITextDisplayComponent,\n} from 'discord-api-types/v10';\nimport { ComponentType } from 'discord-api-types/v10';\nimport { ActionRowBuilder, type ModalActionRowComponentBuilder } from '../../components/ActionRow.js';\nimport { customIdValidator } from '../../components/Assertions.js';\nimport { createComponentBuilder, resolveBuilder } from '../../components/Components.js';\nimport { LabelBuilder } from '../../components/label/Label.js';\nimport { TextInputBuilder } from '../../components/textInput/TextInput.js';\nimport { TextDisplayBuilder } from '../../components/v2/TextDisplay.js';\nimport { normalizeArray, type RestOrArray } from '../../util/normalizeArray.js';\nimport { titleValidator, validateRequiredParameters } from './Assertions.js';\n\n/**\n * A builder that creates API-compatible JSON data for modals.\n */\nexport class ModalBuilder implements JSONEncodable {\n\t/**\n\t * The API data associated with this modal.\n\t */\n\tpublic readonly data: Partial;\n\n\t/**\n\t * The components within this modal.\n\t */\n\tpublic readonly components: (ActionRowBuilder | LabelBuilder | TextDisplayBuilder)[] =\n\t\t[];\n\n\t/**\n\t * Creates a new modal from API data.\n\t *\n\t * @param data - The API data to create this modal with\n\t */\n\tpublic constructor({ components, ...data }: Partial = {}) {\n\t\tthis.data = { ...data };\n\t\tthis.components = (components?.map((component) => createComponentBuilder(component)) ?? []) as (\n\t\t\t| ActionRowBuilder\n\t\t\t| LabelBuilder\n\t\t)[];\n\t}\n\n\t/**\n\t * Sets the title of this modal.\n\t *\n\t * @param title - The title to use\n\t */\n\tpublic setTitle(title: string) {\n\t\tthis.data.title = titleValidator.parse(title);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the custom id of this modal.\n\t *\n\t * @param customId - The custom id to use\n\t */\n\tpublic setCustomId(customId: string) {\n\t\tthis.data.custom_id = customIdValidator.parse(customId);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds components to this modal.\n\t *\n\t * @param components - The components to add\n\t * @deprecated Use {@link ModalBuilder.addLabelComponents} or {@link ModalBuilder.addTextDisplayComponents} instead\n\t */\n\tpublic addComponents(\n\t\t...components: RestOrArray<\n\t\t\t| ActionRowBuilder\n\t\t\t| APIActionRowComponent\n\t\t\t| APILabelComponent\n\t\t\t| APITextDisplayComponent\n\t\t\t| APITextInputComponent\n\t\t\t| LabelBuilder\n\t\t\t| TextDisplayBuilder\n\t\t\t| TextInputBuilder\n\t\t>\n\t) {\n\t\tthis.components.push(\n\t\t\t...normalizeArray(components).map((component, idx) => {\n\t\t\t\tif (\n\t\t\t\t\tcomponent instanceof ActionRowBuilder ||\n\t\t\t\t\tcomponent instanceof LabelBuilder ||\n\t\t\t\t\tcomponent instanceof TextDisplayBuilder\n\t\t\t\t) {\n\t\t\t\t\treturn component;\n\t\t\t\t}\n\n\t\t\t\t// Deprecated support\n\t\t\t\tif (component instanceof TextInputBuilder) {\n\t\t\t\t\treturn new ActionRowBuilder().addComponents(component);\n\t\t\t\t}\n\n\t\t\t\tif ('type' in component) {\n\t\t\t\t\tif (component.type === ComponentType.ActionRow) {\n\t\t\t\t\t\treturn new ActionRowBuilder(component);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (component.type === ComponentType.Label) {\n\t\t\t\t\t\treturn new LabelBuilder(component);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (component.type === ComponentType.TextDisplay) {\n\t\t\t\t\t\treturn new TextDisplayBuilder(component);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Deprecated, should go in a label component\n\t\t\t\t\tif (component.type === ComponentType.TextInput) {\n\t\t\t\t\t\treturn new ActionRowBuilder().addComponents(\n\t\t\t\t\t\t\tnew TextInputBuilder(component),\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthrow new TypeError(`Invalid component passed in ModalBuilder.addComponents at index ${idx}!`);\n\t\t\t}),\n\t\t);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds label components to this modal.\n\t *\n\t * @param components - The components to add\n\t */\n\tpublic addLabelComponents(\n\t\t...components: RestOrArray LabelBuilder)>\n\t) {\n\t\tconst normalized = normalizeArray(components);\n\t\tconst resolved = normalized.map((label) => resolveBuilder(label, LabelBuilder));\n\n\t\tthis.components.push(...resolved);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds text display components to this modal.\n\t *\n\t * @param components - The components to add\n\t */\n\tpublic addTextDisplayComponents(\n\t\t...components: RestOrArray<\n\t\t\tAPITextDisplayComponent | TextDisplayBuilder | ((builder: TextDisplayBuilder) => TextDisplayBuilder)\n\t\t>\n\t) {\n\t\tconst normalized = normalizeArray(components);\n\t\tconst resolved = normalized.map((row) => resolveBuilder(row, TextDisplayBuilder));\n\n\t\tthis.components.push(...resolved);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds action rows to this modal.\n\t *\n\t * @param components - The components to add\n\t * @deprecated Use {@link ModalBuilder.addLabelComponents} instead\n\t */\n\tpublic addActionRowComponents(\n\t\t...components: RestOrArray<\n\t\t\t| ActionRowBuilder\n\t\t\t| APIActionRowComponent\n\t\t\t| ((\n\t\t\t\t\tbuilder: ActionRowBuilder,\n\t\t\t ) => ActionRowBuilder)\n\t\t>\n\t) {\n\t\tconst normalized = normalizeArray(components);\n\t\tconst resolved = normalized.map((row) => resolveBuilder(row, ActionRowBuilder));\n\n\t\tthis.components.push(...resolved);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the labels for this modal.\n\t *\n\t * @param components - The components to set\n\t */\n\tpublic setLabelComponents(\n\t\t...components: RestOrArray LabelBuilder)>\n\t) {\n\t\tconst normalized = normalizeArray(components);\n\t\tthis.spliceLabelComponents(0, this.components.length, ...normalized);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Removes, replaces, or inserts labels for this modal.\n\t *\n\t * @remarks\n\t * This method behaves similarly\n\t * to {@link https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/splice | Array.prototype.splice()}.\n\t * The maximum amount of labels that can be added is 5.\n\t *\n\t * It's useful for modifying and adjusting order of the already-existing labels of a modal.\n\t * @example\n\t * Remove the first label:\n\t * ```ts\n\t * modal.spliceLabelComponents(0, 1);\n\t * ```\n\t * @example\n\t * Remove the first n labels:\n\t * ```ts\n\t * const n = 4;\n\t * modal.spliceLabelComponents(0, n);\n\t * ```\n\t * @example\n\t * Remove the last label:\n\t * ```ts\n\t * modal.spliceLabelComponents(-1, 1);\n\t * ```\n\t * @param index - The index to start at\n\t * @param deleteCount - The number of labels to remove\n\t * @param labels - The replacing label objects\n\t */\n\tpublic spliceLabelComponents(\n\t\tindex: number,\n\t\tdeleteCount: number,\n\t\t...labels: (APILabelComponent | LabelBuilder | ((builder: LabelBuilder) => LabelBuilder))[]\n\t): this {\n\t\tconst resolved = labels.map((label) => resolveBuilder(label, LabelBuilder));\n\t\tthis.components.splice(index, deleteCount, ...resolved);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets components for this modal.\n\t *\n\t * @param components - The components to set\n\t * @deprecated Use {@link ModalBuilder.setLabelComponents} instead\n\t */\n\tpublic setComponents(\n\t\t...components: RestOrArray | LabelBuilder | TextDisplayBuilder>\n\t) {\n\t\tthis.components.splice(0, this.components.length, ...normalizeArray(components));\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic toJSON(): APIModalInteractionResponseCallbackData {\n\t\tvalidateRequiredParameters(this.data.custom_id, this.data.title, this.components);\n\n\t\treturn {\n\t\t\t...this.data,\n\t\t\tcomponents: this.components.map((component) => component.toJSON()),\n\t\t} as APIModalInteractionResponseCallbackData;\n\t}\n}\n","import { s } from '@sapphire/shapeshift';\nimport { ActionRowBuilder, type ModalActionRowComponentBuilder } from '../../components/ActionRow.js';\nimport { customIdValidator } from '../../components/Assertions.js';\nimport { LabelBuilder } from '../../components/label/Label.js';\nimport { TextDisplayBuilder } from '../../components/v2/TextDisplay.js';\nimport { isValidationEnabled } from '../../util/validation.js';\n\nexport const titleValidator = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(45)\n\t.setValidationEnabled(isValidationEnabled);\nexport const componentsValidator = s\n\t.union([s.instance(ActionRowBuilder), s.instance(LabelBuilder), s.instance(TextDisplayBuilder)])\n\t.array()\n\t.lengthGreaterThanOrEqual(1)\n\t.setValidationEnabled(isValidationEnabled);\n\nexport function validateRequiredParameters(\n\tcustomId?: string,\n\ttitle?: string,\n\tcomponents?: (ActionRowBuilder | LabelBuilder | TextDisplayBuilder)[],\n) {\n\tcustomIdValidator.parse(customId);\n\ttitleValidator.parse(title);\n\tcomponentsValidator.parse(components);\n}\n","import { s } from '@sapphire/shapeshift';\nimport {\n\tApplicationIntegrationType,\n\tInteractionContextType,\n\tLocale,\n\ttype APIApplicationCommandOptionChoice,\n\ttype LocalizationMap,\n} from 'discord-api-types/v10';\nimport { isValidationEnabled } from '../../util/validation.js';\nimport type { ToAPIApplicationCommandOptions } from './SlashCommandBuilder.js';\nimport type { SlashCommandSubcommandBuilder, SlashCommandSubcommandGroupBuilder } from './SlashCommandSubcommands.js';\nimport type { ApplicationCommandOptionBase } from './mixins/ApplicationCommandOptionBase.js';\n\nconst namePredicate = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(32)\n\t.regex(/^[\\p{Ll}\\p{Lm}\\p{Lo}\\p{N}\\p{sc=Devanagari}\\p{sc=Thai}_-]+$/u)\n\t.setValidationEnabled(isValidationEnabled);\n\nexport function validateName(name: unknown): asserts name is string {\n\tnamePredicate.parse(name);\n}\n\nconst descriptionPredicate = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(100)\n\t.setValidationEnabled(isValidationEnabled);\nconst localePredicate = s.nativeEnum(Locale);\n\nexport function validateDescription(description: unknown): asserts description is string {\n\tdescriptionPredicate.parse(description);\n}\n\nconst maxArrayLengthPredicate = s.unknown().array().lengthLessThanOrEqual(25).setValidationEnabled(isValidationEnabled);\nexport function validateLocale(locale: unknown) {\n\treturn localePredicate.parse(locale);\n}\n\nexport function validateMaxOptionsLength(options: unknown): asserts options is ToAPIApplicationCommandOptions[] {\n\tmaxArrayLengthPredicate.parse(options);\n}\n\nexport function validateRequiredParameters(\n\tname: string,\n\tdescription: string,\n\toptions: ToAPIApplicationCommandOptions[],\n) {\n\t// Assert name matches all conditions\n\tvalidateName(name);\n\n\t// Assert description conditions\n\tvalidateDescription(description);\n\n\t// Assert options conditions\n\tvalidateMaxOptionsLength(options);\n}\n\nconst booleanPredicate = s.boolean();\n\nexport function validateDefaultPermission(value: unknown): asserts value is boolean {\n\tbooleanPredicate.parse(value);\n}\n\nexport function validateRequired(required: unknown): asserts required is boolean {\n\tbooleanPredicate.parse(required);\n}\n\nconst choicesLengthPredicate = s.number().lessThanOrEqual(25).setValidationEnabled(isValidationEnabled);\n\nexport function validateChoicesLength(amountAdding: number, choices?: APIApplicationCommandOptionChoice[]): void {\n\tchoicesLengthPredicate.parse((choices?.length ?? 0) + amountAdding);\n}\n\nexport function assertReturnOfBuilder<\n\tReturnType extends ApplicationCommandOptionBase | SlashCommandSubcommandBuilder | SlashCommandSubcommandGroupBuilder,\n>(input: unknown, ExpectedInstanceOf: new () => ReturnType): asserts input is ReturnType {\n\ts.instance(ExpectedInstanceOf).parse(input);\n}\n\nexport const localizationMapPredicate = s\n\t.object(Object.fromEntries(Object.values(Locale).map((locale) => [locale, s.string().nullish()])))\n\t.strict()\n\t.nullish()\n\t.setValidationEnabled(isValidationEnabled);\n\nexport function validateLocalizationMap(value: unknown): asserts value is LocalizationMap {\n\tlocalizationMapPredicate.parse(value);\n}\n\nconst dmPermissionPredicate = s.boolean().nullish();\n\nexport function validateDMPermission(value: unknown): asserts value is boolean | null | undefined {\n\tdmPermissionPredicate.parse(value);\n}\n\nconst memberPermissionPredicate = s\n\t.union([\n\t\ts.bigint().transform((value) => value.toString()),\n\t\ts\n\t\t\t.number()\n\t\t\t.safeInt()\n\t\t\t.transform((value) => value.toString()),\n\t\ts.string().regex(/^\\d+$/),\n\t])\n\t.nullish();\n\nexport function validateDefaultMemberPermissions(permissions: unknown) {\n\treturn memberPermissionPredicate.parse(permissions);\n}\n\nexport function validateNSFW(value: unknown): asserts value is boolean {\n\tbooleanPredicate.parse(value);\n}\n\nexport const contextsPredicate = s.array(\n\ts.nativeEnum(InteractionContextType).setValidationEnabled(isValidationEnabled),\n);\n\nexport const integrationTypesPredicate = s.array(\n\ts.nativeEnum(ApplicationIntegrationType).setValidationEnabled(isValidationEnabled),\n);\n","import type {\n\tAPIApplicationCommandOption,\n\tApplicationIntegrationType,\n\tInteractionContextType,\n\tLocalizationMap,\n\tPermissions,\n} from 'discord-api-types/v10';\nimport { mix } from 'ts-mixer';\nimport { SharedNameAndDescription } from './mixins/NameAndDescription.js';\nimport { SharedSlashCommand } from './mixins/SharedSlashCommand.js';\nimport { SharedSlashCommandOptions } from './mixins/SharedSlashCommandOptions.js';\nimport { SharedSlashCommandSubcommands } from './mixins/SharedSubcommands.js';\n\n/**\n * A builder that creates API-compatible JSON data for slash commands.\n */\n@mix(SharedSlashCommandOptions, SharedNameAndDescription, SharedSlashCommandSubcommands, SharedSlashCommand)\nexport class SlashCommandBuilder {\n\t/**\n\t * The name of this command.\n\t */\n\tpublic readonly name: string = undefined!;\n\n\t/**\n\t * The name localizations of this command.\n\t */\n\tpublic readonly name_localizations?: LocalizationMap;\n\n\t/**\n\t * The description of this command.\n\t */\n\tpublic readonly description: string = undefined!;\n\n\t/**\n\t * The description localizations of this command.\n\t */\n\tpublic readonly description_localizations?: LocalizationMap;\n\n\t/**\n\t * The options of this command.\n\t */\n\tpublic readonly options: ToAPIApplicationCommandOptions[] = [];\n\n\t/**\n\t * The contexts for this command.\n\t */\n\tpublic readonly contexts?: InteractionContextType[];\n\n\t/**\n\t * Whether this command is enabled by default when the application is added to a guild.\n\t *\n\t * @deprecated Use {@link SharedSlashCommand.setDefaultMemberPermissions} or {@link SharedSlashCommand.setDMPermission} instead.\n\t */\n\tpublic readonly default_permission: boolean | undefined = undefined;\n\n\t/**\n\t * The set of permissions represented as a bit set for the command.\n\t */\n\tpublic readonly default_member_permissions: Permissions | null | undefined = undefined;\n\n\t/**\n\t * Indicates whether the command is available in direct messages with the application.\n\t *\n\t * @remarks\n\t * By default, commands are visible. This property is only for global commands.\n\t * @deprecated\n\t * Use {@link SlashCommandBuilder.contexts} instead.\n\t */\n\tpublic readonly dm_permission: boolean | undefined = undefined;\n\n\t/**\n\t * The integration types for this command.\n\t */\n\tpublic readonly integration_types?: ApplicationIntegrationType[];\n\n\t/**\n\t * Whether this command is NSFW.\n\t */\n\tpublic readonly nsfw: boolean | undefined = undefined;\n}\n\nexport interface SlashCommandBuilder\n\textends SharedNameAndDescription,\n\t\tSharedSlashCommandOptions,\n\t\tSharedSlashCommandSubcommands,\n\t\tSharedSlashCommand {}\n\n/**\n * An interface specifically for slash command subcommands.\n */\nexport interface SlashCommandSubcommandsOnlyBuilder\n\textends SharedNameAndDescription,\n\t\tSharedSlashCommandSubcommands,\n\t\tSharedSlashCommand {}\n\n/**\n * An interface specifically for slash command options.\n */\nexport interface SlashCommandOptionsOnlyBuilder\n\textends SharedNameAndDescription,\n\t\tSharedSlashCommandOptions,\n\t\tSharedSlashCommand {}\n\n/**\n * An interface that ensures the `toJSON()` call will return something\n * that can be serialized into API-compatible data.\n */\nexport interface ToAPIApplicationCommandOptions {\n\ttoJSON(): APIApplicationCommandOption;\n}\n","import type { LocaleString, LocalizationMap } from 'discord-api-types/v10';\nimport { validateDescription, validateLocale, validateName } from '../Assertions.js';\n\n/**\n * This mixin holds name and description symbols for slash commands.\n */\nexport class SharedNameAndDescription {\n\t/**\n\t * The name of this command.\n\t */\n\tpublic readonly name!: string;\n\n\t/**\n\t * The name localizations of this command.\n\t */\n\tpublic readonly name_localizations?: LocalizationMap;\n\n\t/**\n\t * The description of this command.\n\t */\n\tpublic readonly description!: string;\n\n\t/**\n\t * The description localizations of this command.\n\t */\n\tpublic readonly description_localizations?: LocalizationMap;\n\n\t/**\n\t * Sets the name of this command.\n\t *\n\t * @param name - The name to use\n\t */\n\tpublic setName(name: string): this {\n\t\t// Assert the name matches the conditions\n\t\tvalidateName(name);\n\n\t\tReflect.set(this, 'name', name);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the description of this command.\n\t *\n\t * @param description - The description to use\n\t */\n\tpublic setDescription(description: string) {\n\t\t// Assert the description matches the conditions\n\t\tvalidateDescription(description);\n\n\t\tReflect.set(this, 'description', description);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets a name localization for this command.\n\t *\n\t * @param locale - The locale to set\n\t * @param localizedName - The localized name for the given `locale`\n\t */\n\tpublic setNameLocalization(locale: LocaleString, localizedName: string | null) {\n\t\tif (!this.name_localizations) {\n\t\t\tReflect.set(this, 'name_localizations', {});\n\t\t}\n\n\t\tconst parsedLocale = validateLocale(locale);\n\n\t\tif (localizedName === null) {\n\t\t\tthis.name_localizations![parsedLocale] = null;\n\t\t\treturn this;\n\t\t}\n\n\t\tvalidateName(localizedName);\n\n\t\tthis.name_localizations![parsedLocale] = localizedName;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the name localizations for this command.\n\t *\n\t * @param localizedNames - The object of localized names to set\n\t */\n\tpublic setNameLocalizations(localizedNames: LocalizationMap | null) {\n\t\tif (localizedNames === null) {\n\t\t\tReflect.set(this, 'name_localizations', null);\n\t\t\treturn this;\n\t\t}\n\n\t\tReflect.set(this, 'name_localizations', {});\n\n\t\tfor (const args of Object.entries(localizedNames)) {\n\t\t\tthis.setNameLocalization(...(args as [LocaleString, string | null]));\n\t\t}\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets a description localization for this command.\n\t *\n\t * @param locale - The locale to set\n\t * @param localizedDescription - The localized description for the given locale\n\t */\n\tpublic setDescriptionLocalization(locale: LocaleString, localizedDescription: string | null) {\n\t\tif (!this.description_localizations) {\n\t\t\tReflect.set(this, 'description_localizations', {});\n\t\t}\n\n\t\tconst parsedLocale = validateLocale(locale);\n\n\t\tif (localizedDescription === null) {\n\t\t\tthis.description_localizations![parsedLocale] = null;\n\t\t\treturn this;\n\t\t}\n\n\t\tvalidateDescription(localizedDescription);\n\n\t\tthis.description_localizations![parsedLocale] = localizedDescription;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the description localizations for this command.\n\t *\n\t * @param localizedDescriptions - The object of localized descriptions to set\n\t */\n\tpublic setDescriptionLocalizations(localizedDescriptions: LocalizationMap | null) {\n\t\tif (localizedDescriptions === null) {\n\t\t\tReflect.set(this, 'description_localizations', null);\n\t\t\treturn this;\n\t\t}\n\n\t\tReflect.set(this, 'description_localizations', {});\n\t\tfor (const args of Object.entries(localizedDescriptions)) {\n\t\t\tthis.setDescriptionLocalization(...(args as [LocaleString, string | null]));\n\t\t}\n\n\t\treturn this;\n\t}\n}\n","import {\n\tApplicationCommandType,\n\ttype ApplicationIntegrationType,\n\ttype InteractionContextType,\n\ttype LocalizationMap,\n\ttype Permissions,\n\ttype RESTPostAPIChatInputApplicationCommandsJSONBody,\n} from 'discord-api-types/v10';\nimport type { RestOrArray } from '../../../util/normalizeArray.js';\nimport { normalizeArray } from '../../../util/normalizeArray.js';\nimport {\n\tcontextsPredicate,\n\tintegrationTypesPredicate,\n\tvalidateDMPermission,\n\tvalidateDefaultMemberPermissions,\n\tvalidateDefaultPermission,\n\tvalidateLocalizationMap,\n\tvalidateNSFW,\n\tvalidateRequiredParameters,\n} from '../Assertions.js';\nimport type { ToAPIApplicationCommandOptions } from '../SlashCommandBuilder.js';\n\n/**\n * This mixin holds symbols that can be shared in slashcommands independent of options or subcommands.\n */\nexport class SharedSlashCommand {\n\tpublic readonly name: string = undefined!;\n\n\tpublic readonly name_localizations?: LocalizationMap;\n\n\tpublic readonly description: string = undefined!;\n\n\tpublic readonly description_localizations?: LocalizationMap;\n\n\tpublic readonly options: ToAPIApplicationCommandOptions[] = [];\n\n\tpublic readonly contexts?: InteractionContextType[];\n\n\t/**\n\t * @deprecated Use {@link SharedSlashCommand.setDefaultMemberPermissions} or {@link SharedSlashCommand.setDMPermission} instead.\n\t */\n\tpublic readonly default_permission: boolean | undefined = undefined;\n\n\tpublic readonly default_member_permissions: Permissions | null | undefined = undefined;\n\n\t/**\n\t * @deprecated Use {@link SharedSlashCommand.contexts} instead.\n\t */\n\tpublic readonly dm_permission: boolean | undefined = undefined;\n\n\tpublic readonly integration_types?: ApplicationIntegrationType[];\n\n\tpublic readonly nsfw: boolean | undefined = undefined;\n\n\t/**\n\t * Sets the contexts of this command.\n\t *\n\t * @param contexts - The contexts\n\t */\n\tpublic setContexts(...contexts: RestOrArray) {\n\t\tReflect.set(this, 'contexts', contextsPredicate.parse(normalizeArray(contexts)));\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the integration types of this command.\n\t *\n\t * @param integrationTypes - The integration types\n\t */\n\tpublic setIntegrationTypes(...integrationTypes: RestOrArray) {\n\t\tReflect.set(this, 'integration_types', integrationTypesPredicate.parse(normalizeArray(integrationTypes)));\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets whether the command is enabled by default when the application is added to a guild.\n\t *\n\t * @remarks\n\t * If set to `false`, you will have to later `PUT` the permissions for this command.\n\t * @param value - Whether or not to enable this command by default\n\t * @see {@link https://discord.com/developers/docs/interactions/application-commands#permissions}\n\t * @deprecated Use {@link SharedSlashCommand.setDefaultMemberPermissions} or {@link SharedSlashCommand.setDMPermission} instead.\n\t */\n\tpublic setDefaultPermission(value: boolean) {\n\t\t// Assert the value matches the conditions\n\t\tvalidateDefaultPermission(value);\n\n\t\tReflect.set(this, 'default_permission', value);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the default permissions a member should have in order to run the command.\n\t *\n\t * @remarks\n\t * You can set this to `'0'` to disable the command by default.\n\t * @param permissions - The permissions bit field to set\n\t * @see {@link https://discord.com/developers/docs/interactions/application-commands#permissions}\n\t */\n\tpublic setDefaultMemberPermissions(permissions: Permissions | bigint | number | null | undefined) {\n\t\t// Assert the value and parse it\n\t\tconst permissionValue = validateDefaultMemberPermissions(permissions);\n\n\t\tReflect.set(this, 'default_member_permissions', permissionValue);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets if the command is available in direct messages with the application.\n\t *\n\t * @remarks\n\t * By default, commands are visible. This method is only for global commands.\n\t * @param enabled - Whether the command should be enabled in direct messages\n\t * @see {@link https://discord.com/developers/docs/interactions/application-commands#permissions}\n\t * @deprecated\n\t * Use {@link SharedSlashCommand.setContexts} instead.\n\t */\n\tpublic setDMPermission(enabled: boolean | null | undefined) {\n\t\t// Assert the value matches the conditions\n\t\tvalidateDMPermission(enabled);\n\n\t\tReflect.set(this, 'dm_permission', enabled);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets whether this command is NSFW.\n\t *\n\t * @param nsfw - Whether this command is NSFW\n\t */\n\tpublic setNSFW(nsfw = true) {\n\t\t// Assert the value matches the conditions\n\t\tvalidateNSFW(nsfw);\n\t\tReflect.set(this, 'nsfw', nsfw);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Serializes this builder to API-compatible JSON data.\n\t *\n\t * @remarks\n\t * This method runs validations on the data before serializing it.\n\t * As such, it may throw an error if the data is invalid.\n\t */\n\tpublic toJSON(): RESTPostAPIChatInputApplicationCommandsJSONBody {\n\t\tvalidateRequiredParameters(this.name, this.description, this.options);\n\n\t\tvalidateLocalizationMap(this.name_localizations);\n\t\tvalidateLocalizationMap(this.description_localizations);\n\n\t\treturn {\n\t\t\t...this,\n\t\t\ttype: ApplicationCommandType.ChatInput,\n\t\t\toptions: this.options.map((option) => option.toJSON()),\n\t\t};\n\t}\n}\n","import { ApplicationCommandOptionType, type APIApplicationCommandAttachmentOption } from 'discord-api-types/v10';\nimport { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js';\n\n/**\n * A slash command attachment option.\n */\nexport class SlashCommandAttachmentOption extends ApplicationCommandOptionBase {\n\t/**\n\t * The type of this option.\n\t */\n\tpublic override readonly type = ApplicationCommandOptionType.Attachment as const;\n\n\t/**\n\t * {@inheritDoc ApplicationCommandOptionBase.toJSON}\n\t */\n\tpublic toJSON(): APIApplicationCommandAttachmentOption {\n\t\tthis.runRequiredValidations();\n\n\t\treturn { ...this };\n\t}\n}\n","import type { APIApplicationCommandBasicOption, ApplicationCommandOptionType } from 'discord-api-types/v10';\nimport { validateRequiredParameters, validateRequired, validateLocalizationMap } from '../Assertions.js';\nimport { SharedNameAndDescription } from './NameAndDescription.js';\n\n/**\n * The base application command option builder that contains common symbols for application command builders.\n */\nexport abstract class ApplicationCommandOptionBase extends SharedNameAndDescription {\n\t/**\n\t * The type of this option.\n\t */\n\tpublic abstract readonly type: ApplicationCommandOptionType;\n\n\t/**\n\t * Whether this option is required.\n\t *\n\t * @defaultValue `false`\n\t */\n\tpublic readonly required: boolean = false;\n\n\t/**\n\t * Sets whether this option is required.\n\t *\n\t * @param required - Whether this option should be required\n\t */\n\tpublic setRequired(required: boolean) {\n\t\t// Assert that you actually passed a boolean\n\t\tvalidateRequired(required);\n\n\t\tReflect.set(this, 'required', required);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Serializes this builder to API-compatible JSON data.\n\t *\n\t * @remarks\n\t * This method runs validations on the data before serializing it.\n\t * As such, it may throw an error if the data is invalid.\n\t */\n\tpublic abstract toJSON(): APIApplicationCommandBasicOption;\n\n\t/**\n\t * This method runs required validators on this builder.\n\t */\n\tprotected runRequiredValidations() {\n\t\tvalidateRequiredParameters(this.name, this.description, []);\n\n\t\t// Validate localizations\n\t\tvalidateLocalizationMap(this.name_localizations);\n\t\tvalidateLocalizationMap(this.description_localizations);\n\n\t\t// Assert that you actually passed a boolean\n\t\tvalidateRequired(this.required);\n\t}\n}\n","import { ApplicationCommandOptionType, type APIApplicationCommandBooleanOption } from 'discord-api-types/v10';\nimport { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js';\n\n/**\n * A slash command boolean option.\n */\nexport class SlashCommandBooleanOption extends ApplicationCommandOptionBase {\n\t/**\n\t * The type of this option.\n\t */\n\tpublic readonly type = ApplicationCommandOptionType.Boolean as const;\n\n\t/**\n\t * {@inheritDoc ApplicationCommandOptionBase.toJSON}\n\t */\n\tpublic toJSON(): APIApplicationCommandBooleanOption {\n\t\tthis.runRequiredValidations();\n\n\t\treturn { ...this };\n\t}\n}\n","import { ApplicationCommandOptionType, type APIApplicationCommandChannelOption } from 'discord-api-types/v10';\nimport { mix } from 'ts-mixer';\nimport { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js';\nimport { ApplicationCommandOptionChannelTypesMixin } from '../mixins/ApplicationCommandOptionChannelTypesMixin.js';\n\n/**\n * A slash command channel option.\n */\n@mix(ApplicationCommandOptionChannelTypesMixin)\nexport class SlashCommandChannelOption extends ApplicationCommandOptionBase {\n\t/**\n\t * The type of this option.\n\t */\n\tpublic override readonly type = ApplicationCommandOptionType.Channel as const;\n\n\t/**\n\t * {@inheritDoc ApplicationCommandOptionBase.toJSON}\n\t */\n\tpublic toJSON(): APIApplicationCommandChannelOption {\n\t\tthis.runRequiredValidations();\n\n\t\treturn { ...this };\n\t}\n}\n\nexport interface SlashCommandChannelOption extends ApplicationCommandOptionChannelTypesMixin {}\n","import { s } from '@sapphire/shapeshift';\nimport { ChannelType } from 'discord-api-types/v10';\nimport { normalizeArray, type RestOrArray } from '../../../util/normalizeArray';\n\n/**\n * The allowed channel types used for a channel option in a slash command builder.\n *\n * @privateRemarks This can't be dynamic because const enums are erased at runtime.\n * @internal\n */\nconst allowedChannelTypes = [\n\tChannelType.GuildText,\n\tChannelType.GuildVoice,\n\tChannelType.GuildCategory,\n\tChannelType.GuildAnnouncement,\n\tChannelType.AnnouncementThread,\n\tChannelType.PublicThread,\n\tChannelType.PrivateThread,\n\tChannelType.GuildStageVoice,\n\tChannelType.GuildForum,\n\tChannelType.GuildMedia,\n] as const;\n\n/**\n * The type of allowed channel types used for a channel option.\n */\nexport type ApplicationCommandOptionAllowedChannelTypes = (typeof allowedChannelTypes)[number];\n\nconst channelTypesPredicate = s.array(s.union(allowedChannelTypes.map((type) => s.literal(type))));\n\n/**\n * This mixin holds channel type symbols used for options.\n */\nexport class ApplicationCommandOptionChannelTypesMixin {\n\t/**\n\t * The channel types of this option.\n\t */\n\tpublic readonly channel_types?: ApplicationCommandOptionAllowedChannelTypes[];\n\n\t/**\n\t * Adds channel types to this option.\n\t *\n\t * @param channelTypes - The channel types\n\t */\n\tpublic addChannelTypes(...channelTypes: RestOrArray) {\n\t\tif (this.channel_types === undefined) {\n\t\t\tReflect.set(this, 'channel_types', []);\n\t\t}\n\n\t\tthis.channel_types!.push(...channelTypesPredicate.parse(normalizeArray(channelTypes)));\n\n\t\treturn this;\n\t}\n}\n","import { s } from '@sapphire/shapeshift';\nimport { ApplicationCommandOptionType, type APIApplicationCommandIntegerOption } from 'discord-api-types/v10';\nimport { mix } from 'ts-mixer';\nimport { ApplicationCommandNumericOptionMinMaxValueMixin } from '../mixins/ApplicationCommandNumericOptionMinMaxValueMixin.js';\nimport { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js';\nimport { ApplicationCommandOptionWithAutocompleteMixin } from '../mixins/ApplicationCommandOptionWithAutocompleteMixin.js';\nimport { ApplicationCommandOptionWithChoicesMixin } from '../mixins/ApplicationCommandOptionWithChoicesMixin.js';\n\nconst numberValidator = s.number().int();\n\n/**\n * A slash command integer option.\n */\n@mix(\n\tApplicationCommandNumericOptionMinMaxValueMixin,\n\tApplicationCommandOptionWithAutocompleteMixin,\n\tApplicationCommandOptionWithChoicesMixin,\n)\nexport class SlashCommandIntegerOption\n\textends ApplicationCommandOptionBase\n\timplements ApplicationCommandNumericOptionMinMaxValueMixin\n{\n\t/**\n\t * The type of this option.\n\t */\n\tpublic readonly type = ApplicationCommandOptionType.Integer as const;\n\n\t/**\n\t * {@inheritDoc ApplicationCommandNumericOptionMinMaxValueMixin.setMaxValue}\n\t */\n\tpublic setMaxValue(max: number): this {\n\t\tnumberValidator.parse(max);\n\n\t\tReflect.set(this, 'max_value', max);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ApplicationCommandNumericOptionMinMaxValueMixin.setMinValue}\n\t */\n\tpublic setMinValue(min: number): this {\n\t\tnumberValidator.parse(min);\n\n\t\tReflect.set(this, 'min_value', min);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ApplicationCommandOptionBase.toJSON}\n\t */\n\tpublic toJSON(): APIApplicationCommandIntegerOption {\n\t\tthis.runRequiredValidations();\n\n\t\tif (this.autocomplete && Array.isArray(this.choices) && this.choices.length > 0) {\n\t\t\tthrow new RangeError('Autocomplete and choices are mutually exclusive to each other.');\n\t\t}\n\n\t\treturn { ...this } as APIApplicationCommandIntegerOption;\n\t}\n}\n\nexport interface SlashCommandIntegerOption\n\textends ApplicationCommandNumericOptionMinMaxValueMixin,\n\t\tApplicationCommandOptionWithChoicesMixin,\n\t\tApplicationCommandOptionWithAutocompleteMixin {}\n","/**\n * This mixin holds minimum and maximum symbols used for options.\n */\nexport abstract class ApplicationCommandNumericOptionMinMaxValueMixin {\n\t/**\n\t * The maximum value of this option.\n\t */\n\tpublic readonly max_value?: number;\n\n\t/**\n\t * The minimum value of this option.\n\t */\n\tpublic readonly min_value?: number;\n\n\t/**\n\t * Sets the maximum number value of this option.\n\t *\n\t * @param max - The maximum value this option can be\n\t */\n\tpublic abstract setMaxValue(max: number): this;\n\n\t/**\n\t * Sets the minimum number value of this option.\n\t *\n\t * @param min - The minimum value this option can be\n\t */\n\tpublic abstract setMinValue(min: number): this;\n}\n","import { s } from '@sapphire/shapeshift';\nimport type { ApplicationCommandOptionType } from 'discord-api-types/v10';\n\nconst booleanPredicate = s.boolean();\n\n/**\n * This mixin holds choices and autocomplete symbols used for options.\n */\nexport class ApplicationCommandOptionWithAutocompleteMixin {\n\t/**\n\t * Whether this option utilizes autocomplete.\n\t */\n\tpublic readonly autocomplete?: boolean;\n\n\t/**\n\t * The type of this option.\n\t *\n\t * @privateRemarks Since this is present and this is a mixin, this is needed.\n\t */\n\tpublic readonly type!: ApplicationCommandOptionType;\n\n\t/**\n\t * Whether this option uses autocomplete.\n\t *\n\t * @param autocomplete - Whether this option should use autocomplete\n\t */\n\tpublic setAutocomplete(autocomplete: boolean): this {\n\t\t// Assert that you actually passed a boolean\n\t\tbooleanPredicate.parse(autocomplete);\n\n\t\tif (autocomplete && 'choices' in this && Array.isArray(this.choices) && this.choices.length > 0) {\n\t\t\tthrow new RangeError('Autocomplete and choices are mutually exclusive to each other.');\n\t\t}\n\n\t\tReflect.set(this, 'autocomplete', autocomplete);\n\n\t\treturn this;\n\t}\n}\n","import { s } from '@sapphire/shapeshift';\nimport { ApplicationCommandOptionType, type APIApplicationCommandOptionChoice } from 'discord-api-types/v10';\nimport { normalizeArray, type RestOrArray } from '../../../util/normalizeArray.js';\nimport { localizationMapPredicate, validateChoicesLength } from '../Assertions.js';\n\nconst stringPredicate = s.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(100);\nconst numberPredicate = s.number().greaterThan(Number.NEGATIVE_INFINITY).lessThan(Number.POSITIVE_INFINITY);\nconst choicesPredicate = s\n\t.object({\n\t\tname: stringPredicate,\n\t\tname_localizations: localizationMapPredicate,\n\t\tvalue: s.union([stringPredicate, numberPredicate]),\n\t})\n\t.array();\n\n/**\n * This mixin holds choices and autocomplete symbols used for options.\n */\nexport class ApplicationCommandOptionWithChoicesMixin {\n\t/**\n\t * The choices of this option.\n\t */\n\tpublic readonly choices?: APIApplicationCommandOptionChoice[];\n\n\t/**\n\t * The type of this option.\n\t *\n\t * @privateRemarks Since this is present and this is a mixin, this is needed.\n\t */\n\tpublic readonly type!: ApplicationCommandOptionType;\n\n\t/**\n\t * Adds multiple choices to this option.\n\t *\n\t * @param choices - The choices to add\n\t */\n\tpublic addChoices(...choices: RestOrArray>): this {\n\t\tconst normalizedChoices = normalizeArray(choices);\n\t\tif (normalizedChoices.length > 0 && 'autocomplete' in this && this.autocomplete) {\n\t\t\tthrow new RangeError('Autocomplete and choices are mutually exclusive to each other.');\n\t\t}\n\n\t\tchoicesPredicate.parse(normalizedChoices);\n\n\t\tif (this.choices === undefined) {\n\t\t\tReflect.set(this, 'choices', []);\n\t\t}\n\n\t\tvalidateChoicesLength(normalizedChoices.length, this.choices);\n\n\t\tfor (const { name, name_localizations, value } of normalizedChoices) {\n\t\t\t// Validate the value\n\t\t\tif (this.type === ApplicationCommandOptionType.String) {\n\t\t\t\tstringPredicate.parse(value);\n\t\t\t} else {\n\t\t\t\tnumberPredicate.parse(value);\n\t\t\t}\n\n\t\t\tthis.choices!.push({ name, name_localizations, value });\n\t\t}\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets multiple choices for this option.\n\t *\n\t * @param choices - The choices to set\n\t */\n\tpublic setChoices>(...choices: RestOrArray): this {\n\t\tconst normalizedChoices = normalizeArray(choices);\n\t\tif (normalizedChoices.length > 0 && 'autocomplete' in this && this.autocomplete) {\n\t\t\tthrow new RangeError('Autocomplete and choices are mutually exclusive to each other.');\n\t\t}\n\n\t\tchoicesPredicate.parse(normalizedChoices);\n\n\t\tReflect.set(this, 'choices', []);\n\t\tthis.addChoices(normalizedChoices);\n\n\t\treturn this;\n\t}\n}\n","import { ApplicationCommandOptionType, type APIApplicationCommandMentionableOption } from 'discord-api-types/v10';\nimport { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js';\n\n/**\n * A slash command mentionable option.\n */\nexport class SlashCommandMentionableOption extends ApplicationCommandOptionBase {\n\t/**\n\t * The type of this option.\n\t */\n\tpublic readonly type = ApplicationCommandOptionType.Mentionable as const;\n\n\t/**\n\t * {@inheritDoc ApplicationCommandOptionBase.toJSON}\n\t */\n\tpublic toJSON(): APIApplicationCommandMentionableOption {\n\t\tthis.runRequiredValidations();\n\n\t\treturn { ...this };\n\t}\n}\n","import { s } from '@sapphire/shapeshift';\nimport { ApplicationCommandOptionType, type APIApplicationCommandNumberOption } from 'discord-api-types/v10';\nimport { mix } from 'ts-mixer';\nimport { ApplicationCommandNumericOptionMinMaxValueMixin } from '../mixins/ApplicationCommandNumericOptionMinMaxValueMixin.js';\nimport { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js';\nimport { ApplicationCommandOptionWithAutocompleteMixin } from '../mixins/ApplicationCommandOptionWithAutocompleteMixin.js';\nimport { ApplicationCommandOptionWithChoicesMixin } from '../mixins/ApplicationCommandOptionWithChoicesMixin.js';\n\nconst numberValidator = s.number();\n\n/**\n * A slash command number option.\n */\n@mix(\n\tApplicationCommandNumericOptionMinMaxValueMixin,\n\tApplicationCommandOptionWithAutocompleteMixin,\n\tApplicationCommandOptionWithChoicesMixin,\n)\nexport class SlashCommandNumberOption\n\textends ApplicationCommandOptionBase\n\timplements ApplicationCommandNumericOptionMinMaxValueMixin\n{\n\t/**\n\t * The type of this option.\n\t */\n\tpublic readonly type = ApplicationCommandOptionType.Number as const;\n\n\t/**\n\t * {@inheritDoc ApplicationCommandNumericOptionMinMaxValueMixin.setMaxValue}\n\t */\n\tpublic setMaxValue(max: number): this {\n\t\tnumberValidator.parse(max);\n\n\t\tReflect.set(this, 'max_value', max);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ApplicationCommandNumericOptionMinMaxValueMixin.setMinValue}\n\t */\n\tpublic setMinValue(min: number): this {\n\t\tnumberValidator.parse(min);\n\n\t\tReflect.set(this, 'min_value', min);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ApplicationCommandOptionBase.toJSON}\n\t */\n\tpublic toJSON(): APIApplicationCommandNumberOption {\n\t\tthis.runRequiredValidations();\n\n\t\tif (this.autocomplete && Array.isArray(this.choices) && this.choices.length > 0) {\n\t\t\tthrow new RangeError('Autocomplete and choices are mutually exclusive to each other.');\n\t\t}\n\n\t\treturn { ...this } as APIApplicationCommandNumberOption;\n\t}\n}\n\nexport interface SlashCommandNumberOption\n\textends ApplicationCommandNumericOptionMinMaxValueMixin,\n\t\tApplicationCommandOptionWithChoicesMixin,\n\t\tApplicationCommandOptionWithAutocompleteMixin {}\n","import { ApplicationCommandOptionType, type APIApplicationCommandRoleOption } from 'discord-api-types/v10';\nimport { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js';\n\n/**\n * A slash command role option.\n */\nexport class SlashCommandRoleOption extends ApplicationCommandOptionBase {\n\t/**\n\t * The type of this option.\n\t */\n\tpublic override readonly type = ApplicationCommandOptionType.Role as const;\n\n\t/**\n\t * {@inheritDoc ApplicationCommandOptionBase.toJSON}\n\t */\n\tpublic toJSON(): APIApplicationCommandRoleOption {\n\t\tthis.runRequiredValidations();\n\n\t\treturn { ...this };\n\t}\n}\n","import { s } from '@sapphire/shapeshift';\nimport { ApplicationCommandOptionType, type APIApplicationCommandStringOption } from 'discord-api-types/v10';\nimport { mix } from 'ts-mixer';\nimport { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js';\nimport { ApplicationCommandOptionWithAutocompleteMixin } from '../mixins/ApplicationCommandOptionWithAutocompleteMixin.js';\nimport { ApplicationCommandOptionWithChoicesMixin } from '../mixins/ApplicationCommandOptionWithChoicesMixin.js';\n\nconst minLengthValidator = s.number().greaterThanOrEqual(0).lessThanOrEqual(6_000);\nconst maxLengthValidator = s.number().greaterThanOrEqual(1).lessThanOrEqual(6_000);\n\n/**\n * A slash command string option.\n */\n@mix(ApplicationCommandOptionWithAutocompleteMixin, ApplicationCommandOptionWithChoicesMixin)\nexport class SlashCommandStringOption extends ApplicationCommandOptionBase {\n\t/**\n\t * The type of this option.\n\t */\n\tpublic readonly type = ApplicationCommandOptionType.String as const;\n\n\t/**\n\t * The maximum length of this option.\n\t */\n\tpublic readonly max_length?: number;\n\n\t/**\n\t * The minimum length of this option.\n\t */\n\tpublic readonly min_length?: number;\n\n\t/**\n\t * Sets the maximum length of this string option.\n\t *\n\t * @param max - The maximum length this option can be\n\t */\n\tpublic setMaxLength(max: number): this {\n\t\tmaxLengthValidator.parse(max);\n\n\t\tReflect.set(this, 'max_length', max);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the minimum length of this string option.\n\t *\n\t * @param min - The minimum length this option can be\n\t */\n\tpublic setMinLength(min: number): this {\n\t\tminLengthValidator.parse(min);\n\n\t\tReflect.set(this, 'min_length', min);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ApplicationCommandOptionBase.toJSON}\n\t */\n\tpublic toJSON(): APIApplicationCommandStringOption {\n\t\tthis.runRequiredValidations();\n\n\t\tif (this.autocomplete && Array.isArray(this.choices) && this.choices.length > 0) {\n\t\t\tthrow new RangeError('Autocomplete and choices are mutually exclusive to each other.');\n\t\t}\n\n\t\treturn { ...this } as APIApplicationCommandStringOption;\n\t}\n}\n\nexport interface SlashCommandStringOption\n\textends ApplicationCommandOptionWithChoicesMixin,\n\t\tApplicationCommandOptionWithAutocompleteMixin {}\n","import { ApplicationCommandOptionType, type APIApplicationCommandUserOption } from 'discord-api-types/v10';\nimport { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js';\n\n/**\n * A slash command user option.\n */\nexport class SlashCommandUserOption extends ApplicationCommandOptionBase {\n\t/**\n\t * The type of this option.\n\t */\n\tpublic readonly type = ApplicationCommandOptionType.User as const;\n\n\t/**\n\t * {@inheritDoc ApplicationCommandOptionBase.toJSON}\n\t */\n\tpublic toJSON(): APIApplicationCommandUserOption {\n\t\tthis.runRequiredValidations();\n\n\t\treturn { ...this };\n\t}\n}\n","import { assertReturnOfBuilder, validateMaxOptionsLength } from '../Assertions.js';\nimport type { ToAPIApplicationCommandOptions } from '../SlashCommandBuilder';\nimport { SlashCommandAttachmentOption } from '../options/attachment.js';\nimport { SlashCommandBooleanOption } from '../options/boolean.js';\nimport { SlashCommandChannelOption } from '../options/channel.js';\nimport { SlashCommandIntegerOption } from '../options/integer.js';\nimport { SlashCommandMentionableOption } from '../options/mentionable.js';\nimport { SlashCommandNumberOption } from '../options/number.js';\nimport { SlashCommandRoleOption } from '../options/role.js';\nimport { SlashCommandStringOption } from '../options/string.js';\nimport { SlashCommandUserOption } from '../options/user.js';\nimport type { ApplicationCommandOptionBase } from './ApplicationCommandOptionBase.js';\n\n/**\n * This mixin holds symbols that can be shared in slash command options.\n *\n * @typeParam TypeAfterAddingOptions - The type this class should return after adding an option.\n */\nexport class SharedSlashCommandOptions<\n\tTypeAfterAddingOptions extends SharedSlashCommandOptions,\n> {\n\tpublic readonly options!: ToAPIApplicationCommandOptions[];\n\n\t/**\n\t * Adds a boolean option.\n\t *\n\t * @param input - A function that returns an option builder or an already built builder\n\t */\n\tpublic addBooleanOption(\n\t\tinput: SlashCommandBooleanOption | ((builder: SlashCommandBooleanOption) => SlashCommandBooleanOption),\n\t) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandBooleanOption);\n\t}\n\n\t/**\n\t * Adds a user option.\n\t *\n\t * @param input - A function that returns an option builder or an already built builder\n\t */\n\tpublic addUserOption(input: SlashCommandUserOption | ((builder: SlashCommandUserOption) => SlashCommandUserOption)) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandUserOption);\n\t}\n\n\t/**\n\t * Adds a channel option.\n\t *\n\t * @param input - A function that returns an option builder or an already built builder\n\t */\n\tpublic addChannelOption(\n\t\tinput: SlashCommandChannelOption | ((builder: SlashCommandChannelOption) => SlashCommandChannelOption),\n\t) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandChannelOption);\n\t}\n\n\t/**\n\t * Adds a role option.\n\t *\n\t * @param input - A function that returns an option builder or an already built builder\n\t */\n\tpublic addRoleOption(input: SlashCommandRoleOption | ((builder: SlashCommandRoleOption) => SlashCommandRoleOption)) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandRoleOption);\n\t}\n\n\t/**\n\t * Adds an attachment option.\n\t *\n\t * @param input - A function that returns an option builder or an already built builder\n\t */\n\tpublic addAttachmentOption(\n\t\tinput: SlashCommandAttachmentOption | ((builder: SlashCommandAttachmentOption) => SlashCommandAttachmentOption),\n\t) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandAttachmentOption);\n\t}\n\n\t/**\n\t * Adds a mentionable option.\n\t *\n\t * @param input - A function that returns an option builder or an already built builder\n\t */\n\tpublic addMentionableOption(\n\t\tinput: SlashCommandMentionableOption | ((builder: SlashCommandMentionableOption) => SlashCommandMentionableOption),\n\t) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandMentionableOption);\n\t}\n\n\t/**\n\t * Adds a string option.\n\t *\n\t * @param input - A function that returns an option builder or an already built builder\n\t */\n\tpublic addStringOption(\n\t\tinput: SlashCommandStringOption | ((builder: SlashCommandStringOption) => SlashCommandStringOption),\n\t) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandStringOption);\n\t}\n\n\t/**\n\t * Adds an integer option.\n\t *\n\t * @param input - A function that returns an option builder or an already built builder\n\t */\n\tpublic addIntegerOption(\n\t\tinput: SlashCommandIntegerOption | ((builder: SlashCommandIntegerOption) => SlashCommandIntegerOption),\n\t) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandIntegerOption);\n\t}\n\n\t/**\n\t * Adds a number option.\n\t *\n\t * @param input - A function that returns an option builder or an already built builder\n\t */\n\tpublic addNumberOption(\n\t\tinput: SlashCommandNumberOption | ((builder: SlashCommandNumberOption) => SlashCommandNumberOption),\n\t) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandNumberOption);\n\t}\n\n\t/**\n\t * Where the actual adding magic happens. ✨\n\t *\n\t * @param input - The input. What else?\n\t * @param Instance - The instance of whatever is being added\n\t * @internal\n\t */\n\tprivate _sharedAddOptionMethod(\n\t\tinput: OptionBuilder | ((builder: OptionBuilder) => OptionBuilder),\n\t\tInstance: new () => OptionBuilder,\n\t): TypeAfterAddingOptions {\n\t\tconst { options } = this;\n\n\t\t// First, assert options conditions - we cannot have more than 25 options\n\t\tvalidateMaxOptionsLength(options);\n\n\t\t// Get the final result\n\t\tconst result = typeof input === 'function' ? input(new Instance()) : input;\n\n\t\tassertReturnOfBuilder(result, Instance);\n\n\t\t// Push it\n\t\toptions.push(result);\n\n\t\treturn this as unknown as TypeAfterAddingOptions;\n\t}\n}\n","import {\n\tApplicationCommandOptionType,\n\ttype APIApplicationCommandSubcommandGroupOption,\n\ttype APIApplicationCommandSubcommandOption,\n} from 'discord-api-types/v10';\nimport { mix } from 'ts-mixer';\nimport { assertReturnOfBuilder, validateMaxOptionsLength, validateRequiredParameters } from './Assertions.js';\nimport type { ToAPIApplicationCommandOptions } from './SlashCommandBuilder.js';\nimport type { ApplicationCommandOptionBase } from './mixins/ApplicationCommandOptionBase.js';\nimport { SharedNameAndDescription } from './mixins/NameAndDescription.js';\nimport { SharedSlashCommandOptions } from './mixins/SharedSlashCommandOptions.js';\n\n/**\n * Represents a folder for subcommands.\n *\n * @see {@link https://discord.com/developers/docs/interactions/application-commands#subcommands-and-subcommand-groups}\n */\n@mix(SharedNameAndDescription)\nexport class SlashCommandSubcommandGroupBuilder implements ToAPIApplicationCommandOptions {\n\t/**\n\t * The name of this subcommand group.\n\t */\n\tpublic readonly name: string = undefined!;\n\n\t/**\n\t * The description of this subcommand group.\n\t */\n\tpublic readonly description: string = undefined!;\n\n\t/**\n\t * The subcommands within this subcommand group.\n\t */\n\tpublic readonly options: SlashCommandSubcommandBuilder[] = [];\n\n\t/**\n\t * Adds a new subcommand to this group.\n\t *\n\t * @param input - A function that returns a subcommand builder or an already built builder\n\t */\n\tpublic addSubcommand(\n\t\tinput:\n\t\t\t| SlashCommandSubcommandBuilder\n\t\t\t| ((subcommandGroup: SlashCommandSubcommandBuilder) => SlashCommandSubcommandBuilder),\n\t) {\n\t\tconst { options } = this;\n\n\t\t// First, assert options conditions - we cannot have more than 25 options\n\t\tvalidateMaxOptionsLength(options);\n\n\t\t// Get the final result\n\t\t// eslint-disable-next-line @typescript-eslint/no-use-before-define\n\t\tconst result = typeof input === 'function' ? input(new SlashCommandSubcommandBuilder()) : input;\n\n\t\t// eslint-disable-next-line @typescript-eslint/no-use-before-define\n\t\tassertReturnOfBuilder(result, SlashCommandSubcommandBuilder);\n\n\t\t// Push it\n\t\toptions.push(result);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Serializes this builder to API-compatible JSON data.\n\t *\n\t * @remarks\n\t * This method runs validations on the data before serializing it.\n\t * As such, it may throw an error if the data is invalid.\n\t */\n\tpublic toJSON(): APIApplicationCommandSubcommandGroupOption {\n\t\tvalidateRequiredParameters(this.name, this.description, this.options);\n\n\t\treturn {\n\t\t\ttype: ApplicationCommandOptionType.SubcommandGroup,\n\t\t\tname: this.name,\n\t\t\tname_localizations: this.name_localizations,\n\t\t\tdescription: this.description,\n\t\t\tdescription_localizations: this.description_localizations,\n\t\t\toptions: this.options.map((option) => option.toJSON()),\n\t\t};\n\t}\n}\n\nexport interface SlashCommandSubcommandGroupBuilder extends SharedNameAndDescription {}\n\n/**\n * A builder that creates API-compatible JSON data for slash command subcommands.\n *\n * @see {@link https://discord.com/developers/docs/interactions/application-commands#subcommands-and-subcommand-groups}\n */\n@mix(SharedNameAndDescription, SharedSlashCommandOptions)\nexport class SlashCommandSubcommandBuilder implements ToAPIApplicationCommandOptions {\n\t/**\n\t * The name of this subcommand.\n\t */\n\tpublic readonly name: string = undefined!;\n\n\t/**\n\t * The description of this subcommand.\n\t */\n\tpublic readonly description: string = undefined!;\n\n\t/**\n\t * The options within this subcommand.\n\t */\n\tpublic readonly options: ApplicationCommandOptionBase[] = [];\n\n\t/**\n\t * Serializes this builder to API-compatible JSON data.\n\t *\n\t * @remarks\n\t * This method runs validations on the data before serializing it.\n\t * As such, it may throw an error if the data is invalid.\n\t */\n\tpublic toJSON(): APIApplicationCommandSubcommandOption {\n\t\tvalidateRequiredParameters(this.name, this.description, this.options);\n\n\t\treturn {\n\t\t\ttype: ApplicationCommandOptionType.Subcommand,\n\t\t\tname: this.name,\n\t\t\tname_localizations: this.name_localizations,\n\t\t\tdescription: this.description,\n\t\t\tdescription_localizations: this.description_localizations,\n\t\t\toptions: this.options.map((option) => option.toJSON()),\n\t\t};\n\t}\n}\n\nexport interface SlashCommandSubcommandBuilder\n\textends SharedNameAndDescription,\n\t\tSharedSlashCommandOptions {}\n","import { assertReturnOfBuilder, validateMaxOptionsLength } from '../Assertions.js';\nimport type { ToAPIApplicationCommandOptions } from '../SlashCommandBuilder.js';\nimport { SlashCommandSubcommandBuilder, SlashCommandSubcommandGroupBuilder } from '../SlashCommandSubcommands.js';\n\n/**\n * This mixin holds symbols that can be shared in slash subcommands.\n *\n * @typeParam TypeAfterAddingSubcommands - The type this class should return after adding a subcommand or subcommand group.\n */\nexport class SharedSlashCommandSubcommands<\n\tTypeAfterAddingSubcommands extends SharedSlashCommandSubcommands,\n> {\n\tpublic readonly options: ToAPIApplicationCommandOptions[] = [];\n\n\t/**\n\t * Adds a new subcommand group to this command.\n\t *\n\t * @param input - A function that returns a subcommand group builder or an already built builder\n\t */\n\tpublic addSubcommandGroup(\n\t\tinput:\n\t\t\t| SlashCommandSubcommandGroupBuilder\n\t\t\t| ((subcommandGroup: SlashCommandSubcommandGroupBuilder) => SlashCommandSubcommandGroupBuilder),\n\t): TypeAfterAddingSubcommands {\n\t\tconst { options } = this;\n\n\t\t// First, assert options conditions - we cannot have more than 25 options\n\t\tvalidateMaxOptionsLength(options);\n\n\t\t// Get the final result\n\t\tconst result = typeof input === 'function' ? input(new SlashCommandSubcommandGroupBuilder()) : input;\n\n\t\tassertReturnOfBuilder(result, SlashCommandSubcommandGroupBuilder);\n\n\t\t// Push it\n\t\toptions.push(result);\n\n\t\treturn this as unknown as TypeAfterAddingSubcommands;\n\t}\n\n\t/**\n\t * Adds a new subcommand to this command.\n\t *\n\t * @param input - A function that returns a subcommand builder or an already built builder\n\t */\n\tpublic addSubcommand(\n\t\tinput:\n\t\t\t| SlashCommandSubcommandBuilder\n\t\t\t| ((subcommandGroup: SlashCommandSubcommandBuilder) => SlashCommandSubcommandBuilder),\n\t): TypeAfterAddingSubcommands {\n\t\tconst { options } = this;\n\n\t\t// First, assert options conditions - we cannot have more than 25 options\n\t\tvalidateMaxOptionsLength(options);\n\n\t\t// Get the final result\n\t\tconst result = typeof input === 'function' ? input(new SlashCommandSubcommandBuilder()) : input;\n\n\t\tassertReturnOfBuilder(result, SlashCommandSubcommandBuilder);\n\n\t\t// Push it\n\t\toptions.push(result);\n\n\t\treturn this as unknown as TypeAfterAddingSubcommands;\n\t}\n}\n","import { s } from '@sapphire/shapeshift';\nimport { ApplicationCommandType, ApplicationIntegrationType, InteractionContextType } from 'discord-api-types/v10';\nimport { isValidationEnabled } from '../../util/validation.js';\nimport type { ContextMenuCommandType } from './ContextMenuCommandBuilder.js';\n\nconst namePredicate = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(32)\n\t.regex(/\\S/)\n\t.setValidationEnabled(isValidationEnabled);\nconst typePredicate = s\n\t.union([s.literal(ApplicationCommandType.User), s.literal(ApplicationCommandType.Message)])\n\t.setValidationEnabled(isValidationEnabled);\nconst booleanPredicate = s.boolean();\n\nexport function validateDefaultPermission(value: unknown): asserts value is boolean {\n\tbooleanPredicate.parse(value);\n}\n\nexport function validateName(name: unknown): asserts name is string {\n\tnamePredicate.parse(name);\n}\n\nexport function validateType(type: unknown): asserts type is ContextMenuCommandType {\n\ttypePredicate.parse(type);\n}\n\nexport function validateRequiredParameters(name: string, type: number) {\n\t// Assert name matches all conditions\n\tvalidateName(name);\n\n\t// Assert type is valid\n\tvalidateType(type);\n}\n\nconst dmPermissionPredicate = s.boolean().nullish();\n\nexport function validateDMPermission(value: unknown): asserts value is boolean | null | undefined {\n\tdmPermissionPredicate.parse(value);\n}\n\nconst memberPermissionPredicate = s\n\t.union([\n\t\ts.bigint().transform((value) => value.toString()),\n\t\ts\n\t\t\t.number()\n\t\t\t.safeInt()\n\t\t\t.transform((value) => value.toString()),\n\t\ts.string().regex(/^\\d+$/),\n\t])\n\t.nullish();\n\nexport function validateDefaultMemberPermissions(permissions: unknown) {\n\treturn memberPermissionPredicate.parse(permissions);\n}\n\nexport const contextsPredicate = s.array(\n\ts.nativeEnum(InteractionContextType).setValidationEnabled(isValidationEnabled),\n);\n\nexport const integrationTypesPredicate = s.array(\n\ts.nativeEnum(ApplicationIntegrationType).setValidationEnabled(isValidationEnabled),\n);\n","import type {\n\tApplicationCommandType,\n\tApplicationIntegrationType,\n\tInteractionContextType,\n\tLocaleString,\n\tLocalizationMap,\n\tPermissions,\n\tRESTPostAPIContextMenuApplicationCommandsJSONBody,\n} from 'discord-api-types/v10';\nimport type { RestOrArray } from '../../util/normalizeArray.js';\nimport { normalizeArray } from '../../util/normalizeArray.js';\nimport { validateLocale, validateLocalizationMap } from '../slashCommands/Assertions.js';\nimport {\n\tvalidateRequiredParameters,\n\tvalidateName,\n\tvalidateType,\n\tvalidateDefaultPermission,\n\tvalidateDefaultMemberPermissions,\n\tvalidateDMPermission,\n\tcontextsPredicate,\n\tintegrationTypesPredicate,\n} from './Assertions.js';\n\n/**\n * The type a context menu command can be.\n */\nexport type ContextMenuCommandType = ApplicationCommandType.Message | ApplicationCommandType.User;\n\n/**\n * A builder that creates API-compatible JSON data for context menu commands.\n */\nexport class ContextMenuCommandBuilder {\n\t/**\n\t * The name of this command.\n\t */\n\tpublic readonly name: string = undefined!;\n\n\t/**\n\t * The name localizations of this command.\n\t */\n\tpublic readonly name_localizations?: LocalizationMap;\n\n\t/**\n\t * The type of this command.\n\t */\n\tpublic readonly type: ContextMenuCommandType = undefined!;\n\n\t/**\n\t * The contexts for this command.\n\t */\n\tpublic readonly contexts?: InteractionContextType[];\n\n\t/**\n\t * Whether this command is enabled by default when the application is added to a guild.\n\t *\n\t * @deprecated Use {@link ContextMenuCommandBuilder.setDefaultMemberPermissions} or {@link ContextMenuCommandBuilder.setDMPermission} instead.\n\t */\n\tpublic readonly default_permission: boolean | undefined = undefined;\n\n\t/**\n\t * The set of permissions represented as a bit set for the command.\n\t */\n\tpublic readonly default_member_permissions: Permissions | null | undefined = undefined;\n\n\t/**\n\t * Indicates whether the command is available in direct messages with the application.\n\t *\n\t * @remarks\n\t * By default, commands are visible. This property is only for global commands.\n\t * @deprecated\n\t * Use {@link ContextMenuCommandBuilder.contexts} instead.\n\t */\n\tpublic readonly dm_permission: boolean | undefined = undefined;\n\n\t/**\n\t * The integration types for this command.\n\t */\n\tpublic readonly integration_types?: ApplicationIntegrationType[];\n\n\t/**\n\t * Sets the contexts of this command.\n\t *\n\t * @param contexts - The contexts\n\t */\n\tpublic setContexts(...contexts: RestOrArray) {\n\t\tReflect.set(this, 'contexts', contextsPredicate.parse(normalizeArray(contexts)));\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets integration types of this command.\n\t *\n\t * @param integrationTypes - The integration types\n\t */\n\tpublic setIntegrationTypes(...integrationTypes: RestOrArray) {\n\t\tReflect.set(this, 'integration_types', integrationTypesPredicate.parse(normalizeArray(integrationTypes)));\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the name of this command.\n\t *\n\t * @param name - The name to use\n\t */\n\tpublic setName(name: string) {\n\t\t// Assert the name matches the conditions\n\t\tvalidateName(name);\n\n\t\tReflect.set(this, 'name', name);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the type of this command.\n\t *\n\t * @param type - The type to use\n\t */\n\tpublic setType(type: ContextMenuCommandType) {\n\t\t// Assert the type is valid\n\t\tvalidateType(type);\n\n\t\tReflect.set(this, 'type', type);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets whether the command is enabled by default when the application is added to a guild.\n\t *\n\t * @remarks\n\t * If set to `false`, you will have to later `PUT` the permissions for this command.\n\t * @param value - Whether to enable this command by default\n\t * @see {@link https://discord.com/developers/docs/interactions/application-commands#permissions}\n\t * @deprecated Use {@link ContextMenuCommandBuilder.setDefaultMemberPermissions} or {@link ContextMenuCommandBuilder.setDMPermission} instead.\n\t */\n\tpublic setDefaultPermission(value: boolean) {\n\t\t// Assert the value matches the conditions\n\t\tvalidateDefaultPermission(value);\n\n\t\tReflect.set(this, 'default_permission', value);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the default permissions a member should have in order to run this command.\n\t *\n\t * @remarks\n\t * You can set this to `'0'` to disable the command by default.\n\t * @param permissions - The permissions bit field to set\n\t * @see {@link https://discord.com/developers/docs/interactions/application-commands#permissions}\n\t */\n\tpublic setDefaultMemberPermissions(permissions: Permissions | bigint | number | null | undefined) {\n\t\t// Assert the value and parse it\n\t\tconst permissionValue = validateDefaultMemberPermissions(permissions);\n\n\t\tReflect.set(this, 'default_member_permissions', permissionValue);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets if the command is available in direct messages with the application.\n\t *\n\t * @remarks\n\t * By default, commands are visible. This method is only for global commands.\n\t * @param enabled - Whether the command should be enabled in direct messages\n\t * @see {@link https://discord.com/developers/docs/interactions/application-commands#permissions}\n\t * @deprecated Use {@link ContextMenuCommandBuilder.setContexts} instead.\n\t */\n\tpublic setDMPermission(enabled: boolean | null | undefined) {\n\t\t// Assert the value matches the conditions\n\t\tvalidateDMPermission(enabled);\n\n\t\tReflect.set(this, 'dm_permission', enabled);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets a name localization for this command.\n\t *\n\t * @param locale - The locale to set\n\t * @param localizedName - The localized name for the given `locale`\n\t */\n\tpublic setNameLocalization(locale: LocaleString, localizedName: string | null) {\n\t\tif (!this.name_localizations) {\n\t\t\tReflect.set(this, 'name_localizations', {});\n\t\t}\n\n\t\tconst parsedLocale = validateLocale(locale);\n\n\t\tif (localizedName === null) {\n\t\t\tthis.name_localizations![parsedLocale] = null;\n\t\t\treturn this;\n\t\t}\n\n\t\tvalidateName(localizedName);\n\n\t\tthis.name_localizations![parsedLocale] = localizedName;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the name localizations for this command.\n\t *\n\t * @param localizedNames - The object of localized names to set\n\t */\n\tpublic setNameLocalizations(localizedNames: LocalizationMap | null) {\n\t\tif (localizedNames === null) {\n\t\t\tReflect.set(this, 'name_localizations', null);\n\t\t\treturn this;\n\t\t}\n\n\t\tReflect.set(this, 'name_localizations', {});\n\n\t\tfor (const args of Object.entries(localizedNames))\n\t\t\tthis.setNameLocalization(...(args as [LocaleString, string | null]));\n\t\treturn this;\n\t}\n\n\t/**\n\t * Serializes this builder to API-compatible JSON data.\n\t *\n\t * @remarks\n\t * This method runs validations on the data before serializing it.\n\t * As such, it may throw an error if the data is invalid.\n\t */\n\tpublic toJSON(): RESTPostAPIContextMenuApplicationCommandsJSONBody {\n\t\tvalidateRequiredParameters(this.name, this.type);\n\n\t\tvalidateLocalizationMap(this.name_localizations);\n\n\t\treturn { ...this };\n\t}\n}\n","import type { APIEmbed } from 'discord-api-types/v10';\n\n/**\n * Calculates the length of the embed.\n *\n * @param data - The embed data to check\n */\nexport function embedLength(data: APIEmbed) {\n\treturn (\n\t\t(data.title?.length ?? 0) +\n\t\t(data.description?.length ?? 0) +\n\t\t(data.fields?.reduce((prev, curr) => prev + curr.name.length + curr.value.length, 0) ?? 0) +\n\t\t(data.footer?.text.length ?? 0) +\n\t\t(data.author?.name.length ?? 0)\n\t);\n}\n"],"mappings":"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","names":["Assertions_exports","s","s","ComponentType","ComponentType","ComponentType","Assertions_exports","s","ComponentType","s","ComponentType","ComponentType","ComponentType","ComponentType","Assertions_exports","placeholderValidator","s","ComponentType","s","placeholderValidator","ComponentType","ComponentType","ComponentType","SelectMenuDefaultValueType","ComponentType","SelectMenuDefaultValueType","ComponentType","SelectMenuDefaultValueType","ComponentType","SelectMenuDefaultValueType","ComponentType","Assertions_exports","s","ChannelType","ComponentType","SelectMenuDefaultValueType","s","ComponentType","ChannelType","SelectMenuDefaultValueType","ComponentType","ComponentType","SelectMenuDefaultValueType","ComponentType","SelectMenuDefaultValueType","ComponentType","ComponentType","placeholderValidator","Assertions_exports","s","ComponentType","s","ComponentType","ComponentType","ComponentType","Assertions_exports","descriptionPredicate","s","ComponentType","ComponentType","descriptionPredicate","s","descriptionPredicate","ComponentType","ComponentType","ComponentType","ComponentType","ComponentType","ComponentType","ComponentType","ComponentType","descriptionPredicate","ComponentType","ComponentType","ComponentType","ComponentType","ComponentType","ComponentType","Assertions_exports","validateRequiredParameters","s","s","validateRequiredParameters","ComponentType","validateRequiredParameters","Assertions_exports","assertReturnOfBuilder","validateRequiredParameters","s","s","descriptionPredicate","validateRequiredParameters","assertReturnOfBuilder","mix","validateRequiredParameters","validateRequiredParameters","ApplicationCommandOptionType","ApplicationCommandOptionType","ApplicationCommandOptionType","s","ChannelType","ChannelType","s","ApplicationCommandOptionType","s","ApplicationCommandOptionType","mix","s","booleanPredicate","s","s","ApplicationCommandOptionType","s","ApplicationCommandOptionType","s","ApplicationCommandOptionType","mix","ApplicationCommandOptionType","ApplicationCommandOptionType","s","ApplicationCommandOptionType","mix","numberValidator","s","ApplicationCommandOptionType","mix","ApplicationCommandOptionType","ApplicationCommandOptionType","s","ApplicationCommandOptionType","mix","minLengthValidator","s","maxLengthValidator","ApplicationCommandOptionType","mix","ApplicationCommandOptionType","ApplicationCommandOptionType","assertReturnOfBuilder","ApplicationCommandOptionType","mix","assertReturnOfBuilder","validateRequiredParameters","ApplicationCommandOptionType","mix","assertReturnOfBuilder","mix","Assertions_exports","contextsPredicate","integrationTypesPredicate","validateDMPermission","validateDefaultMemberPermissions","validateDefaultPermission","validateName","validateRequiredParameters","s","ApplicationCommandType","ApplicationIntegrationType","InteractionContextType","namePredicate","s","ApplicationCommandType","booleanPredicate","validateDefaultPermission","validateName","validateRequiredParameters","dmPermissionPredicate","validateDMPermission","memberPermissionPredicate","validateDefaultMemberPermissions","contextsPredicate","InteractionContextType","integrationTypesPredicate","ApplicationIntegrationType","contextsPredicate","integrationTypesPredicate","validateName","validateDefaultPermission","validateDefaultMemberPermissions","validateDMPermission","validateRequiredParameters"]} \ No newline at end of file diff --git a/node_modules/@discordjs/builders/package.json b/node_modules/@discordjs/builders/package.json index 3958946..93c7666 100644 --- a/node_modules/@discordjs/builders/package.json +++ b/node_modules/@discordjs/builders/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@discordjs/builders", - "version": "1.11.3", + "version": "1.13.1", "description": "A set of builders that you can use when creating your bot", "exports": { ".": { @@ -54,12 +54,12 @@ "funding": "https://github.com/discordjs/discord.js?sponsor", "dependencies": { "@sapphire/shapeshift": "^4.0.0", - "discord-api-types": "^0.38.16", + "discord-api-types": "^0.38.33", "fast-deep-equal": "^3.1.3", "ts-mixer": "^6.0.4", "tslib": "^2.6.3", - "@discordjs/formatters": "^0.6.1", - "@discordjs/util": "^1.1.1" + "@discordjs/formatters": "^0.6.2", + "@discordjs/util": "^1.2.0" }, "devDependencies": { "@favware/cliff-jumper": "^4.1.0", diff --git a/node_modules/@discordjs/formatters/README.md b/node_modules/@discordjs/formatters/README.md index 65ad4b0..f4da774 100644 --- a/node_modules/@discordjs/formatters/README.md +++ b/node_modules/@discordjs/formatters/README.md @@ -9,7 +9,8 @@ npm version npm downloads Build status - Code coverage + Last commit. + Code coverage

Vercel diff --git a/node_modules/@discordjs/formatters/dist/index.d.mts b/node_modules/@discordjs/formatters/dist/index.d.mts index b792965..c45c281 100644 --- a/node_modules/@discordjs/formatters/dist/index.d.mts +++ b/node_modules/@discordjs/formatters/dist/index.d.mts @@ -324,6 +324,13 @@ declare function channelMention(channelId: ChannelI * @param roleId - The role id to format */ declare function roleMention(roleId: RoleId): `<@&${RoleId}>`; +/** + * Formats a role id into a linked role mention. + * + * @typeParam RoleId - This is inferred by the supplied role id + * @param roleId - The role id to format + */ +declare function linkedRoleMention(roleId: RoleId): ``; /** * Formats an application command name, subcommand group name, subcommand name, and id into an application command mention. * @@ -363,7 +370,7 @@ declare function chatInputApplicationCommandMention(emojiId: EmojiId, animated?: false): `<:_:${EmojiId}>`; +declare function formatEmoji(emojiId: EmojiId, animated?: false): `<:emoji:${EmojiId}>`; /** * Formats an animated emoji id into a fully qualified emoji identifier. * @@ -371,7 +378,7 @@ declare function formatEmoji(emojiId: EmojiId, animat * @param emojiId - The emoji id to format * @param animated - Whether the emoji is animated */ -declare function formatEmoji(emojiId: EmojiId, animated?: true): ``; +declare function formatEmoji(emojiId: EmojiId, animated?: true): ``; /** * Formats an emoji id into a fully qualified emoji identifier. * @@ -379,7 +386,7 @@ declare function formatEmoji(emojiId: EmojiId, animat * @param emojiId - The emoji id to format * @param animated - Whether the emoji is animated */ -declare function formatEmoji(emojiId: EmojiId, animated?: boolean): `<:_:${EmojiId}>` | ``; +declare function formatEmoji(emojiId: EmojiId, animated?: boolean): `<:emoji:${EmojiId}>` | ``; /** * Formats a non-animated emoji id and name into a fully qualified emoji identifier. * @@ -575,6 +582,28 @@ declare function applicationDirectory(applicati * @param skuId - The SKU id */ declare function applicationDirectory(applicationId: ApplicationId, skuId: SKUId): `https://discord.com/application-directory/${ApplicationId}/store/${SKUId}`; +/** + * Formats an email address into an email mention. + * + * @typeParam Email - This is inferred by the supplied email address + * @param email - The email address to format + */ +declare function email(email: Email): `<${Email}>`; +/** + * Formats an email address and headers into an email mention. + * + * @typeParam Email - This is inferred by the supplied email address + * @param email - The email address to format + * @param headers - Optional headers to include in the email mention + */ +declare function email(email: Email, headers: Record | undefined): `<${Email}?${string}>`; +/** + * Formats a phone number into a phone number mention. + * + * @typeParam PhoneNumber - This is inferred by the supplied phone number + * @param phoneNumber - The phone number to format. Must start with a `+` sign. + */ +declare function phoneNumber(phoneNumber: PhoneNumber): `<${PhoneNumber}>`; /** * The {@link https://discord.com/developers/docs/reference#message-formatting-timestamp-styles | message formatting timestamp styles} * supported by Discord. @@ -586,10 +615,17 @@ declare const TimestampStyles: { * @example `16:20` */ readonly ShortTime: "t"; + /** + * Medium time format, consisting of hours, minutes, and seconds. + * + * @example `16:20:30` + */ + readonly MediumTime: "T"; /** * Long time format, consisting of hours, minutes, and seconds. * * @example `16:20:30` + * @deprecated Use {@link TimestampStyles.MediumTime} instead. */ readonly LongTime: "T"; /** @@ -601,21 +637,47 @@ declare const TimestampStyles: { /** * Long date format, consisting of day, month, and year. * - * @example `20 April 2021` + * @example `April 20, 2021` */ readonly LongDate: "D"; + /** + * Long date-short time format, consisting of long date and short time. + * + * @example `April 20, 2021 at 16:20` + */ + readonly LongDateShortTime: "f"; /** * Short date-time format, consisting of short date and short time formats. * * @example `20 April 2021 16:20` + * @deprecated Use {@link TimestampStyles.LongDateShortTime} instead. */ readonly ShortDateTime: "f"; + /** + * Full date-short time format, consisting of full date and short time. + * + * @example `Tuesday, April 20, 2021 at 16:20` + */ + readonly FullDateShortTime: "F"; /** * Long date-time format, consisting of long date and short time formats. * * @example `Tuesday, 20 April 2021 16:20` + * @deprecated Use {@link TimestampStyles.FullDateShortTime} instead. */ readonly LongDateTime: "F"; + /** + * Short date, short time format, consisting of short date and short time. + * + * @example `20/04/2021, 16:20` + */ + readonly ShortDateShortTime: "s"; + /** + * Short date, medium time format, consisting of short date and medium time. + * + * @example `20/04/2021, 16:20:30` + */ + readonly ShortDateMediumTime: "S"; /** * Relative time format, consisting of a relative duration format. * @@ -659,7 +721,11 @@ declare enum GuildNavigationMentions { /** * {@link https://support.discord.com/hc/articles/13497665141655 | Server Guide} tab. */ - Guide = "" + Guide = "", + /** + * {@link https://support.discord.com/hc/articles/10388356626711 | Linked Roles} tab. + */ + LinkedRoles = "" } /** @@ -670,4 +736,4 @@ declare enum GuildNavigationMentions { */ declare const version: string; -export { type EscapeMarkdownOptions, Faces, type FormatEmojiOptions, GuildNavigationMentions, HeadingLevel, type RecursiveArray, TimestampStyles, type TimestampStylesString, applicationDirectory, blockQuote, bold, channelLink, channelMention, chatInputApplicationCommandMention, codeBlock, escapeBold, escapeBulletedList, escapeCodeBlock, escapeEscape, escapeHeading, escapeInlineCode, escapeItalic, escapeMarkdown, escapeMaskedLink, escapeNumberedList, escapeSpoiler, escapeStrikethrough, escapeUnderline, formatEmoji, heading, hideLinkEmbed, hyperlink, inlineCode, italic, messageLink, orderedList, quote, roleMention, spoiler, strikethrough, subtext, time, underline, underscore, unorderedList, userMention, version }; +export { type EscapeMarkdownOptions, Faces, type FormatEmojiOptions, GuildNavigationMentions, HeadingLevel, type RecursiveArray, TimestampStyles, type TimestampStylesString, applicationDirectory, blockQuote, bold, channelLink, channelMention, chatInputApplicationCommandMention, codeBlock, email, escapeBold, escapeBulletedList, escapeCodeBlock, escapeEscape, escapeHeading, escapeInlineCode, escapeItalic, escapeMarkdown, escapeMaskedLink, escapeNumberedList, escapeSpoiler, escapeStrikethrough, escapeUnderline, formatEmoji, heading, hideLinkEmbed, hyperlink, inlineCode, italic, linkedRoleMention, messageLink, orderedList, phoneNumber, quote, roleMention, spoiler, strikethrough, subtext, time, underline, underscore, unorderedList, userMention, version }; diff --git a/node_modules/@discordjs/formatters/dist/index.d.ts b/node_modules/@discordjs/formatters/dist/index.d.ts index b792965..c45c281 100644 --- a/node_modules/@discordjs/formatters/dist/index.d.ts +++ b/node_modules/@discordjs/formatters/dist/index.d.ts @@ -324,6 +324,13 @@ declare function channelMention(channelId: ChannelI * @param roleId - The role id to format */ declare function roleMention(roleId: RoleId): `<@&${RoleId}>`; +/** + * Formats a role id into a linked role mention. + * + * @typeParam RoleId - This is inferred by the supplied role id + * @param roleId - The role id to format + */ +declare function linkedRoleMention(roleId: RoleId): ``; /** * Formats an application command name, subcommand group name, subcommand name, and id into an application command mention. * @@ -363,7 +370,7 @@ declare function chatInputApplicationCommandMention(emojiId: EmojiId, animated?: false): `<:_:${EmojiId}>`; +declare function formatEmoji(emojiId: EmojiId, animated?: false): `<:emoji:${EmojiId}>`; /** * Formats an animated emoji id into a fully qualified emoji identifier. * @@ -371,7 +378,7 @@ declare function formatEmoji(emojiId: EmojiId, animat * @param emojiId - The emoji id to format * @param animated - Whether the emoji is animated */ -declare function formatEmoji(emojiId: EmojiId, animated?: true): ``; +declare function formatEmoji(emojiId: EmojiId, animated?: true): ``; /** * Formats an emoji id into a fully qualified emoji identifier. * @@ -379,7 +386,7 @@ declare function formatEmoji(emojiId: EmojiId, animat * @param emojiId - The emoji id to format * @param animated - Whether the emoji is animated */ -declare function formatEmoji(emojiId: EmojiId, animated?: boolean): `<:_:${EmojiId}>` | ``; +declare function formatEmoji(emojiId: EmojiId, animated?: boolean): `<:emoji:${EmojiId}>` | ``; /** * Formats a non-animated emoji id and name into a fully qualified emoji identifier. * @@ -575,6 +582,28 @@ declare function applicationDirectory(applicati * @param skuId - The SKU id */ declare function applicationDirectory(applicationId: ApplicationId, skuId: SKUId): `https://discord.com/application-directory/${ApplicationId}/store/${SKUId}`; +/** + * Formats an email address into an email mention. + * + * @typeParam Email - This is inferred by the supplied email address + * @param email - The email address to format + */ +declare function email(email: Email): `<${Email}>`; +/** + * Formats an email address and headers into an email mention. + * + * @typeParam Email - This is inferred by the supplied email address + * @param email - The email address to format + * @param headers - Optional headers to include in the email mention + */ +declare function email(email: Email, headers: Record | undefined): `<${Email}?${string}>`; +/** + * Formats a phone number into a phone number mention. + * + * @typeParam PhoneNumber - This is inferred by the supplied phone number + * @param phoneNumber - The phone number to format. Must start with a `+` sign. + */ +declare function phoneNumber(phoneNumber: PhoneNumber): `<${PhoneNumber}>`; /** * The {@link https://discord.com/developers/docs/reference#message-formatting-timestamp-styles | message formatting timestamp styles} * supported by Discord. @@ -586,10 +615,17 @@ declare const TimestampStyles: { * @example `16:20` */ readonly ShortTime: "t"; + /** + * Medium time format, consisting of hours, minutes, and seconds. + * + * @example `16:20:30` + */ + readonly MediumTime: "T"; /** * Long time format, consisting of hours, minutes, and seconds. * * @example `16:20:30` + * @deprecated Use {@link TimestampStyles.MediumTime} instead. */ readonly LongTime: "T"; /** @@ -601,21 +637,47 @@ declare const TimestampStyles: { /** * Long date format, consisting of day, month, and year. * - * @example `20 April 2021` + * @example `April 20, 2021` */ readonly LongDate: "D"; + /** + * Long date-short time format, consisting of long date and short time. + * + * @example `April 20, 2021 at 16:20` + */ + readonly LongDateShortTime: "f"; /** * Short date-time format, consisting of short date and short time formats. * * @example `20 April 2021 16:20` + * @deprecated Use {@link TimestampStyles.LongDateShortTime} instead. */ readonly ShortDateTime: "f"; + /** + * Full date-short time format, consisting of full date and short time. + * + * @example `Tuesday, April 20, 2021 at 16:20` + */ + readonly FullDateShortTime: "F"; /** * Long date-time format, consisting of long date and short time formats. * * @example `Tuesday, 20 April 2021 16:20` + * @deprecated Use {@link TimestampStyles.FullDateShortTime} instead. */ readonly LongDateTime: "F"; + /** + * Short date, short time format, consisting of short date and short time. + * + * @example `20/04/2021, 16:20` + */ + readonly ShortDateShortTime: "s"; + /** + * Short date, medium time format, consisting of short date and medium time. + * + * @example `20/04/2021, 16:20:30` + */ + readonly ShortDateMediumTime: "S"; /** * Relative time format, consisting of a relative duration format. * @@ -659,7 +721,11 @@ declare enum GuildNavigationMentions { /** * {@link https://support.discord.com/hc/articles/13497665141655 | Server Guide} tab. */ - Guide = "" + Guide = "", + /** + * {@link https://support.discord.com/hc/articles/10388356626711 | Linked Roles} tab. + */ + LinkedRoles = "" } /** @@ -670,4 +736,4 @@ declare enum GuildNavigationMentions { */ declare const version: string; -export { type EscapeMarkdownOptions, Faces, type FormatEmojiOptions, GuildNavigationMentions, HeadingLevel, type RecursiveArray, TimestampStyles, type TimestampStylesString, applicationDirectory, blockQuote, bold, channelLink, channelMention, chatInputApplicationCommandMention, codeBlock, escapeBold, escapeBulletedList, escapeCodeBlock, escapeEscape, escapeHeading, escapeInlineCode, escapeItalic, escapeMarkdown, escapeMaskedLink, escapeNumberedList, escapeSpoiler, escapeStrikethrough, escapeUnderline, formatEmoji, heading, hideLinkEmbed, hyperlink, inlineCode, italic, messageLink, orderedList, quote, roleMention, spoiler, strikethrough, subtext, time, underline, underscore, unorderedList, userMention, version }; +export { type EscapeMarkdownOptions, Faces, type FormatEmojiOptions, GuildNavigationMentions, HeadingLevel, type RecursiveArray, TimestampStyles, type TimestampStylesString, applicationDirectory, blockQuote, bold, channelLink, channelMention, chatInputApplicationCommandMention, codeBlock, email, escapeBold, escapeBulletedList, escapeCodeBlock, escapeEscape, escapeHeading, escapeInlineCode, escapeItalic, escapeMarkdown, escapeMaskedLink, escapeNumberedList, escapeSpoiler, escapeStrikethrough, escapeUnderline, formatEmoji, heading, hideLinkEmbed, hyperlink, inlineCode, italic, linkedRoleMention, messageLink, orderedList, phoneNumber, quote, roleMention, spoiler, strikethrough, subtext, time, underline, underscore, unorderedList, userMention, version }; diff --git a/node_modules/@discordjs/formatters/dist/index.js b/node_modules/@discordjs/formatters/dist/index.js index da414da..43a2b3b 100644 --- a/node_modules/@discordjs/formatters/dist/index.js +++ b/node_modules/@discordjs/formatters/dist/index.js @@ -19,8 +19,8 @@ var __copyProps = (to, from, except, desc) => { var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // src/index.ts -var src_exports = {}; -__export(src_exports, { +var index_exports = {}; +__export(index_exports, { Faces: () => Faces, GuildNavigationMentions: () => GuildNavigationMentions, HeadingLevel: () => HeadingLevel, @@ -32,6 +32,7 @@ __export(src_exports, { channelMention: () => channelMention, chatInputApplicationCommandMention: () => chatInputApplicationCommandMention, codeBlock: () => codeBlock, + email: () => email, escapeBold: () => escapeBold, escapeBulletedList: () => escapeBulletedList, escapeCodeBlock: () => escapeCodeBlock, @@ -51,8 +52,10 @@ __export(src_exports, { hyperlink: () => hyperlink, inlineCode: () => inlineCode, italic: () => italic, + linkedRoleMention: () => linkedRoleMention, messageLink: () => messageLink, orderedList: () => orderedList, + phoneNumber: () => phoneNumber, quote: () => quote, roleMention: () => roleMention, spoiler: () => spoiler, @@ -65,7 +68,7 @@ __export(src_exports, { userMention: () => userMention, version: () => version }); -module.exports = __toCommonJS(src_exports); +module.exports = __toCommonJS(index_exports); // src/escapers.ts function escapeMarkdown(text, options = {}) { @@ -148,15 +151,21 @@ function escapeInlineCode(text) { __name(escapeInlineCode, "escapeInlineCode"); function escapeItalic(text) { let idx = 0; - const newText = text.replaceAll(/(?<=^|[^*])\*([^*]|\*\*|$)/g, (_, match) => { - if (match === "**") return ++idx % 2 ? `\\*${match}` : `${match}\\*`; - return `\\*${match}`; - }); + const newText = text.replaceAll( + /(?<=^|[^*])(?]*)\*([^*]|\*\*|$)/g, + (_, match) => { + if (match === "**") return ++idx % 2 ? `\\*${match}` : `${match}\\*`; + return `\\*${match}`; + } + ); idx = 0; - return newText.replaceAll(/(?<=^|[^_])(?)([^_]|__|$)/g, (_, match) => { - if (match === "__") return ++idx % 2 ? `\\_${match}` : `${match}\\_`; - return `\\_${match}`; - }); + return newText.replaceAll( + /(?<=^|[^_])(?]*)_(?!:\d+>)([^_]|__|$)/g, + (_, match) => { + if (match === "__") return ++idx % 2 ? `\\_${match}` : `${match}\\_`; + return `\\_${match}`; + } + ); } __name(escapeItalic, "escapeItalic"); function escapeBold(text) { @@ -269,6 +278,10 @@ function roleMention(roleId) { return `<@&${roleId}>`; } __name(roleMention, "roleMention"); +function linkedRoleMention(roleId) { + return ``; +} +__name(linkedRoleMention, "linkedRoleMention"); function chatInputApplicationCommandMention(commandName, subcommandGroupName, subcommandName, commandId) { if (commandId !== void 0) { return ``; @@ -285,7 +298,7 @@ function formatEmoji(emojiIdOrOptions, animated) { animated: animated ?? false } : emojiIdOrOptions; const { id, animated: isAnimated, name: emojiName } = options; - return `<${isAnimated ? "a" : ""}:${emojiName ?? "_"}:${id}>`; + return `<${isAnimated ? "a" : ""}:${emojiName ?? "emoji"}:${id}>`; } __name(formatEmoji, "formatEmoji"); function channelLink(channelId, guildId) { @@ -344,6 +357,23 @@ function applicationDirectory(applicationId, skuId) { return skuId ? `${url}/${skuId}` : url; } __name(applicationDirectory, "applicationDirectory"); +function email(email2, headers) { + if (headers) { + const searchParams = new URLSearchParams( + Object.fromEntries(Object.entries(headers).map(([key, value]) => [key.toLowerCase(), value])) + ); + return `<${email2}?${searchParams.toString()}>`; + } + return `<${email2}>`; +} +__name(email, "email"); +function phoneNumber(phoneNumber2) { + if (!phoneNumber2.startsWith("+")) { + throw new Error('Phone number must start with a "+" sign.'); + } + return `<${phoneNumber2}>`; +} +__name(phoneNumber, "phoneNumber"); var TimestampStyles = { /** * Short time format, consisting of hours and minutes. @@ -351,10 +381,17 @@ var TimestampStyles = { * @example `16:20` */ ShortTime: "t", + /** + * Medium time format, consisting of hours, minutes, and seconds. + * + * @example `16:20:30` + */ + MediumTime: "T", /** * Long time format, consisting of hours, minutes, and seconds. * * @example `16:20:30` + * @deprecated Use {@link TimestampStyles.MediumTime} instead. */ LongTime: "T", /** @@ -366,21 +403,47 @@ var TimestampStyles = { /** * Long date format, consisting of day, month, and year. * - * @example `20 April 2021` + * @example `April 20, 2021` */ LongDate: "D", + /** + * Long date-short time format, consisting of long date and short time. + * + * @example `April 20, 2021 at 16:20` + */ + LongDateShortTime: "f", /** * Short date-time format, consisting of short date and short time formats. * * @example `20 April 2021 16:20` + * @deprecated Use {@link TimestampStyles.LongDateShortTime} instead. */ ShortDateTime: "f", + /** + * Full date-short time format, consisting of full date and short time. + * + * @example `Tuesday, April 20, 2021 at 16:20` + */ + FullDateShortTime: "F", /** * Long date-time format, consisting of long date and short time formats. * * @example `Tuesday, 20 April 2021 16:20` + * @deprecated Use {@link TimestampStyles.FullDateShortTime} instead. */ LongDateTime: "F", + /** + * Short date, short time format, consisting of short date and short time. + * + * @example `20/04/2021, 16:20` + */ + ShortDateShortTime: "s", + /** + * Short date, medium time format, consisting of short date and medium time. + * + * @example `20/04/2021, 16:20:30` + */ + ShortDateMediumTime: "S", /** * Relative time format, consisting of a relative duration format. * @@ -398,11 +461,12 @@ var GuildNavigationMentions = /* @__PURE__ */ ((GuildNavigationMentions2) => { GuildNavigationMentions2["Browse"] = ""; GuildNavigationMentions2["Customize"] = ""; GuildNavigationMentions2["Guide"] = ""; + GuildNavigationMentions2["LinkedRoles"] = ""; return GuildNavigationMentions2; })(GuildNavigationMentions || {}); // src/index.ts -var version = "0.6.1"; +var version = "0.6.2"; // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { Faces, @@ -416,6 +480,7 @@ var version = "0.6.1"; channelMention, chatInputApplicationCommandMention, codeBlock, + email, escapeBold, escapeBulletedList, escapeCodeBlock, @@ -435,8 +500,10 @@ var version = "0.6.1"; hyperlink, inlineCode, italic, + linkedRoleMention, messageLink, orderedList, + phoneNumber, quote, roleMention, spoiler, diff --git a/node_modules/@discordjs/formatters/dist/index.js.map b/node_modules/@discordjs/formatters/dist/index.js.map index f42dc86..f70802f 100644 --- a/node_modules/@discordjs/formatters/dist/index.js.map +++ b/node_modules/@discordjs/formatters/dist/index.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/index.ts","../src/escapers.ts","../src/formatters.ts"],"sourcesContent":["export * from './escapers.js';\nexport * from './formatters.js';\n\n/**\n * The {@link https://github.com/discordjs/discord.js/blob/main/packages/formatters#readme | @discordjs/formatters} version\n * that you are currently using.\n *\n * @privateRemarks This needs to explicitly be `string` so it is not typed as a \"const string\" that gets injected by esbuild.\n */\nexport const version = '0.6.1' as string;\n","/* eslint-disable prefer-named-capture-group */\n\n/**\n * The options that affect what will be escaped.\n */\nexport interface EscapeMarkdownOptions {\n\t/**\n\t * Whether to escape bold text.\n\t *\n\t * @defaultValue `true`\n\t */\n\tbold?: boolean;\n\n\t/**\n\t * Whether to escape bulleted lists.\n\t *\n\t * @defaultValue `false`\n\t */\n\tbulletedList?: boolean;\n\n\t/**\n\t * Whether to escape code blocks.\n\t *\n\t * @defaultValue `true`\n\t */\n\tcodeBlock?: boolean;\n\n\t/**\n\t * Whether to escape text inside code blocks.\n\t *\n\t * @defaultValue `true`\n\t */\n\tcodeBlockContent?: boolean;\n\n\t/**\n\t * Whether to escape `\\`.\n\t *\n\t * @defaultValue `true`\n\t */\n\tescape?: boolean;\n\n\t/**\n\t * Whether to escape headings.\n\t *\n\t * @defaultValue `false`\n\t */\n\theading?: boolean;\n\n\t/**\n\t * Whether to escape inline code.\n\t *\n\t * @defaultValue `true`\n\t */\n\tinlineCode?: boolean;\n\n\t/**\n\t * Whether to escape text inside inline code.\n\t *\n\t * @defaultValue `true`\n\t */\n\tinlineCodeContent?: boolean;\n\t/**\n\t * Whether to escape italics.\n\t *\n\t * @defaultValue `true`\n\t */\n\titalic?: boolean;\n\n\t/**\n\t * Whether to escape masked links.\n\t *\n\t * @defaultValue `false`\n\t */\n\tmaskedLink?: boolean;\n\n\t/**\n\t * Whether to escape numbered lists.\n\t *\n\t * @defaultValue `false`\n\t */\n\tnumberedList?: boolean;\n\n\t/**\n\t * Whether to escape spoilers.\n\t *\n\t * @defaultValue `true`\n\t */\n\tspoiler?: boolean;\n\n\t/**\n\t * Whether to escape strikethroughs.\n\t *\n\t * @defaultValue `true`\n\t */\n\tstrikethrough?: boolean;\n\n\t/**\n\t * Whether to escape underlines.\n\t *\n\t * @defaultValue `true`\n\t */\n\tunderline?: boolean;\n}\n\n/**\n * Escapes any Discord-flavored markdown in a string.\n *\n * @param text - Content to escape\n * @param options - Options for escaping the markdown\n */\nexport function escapeMarkdown(text: string, options: EscapeMarkdownOptions = {}): string {\n\tconst {\n\t\tcodeBlock = true,\n\t\tinlineCode = true,\n\t\tbold = true,\n\t\titalic = true,\n\t\tunderline = true,\n\t\tstrikethrough = true,\n\t\tspoiler = true,\n\t\tcodeBlockContent = true,\n\t\tinlineCodeContent = true,\n\t\tescape = true,\n\t\theading = false,\n\t\tbulletedList = false,\n\t\tnumberedList = false,\n\t\tmaskedLink = false,\n\t} = options;\n\n\tif (!codeBlockContent) {\n\t\treturn text\n\t\t\t.split('```')\n\t\t\t.map((subString, index, array) => {\n\t\t\t\tif (index % 2 && index !== array.length - 1) return subString;\n\t\t\t\treturn escapeMarkdown(subString, {\n\t\t\t\t\tinlineCode,\n\t\t\t\t\tbold,\n\t\t\t\t\titalic,\n\t\t\t\t\tunderline,\n\t\t\t\t\tstrikethrough,\n\t\t\t\t\tspoiler,\n\t\t\t\t\tinlineCodeContent,\n\t\t\t\t\tescape,\n\t\t\t\t\theading,\n\t\t\t\t\tbulletedList,\n\t\t\t\t\tnumberedList,\n\t\t\t\t\tmaskedLink,\n\t\t\t\t});\n\t\t\t})\n\t\t\t.join(codeBlock ? '\\\\`\\\\`\\\\`' : '```');\n\t}\n\n\tif (!inlineCodeContent) {\n\t\treturn text\n\t\t\t.split(/(?<=^|[^`])`(?=[^`]|$)/g)\n\t\t\t.map((subString, index, array) => {\n\t\t\t\tif (index % 2 && index !== array.length - 1) return subString;\n\t\t\t\treturn escapeMarkdown(subString, {\n\t\t\t\t\tcodeBlock,\n\t\t\t\t\tbold,\n\t\t\t\t\titalic,\n\t\t\t\t\tunderline,\n\t\t\t\t\tstrikethrough,\n\t\t\t\t\tspoiler,\n\t\t\t\t\tescape,\n\t\t\t\t\theading,\n\t\t\t\t\tbulletedList,\n\t\t\t\t\tnumberedList,\n\t\t\t\t\tmaskedLink,\n\t\t\t\t});\n\t\t\t})\n\t\t\t.join(inlineCode ? '\\\\`' : '`');\n\t}\n\n\tlet res = text;\n\tif (escape) res = escapeEscape(res);\n\tif (inlineCode) res = escapeInlineCode(res);\n\tif (codeBlock) res = escapeCodeBlock(res);\n\tif (italic) res = escapeItalic(res);\n\tif (bold) res = escapeBold(res);\n\tif (underline) res = escapeUnderline(res);\n\tif (strikethrough) res = escapeStrikethrough(res);\n\tif (spoiler) res = escapeSpoiler(res);\n\tif (heading) res = escapeHeading(res);\n\tif (bulletedList) res = escapeBulletedList(res);\n\tif (numberedList) res = escapeNumberedList(res);\n\tif (maskedLink) res = escapeMaskedLink(res);\n\treturn res;\n}\n\n/**\n * Escapes code block markdown in a string.\n *\n * @param text - Content to escape\n */\nexport function escapeCodeBlock(text: string): string {\n\treturn text.replaceAll('```', '\\\\`\\\\`\\\\`');\n}\n\n/**\n * Escapes inline code markdown in a string.\n *\n * @param text - Content to escape\n */\nexport function escapeInlineCode(text: string): string {\n\treturn text.replaceAll(/(?<=^|[^`])``?(?=[^`]|$)/g, (match) => (match.length === 2 ? '\\\\`\\\\`' : '\\\\`'));\n}\n\n/**\n * Escapes italic markdown in a string.\n *\n * @param text - Content to escape\n */\nexport function escapeItalic(text: string): string {\n\tlet idx = 0;\n\tconst newText = text.replaceAll(/(?<=^|[^*])\\*([^*]|\\*\\*|$)/g, (_, match) => {\n\t\tif (match === '**') return ++idx % 2 ? `\\\\*${match}` : `${match}\\\\*`;\n\t\treturn `\\\\*${match}`;\n\t});\n\tidx = 0;\n\treturn newText.replaceAll(/(?<=^|[^_])(?)([^_]|__|$)/g, (_, match) => {\n\t\tif (match === '__') return ++idx % 2 ? `\\\\_${match}` : `${match}\\\\_`;\n\t\treturn `\\\\_${match}`;\n\t});\n}\n\n/**\n * Escapes bold markdown in a string.\n *\n * @param text - Content to escape\n */\nexport function escapeBold(text: string): string {\n\tlet idx = 0;\n\treturn text.replaceAll(/\\*\\*(\\*)?/g, (_, match) => {\n\t\tif (match) return ++idx % 2 ? `${match}\\\\*\\\\*` : `\\\\*\\\\*${match}`;\n\t\treturn '\\\\*\\\\*';\n\t});\n}\n\n/**\n * Escapes underline markdown in a string.\n *\n * @param text - Content to escape\n */\nexport function escapeUnderline(text: string): string {\n\tlet idx = 0;\n\treturn text.replaceAll(/(?)/g, (_, match) => {\n\t\tif (match) return ++idx % 2 ? `${match}\\\\_\\\\_` : `\\\\_\\\\_${match}`;\n\t\treturn '\\\\_\\\\_';\n\t});\n}\n\n/**\n * Escapes strikethrough markdown in a string.\n *\n * @param text - Content to escape\n */\nexport function escapeStrikethrough(text: string): string {\n\treturn text.replaceAll('~~', '\\\\~\\\\~');\n}\n\n/**\n * Escapes spoiler markdown in a string.\n *\n * @param text - Content to escape\n */\nexport function escapeSpoiler(text: string): string {\n\treturn text.replaceAll('||', '\\\\|\\\\|');\n}\n\n/**\n * Escapes escape characters in a string.\n *\n * @param text - Content to escape\n */\nexport function escapeEscape(text: string): string {\n\treturn text.replaceAll('\\\\', '\\\\\\\\');\n}\n\n/**\n * Escapes heading characters in a string.\n *\n * @param text - Content to escape\n */\nexport function escapeHeading(text: string): string {\n\treturn text.replaceAll(/^( {0,2})([*-] )?( *)(#{1,3} )/gm, '$1$2$3\\\\$4');\n}\n\n/**\n * Escapes bulleted list characters in a string.\n *\n * @param text - Content to escape\n */\nexport function escapeBulletedList(text: string): string {\n\treturn text.replaceAll(/^( *)([*-])( +)/gm, '$1\\\\$2$3');\n}\n\n/**\n * Escapes numbered list characters in a string.\n *\n * @param text - Content to escape\n */\nexport function escapeNumberedList(text: string): string {\n\treturn text.replaceAll(/^( *\\d+)\\./gm, '$1\\\\.');\n}\n\n/**\n * Escapes masked link characters in a string.\n *\n * @param text - Content to escape\n */\nexport function escapeMaskedLink(text: string): string {\n\treturn text.replaceAll(/\\[.+]\\(.+\\)/gm, '\\\\$&');\n}\n","import type { URL } from 'node:url';\nimport type { Snowflake } from 'discord-api-types/globals';\n\n/**\n * Wraps the content inside a code block with no language.\n *\n * @typeParam Content - This is inferred by the supplied content\n * @param content - The content to wrap\n */\nexport function codeBlock(content: Content): `\\`\\`\\`\\n${Content}\\n\\`\\`\\``;\n\n/**\n * Wraps the content inside a code block with the specified language.\n *\n * @typeParam Language - This is inferred by the supplied language\n * @typeParam Content - This is inferred by the supplied content\n * @param language - The language for the code block\n * @param content - The content to wrap\n */\nexport function codeBlock(\n\tlanguage: Language,\n\tcontent: Content,\n): `\\`\\`\\`${Language}\\n${Content}\\n\\`\\`\\``;\n\nexport function codeBlock(language: string, content?: string): string {\n\treturn content === undefined ? `\\`\\`\\`\\n${language}\\n\\`\\`\\`` : `\\`\\`\\`${language}\\n${content}\\n\\`\\`\\``;\n}\n\n/**\n * Wraps the content inside \\`backticks\\` which formats it as inline code.\n *\n * @typeParam Content - This is inferred by the supplied content\n * @param content - The content to wrap\n */\nexport function inlineCode(content: Content): `\\`${Content}\\`` {\n\treturn `\\`${content}\\``;\n}\n\n/**\n * Formats the content into italic text.\n *\n * @typeParam Content - This is inferred by the supplied content\n * @param content - The content to wrap\n */\nexport function italic(content: Content): `_${Content}_` {\n\treturn `_${content}_`;\n}\n\n/**\n * Formats the content into bold text.\n *\n * @typeParam Content - This is inferred by the supplied content\n * @param content - The content to wrap\n */\nexport function bold(content: Content): `**${Content}**` {\n\treturn `**${content}**`;\n}\n\n/**\n * Formats the content into underscored text.\n *\n * @typeParam Content - This is inferred by the supplied content\n * @param content - The content to wrap\n * @deprecated Use {@link underline} instead.\n */\nexport function underscore(content: Content): `__${Content}__` {\n\treturn underline(content);\n}\n\n/**\n * Formats the content into underlined text.\n *\n * @typeParam Content - This is inferred by the supplied content\n * @param content - The content to wrap\n */\nexport function underline(content: Content): `__${Content}__` {\n\treturn `__${content}__`;\n}\n\n/**\n * Formats the content into strike-through text.\n *\n * @typeParam Content - This is inferred by the supplied content\n * @param content - The content to wrap\n */\nexport function strikethrough(content: Content): `~~${Content}~~` {\n\treturn `~~${content}~~`;\n}\n\n/**\n * Formats the content into a quote.\n *\n * @remarks This needs to be at the start of the line for Discord to format it.\n * @typeParam Content - This is inferred by the supplied content\n * @param content - The content to wrap\n */\nexport function quote(content: Content): `> ${Content}` {\n\treturn `> ${content}`;\n}\n\n/**\n * Formats the content into a block quote.\n *\n * @remarks This needs to be at the start of the line for Discord to format it.\n * @typeParam Content - This is inferred by the supplied content\n * @param content - The content to wrap\n */\nexport function blockQuote(content: Content): `>>> ${Content}` {\n\treturn `>>> ${content}`;\n}\n\n/**\n * Wraps the URL into `<>` which stops it from embedding.\n *\n * @typeParam Content - This is inferred by the supplied content\n * @param url - The URL to wrap\n */\nexport function hideLinkEmbed(url: Content): `<${Content}>`;\n\n/**\n * Wraps the URL into `<>` which stops it from embedding.\n *\n * @param url - The URL to wrap\n */\nexport function hideLinkEmbed(url: URL): `<${string}>`;\n\nexport function hideLinkEmbed(url: URL | string) {\n\treturn `<${url}>`;\n}\n\n/**\n * Formats the content and the URL into a masked URL.\n *\n * @typeParam Content - This is inferred by the supplied content\n * @param content - The content to display\n * @param url - The URL the content links to\n */\nexport function hyperlink(content: Content, url: URL): `[${Content}](${string})`;\n\n/**\n * Formats the content and the URL into a masked URL.\n *\n * @typeParam Content - This is inferred by the supplied content\n * @typeParam Url - This is inferred by the supplied URL\n * @param content - The content to display\n * @param url - The URL the content links to\n */\nexport function hyperlink(\n\tcontent: Content,\n\turl: Url,\n): `[${Content}](${Url})`;\n\n/**\n * Formats the content and the URL into a masked URL with a custom tooltip.\n *\n * @typeParam Content - This is inferred by the supplied content\n * @typeParam Title - This is inferred by the supplied title\n * @param content - The content to display\n * @param url - The URL the content links to\n * @param title - The title shown when hovering on the masked link\n */\nexport function hyperlink(\n\tcontent: Content,\n\turl: URL,\n\ttitle: Title,\n): `[${Content}](${string} \"${Title}\")`;\n\n/**\n * Formats the content and the URL into a masked URL with a custom tooltip.\n *\n * @typeParam Content - This is inferred by the supplied content\n * @typeParam Url - This is inferred by the supplied URL\n * @typeParam Title - This is inferred by the supplied title\n * @param content - The content to display\n * @param url - The URL the content links to\n * @param title - The title shown when hovering on the masked link\n */\nexport function hyperlink(\n\tcontent: Content,\n\turl: Url,\n\ttitle: Title,\n): `[${Content}](${Url} \"${Title}\")`;\n\nexport function hyperlink(content: string, url: URL | string, title?: string) {\n\treturn title ? `[${content}](${url} \"${title}\")` : `[${content}](${url})`;\n}\n\n/**\n * Formats the content into a spoiler.\n *\n * @typeParam Content - This is inferred by the supplied content\n * @param content - The content to wrap\n */\nexport function spoiler(content: Content): `||${Content}||` {\n\treturn `||${content}||`;\n}\n\n/**\n * Formats a user id into a user mention.\n *\n * @typeParam UserId - This is inferred by the supplied user id\n * @param userId - The user id to format\n */\nexport function userMention(userId: UserId): `<@${UserId}>` {\n\treturn `<@${userId}>`;\n}\n\n/**\n * Formats a channel id into a channel mention.\n *\n * @typeParam ChannelId - This is inferred by the supplied channel id\n * @param channelId - The channel id to format\n */\nexport function channelMention(channelId: ChannelId): `<#${ChannelId}>` {\n\treturn `<#${channelId}>`;\n}\n\n/**\n * Formats a role id into a role mention.\n *\n * @typeParam RoleId - This is inferred by the supplied role id\n * @param roleId - The role id to format\n */\nexport function roleMention(roleId: RoleId): `<@&${RoleId}>` {\n\treturn `<@&${roleId}>`;\n}\n\n/**\n * Formats an application command name, subcommand group name, subcommand name, and id into an application command mention.\n *\n * @typeParam CommandName - This is inferred by the supplied command name\n * @typeParam SubcommandGroupName - This is inferred by the supplied subcommand group name\n * @typeParam SubcommandName - This is inferred by the supplied subcommand name\n * @typeParam CommandId - This is inferred by the supplied command id\n * @param commandName - The application command name to format\n * @param subcommandGroupName - The subcommand group name to format\n * @param subcommandName - The subcommand name to format\n * @param commandId - The application command id to format\n */\nexport function chatInputApplicationCommandMention<\n\tCommandName extends string,\n\tSubcommandGroupName extends string,\n\tSubcommandName extends string,\n\tCommandId extends Snowflake,\n>(\n\tcommandName: CommandName,\n\tsubcommandGroupName: SubcommandGroupName,\n\tsubcommandName: SubcommandName,\n\tcommandId: CommandId,\n): ``;\n\n/**\n * Formats an application command name, subcommand name, and id into an application command mention.\n *\n * @typeParam CommandName - This is inferred by the supplied command name\n * @typeParam SubcommandName - This is inferred by the supplied subcommand name\n * @typeParam CommandId - This is inferred by the supplied command id\n * @param commandName - The application command name to format\n * @param subcommandName - The subcommand name to format\n * @param commandId - The application command id to format\n */\nexport function chatInputApplicationCommandMention<\n\tCommandName extends string,\n\tSubcommandName extends string,\n\tCommandId extends Snowflake,\n>(\n\tcommandName: CommandName,\n\tsubcommandName: SubcommandName,\n\tcommandId: CommandId,\n): ``;\n\n/**\n * Formats an application command name and id into an application command mention.\n *\n * @typeParam CommandName - This is inferred by the supplied command name\n * @typeParam CommandId - This is inferred by the supplied command id\n * @param commandName - The application command name to format\n * @param commandId - The application command id to format\n */\nexport function chatInputApplicationCommandMention(\n\tcommandName: CommandName,\n\tcommandId: CommandId,\n): ``;\n\nexport function chatInputApplicationCommandMention<\n\tCommandName extends string,\n\tSubcommandGroupName extends Snowflake | string,\n\tSubcommandName extends Snowflake | string,\n\tCommandId extends Snowflake,\n>(\n\tcommandName: CommandName,\n\tsubcommandGroupName: SubcommandGroupName,\n\tsubcommandName?: SubcommandName,\n\tcommandId?: CommandId,\n):\n\t| ``\n\t| ``\n\t| `` {\n\tif (commandId !== undefined) {\n\t\treturn ``;\n\t}\n\n\tif (subcommandName !== undefined) {\n\t\treturn ``;\n\t}\n\n\treturn ``;\n}\n\n/**\n * Formats a non-animated emoji id into a fully qualified emoji identifier.\n *\n * @typeParam EmojiId - This is inferred by the supplied emoji id\n * @param emojiId - The emoji id to format\n */\nexport function formatEmoji(emojiId: EmojiId, animated?: false): `<:_:${EmojiId}>`;\n\n/**\n * Formats an animated emoji id into a fully qualified emoji identifier.\n *\n * @typeParam EmojiId - This is inferred by the supplied emoji id\n * @param emojiId - The emoji id to format\n * @param animated - Whether the emoji is animated\n */\nexport function formatEmoji(emojiId: EmojiId, animated?: true): ``;\n\n/**\n * Formats an emoji id into a fully qualified emoji identifier.\n *\n * @typeParam EmojiId - This is inferred by the supplied emoji id\n * @param emojiId - The emoji id to format\n * @param animated - Whether the emoji is animated\n */\nexport function formatEmoji(\n\temojiId: EmojiId,\n\tanimated?: boolean,\n): `<:_:${EmojiId}>` | ``;\n\n/**\n * Formats a non-animated emoji id and name into a fully qualified emoji identifier.\n *\n * @typeParam EmojiId - This is inferred by the supplied emoji id\n * @typeParam EmojiName - This is inferred by the supplied name\n * @param options - The options for formatting an emoji\n */\nexport function formatEmoji(\n\toptions: FormatEmojiOptions & { animated: true },\n): ``;\n\n/**\n * Formats an animated emoji id and name into a fully qualified emoji identifier.\n *\n * @typeParam EmojiId - This is inferred by the supplied emoji id\n * @typeParam EmojiName - This is inferred by the supplied name\n * @param options - The options for formatting an emoji\n */\nexport function formatEmoji(\n\toptions: FormatEmojiOptions & { animated?: false },\n): `<:${EmojiName}:${EmojiId}>`;\n\n/**\n * Formats an emoji id and name into a fully qualified emoji identifier.\n *\n * @typeParam EmojiId - This is inferred by the supplied emoji id\n * @typeParam EmojiName - This is inferred by the supplied emoji name\n * @param options - The options for formatting an emoji\n */\nexport function formatEmoji(\n\toptions: FormatEmojiOptions,\n): `<:${EmojiName}:${EmojiId}>` | ``;\n\nexport function formatEmoji(\n\temojiIdOrOptions: EmojiId | FormatEmojiOptions,\n\tanimated?: boolean,\n): `<:${string}:${EmojiId}>` | `` {\n\tconst options =\n\t\ttypeof emojiIdOrOptions === 'string'\n\t\t\t? {\n\t\t\t\t\tid: emojiIdOrOptions,\n\t\t\t\t\tanimated: animated ?? false,\n\t\t\t\t}\n\t\t\t: emojiIdOrOptions;\n\n\tconst { id, animated: isAnimated, name: emojiName } = options;\n\n\treturn `<${isAnimated ? 'a' : ''}:${emojiName ?? '_'}:${id}>`;\n}\n\n/**\n * The options for formatting an emoji.\n *\n * @typeParam EmojiId - This is inferred by the supplied emoji id\n * @typeParam EmojiName - This is inferred by the supplied emoji name\n */\nexport interface FormatEmojiOptions {\n\t/**\n\t * Whether the emoji is animated\n\t */\n\tanimated?: boolean;\n\t/**\n\t * The emoji id to format\n\t */\n\tid: EmojiId;\n\t/**\n\t * The name of the emoji\n\t */\n\tname?: EmojiName;\n}\n\n/**\n * Formats a channel link for a direct message channel.\n *\n * @typeParam ChannelId - This is inferred by the supplied channel id\n * @param channelId - The channel's id\n */\nexport function channelLink(\n\tchannelId: ChannelId,\n): `https://discord.com/channels/@me/${ChannelId}`;\n\n/**\n * Formats a channel link for a guild channel.\n *\n * @typeParam ChannelId - This is inferred by the supplied channel id\n * @typeParam GuildId - This is inferred by the supplied guild id\n * @param channelId - The channel's id\n * @param guildId - The guild's id\n */\nexport function channelLink(\n\tchannelId: ChannelId,\n\tguildId: GuildId,\n): `https://discord.com/channels/${GuildId}/${ChannelId}`;\n\nexport function channelLink(\n\tchannelId: ChannelId,\n\tguildId?: GuildId,\n): `https://discord.com/channels/@me/${ChannelId}` | `https://discord.com/channels/${GuildId}/${ChannelId}` {\n\treturn `https://discord.com/channels/${guildId ?? '@me'}/${channelId}`;\n}\n\n/**\n * Formats a message link for a direct message channel.\n *\n * @typeParam ChannelId - This is inferred by the supplied channel id\n * @typeParam MessageId - This is inferred by the supplied message id\n * @param channelId - The channel's id\n * @param messageId - The message's id\n */\nexport function messageLink(\n\tchannelId: ChannelId,\n\tmessageId: MessageId,\n): `https://discord.com/channels/@me/${ChannelId}/${MessageId}`;\n\n/**\n * Formats a message link for a guild channel.\n *\n * @typeParam ChannelId - This is inferred by the supplied channel id\n * @typeParam MessageId - This is inferred by the supplied message id\n * @typeParam GuildId - This is inferred by the supplied guild id\n * @param channelId - The channel's id\n * @param messageId - The message's id\n * @param guildId - The guild's id\n */\nexport function messageLink(\n\tchannelId: ChannelId,\n\tmessageId: MessageId,\n\tguildId: GuildId,\n): `https://discord.com/channels/${GuildId}/${ChannelId}/${MessageId}`;\n\nexport function messageLink(\n\tchannelId: ChannelId,\n\tmessageId: MessageId,\n\tguildId?: GuildId,\n):\n\t| `https://discord.com/channels/@me/${ChannelId}/${MessageId}`\n\t| `https://discord.com/channels/${GuildId}/${ChannelId}/${MessageId}` {\n\treturn `${guildId === undefined ? channelLink(channelId) : channelLink(channelId, guildId)}/${messageId}`;\n}\n\n/**\n * The heading levels for expanded markdown.\n */\nexport enum HeadingLevel {\n\t/**\n\t * The first heading level.\n\t */\n\tOne = 1,\n\t/**\n\t * The second heading level.\n\t */\n\tTwo,\n\t/**\n\t * The third heading level.\n\t */\n\tThree,\n}\n\n/**\n * Formats the content into a heading level.\n *\n * @typeParam Content - This is inferred by the supplied content\n * @param content - The content to wrap\n * @param level - The heading level\n */\nexport function heading(content: Content, level?: HeadingLevel.One): `# ${Content}`;\n\n/**\n * Formats the content into a heading level.\n *\n * @typeParam Content - This is inferred by the supplied content\n * @param content - The content to wrap\n * @param level - The heading level\n */\nexport function heading(content: Content, level: HeadingLevel.Two): `## ${Content}`;\n\n/**\n * Formats the content into a heading level.\n *\n * @typeParam Content - This is inferred by the supplied content\n * @param content - The content to wrap\n * @param level - The heading level\n */\nexport function heading(content: Content, level: HeadingLevel.Three): `### ${Content}`;\n\nexport function heading(content: string, level?: HeadingLevel) {\n\tswitch (level) {\n\t\tcase HeadingLevel.Three:\n\t\t\treturn `### ${content}`;\n\t\tcase HeadingLevel.Two:\n\t\t\treturn `## ${content}`;\n\t\tdefault:\n\t\t\treturn `# ${content}`;\n\t}\n}\n\n/**\n * A type that recursively traverses into arrays.\n */\nexport type RecursiveArray = readonly (ItemType | RecursiveArray)[];\n\n/**\n * Callback function for list formatters.\n *\n * @internal\n */\nfunction listCallback(element: RecursiveArray, startNumber?: number, depth = 0): string {\n\tif (Array.isArray(element)) {\n\t\treturn element.map((element) => listCallback(element, startNumber, depth + 1)).join('\\n');\n\t}\n\n\treturn `${' '.repeat(depth - 1)}${startNumber ? `${startNumber}.` : '-'} ${element}`;\n}\n\n/**\n * Formats the elements in the array to an ordered list.\n *\n * @param list - The array of elements to list\n * @param startNumber - The starting number for the list\n */\nexport function orderedList(list: RecursiveArray, startNumber = 1): string {\n\treturn listCallback(list, Math.max(startNumber, 1));\n}\n\n/**\n * Formats the elements in the array to an unordered list.\n *\n * @param list - The array of elements to list\n */\nexport function unorderedList(list: RecursiveArray): string {\n\treturn listCallback(list);\n}\n\n/**\n * Formats the content into a subtext.\n *\n * @typeParam Content - This is inferred by the supplied content\n * @param content - The content to wrap\n */\nexport function subtext(content: Content): `-# ${Content}` {\n\treturn `-# ${content}`;\n}\n\n/**\n * Formats a date into a short date-time string.\n *\n * @param date - The date to format. Defaults to the current time\n */\nexport function time(date?: Date): ``;\n\n/**\n * Formats a date given a format style.\n *\n * @typeParam Style - This is inferred by the supplied {@link TimestampStylesString}\n * @param date - The date to format\n * @param style - The style to use\n */\nexport function time + + +

+

🔐 Accès Restreint

+

Veuillez vous connecter avec votre compte Discord pour accéder aux archives.

+ + Se connecter avec Discord + +
+ + `); +}); + +app.get('/auth/discord', (req, res, next) => { + if (!discordStrategyConfigured) return res.send('Erreur configuration OAuth'); + passport.authenticate('discord')(req, res, next); +}); + +app.get('/auth/discord/callback', + (req, res, next) => { + if (!discordStrategyConfigured) return res.redirect('/login?error=not_configured'); + passport.authenticate('discord', { failureRedirect: '/login?error=auth_failed' })(req, res, next); + }, + (req, res) => res.redirect('/') +); + +app.get('/auth/logout', (req, res) => { + req.logout(() => res.redirect('/login')); +}); + +app.use('/static', express.static(path.join(__dirname, 'public'))); + +// --- FIX CSS: Route explicite avec Header --- +app.get('*/transcript.css', (req, res) => { + res.setHeader('Content-Type', 'text/css'); + res.sendFile(path.join(process.cwd(), 'transcripts', 'transcript.css')); +}); + +app.get(['/tickets/*', '/transcripts/*'], isAuthenticated, hasPermission, (req, res) => { + const filePath = req.params[0]; + const fullPath = path.join(process.cwd(), 'transcripts', filePath); + if (!fs.existsSync(fullPath)) return res.status(404).send('Transcript introuvable.'); + res.sendFile(fullPath); +}); + +app.get('/', isAuthenticated, async (req, res) => { + try { + const userId = req.user.id; + const isMod = isModerator(req.user); + + let stats = {}; + let userTickets = []; + let allTickets = []; + + if (isMod) { + const [totalStats] = await db.query('SELECT COUNT(*) as total FROM tickets'); + const [myTicketsStats] = await db.query('SELECT COUNT(*) as total FROM tickets WHERE claimedBy = ?', [userId]); + const [openStats] = await db.query('SELECT COUNT(*) as total FROM tickets WHERE status = ?', ['Ouvert']); + const [closedStats] = await db.query('SELECT COUNT(*) as total FROM tickets WHERE status = ?', ['Fermé']); + + stats = { + totalTickets: totalStats[0].total, + myTickets: myTicketsStats[0].total, + openTickets: openStats[0].total, + closedTickets: closedStats[0].total + }; + + [userTickets] = await db.query('SELECT * FROM tickets WHERE claimedBy = ? AND transcriptPath IS NOT NULL ORDER BY createdAt DESC LIMIT 10', [userId]); + [allTickets] = await db.query('SELECT * FROM tickets WHERE transcriptPath IS NOT NULL ORDER BY createdAt DESC LIMIT 10', []); + } else { + [userTickets] = await db.query('SELECT * FROM tickets WHERE userId = ? AND transcriptPath IS NOT NULL ORDER BY createdAt DESC LIMIT 20', [userId]); + } + + res.send(generateDashboardHTML(req.user, stats, userTickets, allTickets, isMod)); + } catch (err) { + console.error('Erreur dashboard:', err); + res.status(500).send('Erreur serveur.'); + } +}); + +app.get('/transcripts', isAuthenticated, async (req, res) => { + if (!isModerator(req.user)) return res.status(403).send('Accès refusé.'); + + try { + const [allTickets] = await db.query('SELECT * FROM tickets WHERE transcriptPath IS NOT NULL ORDER BY createdAt DESC', []); + res.send(generateTranscriptsPageHTML(req.user, allTickets)); + } catch (err) { + console.error('Erreur transcripts:', err); + res.status(500).send('Erreur serveur.'); + } +}); + +app.listen(PORT, () => { + console.log(`🌐 Serveur de transcripts démarré sur le port ${PORT}`); + console.log('--- STRUCTURE DES FICHIERS ---'); + printTree(path.join(__dirname, 'public'), 'server/public'); + printTree(path.join(process.cwd(), 'transcripts'), 'transcripts'); + console.log('------------------------------'); +}); \ No newline at end of file diff --git a/transcripts/plainte/2026-02-08/2026-02-08-syxpi-PLNT-MLDPB8OF-ZM86.html b/transcripts/plainte/2026-02-08/2026-02-08-syxpi-PLNT-MLDPB8OF-ZM86.html new file mode 100644 index 0000000..e0c3207 --- /dev/null +++ b/transcripts/plainte/2026-02-08/2026-02-08-syxpi-PLNT-MLDPB8OF-ZM86.html @@ -0,0 +1,55 @@ + + + + + + Transcription - PLNT-MLDPB8OF-ZM86 + + + +
+
+

📢 Transcription du Ticket

+
PLNT-MLDPB8OF-ZM86
+
+ +
+
+
+
Type
+
📢 Plainte
+
+
+
Créé par
+
syxpi
+
+
+
Créé le
+
08/02/2026
+
+
+
Statut
+
+ + Ouvert + +
+
+ +
+
+ +
+

💬 Messages

+

Aucun message enregistré.

+
+ + + + +
+ + \ No newline at end of file diff --git a/transcripts/problème-technique/2026-02-08/2026-02-08-syxpi-TECH-MLDPXDZJ-8KNS.html b/transcripts/problème-technique/2026-02-08/2026-02-08-syxpi-TECH-MLDPXDZJ-8KNS.html new file mode 100644 index 0000000..37f4df2 --- /dev/null +++ b/transcripts/problème-technique/2026-02-08/2026-02-08-syxpi-TECH-MLDPXDZJ-8KNS.html @@ -0,0 +1,55 @@ + + + + + + Transcription - TECH-MLDPXDZJ-8KNS + + + +
+
+

🔧 Transcription du Ticket

+
TECH-MLDPXDZJ-8KNS
+
+ +
+
+
+
Type
+
🔧 Problème Technique
+
+
+
Créé par
+
syxpi
+
+
+
Créé le
+
08/02/2026
+
+
+
Statut
+
+ + Ouvert + +
+
+ +
+
+ +
+

💬 Messages

+

Aucun message enregistré.

+
+ + + + +
+ + \ No newline at end of file diff --git a/transcripts/transcript.css b/transcripts/transcript.css new file mode 100644 index 0000000..d568ece --- /dev/null +++ b/transcripts/transcript.css @@ -0,0 +1,274 @@ +@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap'); + +:root { + --bg-body: #0f172a; /* Slate 900 */ + --bg-card: #1e293b; /* Slate 800 */ + --bg-element: #334155; /* Slate 700 */ + --text-primary: #f8fafc; /* Slate 50 */ + --text-secondary: #94a3b8;/* Slate 400 */ + --accent: #6366f1; /* Indigo 500 */ + --accent-glow: rgba(99, 102, 241, 0.15); + --border: #475569; /* Slate 600 */ + + --success: #10b981; + --danger: #ef4444; + --warning: #f59e0b; + --info: #3b82f6; +} + +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +body { + font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; + background-color: var(--bg-body); + color: var(--text-primary); + line-height: 1.6; + padding: 40px 20px; +} + +.container { + max-width: 1000px; + margin: 0 auto; + background: var(--bg-card); + border-radius: 16px; + box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.5); + border: 1px solid var(--border); + overflow: hidden; +} + +/* --- HEADER --- */ +.header { + background: linear-gradient(135deg, #6366f1 0%, #8b5cf6 100%); + padding: 40px; + text-align: center; + border-bottom: 1px solid var(--border); +} + +.header h1 { + font-size: 2rem; + font-weight: 700; + color: white; + margin-bottom: 8px; + letter-spacing: -0.025em; +} + +.header .ticket-id { + font-family: 'Courier New', monospace; + background: rgba(0, 0, 0, 0.2); + padding: 4px 12px; + border-radius: 999px; + display: inline-block; + font-size: 0.9rem; + color: rgba(255, 255, 255, 0.9); +} + +/* --- INFO SECTION --- */ +.info-section { + padding: 30px; + background: rgba(15, 23, 42, 0.3); + border-bottom: 1px solid var(--border); +} + +.info-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); + gap: 20px; +} + +.info-item { + background: var(--bg-element); + padding: 15px 20px; + border-radius: 12px; + border: 1px solid rgba(255, 255, 255, 0.05); +} + +.info-label { + font-size: 0.75rem; + text-transform: uppercase; + letter-spacing: 0.05em; + color: var(--text-secondary); + font-weight: 600; + margin-bottom: 6px; +} + +.info-value { + font-size: 1rem; + font-weight: 500; + color: var(--text-primary); +} + +.status-badge { + display: inline-block; + padding: 4px 12px; + border-radius: 999px; + font-size: 0.85rem; + font-weight: 600; +} + +/* --- MESSAGES --- */ +.messages-section { + padding: 30px; +} + +.messages-section h2 { + font-size: 1.25rem; + margin-bottom: 25px; + color: var(--text-primary); + display: flex; + align-items: center; + gap: 10px; +} + +.messages-section h2::before { + content: ''; + display: block; + width: 4px; + height: 24px; + background: var(--accent); + border-radius: 2px; +} + +.message { + margin-bottom: 20px; + padding: 15px; + border-radius: 12px; + background: transparent; + border: 1px solid transparent; + transition: background 0.2s; +} + +.message:hover { + background: rgba(255, 255, 255, 0.02); + border-color: rgba(255, 255, 255, 0.05); +} + +.message-header { + display: flex; + align-items: baseline; + gap: 10px; + margin-bottom: 6px; +} + +.message-author { + font-weight: 600; + color: var(--accent); + font-size: 1rem; +} + +.message-date { + font-size: 0.75rem; + color: var(--text-secondary); +} + +.message-content { + color: #cbd5e1; + font-size: 0.95rem; + white-space: pre-wrap; + word-wrap: break-word; +} + +/* Pièces jointes */ +.attachments { + margin-top: 10px; + padding: 10px; + background: rgba(0, 0, 0, 0.2); + border-radius: 8px; + font-size: 0.9rem; +} + +.attachments a { + color: var(--info); + text-decoration: none; +} + +.attachments a:hover { + text-decoration: underline; +} + +/* --- CANDIDATURE --- */ +.candidature-section { + padding: 30px; + background: rgba(99, 102, 241, 0.05); + border-top: 1px solid var(--border); +} + +.candidature-section h2 { + color: var(--accent); + margin-bottom: 20px; +} + +.question-item { + background: var(--bg-element); + padding: 20px; + border-radius: 12px; + margin-bottom: 15px; + border: 1px solid var(--border); +} + +.question-label { + color: var(--accent); + font-size: 0.85rem; + font-weight: 700; + text-transform: uppercase; + margin-bottom: 5px; +} + +.question-text { + font-weight: 600; + color: var(--text-primary); + margin-bottom: 12px; +} + +.response { + background: rgba(0, 0, 0, 0.2); + padding: 15px; + border-radius: 8px; + color: #cbd5e1; + border-left: 3px solid var(--success); +} + +/* --- FOOTER --- */ +.footer { + padding: 20px; + text-align: center; + border-top: 1px solid var(--border); + background: rgba(15, 23, 42, 0.3); + color: var(--text-secondary); + font-size: 0.85rem; +} + +.no-messages { + text-align: center; + padding: 40px; + color: var(--text-secondary); + font-style: italic; + background: rgba(255, 255, 255, 0.02); + border-radius: 12px; +} + +/* Scrollbar */ +::-webkit-scrollbar { + width: 8px; +} +::-webkit-scrollbar-track { + background: var(--bg-body); +} +::-webkit-scrollbar-thumb { + background: var(--bg-element); + border-radius: 4px; +} +::-webkit-scrollbar-thumb:hover { + background: var(--border); +} + +/* Mobile */ +@media (max-width: 768px) { + body { padding: 10px; } + .header { padding: 20px; } + .header h1 { font-size: 1.5rem; } + .info-grid { grid-template-columns: 1fr; } +} \ No newline at end of file diff --git a/utils/constants.js b/utils/constants.js new file mode 100644 index 0000000..885e2ba --- /dev/null +++ b/utils/constants.js @@ -0,0 +1,70 @@ +module.exports = { + // Couleurs pour les embeds (Discord Brand Colors + Custom) + colors: { + // Couleurs principales + primary: '#5865F2', // Discord Blurple + success: '#57F287', // Discord Green + error: '#ED4245', // Discord Red + warning: '#FEE75C', // Discord Yellow + info: '#5865F2', // Discord Blurple + + // Couleurs de modération + moderation: '#ED4245', + ban: '#ED4245', + unban: '#57F287', + kick: '#FEE75C', + warn: '#FEE75C', + mute: '#FFA500', + unmute: '#57F287', + timeout: '#FF6B6B', + + // Couleurs spéciales + xp: '#9B59B6', // Purple pour XP + info: '#3498DB', // Blue pour info + utility: '#1ABC9C', // Turquoise pour utility + dev: '#E74C3C', // Red pour dev + }, + + // Emojis pour les embeds + emojis: { + // Statuts + success: '✅', + error: '❌', + warning: '⚠️', + info: 'ℹ️', + + // Modération + ban: '🔨', + unban: '🔓', + kick: '👢', + warn: '⚠️', + mute: '🔇', + unmute: '🔊', + timeout: '⏱️', + + // XP & Niveaux + level: '⭐', + xp: '💎', + rank: '🏆', + leaderboard: '📊', + + // Informations + user: '👤', + server: '🖥️', + avatar: '🖼️', + profile: '📋', + + // Utilitaires + ping: '🏓', + help: '📚', + settings: '⚙️', + + // Autres + calendar: '📅', + clock: '⏰', + id: '🆔', + reason: '📝', + moderator: '👮', + }, +}; + diff --git a/utils/helpers.js b/utils/helpers.js new file mode 100644 index 0000000..b7c155f --- /dev/null +++ b/utils/helpers.js @@ -0,0 +1,103 @@ +const ms = require('ms'); + +/** + * Parse une durée en string (ex: "1h", "2d") en millisecondes + * @param {string} duration - Durée à parser + * @returns {number|null} - Durée en millisecondes ou null si invalide + */ +function parseDuration(duration) { + if (!duration) return null; + try { + return ms(duration); + } catch { + return null; + } +} + +/** + * Formate une durée en millisecondes en string lisible + * @param {number} ms - Durée en millisecondes + * @returns {string} - Durée formatée + */ +function formatDuration(ms) { + if (!ms || ms < 0) return 'Permanent'; + const seconds = Math.floor(ms / 1000) % 60; + const minutes = Math.floor(ms / (1000 * 60)) % 60; + const hours = Math.floor(ms / (1000 * 60 * 60)) % 24; + const days = Math.floor(ms / (1000 * 60 * 60 * 24)); + const months = Math.floor(ms / (1000 * 60 * 60 * 24 * 30)); + const years = Math.floor(ms / (1000 * 60 * 60 * 24 * 365)); + + if (years) return `${years} Année${years > 1 ? 's' : ''}`; + if (months) return `${months} Mois`; + if (days) return `${days} Jour${days > 1 ? 's' : ''}`; + if (hours) return `${hours} Heure${hours > 1 ? 's' : ''}`; + if (minutes) return `${minutes} Minute${minutes > 1 ? 's' : ''}`; + if (seconds) return `${seconds} Seconde${seconds > 1 ? 's' : ''}`; + return 'Instantané'; +} + +/** + * Formate l'uptime en string lisible + * @param {number} seconds - Uptime en secondes + * @returns {string} - Uptime formaté + */ +function formatUptime(seconds) { + const days = Math.floor(seconds / 86400); + const hours = Math.floor((seconds % 86400) / 3600); + const minutes = Math.floor((seconds % 3600) / 60); + const secs = Math.floor(seconds % 60); + + if (days > 0) return `${days}j ${hours}h ${minutes}m ${secs}s`; + if (hours > 0) return `${hours}h ${minutes}m ${secs}s`; + if (minutes > 0) return `${minutes}m ${secs}s`; + return `${secs}s`; +} + +/** + * Trouve un canal de logs dans une guild avec vérification des permissions + * @param {Guild} guild - La guild Discord + * @returns {TextChannel|null} - Le canal de logs ou null + */ +function findLogChannel(guild) { + const logChannel = guild.channels.cache.find(ch => ch.name === 'logs' && ch.isTextBased()); + if (!logChannel) return null; + + // Vérifier que le bot a les permissions pour envoyer des messages + const botMember = guild.members.me; + if (!botMember) return null; + + const permissions = logChannel.permissionsFor(botMember); + if (!permissions || !permissions.has(['ViewChannel', 'SendMessages', 'EmbedLinks'])) { + return null; + } + + return logChannel; +} + +/** + * Envoie un log dans le canal de logs de manière sécurisée + * @param {Guild} guild - La guild Discord + * @param {Object} embedData - Les données de l'embed à envoyer + * @returns {Promise} - true si envoyé, false sinon + */ +async function sendLog(guild, embedData) { + const logChannel = findLogChannel(guild); + if (!logChannel) return false; + + try { + await logChannel.send(embedData); + return true; + } catch (err) { + console.warn('⚠️ Impossible d\'envoyer le log dans le canal de logs:', err.message); + return false; + } +} + +module.exports = { + parseDuration, + formatDuration, + formatUptime, + sendLog, +}; +