diff --git a/.env b/.env
index a3fe365..7106445 100644
--- a/.env
+++ b/.env
@@ -1,16 +1,6 @@
-# --- Discord ---
-TOKEN=-
+TOKEN=MTQ1MjQxMzYyMjczODM1ODMyMw.GRRuIh.Cm--nT3CJuGgGZZoq8-70mL9GPMVlMFUzgDzGs
CLIENT_ID=1452413622738358323
GUILD_ID=1452413993841856544
-CLIENT_SECRET=-
-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='-'
-DB_NAME=bot
-
-# --- Autres ---
-MODERATOR_IDS=361526553940721684,1013868393218183268
\ No newline at end of file
+MODERATOR_IDS=361526553940721684,1013868393218183268
+CLIENT_SECRET=hNpxmzNWwVaRGCYVquKNGuNi7Z6CnX7t
+DISCORD_CALLBACK_URL=http://localhost:3000/auth/discord/callback
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index 2d7ec5c..34f9770 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,4 @@
+config.json
+transcripts/
.env
node_modules/
diff --git a/.idea/dataSources.xml b/.idea/dataSources.xml
index 3e0e071..9fb3f76 100644
--- a/.idea/dataSources.xml
+++ b/.idea/dataSources.xml
@@ -1,13 +1,27 @@
-
- mysql.8
+
+ sqlite.xerial
true
- true
- com.mysql.cj.jdbc.Driver
- jdbc:mysql://192.168.1.6:3306
+ org.sqlite.JDBC
+ jdbc:sqlite:bans.db
$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 7476762..e0aa78a 100644
--- a/.idea/data_source_mapping.xml
+++ b/.idea/data_source_mapping.xml
@@ -1,21 +1,7 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
\ No newline at end of file
diff --git a/.idea/femboy-france-bot.iml b/.idea/femboy-france-bot.iml
index 9f7ba11..24643cc 100644
--- a/.idea/femboy-france-bot.iml
+++ b/.idea/femboy-france-bot.iml
@@ -8,6 +8,5 @@
-
\ No newline at end of file
diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml
index 3ed4fe9..0de88a0 100644
--- a/.idea/inspectionProfiles/Project_Default.xml
+++ b/.idea/inspectionProfiles/Project_Default.xml
@@ -1,11 +1,7 @@
-
-
-
-
\ No newline at end of file
diff --git a/.idea/jsLibraryMappings.xml b/.idea/jsLibraryMappings.xml
index 544bde3..d23208f 100644
--- a/.idea/jsLibraryMappings.xml
+++ b/.idea/jsLibraryMappings.xml
@@ -1,7 +1,6 @@
-
\ No newline at end of file
diff --git a/.idea/sqldialects.xml b/.idea/sqldialects.xml
index 3c53f80..479ef58 100644
--- a/.idea/sqldialects.xml
+++ b/.idea/sqldialects.xml
@@ -1,14 +1,12 @@
-
-
-
+
+
+
-
-
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..94a25f7
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/README.md b/README.md
index 57cb757..f544e00 100644
--- a/README.md
+++ b/README.md
@@ -1,90 +1,3 @@
-# 🥐 Femboy Croissant Bot
+Temps de Projet Femboy-France-Bot (Ancien nom): [](https://wakatime.com/badge/user/82e1aed9-c281-4a7b-9909-1dfb8022b027/project/30e19ddc-4559-496e-8632-68eebdbc5450)
-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
+Temps de Projet France-Femboy-Bot (Actuel): [](https://wakatime.com/badge/user/82e1aed9-c281-4a7b-9909-1dfb8022b027/project/e30f3a7a-bda3-4fcf-9580-e57b6463ccab)
diff --git a/VERIFIED.md b/VERIFIED.md
deleted file mode 100644
index 77f13fa..0000000
--- a/VERIFIED.md
+++ /dev/null
@@ -1,94 +0,0 @@
-# É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 (Disabled)` : 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 0fcef7e..4b416ba 100644
--- a/commands/dev/infra.js
+++ b/commands/dev/infra.js
@@ -2,53 +2,59 @@ const os = require('os');
const fs = require('fs');
const { SlashCommandBuilder, EmbedBuilder, PermissionFlagsBits } = require('discord.js');
const { formatUptime } = require('../../utils/helpers');
-const { colors } = require('../../utils/constants');
function getOS() {
- const platform = os.platform();
- const release = os.release();
- switch (platform) {
- case 'win32': return `Windows ${release}`;
- case 'darwin': return `macOS ${release}`;
- case 'linux':
- try {
- 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}`;
- }
+ const platform = os.platform();
+ const release = os.release();
+ switch (platform) {
+ case 'win32':
+ return `Windows ${release}`;
+ case 'darwin':
+ return `macOS ${release}`;
+ case 'linux':
+ try {
+ 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}`;
+ }
}
module.exports = {
- category: 'dev',
- data: new SlashCommandBuilder()
- .setName('infra')
- .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();
+ category: 'dev',
+ data: new SlashCommandBuilder()
+ .setName('infra')
+ .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(colors.info)
- .addFields(
- { 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();
+ const { colors } = require('../../utils/constants');
- await interaction.reply({ embeds: [embed] });
- },
-};
\ No newline at end of file
+ const embed = new EmbedBuilder()
+ .setTitle('🖥️ Infrastructure du Bot')
+ .setColor(colors.info)
+ .addFields(
+ { 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] });
+ },
+};
diff --git a/commands/dev/reload.js b/commands/dev/reload.js
index fffdab2..d9cd11b 100644
--- a/commands/dev/reload.js
+++ b/commands/dev/reload.js
@@ -1,40 +1,36 @@
-const { SlashCommandBuilder, PermissionFlagsBits, MessageFlags } = require('discord.js');
+const { SlashCommandBuilder, PermissionFlagsBits } = require('discord.js');
module.exports = {
- category: 'dev',
- data: new SlashCommandBuilder()
- .setName('reload')
- .setDescription('Recharge une commande.')
- .setDefaultMemberPermissions(PermissionFlagsBits.Administrator)
- .addStringOption(option =>
- option.setName('command')
- .setDescription('La commande à recharger.')
- .setRequired(true)),
- async execute(interaction) {
- if (!interaction.member.permissions.has(PermissionFlagsBits.Administrator)) {
- return interaction.reply({ content: '❌ Seuls les administrateurs peuvent utiliser cette commande.', flags: MessageFlags.Ephemeral });
- }
+ category: 'dev',
+ data: new SlashCommandBuilder()
+ .setName('reload')
+ .setDescription('Recharge une commande.')
+ .setDefaultMemberPermissions(PermissionFlagsBits.Administrator)
+ .addStringOption(option =>
+ option.setName('command')
+ .setDescription('La commande à recharger.')
+ .setRequired(true)),
+ async execute(interaction) {
+ if (!interaction.member.permissions.has(PermissionFlagsBits.Administrator)) {
+ return interaction.reply({ content: '❌ Seuls les administrateurs peuvent utiliser cette commande.', ephemeral: true });
+ }
- const commandName = interaction.options.getString('command', true).toLowerCase();
- const command = interaction.client.commands.get(commandName);
+ const commandName = interaction.options.getString('command', true).toLowerCase();
+ const command = interaction.client.commands.get(commandName);
- if (!command) {
- return interaction.reply({ content: `❌ Aucune commande nommée \`${commandName}\` n'a été trouvée !`, flags: MessageFlags.Ephemeral });
- }
+ if (!command) {
+ return interaction.reply({ content: `❌ Aucune commande nommée \`${commandName}\` n'a été trouvée !`, ephemeral: true });
+ }
- try {
- // Supprimer du cache
- const commandPath = `../${command.category}/${command.data.name}.js`;
- delete require.cache[require.resolve(commandPath)];
+ delete require.cache[require.resolve(`../${command.category}/${command.data.name}.js`)];
- // Recharger
- const newCommand = require(commandPath);
- interaction.client.commands.set(newCommand.data.name, newCommand);
-
- 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: `❌ Erreur lors du rechargement de \`${command.data.name}\`:\n\`${error.message}\``, flags: MessageFlags.Ephemeral });
- }
- },
-};
\ No newline at end of file
+ try {
+ const newCommand = require(`../${command.category}/${command.data.name}.js`);
+ interaction.client.commands.set(newCommand.data.name, newCommand);
+ await interaction.reply({ content: `✅ Commande \`${newCommand.data.name}\` rechargée avec succès !`, ephemeral: true });
+ } catch (error) {
+ console.error(error);
+ await interaction.reply({ content: `❌ Erreur lors du rechargement de \`${command.data.name}\`:\n\`${error.message}\``, ephemeral: true });
+ }
+ },
+};
diff --git a/commands/info/adminprofil.js b/commands/info/adminprofil.js
index 1105bd3..4b44235 100644
--- a/commands/info/adminprofil.js
+++ b/commands/info/adminprofil.js
@@ -1,119 +1,133 @@
-const { SlashCommandBuilder, EmbedBuilder, PermissionFlagsBits, MessageFlags } = require('discord.js');
+const { SlashCommandBuilder, EmbedBuilder, PermissionFlagsBits } = 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: 'Femboy Croissant 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
+ 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({ ephemeral: true });
+
+ // Vérifier les permissions (Admin uniquement)
+ 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 {
+ // Récupérer le profil actuel
+ 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.`
+ });
+ }
+
+ const profile = profiles[0];
+
+ if (resetType === 'signature') {
+ // Réinitialiser uniquement la 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') {
+ // Réinitialiser tout le profil
+ 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] });
+ }
+
+ // Logger l'action
+ 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, logEmbed);
+
+ } catch (err) {
+ console.error('Erreur lors de la réinitialisation du profil:', err);
+ await interaction.editReply({
+ content: `❌ Erreur lors de la réinitialisation du profil: ${err.message}`
+ });
+ }
+ }
+ },
+};
+
diff --git a/commands/info/embed.js b/commands/info/embed.js
index e1fca46..e923b5f 100644
--- a/commands/info/embed.js
+++ b/commands/info/embed.js
@@ -1,43 +1,45 @@
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');
+ 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);
- }
- }
+ let color = 0x5865F2; // Couleur par défaut (bleu Discord)
+ if (colorInput) {
+ // Parser la couleur hex
+ 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();
+ 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] });
+ },
+};
- await interaction.reply({ embeds: [embed] });
- },
-};
\ No newline at end of file
diff --git a/commands/info/info.js b/commands/info/info.js
index 4269f15..79b6f26 100644
--- a/commands/info/info.js
+++ b/commands/info/info.js
@@ -1,62 +1,65 @@
const { SlashCommandBuilder, EmbedBuilder } = require('discord.js');
const { formatUptime } = require('../../utils/helpers');
-const { colors } = require('../../utils/constants');
module.exports = {
- category: 'info',
- data: new SlashCommandBuilder()
- .setName('info')
- .setDescription('Obtenir les informations du bot'),
- async execute(interaction) {
- const uptime = formatUptime(process.uptime());
+ category: 'info',
+ data: new SlashCommandBuilder()
+ .setName('info')
+ .setDescription('Obtenir les informations du bot'),
+ async execute(interaction) {
+ const { colors, emojis } = require('../../utils/constants');
+ const uptime = formatUptime(process.uptime());
+
+ const embed = new EmbedBuilder()
+ .setAuthor({
+ name: `${interaction.client.user.username}`,
+ iconURL: interaction.client.user.displayAvatarURL()
+ })
+ .setTitle('📝 Informations du Bot')
+ .setColor(colors.info)
+ .setThumbnail(interaction.client.user.displayAvatarURL({ dynamic: true, size: 256 }))
+ .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.21.0',
+ '• **Librairies :** <:DiscordJS:1425179852536938670> Discord.js v14.22.1',
+ '• **IDE :** <:WebStorm:1429190717066055841> JetBrains WebStorm 2025.2.3',
+ ].join('\n'),
+ inline: false
+ },
+ {
+ name: '💡 Date de création',
+ value: '20 Août 2025',
+ inline: true
+ },
+ {
+ name: '⏱️ Uptime',
+ value: uptime,
+ inline: true
+ },
+ {
+ name: '📊 Statistiques',
+ value: [
+ `• **Serveurs :** ${interaction.client.guilds.cache.size}`,
+ `• **Utilisateurs :** ${interaction.client.guilds.cache.reduce((acc, guild) => acc + guild.memberCount, 0)}`,
+ `• **Commandes :** ${interaction.client.commands.size}`,
+ ].join('\n'),
+ inline: false
+ }
+ )
+ .setFooter({
+ text: `${interaction.guild.name} • Made with love by Syxpi 💞`,
+ iconURL: interaction.client.user.displayAvatarURL()
+ })
+ .setTimestamp();
- const embed = new EmbedBuilder()
- .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: `Femboy Croissant Bot • Développé avec passion par Lumi 💞`,
- iconURL: interaction.client.user.displayAvatarURL()
- })
- .setTimestamp();
-
- await interaction.reply({embeds: [embed]});
- },
-};
\ No newline at end of file
+ await interaction.reply({ embeds: [embed] });
+ },
+};
diff --git a/commands/info/profil.js b/commands/info/profil.js
index a0d9855..e730db6 100644
--- a/commands/info/profil.js
+++ b/commands/info/profil.js
@@ -1,334 +1,579 @@
-const { SlashCommandBuilder, EmbedBuilder, MessageFlags } = require('discord.js');
+const { SlashCommandBuilder, EmbedBuilder, PermissionFlagsBits } = require('discord.js');
const db = require('../../functions/database/db.js');
-const { getUserXP, getUserRank } = require('../../functions/xp/xp.js');
+const { getUserXP } = require('../../functions/xp/xp.js');
const { colors } = require('../../utils/constants');
+// Mapping des emojis personnalisés pour les badges Discord
+// Format: <:nom_emoji:ID>
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>',
+ // Badges généraux (utiliser des emojis Unicode par défaut si pas d'emoji personnalisé fourni)
+ 'staff': '👨💼', // Discord Staff (pas d'emoji fourni dans la liste)
+ 'partner': '<:discord_partener:1437046788916904097>', // Partner
+ 'hypesquad': '<:hypesquad_balance:1437046792922464337>', // HypeSquad (générique - utiliser Balance)
+ 'hypesquad_bravery': '<:hypesquad_bravery:1437046793899872467>', // HypeSquad Bravery
+ 'hypesquad_brilliance': '<:hypesquad_brilliance:1437046794868756550>', // HypeSquad Brilliance
+ 'hypesquad_balance': '<:hypesquad_balance:1437046792922464337>', // HypeSquad Balance
+ 'hypesquad_events': '<:hypesquad_events:1437046795778920448>', // HypeSquad Events
+ 'early_supporter': '<:early_supporter:1437046790087250071>', // Early Supporter
+ 'bug_hunter_level_1': '🐛', // Bug Hunter (pas d'emoji fourni)
+ 'bug_hunter_level_2': '🐛', // Bug Hunter Gold (pas d'emoji fourni)
+ 'verified_developer': '✅', // Verified Bot Developer (pas d'emoji fourni)
+ 'active_developer': '<:active_developer:1437049369936531587>', // Active Developer
+ 'certified_moderator': '🛡️', // Certified Moderator (pas d'emoji fourni)
+ 'bot_http_interactions': '🤖', // Bot HTTP Interactions (pas d'emoji fourni)
+
+ // Badges Quests
+ 'quests': '<:quests:1437046809464934492>', // Quests
+ 'slash_commands': '<:slash_commands:1437046810458984553>', // Slash Commands
+
+ // Badges Orbs
+ 'orbs': '<:orbs:1437046808185540628>', // Orbs
+
+ // Badges Nitro (par durée)
+ 'nitro': '<:nitro:1437046796810715136>', // Nitro (base)
+ 'nitro_1_month': '<:nitro_1_month:1437046798685442241>', // Nitro 1 mois
+ 'nitro_3_months': '<:nitro_3_months:1437046801550278757>', // Nitro 3 mois
+ 'nitro_6_months': '<:nitro_6_months:1437046805102723143>', // Nitro 6 mois
+ 'nitro_1_year': '<:nitro_1_year:1437046799515783198>', // Nitro 1 an
+ 'nitro_2_years': '<:nitro_2_years:1437046800522416138>', // Nitro 2 ans
+ 'nitro_3_years': '<:nitro_3_years:1437046802519035924>', // Nitro 3 ans (Émeraude)
+ 'nitro_5_years': '<:nitro_5_years:1437046803747967016>', // Nitro 5 ans
+ 'nitro_6_years': '<:nitro_6_years:1437046806747021514>', // Nitro 6 ans
+
+ // Badges Boost (par durée)
+ 'boost': '<:boost:1437046778083016745>', // Boost (base)
+ 'boost_2_months': '<:boost_2_months:1437046780322779266>', // Boost 2 mois
+ 'boost_3_months': '<:boost_3_months:1437046781375414383>', // Boost 3 mois
+ 'boost_6_months': '<:boost_6_months:1437046782247829616>', // Boost 6 mois
+ 'boost_9_months': '<:boost_9_months:1437046783070044200>', // Boost 9 mois
+ 'boost_12_months': '<:boost_12_months:1437046784445644930>', // Boost 12 mois
+ 'boost_15_months': '<:boost_15_months:1437046785402081281>', // Boost 15 mois
+ 'boost_18_months': '<:boost_18_months:1437046786643722342>', // Boost 18 mois
+ 'boost_24_months': '<:boost_24_months:1437046787667136612>', // Boost 24 mois
};
+// Fonction pour obtenir les badges Discord d'un utilisateur (emojis personnalisés)
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)];
+ const badgeEmojis = [];
+
+ // Badges de compte - utiliser toArray() qui retourne les noms des flags
+ if (user.flags) {
+ try {
+ const flagsArray = user.flags.toArray();
+
+ // Mapping des flags Discord.js vers les noms de badges
+ 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',
+ };
+
+ // Note: Les logs de debug sont commentés pour réduire le bruit dans les logs
+ // Décommenter si besoin de debugger les flags
+
+ // Vérifier chaque flag présent et ajouter l'emoji
+ for (const flag of flagsArray) {
+ const flagLower = flag.toLowerCase();
+ const badgeKey = flagToBadgeMap[flag];
+
+ // Si le flag est dans le mapping direct, l'utiliser
+ if (badgeKey && BADGE_EMOJIS[badgeKey]) {
+ badgeEmojis.push(BADGE_EMOJIS[badgeKey]);
+ continue;
+ }
+
+ // Recherche flexible pour les badges avec durées
+ // Badges Nitro avec durées (les noms peuvent varier dans Discord.js)
+ if (flagLower.includes('nitro')) {
+ // Essayer de détecter la durée exacte
+ 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 {
+ // Badge Nitro de base (sans durée spécifique)
+ badgeEmojis.push(BADGE_EMOJIS.nitro);
+ }
+ }
+ // Badges Boost avec durées (les badges Boost personnels, pas le boost serveur)
+ // Les badges Boost sont basés sur la durée totale de boost sur TOUS les serveurs
+ else if (flagLower.includes('boost') && !flagLower.includes('server')) {
+ // Détecter la durée exacte en vérifiant les nombres dans le flag
+ // Les flags peuvent être: PremiumGuildSubscription, PremiumGuildSubscriptionTier1, etc.
+ // ou des flags spécifiques comme "PremiumGuildSubscription24Months"
+
+ // Vérifier d'abord les durées les plus longues (pour éviter les fausses détections)
+ 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 {
+ // Badge Boost de base (sans durée spécifique)
+ badgeEmojis.push(BADGE_EMOJIS.boost);
+ }
+ }
+ // Autres badges
+ 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);
+ }
+ // Log pour debugger les flags non mappés (pour les ajouter plus tard)
+ else if (!flagToBadgeMap[flag]) {
+ console.log(`[PROFIL] Flag non mappé détecté: "${flag}" (pour l'utilisateur ${user.id})`);
+ }
+ }
+ } catch (err) {
+ // Si toArray() échoue, ignorer silencieusement
+ console.warn('Erreur lors de la récupération des flags:', err.message);
+ }
+ }
+
+ // Badge Nitro de base (si l'utilisateur a Nitro mais pas les badges spéciaux dans les flags)
+ // Vérifier si un badge Nitro n'a pas déjà été ajouté via les flags
+ const hasNitroBadge = badgeEmojis.some(e =>
+ typeof e === 'string' && (
+ e.includes('nitro') ||
+ e === BADGE_EMOJIS.nitro ||
+ e === BADGE_EMOJIS.nitro_1_month ||
+ e === BADGE_EMOJIS.nitro_3_months ||
+ e === BADGE_EMOJIS.nitro_6_months ||
+ e === BADGE_EMOJIS.nitro_1_year ||
+ e === BADGE_EMOJIS.nitro_2_years ||
+ e === BADGE_EMOJIS.nitro_3_years ||
+ e === BADGE_EMOJIS.nitro_5_years ||
+ e === BADGE_EMOJIS.nitro_6_years
+ )
+ );
+
+ // IMPORTANT: Les badges Nitro avec durée (Émeraude 3 ans, Boost 18 mois, etc.) ne sont PAS
+ // accessibles via l'API Discord.js dans les flags utilisateur standard.
+ // Ces badges sont visibles côté client Discord mais ne sont pas exposés via l'API du bot.
+ //
+ // LIMITATION DE L'API DISCORD.JS :
+ // - premiumType : Méthode la plus fiable, mais souvent undefined même pour les utilisateurs Nitro
+ // - banner : Nécessite généralement Nitro, mais peut être présent sans Nitro dans certains cas
+ // - accentColor : Nécessite généralement Nitro, mais peut être présent sans Nitro dans certains cas
+ // - avatar animé : Nécessite généralement Nitro, mais peut être présent sans Nitro dans certains cas
+ //
+ // SOLUTION : Détection multi-niveaux pour équilibrer précision et détection
+ // Niveau 1 (preuve définitive) : premiumType défini ET != 0 → Nitro confirmé
+ // - premiumType 1 = NitroClassic
+ // - premiumType 2 = Nitro
+ // - premiumType 3 = NitroBasic
+ // - premiumType 0 = None (pas de Nitro)
+ // Niveau 2 (très probable) : banner présent → très probablement Nitro
+ // Niveau 3 (probable) : avatar animé ET accentColor → probablement Nitro (mais moins fiable)
+ //
+ // NOTE IMPORTANTE : accentColor seul n'est PAS utilisé car il peut être présent sans Nitro
+ // Mais accentColor + avatar animé ensemble = probablement Nitro (moins fiable que banner)
+ //
+ // Référence: https://discord-api-types.dev/api/discord-api-types-v10/enum/UserPremiumType
+
+ // Vérifier les indicateurs
+ // premiumType peut être 0 (None), 1 (NitroClassic), 2 (Nitro), ou 3 (NitroBasic)
+ // On vérifie que premiumType est défini ET différent de 0
+ const hasPremiumType = user.premiumType !== null &&
+ user.premiumType !== undefined &&
+ user.premiumType !== 0;
+ const hasBanner = user.banner !== null && user.banner !== undefined;
+ const hasAccentColor = user.accentColor !== null && user.accentColor !== undefined;
+ const hasAnimatedAvatar = user.avatar && user.avatar.startsWith('a_');
+
+ // Détecter Nitro avec priorité (du plus fiable au moins fiable) :
+ // 1. premiumType défini ET != 0 (preuve définitive) - score 100%
+ // 2. banner présent (très fiable ~99%) - score 99%
+ // 3. avatar animé ET accentColor (probable ~80%) - score 80% (moins fiable mais acceptable)
+ const hasNitro = hasPremiumType ||
+ hasBanner ||
+ (hasAnimatedAvatar && hasAccentColor);
+
+ // Ajouter le badge Nitro de base si on détecte Nitro et qu'il n'y a pas déjà un badge Nitro spécifique
+ if (!hasNitroBadge && hasNitro) {
+ badgeEmojis.push(BADGE_EMOJIS.nitro);
+ }
+
+ // Badge Booster (si le membre boost le serveur)
+ // Note: Les badges Boost avec durée sont basés sur la durée TOTALE de boost sur TOUS les serveurs
+ // et sont détectés via les flags utilisateur. Si aucun badge Boost n'est détecté dans les flags
+ // mais que l'utilisateur boost le serveur actuel, on peut calculer la durée depuis premiumSince
+ // pour afficher le badge approprié (mais ce n'est que pour le serveur actuel, pas la durée totale)
+ if (member && member.premiumSince) {
+ const hasBoostBadge = badgeEmojis.some(e =>
+ typeof e === 'string' && (
+ e.includes('boost') ||
+ e === BADGE_EMOJIS.boost ||
+ e === BADGE_EMOJIS.boost_2_months ||
+ e === BADGE_EMOJIS.boost_3_months ||
+ e === BADGE_EMOJIS.boost_6_months ||
+ e === BADGE_EMOJIS.boost_9_months ||
+ e === BADGE_EMOJIS.boost_12_months ||
+ e === BADGE_EMOJIS.boost_15_months ||
+ e === BADGE_EMOJIS.boost_18_months ||
+ e === BADGE_EMOJIS.boost_24_months
+ )
+ );
+
+ if (!hasBoostBadge) {
+ // Si le membre boost le serveur mais n'a pas de badge Boost dans les flags,
+ // on calcule la durée depuis premiumSince pour afficher le badge approprié
+ // NOTE: Ce n'est que pour le serveur actuel, pas la durée totale sur tous les serveurs
+ const boostDurationMs = Date.now() - member.premiumSince.getTime();
+ const boostDurationMonths = Math.floor(boostDurationMs / (1000 * 60 * 60 * 24 * 30));
+
+ // Déterminer le badge Boost en fonction de la durée (sur ce serveur)
+ let boostBadge = BADGE_EMOJIS.boost; // Badge de base par défaut
+
+ 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);
+ }
+ }
+
+ // Dédupliquer les emojis avant de retourner
+ return [...new Set(badgeEmojis)];
}
+// Fonction pour obtenir le statut Discord en français
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: '⚫' };
- }
+ 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: '🔴' };
+ case 'invisible':
+ case 'offline':
+ 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;
+ 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)))
+ .addSubcommand(subcommand =>
+ subcommand
+ .setName('reset')
+ .setDescription('Réinitialiser ta signature')),
+ async execute(interaction) {
+ const subcommand = interaction.options.getSubcommand();
+
+ if (subcommand === 'view') {
+ await interaction.deferReply();
+
+ const target = interaction.options.getUser('user') || interaction.user;
+ // Fetch l'utilisateur avec toutes les données pour avoir accès à premiumType, banner, accentColor, etc.
+ // Utiliser { force: true } pour forcer le fetch même si l'utilisateur est dans le cache
+ const fetchedUser = await interaction.client.users.fetch(target.id, {
+ force: true,
+ cache: false // Ne pas mettre en cache pour avoir les données les plus récentes
+ }).catch(() => {
+ // Si le fetch échoue, utiliser l'utilisateur du cache
+ console.warn(`[PROFIL] Impossible de fetcher l'utilisateur ${target.id}, utilisation du cache`);
+ return 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 {
+ // Récupérer les données XP
+ const userXP = await getUserXP(target.id, interaction.guild.id);
+
+ // Récupérer le profil utilisateur
+ const [profiles] = await db.query(
+ 'SELECT * FROM user_profiles WHERE userId = ? AND guildId = ?',
+ [target.id, interaction.guild.id]
+ );
+ const profile = profiles[0] || null;
+
+ // Obtenir les badges (emojis seulement)
+ // Utiliser fetchedUser pour avoir accès à premiumType
+ const badgeEmojis = getDiscordBadges(fetchedUser, member);
+ const badgesText = badgeEmojis.length > 0
+ ? badgeEmojis.join(' ')
+ : 'Aucun badge';
+
+ // Obtenir le statut (préserver la présence)
+ const presence = member.presence;
+ const status = getStatusFrench(presence);
+
+ // Calculer l'âge du compte avec date
+ 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 = '';
+ if (accountAgeYears > 0) {
+ accountAgeText = `${accountAgeYears} an${accountAgeYears > 1 ? 's' : ''}`;
+ if (accountAgeMonths > 0) {
+ accountAgeText += ` ${accountAgeMonths} mois`;
+ }
+ } else if (accountAgeMonths > 0) {
+ accountAgeText = `${accountAgeMonths} mois`;
+ if (accountAgeDays > 0) {
+ accountAgeText += ` ${accountAgeDays} jour${accountAgeDays > 1 ? 's' : ''}`;
+ }
+ } else {
+ accountAgeText = `${accountAgeDays} jour${accountAgeDays > 1 ? 's' : ''}`;
+ }
+
+ // Date de création formatée
+ const creationDate = ``;
+ const accountAgeWithDate = `${accountAgeText} (${creationDate})`;
+
+ // Calculer le temps vocal (en minutes)
+ const voiceTimeMinutes = userXP?.totalVoiceTime || 0;
+ const voiceTimeHours = Math.floor(voiceTimeMinutes / 60);
+ const voiceTimeMins = voiceTimeMinutes % 60;
+ const voiceTimeText = voiceTimeHours > 0
+ ? `${voiceTimeHours}h ${voiceTimeMins}min`
+ : `${voiceTimeMins}min`;
+
+ // Calculer le rang (nécessite un await séparé)
+ const { getUserRank } = require('../../functions/xp/xp.js');
+ const rank = userXP ? await getUserRank(target.id, interaction.guild.id) : 0;
+
+ // Statistiques supplémentaires
+ // Nombre de bumps
+ const [bumps] = await db.query(
+ 'SELECT COUNT(*) as count FROM bumps WHERE userId = ? AND guildId = ?',
+ [target.id, interaction.guild.id]
+ );
+ const bumpsCount = bumps[0]?.count || 0;
+
+ // Nombre de bienvenues (depuis les logs XP)
+ 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 welcomeCount = welcomeLogs[0]?.count || 0;
+
+ // Messages totaux (tous les serveurs où le bot est présent)
+ // On récupère la somme de tous les messages de l'utilisateur sur tous les serveurs
+ const [totalMessages] = await db.query(
+ 'SELECT SUM(totalMessages) as total FROM user_xp WHERE userId = ?',
+ [target.id]
+ );
+ const totalMessagesCount = totalMessages[0]?.total || userXP?.totalMessages || 0;
+
+ // Créer l'embed
+ const embed = new EmbedBuilder()
+ .setTitle(`📋 Profil de ${target.username}`)
+ .setColor(colors.primary)
+ .setThumbnail(target.displayAvatarURL({ dynamic: true, size: 256 }))
+ .setDescription(profile?.signature || '*Aucune signature*')
+ .addFields(
+ { name: '🆔 Identifiant', value: `${target.tag} (${target.id})`, inline: false },
+ { name: '🏆 Badges', value: badgesText, inline: false },
+ { name: `${status.emoji} Statut`, value: status.text, inline: true },
+ { name: '📅 Âge du compte', value: accountAgeWithDate, inline: true },
+ { name: '⭐ Niveau', value: `${userXP?.level || 0}`, inline: true },
+ { name: '📊 XP Total', value: `${userXP?.xp || 0} XP`, inline: true },
+ { name: '💬 Messages', value: `${totalMessagesCount}`, inline: true },
+ { name: '🎤 Temps Vocal', value: voiceTimeText, inline: true },
+ { name: '📈 Rang', value: `#${rank}`, inline: true },
+ { name: '🚀 Bumps', value: `${bumpsCount}`, inline: true },
+ { name: '👋 Bienvenues', value: `${welcomeCount}`, inline: true }
+ )
+ .setFooter({ text: interaction.guild.name, iconURL: interaction.guild.iconURL({ dynamic: true }) })
+ .setTimestamp();
+
+ // Ajouter l'âge si disponible (système d'anniversaire)
+ 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--;
+ }
+ embed.addFields({ name: '🎂 Âge', value: `${age} ans`, inline: true });
+ }
+
+ await interaction.editReply({ embeds: [embed] });
+
+ } catch (err) {
+ console.error('Erreur lors de l\'affichage du profil:', err);
+ await interaction.editReply({
+ content: '❌ Erreur lors de l\'affichage du profil.'
+ });
+ }
+
+ } else if (subcommand === 'set') {
+ await interaction.deferReply({ ephemeral: true });
+
+ const signature = interaction.options.getString('signature');
+
+ if (!signature) {
+ return interaction.editReply({
+ content: '❌ Tu dois fournir une signature.'
+ });
+ }
+
+ try {
+ // Vérifier ou créer le profil
+ const [profiles] = await db.query(
+ 'SELECT * FROM user_profiles WHERE userId = ? AND guildId = ?',
+ [interaction.user.id, interaction.guild.id]
+ );
+
+ if (profiles.length > 0) {
+ // Mettre à jour la signature
+ await db.query(
+ 'UPDATE user_profiles SET signature = ?, updatedAt = ? WHERE userId = ? AND guildId = ?',
+ [signature, Date.now(), interaction.user.id, interaction.guild.id]
+ );
+ } else {
+ // Créer le profil
+ await db.query(
+ 'INSERT INTO user_profiles (userId, guildId, signature, updatedAt) VALUES (?, ?, ?, ?)',
+ [interaction.user.id, interaction.guild.id, signature, Date.now()]
+ );
+ }
+
+ const embed = new EmbedBuilder()
+ .setTitle('✅ Signature Modifiée')
+ .setColor(colors.success)
+ .setDescription(`Ta signature a été mise à jour :\n\n${signature}`)
+ .setTimestamp();
+
+ await interaction.editReply({ embeds: [embed] });
+
+ } catch (err) {
+ console.error('Erreur lors de la modification de la signature:', err);
+ await interaction.editReply({
+ content: '❌ Erreur lors de la modification de la signature.'
+ });
+ }
+
+ } else if (subcommand === 'reset') {
+ await interaction.deferReply({ ephemeral: true });
+
+ try {
+ // Vérifier si le profil existe
+ const [profiles] = await db.query(
+ 'SELECT * FROM user_profiles WHERE userId = ? AND guildId = ?',
+ [interaction.user.id, interaction.guild.id]
+ );
+
+ if (profiles.length === 0) {
+ return interaction.editReply({
+ content: '❌ Tu n\'as pas de signature à réinitialiser.'
+ });
+ }
+
+ // Réinitialiser la signature
+ await db.query(
+ 'UPDATE user_profiles SET signature = NULL, updatedAt = ? WHERE userId = ? AND guildId = ?',
+ [Date.now(), interaction.user.id, interaction.guild.id]
+ );
+
+ const embed = new EmbedBuilder()
+ .setTitle('✅ Signature Réinitialisée')
+ .setColor(colors.success)
+ .setDescription('Ta signature a été réinitialisée.')
+ .setTimestamp();
+
+ await interaction.editReply({ embeds: [embed] });
+
+ } catch (err) {
+ console.error('Erreur lors de la réinitialisation de la signature:', err);
+ await interaction.editReply({
+ content: '❌ Erreur lors de la réinitialisation de la signature.'
+ });
+ }
+ }
+ },
+};
- 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
index a850771..c1dd9f6 100644
--- a/commands/info/serverinfo.js
+++ b/commands/info/serverinfo.js
@@ -1,53 +1,47 @@
-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'
-};
+const { SlashCommandBuilder, EmbedBuilder } = require('discord.js');
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();
+ 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();
+ const { colors, emojis } = require('../../utils/constants');
+
+ 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: `\`${guild.verificationLevel}\``, 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.description) {
+ embed.setDescription(guild.description);
+ }
- if (guild.banner) {
- embed.setImage(guild.bannerURL({ dynamic: true, size: 1024 }));
- }
+ if (guild.banner) {
+ embed.setImage(guild.bannerURL({ dynamic: true, size: 1024 }));
+ }
+
+ await interaction.reply({ embeds: [embed] });
+ },
+};
- await interaction.reply({ embeds: [embed] });
- },
-};
\ No newline at end of file
diff --git a/commands/info/userinfo.js b/commands/info/userinfo.js
index 46440fd..8fbabd7 100644
--- a/commands/info/userinfo.js
+++ b/commands/info/userinfo.js
@@ -1,70 +1,91 @@
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);
+ 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();
+ const { colors, emojis } = require('../../utils/constants');
+
+ 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`';
+ if (member) {
+ // Récupérer le statut avec gestion des différents cas
+ let status = 'Hors ligne';
+ let statusEmoji = '⚫';
+
+ if (member.presence) {
+ const presenceStatus = member.presence.status;
+ switch (presenceStatus) {
+ case 'online':
+ status = 'En ligne';
+ statusEmoji = '🟢';
+ break;
+ case 'idle':
+ status = 'Inactif';
+ statusEmoji = '🟡';
+ break;
+ case 'dnd':
+ status = 'Ne pas déranger';
+ statusEmoji = '🔴';
+ break;
+ case 'invisible':
+ status = 'Invisible';
+ statusEmoji = '⚫';
+ break;
+ case 'offline':
+ status = 'Hors ligne';
+ statusEmoji = '⚫';
+ break;
+ default:
+ status = 'Inconnu';
+ statusEmoji = '⚪';
+ }
+ }
- 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 }
- );
+ embed.addFields(
+ { name: '📥 A rejoint le', value: ``, inline: true },
+ { name: '⏰ Statut', value: `${statusEmoji} \`${status}\``, inline: true },
+ { name: '👑 Rôle le plus élevé', value: member.roles.highest.toString(), inline: true },
+ { name: '🎭 Rôles', value: member.roles.cache.size > 1 ? member.roles.cache.filter(r => r.id !== interaction.guild.id).map(r => r.toString()).slice(0, 10).join(', ') || '`Aucun`' : '`Aucun`', inline: false }
+ );
- if (member.nickname) {
- embed.addFields({ name: '📝 Surnom', value: `\`${member.nickname}\``, inline: true });
- }
+ 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 (member.roles.cache.size > 11) {
+ embed.addFields({ name: '📊 Total de rôles', value: `\`${member.roles.cache.size - 1}\``, inline: true });
+ }
+ }
- if (target.banner) {
- embed.setImage(target.bannerURL({ dynamic: true, size: 1024 }));
- }
+ if (target.banner) {
+ embed.setImage(target.bannerURL({ dynamic: true, size: 1024 }));
+ }
+
+ await interaction.reply({ embeds: [embed] });
+ },
+};
- await interaction.reply({ embeds: [embed] });
- },
-};
\ No newline at end of file
diff --git a/commands/moderation/ban.js b/commands/moderation/ban.js
index d2fcc34..49927fa 100644
--- a/commands/moderation/ban.js
+++ b/commands/moderation/ban.js
@@ -1,119 +1,134 @@
-const { SlashCommandBuilder, PermissionFlagsBits, EmbedBuilder, MessageFlags } = require('discord.js');
+const { SlashCommandBuilder, PermissionFlagsBits, EmbedBuilder } = 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('Bannir un membre du serveur.')
- .addUserOption(option =>
- option.setName('target')
- .setDescription('Le membre à bannir')
- .setRequired(true))
- .addStringOption(option =>
- option.setName('reason')
- .setDescription('Raison du bannissement')
- .setRequired(false))
- .addStringOption(option =>
- option.setName('duration')
- .setDescription('Durée du ban (ex: 1h, 2d, laisser vide pour permanent)')
- .setRequired(false))
- .setDefaultMemberPermissions(PermissionFlagsBits.BanMembers),
+ category: 'moderation',
+ data: new SlashCommandBuilder()
+ .setName('ban')
+ .setDescription('Bannir un membre du serveur.')
+ .addUserOption(option =>
+ option.setName('target')
+ .setDescription('Le membre à bannir')
+ .setRequired(true))
+ .addStringOption(option =>
+ option.setName('reason')
+ .setDescription('Raison du bannissement')
+ .setRequired(false))
+ .addStringOption(option =>
+ option.setName('duration')
+ .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') || 'Aucune raison fournie';
- const durationInput = interaction.options.getString('duration');
+ async execute(interaction) {
+ const target = interaction.options.getUser('target');
+ const reason = interaction.options.getString('reason') || 'Aucune raison fournie';
+ const durationInput = interaction.options.getString('duration');
- await interaction.deferReply({ flags: MessageFlags.Ephemeral });
+ await interaction.deferReply({ ephemeral: true });
- if (!target) return interaction.editReply({ content: '❌ Aucun utilisateur spécifié !' });
+ 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 ?).' });
- }
- }
+ // Vérifier que l'utilisateur peut être banni
+ 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.' });
+ }
+ }
- let type = 'Permanent';
- let unbanDate = null;
- let durationText = 'Permanent';
+ let type = 'Permanent';
+ let unbanDate = null;
+ let durationText = 'Permanent';
- if (durationInput) {
- 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).' });
- }
- }
+ if (durationInput) {
+ const { parseDuration, formatDuration } = require('../../utils/helpers');
+ const durationMs = parseDuration(durationInput);
+ if (durationMs) {
+ unbanDate = Date.now() + durationMs;
+ type = 'Temporary';
+ durationText = formatDuration(durationMs);
+ }
+ }
- try {
- await interaction.guild.bans.create(target.id, { reason: `Banni par ${interaction.user.tag}: ${reason}` });
+ try {
+ // Bannissement
+ await interaction.guild.bans.create(target.id, { reason: `Banni par ${interaction.user.tag}: ${reason}` });
- 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)`,
- [target.id, reason, interaction.user.id, Date.now(), type, unbanDate, interaction.guild.id]
- );
+ // 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)`,
+ [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 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()]
+ );
- 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();
+ const { colors, emojis } = require('../../utils/constants');
+ const { sendLog } = require('../../utils/helpers');
- await interaction.editReply({ embeds: [embed] });
+ 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();
- 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] });
+ await interaction.editReply({ embeds: [embed] });
- } catch (err) {
- console.error('Erreur ban:', err);
- await interaction.editReply({ content: `❌ Erreur: ${err.message}` });
- }
- },
-};
\ No newline at end of file
+ // Log dans le canal de logs
+ 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 },
+ { 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 lors du bannissement:', err);
+ if (err.code === 50013) {
+ await interaction.editReply({ content: '❌ Je n\'ai pas les permissions nécessaires pour bannir cet utilisateur.', ephemeral: true });
+ } else if (err.code === 50035) {
+ await interaction.editReply({ content: '❌ Cet utilisateur est déjà banni.', ephemeral: true });
+ } else {
+ await interaction.editReply({ content: `❌ Échec du bannissement de ${target.tag}: ${err.message}`, ephemeral: true });
+ }
+ }
+ },
+};
diff --git a/commands/moderation/casier.js b/commands/moderation/casier.js
index 73e3c01..7d5c16e 100644
--- a/commands/moderation/casier.js
+++ b/commands/moderation/casier.js
@@ -1,106 +1,115 @@
-const { SlashCommandBuilder, EmbedBuilder, ActionRowBuilder, ButtonBuilder, ButtonStyle, MessageFlags } = require('discord.js');
+const { SlashCommandBuilder, EmbedBuilder, ActionRowBuilder, ButtonBuilder, ButtonStyle } = 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.')
- .addUserOption(option =>
- option.setName('membre')
- .setDescription('Le membre dont tu veux voir le casier')
- .setRequired(true)),
+ category: 'moderation',
+ data: new SlashCommandBuilder()
+ .setName('casier')
+ .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({ flags: MessageFlags.Ephemeral });
+ async execute(interaction) {
+ await interaction.deferReply();
- const member = interaction.options.getUser('membre');
+ const member = interaction.options.getUser('membre');
- try {
- const [rows] = await db.query(
- 'SELECT * FROM logs WHERE userId = ? AND guildId = ? ORDER BY timestamp DESC',
- [member.id, interaction.guild.id]
- );
+ try {
+ const [rows] = await db.query(
+ 'SELECT * FROM logs WHERE userId = ? AND guildId = ? ORDER BY timestamp DESC',
+ [member.id, interaction.guild.id]
+ );
- const sanctions = rows.filter(row =>
- row.action !== 'Modification de sanction' &&
- row.action !== 'Révocation de sanction' &&
- row.action !== 'Modification de mute'
- );
+ // Filtrer les modifications et révocations (ce ne sont pas des sanctions à afficher)
+ 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.` });
- }
+ if (!sanctions.length) {
+ return interaction.editReply({ content: `✅ ${member.tag} n'a aucune sanction sur ce serveur.` });
+ }
- const pages = [];
- for (let i = 0; i < sanctions.length; i += 10) {
- pages.push(sanctions.slice(i, i + 10));
- }
+ // Découpe les sanctions en pages de 10
+ 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()
- .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();
+ const { colors, emojis } = require('../../utils/constants');
+
+ const embeds = pages.map((page, pageIndex) => {
+ const embed = new EmbedBuilder()
+ .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 = ``;
- const actionCapitalized = row.action.charAt(0).toUpperCase() + row.action.slice(1);
- const guildName = row.guildId
- ? interaction.client.guilds.cache.get(row.guildId)?.name || 'Serveur inconnu'
- : 'Serveur inconnu';
-
- const displayNumber = index + 1 + pageIndex * 10;
+ page.forEach((row, index) => {
+ const date = ``;
+ const actionCapitalized = row.action.charAt(0).toUpperCase() + row.action.slice(1);
+ const guildName = row.guildId
+ ? interaction.client.guilds.cache.get(row.guildId)?.name || 'Serveur inconnu'
+ : 'Serveur inconnu';
+
+ // Numéro d'affichage (position dans la liste filtrée, à partir de 1)
+ const displayNumber = index + 1 + pageIndex * 10;
- embed.addFields({
- 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:** \`${row.type || 'N/A'}\``,
- inline: false
- });
- });
+ embed.addFields({
+ 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:** \`${row.type || 'N/A'}\``,
+ inline: false
+ });
+ });
- return embed;
- });
+ return embed;
+ });
- const row = new ActionRowBuilder().addComponents(
- 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)
- );
+ // Composants pour naviguer
+ const row = new ActionRowBuilder().addComponents(
+ 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: pages.length > 1 ? [row] : [] });
+ let currentPage = 0;
+ const message = await interaction.editReply({ embeds: [embeds[currentPage]], components: pages.length > 1 ? [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;
- }
+ // Collecteur de boutons
+ 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 !', ephemeral: true });
+ }
+ 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]] });
- });
+ await i.update({ embeds: [embeds[currentPage]] });
+ });
- collector.on('end', () => {
- message.edit({ components: [] }).catch(() => null);
- });
+ collector.on('end', () => {
+ message.edit({ components: [] }).catch(() => null);
+ });
- } catch (err) {
- 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
+ } catch (err) {
+ console.error('Erreur lors de la récupération du casier:', err);
+ await interaction.editReply({ content: '❌ Une erreur est survenue lors de la récupération du casier.' });
+ }
+ },
+};
diff --git a/commands/moderation/changemute.js b/commands/moderation/changemute.js
index 4a52595..d4a78d2 100644
--- a/commands/moderation/changemute.js
+++ b/commands/moderation/changemute.js
@@ -1,149 +1,172 @@
-const { SlashCommandBuilder, PermissionFlagsBits, EmbedBuilder, MessageFlags } = require('discord.js');
+const { SlashCommandBuilder, PermissionFlagsBits, EmbedBuilder } = require('discord.js');
const db = require('../../functions/database/db.js');
-const { parseDuration, formatDuration, sendLog } = require('../../utils/helpers');
-const { colors, emojis } = require('../../utils/constants');
+const { parseDuration, formatDuration } = require('../../utils/helpers');
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),
+ 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');
+ 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 });
+ await interaction.deferReply({ ephemeral: true });
- if (!target) return interaction.editReply({ content: '❌ Aucun utilisateur spécifié !' });
+ 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.' });
+ 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.' });
+ 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]
- );
+ // Récupérer le mute actuel depuis la DB
+ 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é.' });
- }
+ if (!muteRows.length && !member.communicationDisabledUntil) {
+ 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;
+ 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é';
+ 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).' });
+ // Si nouvelle durée spécifiée
+ 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.' });
+ 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);
+ newUnmuteDate = Date.now() + newDurationMs;
+ durationText = formatDuration(newDurationMs);
- await member.timeout(newDurationMs, `Mute modifié par ${interaction.user.tag}: ${newReason || oldReason}`);
- }
+ // Mettre à jour le timeout
+ const durationSeconds = Math.floor(newDurationMs / 1000);
+ await member.timeout(durationSeconds * 1000, `Mute modifié par ${interaction.user.tag}: ${newReason || oldReason}`);
+ }
- const finalReason = newReason || oldReason;
- const type = 'Temporary';
+ // Mettre à jour la DB
+ const finalReason = newReason || oldReason;
+ const type = newUnmuteDate && newUnmuteDate > Date.now() ? 'Temporary' : 'Permanent';
- 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]
- );
- }
+ 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(', ');
+ // Log dans la DB
+ 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()]
- );
+ 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();
+ const { colors, emojis } = require('../../utils/constants');
+ const { sendLog } = require('../../utils/helpers');
- if (newUnmuteDate) {
- embed.addFields({ name: '📅 Démute le', value: ``, inline: true });
- }
+ 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();
- await interaction.editReply({ embeds: [embed] });
+ if (newUnmuteDate) {
+ embed.addFields({ name: '📅 Démute le', value: ``, inline: true });
+ }
- 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 */ }
+ await interaction.editReply({ embeds: [embed] });
- 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] });
+ // Envoyer un message privé à l'utilisateur
+ 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 {
+ // L'utilisateur a les DMs fermés, on continue
+ }
+
+ // Log dans le canal de logs
+ 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 lors de la modification du mute:', err);
+ await interaction.editReply({ content: `❌ Échec de la modification du mute: ${err.message}` });
+ }
+ },
+};
- } 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
index b86fd60..a14fa0c 100644
--- a/commands/moderation/changesanction.js
+++ b/commands/moderation/changesanction.js
@@ -1,114 +1,125 @@
-const { SlashCommandBuilder, PermissionFlagsBits, EmbedBuilder, MessageFlags } = require('discord.js');
+const { SlashCommandBuilder, PermissionFlagsBits, EmbedBuilder } = 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),
+ 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');
- 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({ ephemeral: true });
- await interaction.deferReply({ flags: MessageFlags.Ephemeral });
+ try {
+ console.log(`[changesanction] Recherche sanction ID: ${sanctionId}, userId: ${target.id}, guildId: ${interaction.guild.id}`);
+
+ // Récupérer directement la sanction par son ID DB (plus stable)
+ const [sanctionRows] = await db.query(
+ 'SELECT * FROM logs WHERE id = ? AND userId = ? AND guildId = ?',
+ [sanctionId, target.id, interaction.guild.id]
+ );
- try {
- const [sanctionRows] = await db.query(
- 'SELECT * FROM logs WHERE id = ? AND userId = ? AND guildId = ?',
- [sanctionId, target.id, interaction.guild.id]
- );
+ console.log(`[changesanction] Résultats trouvés: ${sanctionRows.length}`);
- 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\`).`
- });
- }
+ if (!sanctionRows.length) {
+ // Vérifier si l'ID existe pour cet utilisateur (peut-être mauvais serveur?)
+ 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];
+ 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;
+ // Vérifier que ce n'est pas une modification/révocation
+ 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]
- );
+ // Mettre à jour la raison
+ 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()]
- );
+ // Log de la modification
+ 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();
+ const { colors, emojis } = require('../../utils/constants');
+ const { sendLog } = require('../../utils/helpers');
- await interaction.editReply({ embeds: [embed] });
+ 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();
- 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] });
+ await interaction.editReply({ embeds: [embed] });
+
+ // Log dans le canal de logs
+ 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 lors de la modification de la sanction:', err);
+ await interaction.editReply({ content: `❌ Échec de la modification de la sanction: ${err.message}` });
+ }
+ },
+};
- } 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
index eb37743..ea0ebcd 100644
--- a/commands/moderation/clear.js
+++ b/commands/moderation/clear.js
@@ -1,74 +1,85 @@
-const { SlashCommandBuilder, PermissionFlagsBits, EmbedBuilder, MessageFlags } = require('discord.js');
-const { colors, emojis } = require('../../utils/constants');
+const { SlashCommandBuilder, PermissionFlagsBits, EmbedBuilder } = require('discord.js');
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),
+ 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');
+ async execute(interaction) {
+ const amount = interaction.options.getInteger('amount');
+ const target = interaction.options.getUser('target');
- await interaction.deferReply({ flags: MessageFlags.Ephemeral });
+ await interaction.deferReply({ ephemeral: true });
- if (!interaction.channel.isTextBased()) {
- return interaction.editReply({ content: '❌ Cette commande ne peut être utilisée que dans un canal texte.' });
- }
+ 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;
+ try {
+ const messages = await interaction.channel.messages.fetch({ limit: amount });
+ let messagesToDelete = messages;
- if (target) {
- messagesToDelete = messages.filter(msg => msg.author.id === target.id);
- }
+ 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;
- });
+ // Ne pas supprimer les messages de plus de 14 jours
+ 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).' });
- }
+ 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);
+ 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();
+ const { colors, emojis } = require('../../utils/constants');
- await interaction.editReply({ embeds: [embed] });
+ 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] });
+
+ // Supprimer le message de confirmation après 5 secondes
+ setTimeout(() => {
+ interaction.deleteReply().catch(() => null);
+ }, 5000);
+
+ } catch (err) {
+ console.error('Erreur lors de la suppression des messages:', 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 des messages: ${err.message}` });
+ }
+ }
+ },
+};
- } 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
index 8231994..6fd470d 100644
--- a/commands/moderation/kick.js
+++ b/commands/moderation/kick.js
@@ -1,89 +1,111 @@
-const { SlashCommandBuilder, PermissionFlagsBits, EmbedBuilder, MessageFlags } = require('discord.js');
+const { SlashCommandBuilder, PermissionFlagsBits, EmbedBuilder } = 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),
+ 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';
+ async execute(interaction) {
+ const target = interaction.options.getUser('target');
+ const reason = interaction.options.getString('reason') || 'Aucune raison fournie';
- await interaction.deferReply({ flags: MessageFlags.Ephemeral });
+ await interaction.deferReply();
- if (!target) return interaction.editReply({ content: '❌ Aucun utilisateur spécifié !' });
+ 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.' });
+ 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.' });
- }
+ // Vérifications de permissions
+ 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}`);
+ 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()]
- );
+ // Log dans la DB
+ 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();
+ const { colors, emojis } = require('../../utils/constants');
+ const { sendLog } = require('../../utils/helpers');
- await interaction.editReply({ embeds: [embed] });
+ 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();
- 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] });
+ await interaction.editReply({ embeds: [embed] });
+
+ // Log dans le canal de logs
+ 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 },
+ { 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 lors de l\'expulsion:', err);
+ if (err.code === 50013) {
+ await interaction.editReply({ content: '❌ Je n\'ai pas les permissions nécessaires pour expulser cet utilisateur.' });
+ } else {
+ await interaction.editReply({ content: `❌ Échec de l'expulsion de ${target.tag}: ${err.message}` });
+ }
+ }
+ },
+};
- } 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
index 559a0e7..45706a8 100644
--- a/commands/moderation/mute.js
+++ b/commands/moderation/mute.js
@@ -1,113 +1,144 @@
-const { SlashCommandBuilder, PermissionFlagsBits, EmbedBuilder, MessageFlags } = require('discord.js');
+const { SlashCommandBuilder, PermissionFlagsBits, EmbedBuilder } = require('discord.js');
const db = require('../../functions/database/db.js');
-const { parseDuration, formatDuration, sendLog } = require('../../utils/helpers');
-const { colors, emojis } = require('../../utils/constants');
+const { parseDuration, formatDuration } = require('../../utils/helpers');
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),
+ 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';
+ 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 });
+ await interaction.deferReply({ ephemeral: true });
- if (!target) return interaction.editReply({ content: '❌ Aucun utilisateur spécifié !' });
+ 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.' });
+ 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.' });
- }
+ // Vérifications
+ 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).' });
+ // Parser la durée
+ 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.' });
+ // Maximum 28 jours (Discord limit)
+ 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
+ const durationSeconds = Math.floor(durationMs / 1000);
+ const unmuteDate = Date.now() + durationMs;
+ const type = durationMs > 0 ? 'Temporary' : 'Permanent';
- try {
- await member.timeout(durationMs, `Muté par ${interaction.user.tag}: ${reason}`);
+ try {
+ // Muter avec timeout (Discord)
+ await member.timeout(durationSeconds * 1000, `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]
- );
+ // Stocker dans la DB
+ 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()]
- );
+ // Log dans la DB
+ 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();
+ const { colors, emojis } = require('../../utils/constants');
+ const { sendLog } = require('../../utils/helpers');
- await interaction.editReply({ embeds: [embed] });
+ 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();
- 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] });
+ await interaction.editReply({ embeds: [embed] });
+
+ // Log dans le canal de logs
+ 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 lors du mute:', err);
+ if (err.code === 50013) {
+ await interaction.editReply({ content: '❌ Je n\'ai pas les permissions nécessaires pour muter cet utilisateur.' });
+ } else {
+ await interaction.editReply({ content: `❌ Échec du mute de ${target.tag}: ${err.message}` });
+ }
+ }
+ },
+};
- } 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
index a9d39ad..6d6d12f 100644
--- a/commands/moderation/mysanctions.js
+++ b/commands/moderation/mysanctions.js
@@ -1,97 +1,98 @@
-const { SlashCommandBuilder, EmbedBuilder, ActionRowBuilder, ButtonBuilder, ButtonStyle, MessageFlags } = require('discord.js');
+const { SlashCommandBuilder, EmbedBuilder } = 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 });
+ category: 'moderation',
+ data: new SlashCommandBuilder()
+ .setName('mysanctions')
+ .setDescription('Voir tes propres sanctions sur ce serveur.'),
+ async execute(interaction) {
+ await interaction.deferReply({ ephemeral: true });
- const userId = interaction.user.id;
+ 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]
- );
+ 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 (!rows.length) {
+ return interaction.editReply({ content: '✅ Tu n\'as aucune sanction sur ce serveur.' });
+ }
- if (!sanctions.length) {
- return interaction.editReply({ content: '✅ Tu n\'as aucune sanction sur ce serveur.' });
- }
+ const { colors } = require('../../utils/constants');
- const pages = [];
- for (let i = 0; i < sanctions.length; i += 10) {
- pages.push(sanctions.slice(i, i + 10));
- }
+ // Découpe les sanctions en pages de 10
+ const pages = [];
+ for (let i = 0; i < rows.length; i += 10) {
+ pages.push(rows.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();
+ 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: ${rows.length} sanction(s)` })
+ .setTimestamp();
- page.forEach((row, index) => {
- const date = ``;
- const actionCapitalized = row.action.charAt(0).toUpperCase() + row.action.slice(1);
+ 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
- });
- });
+ 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;
- });
+ return embed;
+ });
- if (pages.length === 1) {
- return interaction.editReply({ embeds: [embeds[0]] });
- }
+ // Si une seule page, pas besoin de boutons
+ 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)
- );
+ // Sinon, ajouter les boutons de navigation
+ const { ActionRowBuilder, ButtonBuilder, ButtonStyle } = require('discord.js');
+ 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] });
+ 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;
- }
+ // Collecteur de boutons
+ 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 !', ephemeral: true });
+ }
+ 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]] });
- });
+ await i.update({ embeds: [embeds[currentPage]] });
+ });
- collector.on('end', () => {
- message.edit({ components: [] }).catch(() => null);
- });
+ collector.on('end', () => {
+ message.edit({ components: [] }).catch(() => null);
+ });
+
+ } catch (err) {
+ console.error('Erreur lors de la récupération des sanctions:', err);
+ await interaction.editReply({ content: '❌ Une erreur est survenue lors de la récupération de tes sanctions.' });
+ }
+ },
+};
- } 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
index 0d8c209..3c1808c 100644
--- a/commands/moderation/purge.js
+++ b/commands/moderation/purge.js
@@ -1,103 +1,114 @@
-const { SlashCommandBuilder, PermissionFlagsBits, EmbedBuilder, MessageFlags } = require('discord.js');
+const { SlashCommandBuilder, PermissionFlagsBits, EmbedBuilder } = 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),
+ 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';
+ 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 });
+ await interaction.deferReply({ ephemeral: true });
- if (!interaction.channel.isTextBased()) {
- return interaction.editReply({ content: '❌ Cette commande ne peut être utilisée que dans un canal texte.' });
- }
+ 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);
+ 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;
- });
+ // Ne pas supprimer les messages de plus de 14 jours
+ 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).` });
- }
+ 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 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()]
- );
+ // Log dans la DB
+ 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();
+ const { colors, emojis } = require('../../utils/constants');
+ const { sendLog } = require('../../utils/helpers');
- await interaction.editReply({ embeds: [embed] });
+ 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();
- 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] });
+ await interaction.editReply({ embeds: [embed] });
+
+ // Log dans le canal de logs
+ 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 lors de la 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}` });
+ }
+ }
+ },
+};
- } 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
index f9a8bf3..f3cecd9 100644
--- a/commands/moderation/revokesanction.js
+++ b/commands/moderation/revokesanction.js
@@ -1,101 +1,109 @@
-const { SlashCommandBuilder, PermissionFlagsBits, EmbedBuilder, MessageFlags } = require('discord.js');
+const { SlashCommandBuilder, PermissionFlagsBits, EmbedBuilder } = 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';
+ 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 });
+ await interaction.deferReply({ ephemeral: true });
- 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.' });
- }
+ // Vérifier les permissions (Administrateur ou propriétaire)
+ 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]
- );
+ try {
+ // Récupérer directement la sanction par son ID DB (plus stable)
+ 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\`).`
- });
- }
+ 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];
+ 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.` });
- }
+ // Vérifier que ce n'est pas une modification/révocation
+ 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]
- );
+ // Marquer la sanction comme révoquée (on ne la supprime pas, on la marque)
+ 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()]
- );
+ // Log de la révocation
+ 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();
+ const { colors, emojis } = require('../../utils/constants');
+ const { sendLog } = require('../../utils/helpers');
- await interaction.editReply({ embeds: [embed] });
+ 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();
- 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] });
+ await interaction.editReply({ embeds: [embed] });
+
+ // Log dans le canal de logs
+ 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 lors de la révocation de la sanction:', err);
+ await interaction.editReply({ content: `❌ Échec de la révocation de la sanction: ${err.message}` });
+ }
+ },
+};
- } 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 8422d2f..d7a92ff 100644
--- a/commands/moderation/unban.js
+++ b/commands/moderation/unban.js
@@ -1,80 +1,100 @@
-const { SlashCommandBuilder, EmbedBuilder, PermissionFlagsBits, MessageFlags } = require('discord.js');
+const { SlashCommandBuilder, EmbedBuilder, PermissionFlagsBits } = 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('Débannir un utilisateur par son ID ou son tag.')
- .addStringOption(option =>
- option.setName('user')
- .setDescription('L\'ID ou le tag (Username#1234) de l\'utilisateur à débannir')
- .setRequired(true))
- .setDefaultMemberPermissions(PermissionFlagsBits.BanMembers),
+ category: 'moderation',
+ data: new SlashCommandBuilder()
+ .setName('unban')
+ .setDescription('Débannir un utilisateur par son ID ou son tag.')
+ .addStringOption(option =>
+ option.setName('user')
+ .setDescription('L\'ID ou le tag (Username#1234) de l\'utilisateur à débannir')
+ .setRequired(true))
+ .setDefaultMemberPermissions(PermissionFlagsBits.BanMembers),
- async execute(interaction) {
- await interaction.deferReply({ flags: MessageFlags.Ephemeral });
+ async execute(interaction) {
+ await interaction.deferReply();
- const input = interaction.options.getString('user').trim();
+ const input = interaction.options.getString('user').trim();
- try {
- const bannedUsers = await interaction.guild.bans.fetch();
- const bannedUser = bannedUsers.find(b =>
- b.user.id === input || b.user.tag.toLowerCase() === input.toLowerCase()
- );
+ try {
+ const bannedUsers = await interaction.guild.bans.fetch();
+ const bannedUser = bannedUsers.find(b =>
+ b.user.id === input || b.user.tag.toLowerCase() === input.toLowerCase()
+ );
- if (!bannedUser) return interaction.editReply({ content: '❌ Cet utilisateur n\'est pas banni.' });
+ if (!bannedUser) {
+ return interaction.editReply({ content: '❌ Cet utilisateur n\'est pas banni.' });
+ }
- const reason = `Débanni par ${interaction.user.tag}`;
- await interaction.guild.members.unban(bannedUser.user.id, reason);
+ // Récupération depuis MySQL
+ const [rows] = await db.query('SELECT * FROM bans WHERE userId = ? AND guildId = ?', [bannedUser.user.id, interaction.guild.id]);
+ const banRecord = rows[0];
- await db.query('DELETE FROM bans WHERE userId = ? AND guildId = ?', [bannedUser.user.id, interaction.guild.id]);
+ const reason = `Débanni par ${interaction.user.tag}`;
+ await interaction.guild.members.unban(bannedUser.user.id, reason);
- 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();
+ if (banRecord) {
+ await db.query('DELETE FROM bans WHERE userId = ? AND guildId = ?', [bannedUser.user.id, interaction.guild.id]);
+ }
- await interaction.editReply({ embeds: [embed] });
+ const { colors, emojis } = require('../../utils/constants');
+ const { sendLog } = require('../../utils/helpers');
- 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] });
+ 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();
- 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, 'Débannissement', reason, null, interaction.guild.id, Date.now()]
- );
+ await interaction.editReply({ embeds: [embed] });
- } catch (err) {
- console.error('Erreur unban:', err);
- await interaction.editReply({ content: `❌ Erreur: ${err.message}` });
- }
- },
-};
\ No newline at end of file
+ // Log dans le canal de logs
+ 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, 'Débannissement', reason, null, interaction.guild.id, Date.now()]
+ );
+
+ } catch (err) {
+ console.error('Erreur lors du débannissement:', err);
+ if (err.code === 50013) {
+ await interaction.editReply({ content: '❌ Je n\'ai pas les permissions nécessaires pour débannir cet utilisateur.' });
+ } else {
+ await interaction.editReply({ content: '❌ Échec du débannissement de l\'utilisateur.' });
+ }
+ }
+ },
+};
diff --git a/commands/moderation/unmute.js b/commands/moderation/unmute.js
index 6cb9b80..8558056 100644
--- a/commands/moderation/unmute.js
+++ b/commands/moderation/unmute.js
@@ -1,86 +1,105 @@
-const { SlashCommandBuilder, PermissionFlagsBits, EmbedBuilder, MessageFlags } = require('discord.js');
+const { SlashCommandBuilder, PermissionFlagsBits, EmbedBuilder } = 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),
+ 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';
+ async execute(interaction) {
+ const target = interaction.options.getUser('user');
+ const reason = interaction.options.getString('reason') || 'Aucune raison fournie';
- await interaction.deferReply({ flags: MessageFlags.Ephemeral });
+ await interaction.deferReply({ ephemeral: true });
- if (!target) return interaction.editReply({ content: '❌ Aucun utilisateur spécifié !' });
+ 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.' });
+ 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é.' });
- }
+ if (!member.communicationDisabledUntil) {
+ return interaction.editReply({ content: '❌ Cet utilisateur n\'est pas muté.' });
+ }
- try {
- await member.timeout(null, `Démuté par ${interaction.user.tag}: ${reason}`);
+ try {
+ // Démuter
+ 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]);
+ // Supprimer de la DB
+ 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()]
- );
+ // Log dans la DB
+ 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();
+ const { colors, emojis } = require('../../utils/constants');
+ const { sendLog } = require('../../utils/helpers');
- await interaction.editReply({ embeds: [embed] });
+ 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();
- 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] });
+ await interaction.editReply({ embeds: [embed] });
+
+ // Log dans le canal de logs
+ 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 lors de l\'unmute:', err);
+ if (err.code === 50013) {
+ await interaction.editReply({ content: '❌ Je n\'ai pas les permissions nécessaires pour démuter cet utilisateur.' });
+ } else {
+ await interaction.editReply({ content: `❌ Échec de l'unmute de ${target.tag}: ${err.message}` });
+ }
+ }
+ },
+};
- } 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
index 7cf0abe..70c4e65 100644
--- a/commands/moderation/untimeout.js
+++ b/commands/moderation/untimeout.js
@@ -1,78 +1,90 @@
-const { SlashCommandBuilder, PermissionFlagsBits, EmbedBuilder, MessageFlags } = require('discord.js');
+const { SlashCommandBuilder, PermissionFlagsBits, EmbedBuilder } = 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),
+ 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';
+ async execute(interaction) {
+ const target = interaction.options.getUser('target');
+ const reason = interaction.options.getString('reason') || 'Aucune raison fournie';
- await interaction.deferReply({ flags: MessageFlags.Ephemeral });
+ await interaction.deferReply({ ephemeral: true });
- if (!target) return interaction.editReply({ content: '❌ Aucun utilisateur spécifié !' });
+ 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.' });
+ 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.' });
- }
+ if (!member.communicationDisabledUntil) {
+ return interaction.editReply({ content: '❌ Cet utilisateur n\'est pas en timeout.' });
+ }
- try {
- await member.timeout(null, `Timeout retiré par ${interaction.user.tag}: ${reason}`);
+ 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()]
- );
+ // Log dans la DB
+ 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();
+ const { colors, emojis } = require('../../utils/constants');
+ const { sendLog } = require('../../utils/helpers');
- await interaction.editReply({ embeds: [embed] });
+ 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();
- 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] });
+ await interaction.editReply({ embeds: [embed] });
+
+ // Log dans le canal de logs
+ 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 lors de la levée du timeout:', err);
+ if (err.code === 50013) {
+ await interaction.editReply({ content: '❌ Je n\'ai pas les permissions nécessaires pour retirer le timeout de cet utilisateur.' });
+ } else {
+ await interaction.editReply({ content: `❌ Échec de la levée du timeout de ${target.tag}: ${err.message}` });
+ }
+ }
+ },
+};
- } 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
index 5c8689c..3acb8fd 100644
--- a/commands/moderation/warn.js
+++ b/commands/moderation/warn.js
@@ -1,101 +1,121 @@
-const { SlashCommandBuilder, PermissionFlagsBits, EmbedBuilder, MessageFlags } = require('discord.js');
+const { SlashCommandBuilder, PermissionFlagsBits, EmbedBuilder } = 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),
+ 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';
+ async execute(interaction) {
+ const target = interaction.options.getUser('target');
+ const reason = interaction.options.getString('reason') || 'Aucune raison fournie';
- await interaction.deferReply({ flags: MessageFlags.Ephemeral });
+ await interaction.deferReply();
- if (!target) return interaction.editReply({ content: '❌ Aucun utilisateur spécifié !' });
+ 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.' });
+ 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.' });
+ 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;
+ try {
+ // Compter les avertissements existants
+ 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()]
- );
+ // Log dans la DB
+ 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();
+ const { colors, emojis } = require('../../utils/constants');
+ const { sendLog } = require('../../utils/helpers');
- await interaction.editReply({ embeds: [embed] });
+ 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();
- 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 */ }
+ await interaction.editReply({ embeds: [embed] });
- 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] });
+ // Envoyer un message privé à l'utilisateur
+ 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 {
+ // L'utilisateur a les DMs fermés, on continue
+ }
+
+ // Log dans le canal de logs
+ 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 lors de l\'avertissement:', err);
+ await interaction.editReply({ content: `❌ Échec de l'avertissement de ${target.tag}: ${err.message}` });
+ }
+ },
+};
- } 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
index cba2818..f416cf7 100644
--- a/commands/ticket/ticket.js
+++ b/commands/ticket/ticket.js
@@ -1,84 +1,70 @@
-const {
- SlashCommandBuilder,
- PermissionFlagsBits,
- EmbedBuilder,
- ChannelType,
- ActionRowBuilder,
- ButtonBuilder,
- ButtonStyle,
- ModalBuilder,
- TextInputBuilder,
- TextInputStyle,
- MessageFlags
-} = require('discord.js');
+const { SlashCommandBuilder, PermissionFlagsBits, EmbedBuilder, ChannelType, ActionRowBuilder, ButtonBuilder, ButtonStyle } = require('discord.js');
const db = require('../../functions/database/db.js');
-const { colors } = require('../../utils/constants');
-const fs = require('fs');
-const path = require('path');
+const { colors, emojis } = require('../../utils/constants');
// 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é ?'
+ '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'
+ '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}`;
+ 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;
+ 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 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 typeEmojis = {
+ 'Support': '💬',
+ 'Plainte': '📢',
+ 'Plainte Staff': '⚠️',
+ 'Candidature': '📝',
+ 'Problème Technique': '🔧'
+ };
- const statusColors = {
- 'Ouvert': '#10b981',
- 'Fermé': '#ef4444',
- 'En attente': '#f59e0b'
- };
+ 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 `
+ 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 `
`;
- }).join('');
- }
+ }).join('');
+ }
- let candidatureHTML = '';
- if (candidatureResponses && candidatureResponses.length > 0) {
- candidatureHTML = `
+ let candidatureHTML = '';
+ if (candidatureResponses && candidatureResponses.length > 0) {
+ candidatureHTML = `
📝 Réponses aux Questions de Candidature
${candidatureResponses.map(response => `
@@ -105,18 +91,20 @@ function generateTranscriptHTML(ticket, messages, candidatureResponses, useRelat
`).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`;
- }
+ // Déterminer l'URL du CSS
+ let cssUrl;
+ if (useRelativeCss) {
+ // Utiliser un chemin relatif pour l'ouverture locale
+ cssUrl = '../../transcript.css';
+ } else {
+ // Utiliser l'URL du serveur web
+ const webUrl = process.env.TRANSCRIPT_WEB_URL || 'transcript.syxpi.fr';
+ cssUrl = `https://${webUrl}/static/transcript.css`;
+ }
- return `
+ return `
@@ -171,7 +159,7 @@ function generateTranscriptHTML(ticket, messages, candidatureResponses, useRelat
@@ -179,495 +167,1206 @@ function generateTranscriptHTML(ticket, messages, candidatureResponses, useRelat
}
function escapeHtml(text) {
- if (!text) return '';
- const map = { '&': '&', '<': '<', '>': '>', '"': '"', "'": ''' };
- return text.replace(/[&<>"']/g, m => map[m]);
+ 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')),
+ category: 'ticket',
+ data: new SlashCommandBuilder()
+ .setName('ticket')
+ .setDescription('Gérer les tickets')
+ .addSubcommand(subcommand =>
+ subcommand
+ .setName('setup')
+ .setDescription('Configurer le système de tickets (Admin uniquement)')
+ .addChannelOption(option =>
+ option.setName('channel')
+ .setDescription('Le salon où afficher le message de création de tickets')
+ .setRequired(false)))
+ .addSubcommand(subcommand =>
+ subcommand
+ .setName('close')
+ .setDescription('Fermer un ticket')
+ .addStringOption(option =>
+ option.setName('reason')
+ .setDescription('Raison de la fermeture (optionnel)')
+ .setRequired(false)))
+ .addSubcommand(subcommand =>
+ subcommand
+ .setName('transcript')
+ .setDescription('Générer la transcription d\'un ticket'))
+ .addSubcommand(subcommand =>
+ subcommand
+ .setName('reopen')
+ .setDescription('Rouvrir un ticket fermé'))
+ .addSubcommand(subcommand =>
+ subcommand
+ .setName('add')
+ .setDescription('Ajouter un utilisateur au ticket')
+ .addUserOption(option =>
+ option.setName('user')
+ .setDescription('L\'utilisateur à ajouter au ticket')
+ .setRequired(true)))
+ .addSubcommand(subcommand =>
+ subcommand
+ .setName('claim')
+ .setDescription('Réclamer un ticket (modérateurs uniquement)')),
- 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 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 handleSetup(interaction) {
+ await interaction.deferReply({ ephemeral: true });
+
+ // Vérifier les permissions (Admin uniquement)
+ if (!interaction.member.permissions.has(PermissionFlagsBits.Administrator)) {
+ return interaction.editReply({
+ content: '❌ Tu n\'as pas la permission d\'utiliser cette commande. (Administrateur requis)'
+ });
+ }
+
+ const channel = interaction.options.getChannel('channel') || interaction.channel;
+
+ if (!channel.isTextBased()) {
+ return interaction.editReply({
+ content: '❌ Le salon doit être un canal texte.'
+ });
+ }
+
+ try {
+ // Créer l'embed avec les boutons
+ const embed = new EmbedBuilder()
+ .setTitle('🎫 Créer un Ticket')
+ .setColor(colors.primary)
+ .setDescription('Clique sur un des boutons ci-dessous pour créer un ticket.\n\n' +
+ '**💬 Support** - Pour toute question ou problème\n' +
+ '**📢 Plainte** - Pour signaler un problème avec un membre\n' +
+ '**⚠️ Plainte Staff** - Pour signaler un problème avec un staff\n' +
+ '**📝 Candidature** - Pour postuler au staff\n' +
+ '**🔧 Problème Technique** - Pour signaler un bug ou problème technique')
+ .setFooter({ text: 'France Femboy Bot • Système de Tickets' })
+ .setTimestamp();
+
+ // Créer les boutons pour chaque type de ticket
+ const row = new ActionRowBuilder().addComponents(
+ new ButtonBuilder()
+ .setCustomId('ticket_create_support')
+ .setLabel('Support')
+ .setStyle(ButtonStyle.Primary)
+ .setEmoji('💬'),
+ new ButtonBuilder()
+ .setCustomId('ticket_create_plainte')
+ .setLabel('Plainte')
+ .setStyle(ButtonStyle.Secondary)
+ .setEmoji('📢'),
+ new ButtonBuilder()
+ .setCustomId('ticket_create_plainte_staff')
+ .setLabel('Plainte Staff')
+ .setStyle(ButtonStyle.Danger)
+ .setEmoji('⚠️')
+ );
+
+ const row2 = new ActionRowBuilder().addComponents(
+ new ButtonBuilder()
+ .setCustomId('ticket_create_candidature')
+ .setLabel('Candidature')
+ .setStyle(ButtonStyle.Success)
+ .setEmoji('📝'),
+ new ButtonBuilder()
+ .setCustomId('ticket_create_probleme_technique')
+ .setLabel('Problème Technique')
+ .setStyle(ButtonStyle.Secondary)
+ .setEmoji('🔧')
+ );
+
+ await channel.send({ embeds: [embed], components: [row, row2] });
+
+ await interaction.editReply({
+ content: `✅ Message de création de tickets envoyé dans ${channel.toString()} !`
+ });
+
+ } catch (err) {
+ console.error('Erreur lors de la configuration du système de tickets:', err);
+ await interaction.editReply({
+ content: `❌ Erreur lors de la configuration: ${err.message}`
+ });
+ }
+}
+
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 });
+ await interaction.deferReply({ ephemeral: true });
- const type = ticketType || 'Support';
+ // Mapping des customId vers les types
+ const typeMapping = {
+ 'ticket_create_support': 'Support',
+ 'ticket_create_plainte': 'Plainte',
+ 'ticket_create_plainte_staff': 'Plainte Staff',
+ 'ticket_create_candidature': 'Candidature',
+ 'ticket_create_probleme_technique': 'Problème Technique'
+ };
- // 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) */ }
- }
+ const type = ticketType || typeMapping[interaction.customId] || 'Support';
- try {
- const [existingTickets] = await db.query(
- 'SELECT * FROM tickets WHERE userId = ? AND guildId = ? AND status = ?',
- [interaction.user.id, interaction.guild.id, 'Ouvert']
- );
+ try {
+ // Vérifier si l'utilisateur a déjà un ticket ouvert
+ 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}`}`
- });
+ 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}`}`
+ });
+ }
+
+ // Trouver ou créer la catégorie pour les tickets
+ let ticketCategory = interaction.guild.channels.cache.find(
+ ch => ch.type === ChannelType.GuildCategory && ch.name.toLowerCase().includes('ticket')
+ );
+
+ if (!ticketCategory) {
+ // Créer la catégorie si elle n'existe pas
+ 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,
+ PermissionFlagsBits.ReadMessageHistory,
+ ],
+ },
+ ],
+ });
+ } catch (err) {
+ console.error('Erreur lors de la création de la catégorie:', err);
+ // Si on ne peut pas créer la catégorie, on créera le canal sans parent
+ ticketCategory = null;
+ }
+ } else {
+ // Vérifier si le bot a les permissions nécessaires dans la catégorie existante
+ try {
+ const botMember = await interaction.guild.members.fetch(interaction.client.user.id);
+ const categoryPermissions = ticketCategory.permissionsFor(botMember);
+
+ if (!categoryPermissions || !categoryPermissions.has([
+ PermissionFlagsBits.ViewChannel,
+ PermissionFlagsBits.ManageChannels,
+ ])) {
+ // Essayer de donner les permissions au bot dans la catégorie
+ try {
+ await ticketCategory.permissionOverwrites.edit(interaction.client.user.id, {
+ ViewChannel: true,
+ ManageChannels: true,
+ SendMessages: true,
+ ReadMessageHistory: true,
+ });
+ console.log('✅ Permissions données au bot dans la catégorie');
+ } catch (permErr) {
+ console.warn('⚠️ Impossible de donner les permissions au bot dans la catégorie:', permErr.message);
+ // Si on ne peut pas donner les permissions, on créera le canal sans parent
+ ticketCategory = null;
+ }
+ }
+ } catch (err) {
+ console.warn('⚠️ Erreur lors de la vérification des permissions:', err.message);
+ // En cas d'erreur, on créera le canal sans parent
+ ticketCategory = null;
+ }
+ }
+
+ // Générer un ID de ticket avec le préfixe du type
+ const ticketId = generateTicketId(type);
+
+ // Nettoyer le nom d'utilisateur pour le nom du canal (Discord limite à 100 caractères, pas de caractères spéciaux)
+ 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);
+
+ // Préparer les permissions pour le canal
+ const permissionOverwrites = [
+ {
+ id: interaction.guild.id,
+ deny: [PermissionFlagsBits.ViewChannel],
+ },
+ {
+ id: interaction.user.id,
+ allow: [
+ PermissionFlagsBits.ViewChannel,
+ PermissionFlagsBits.SendMessages,
+ PermissionFlagsBits.ReadMessageHistory,
+ ],
+ },
+ {
+ id: interaction.client.user.id,
+ allow: [
+ PermissionFlagsBits.ViewChannel,
+ PermissionFlagsBits.SendMessages,
+ PermissionFlagsBits.ReadMessageHistory,
+ PermissionFlagsBits.EmbedLinks,
+ PermissionFlagsBits.AttachFiles,
+ PermissionFlagsBits.ManageMessages,
+ ],
+ },
+ ];
+
+ // Créer le canal du ticket
+ let channel;
+ try {
+ // Essayer de créer le canal avec la catégorie
+ channel = await interaction.guild.channels.create({
+ name: channelName,
+ type: ChannelType.GuildText,
+ parent: ticketCategory?.id,
+ permissionOverwrites: permissionOverwrites,
+ reason: `Ticket créé par ${interaction.user.tag} (${ticketId})`,
+ });
+
+ // Si le canal a été créé sans catégorie mais qu'on voulait une catégorie, essayer de le déplacer
+ if (ticketCategory && !channel.parentId) {
+ try {
+ await channel.setParent(ticketCategory.id, { reason: `Déplacement du ticket ${ticketId} dans la catégorie` });
+ console.log(`✅ Canal ${channel.id} déplacé dans la catégorie ${ticketCategory.name}`);
+ } catch (moveErr) {
+ console.warn('⚠️ Impossible de déplacer le canal dans la catégorie:', moveErr.message);
+ }
+ }
+ } catch (createErr) {
+ // Si la création échoue avec la catégorie, essayer sans catégorie
+ if (ticketCategory && createErr.code === 50013) {
+ console.warn('⚠️ Impossible de créer le canal dans la catégorie, création sans catégorie...');
+ try {
+ channel = await interaction.guild.channels.create({
+ name: channelName,
+ type: ChannelType.GuildText,
+ permissionOverwrites: permissionOverwrites,
+ reason: `Ticket créé par ${interaction.user.tag} (${ticketId}) - Sans catégorie (permissions insuffisantes)`,
+ });
+ console.log('✅ Canal créé sans catégorie');
+ } catch (retryErr) {
+ console.error('❌ Erreur lors de la création du canal (sans catégorie):', retryErr);
+ throw retryErr;
+ }
+ } else {
+ throw createErr;
+ }
+ }
+
+ // Ajouter les permissions pour les modérateurs (rôles avec ManageMessages)
+ const modRoles = interaction.guild.roles.cache.filter(role =>
+ role.permissions.has(PermissionFlagsBits.ManageMessages) &&
+ !role.managed // Exclure les rôles gérés par des bots
+ );
+
+ for (const role of modRoles.values()) {
+ await channel.permissionOverwrites.edit(role.id, {
+ ViewChannel: true,
+ SendMessages: true,
+ ReadMessageHistory: true,
+ });
+ }
+
+ // Enregistrer le ticket dans la DB
+ 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()]
+ );
+
+ // Créer l'embed de bienvenue
+ const typeEmojis = {
+ 'Support': '💬',
+ 'Plainte': '📢',
+ 'Plainte Staff': '⚠️',
+ 'Candidature': '📝',
+ 'Problème Technique': '🔧'
+ };
+
+ const embed = new EmbedBuilder()
+ .setTitle(`${typeEmojis[type] || '🎫'} Ticket ${type} - ${ticketId}`)
+ .setColor(colors.primary)
+ .setDescription(`**Créé par:** <@${interaction.user.id}> (${interaction.user.tag})`)
+ .addFields(
+ { name: '📋 Instructions', value: 'Utilisez les boutons ci-dessous pour gérer ce ticket.\nLes modérateurs peuvent utiliser `/ticket transcript` pour générer la transcription.', inline: false }
+ )
+ .setFooter({ text: `Ticket ID: ${ticketId}` })
+ .setTimestamp();
+
+ // Boutons pour fermer et supprimer le ticket (uniquement pour modérateurs/admin)
+ const row = new ActionRowBuilder().addComponents(
+ new ButtonBuilder()
+ .setCustomId(`ticket_close_${ticketId}`)
+ .setLabel('Fermer')
+ .setStyle(ButtonStyle.Danger)
+ .setEmoji('🔒'),
+ new ButtonBuilder()
+ .setCustomId(`ticket_delete_${ticketId}`)
+ .setLabel('Supprimer')
+ .setStyle(ButtonStyle.Danger)
+ .setEmoji('🗑️')
+ );
+
+ await channel.send({ embeds: [embed], components: [row] });
+
+ // Si c'est une candidature, ouvrir le modal dans le salon
+ if (type === 'Candidature') {
+ const { ModalBuilder, TextInputBuilder, TextInputStyle, ActionRowBuilder } = require('discord.js');
+ const questions = require('./ticket.js').CANDIDATURE_QUESTIONS;
+ const modal = new ModalBuilder()
+ .setCustomId('candidature_modal')
+ .setTitle('Candidature Staff (5 max)');
+ for(let i = 0; i < Math.min(questions.length,5); i++) {
+ const input = new TextInputBuilder()
+ .setCustomId(`cand_q${i+1}`)
+ .setLabel(questions[i].slice(0, 45))
+ .setStyle(TextInputStyle.Paragraph)
+ .setRequired(true)
+ .setMaxLength(1000);
+ modal.addComponents(new ActionRowBuilder().addComponents(input));
+ }
+ await interaction.showModal(modal);
+ return;
}
- 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: 'Femboy Croissant 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()}` });
+ 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}` });
- }
+ console.error('Erreur lors de la création du ticket:', err);
+ await interaction.editReply({
+ content: `❌ Erreur lors de la création du ticket: ${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 });
- }
+ await interaction.deferReply({ ephemeral: true });
- 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);
-}
+ // Récupérer la raison depuis les options (peut être null si appelé depuis un bouton)
+ let reason = 'Aucune raison fournie';
+ if (interaction.options && typeof interaction.options.getString === 'function') {
+ reason = interaction.options.getString('reason') || 'Aucune raison fournie';
+ }
-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);
-}
+ try {
+ // Trouver le ticket associé à ce canal
+ const [tickets] = await db.query(
+ 'SELECT * FROM tickets WHERE channelId = ?',
+ [interaction.channel.id]
+ );
-// 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];
+ if (tickets.length === 0) {
+ return interaction.editReply({
+ content: '❌ Ce canal n\'est pas un ticket.'
+ });
+ }
- await db.query('UPDATE tickets SET status = ?, closedAt = ?, closedBy = ? WHERE ticketId = ?', ['Fermé', Date.now(), interaction.user.id, ticket.ticketId]);
+ const ticket = tickets[0];
- // --- 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);
- }
- // ----------------------------------
+ if (ticket.status === 'Fermé') {
+ return interaction.editReply({
+ content: '❌ Ce ticket est déjà fermé.'
+ });
+ }
- 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 }
- );
+ // Vérifier les permissions (MODÉRATEURS/ADMIN UNIQUEMENT - les utilisateurs ne peuvent plus fermer)
+ if (!interaction.member.permissions.has(PermissionFlagsBits.ManageMessages) &&
+ !interaction.member.permissions.has(PermissionFlagsBits.Administrator)) {
+ return interaction.editReply({
+ content: '❌ Seuls les modérateurs et administrateurs peuvent fermer un ticket.'
+ });
+ }
- // 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('🗑️')
- );
+ // Mettre à jour le ticket
+ await db.query(
+ 'UPDATE tickets SET status = ?, closedAt = ?, closedBy = ? WHERE ticketId = ?',
+ ['Fermé', Date.now(), interaction.user.id, ticket.ticketId]
+ );
- const closeMsg = await interaction.channel.send({ embeds: [closeEmbed], components: [row] });
+ const embed = new EmbedBuilder()
+ .setAuthor({
+ name: `${interaction.user.displayName}`,
+ iconURL: interaction.user.displayAvatarURL({ dynamic: true })
+ })
+ .setTitle('🔒 Ticket Fermé')
+ .setColor(colors.warning)
+ .setDescription(`Ce ticket a été fermé.`)
+ .addFields(
+ { name: '👮 Fermé par', value: `${interaction.user.toString()}\n\`${interaction.user.tag}\``, inline: true },
+ { name: '📝 Raison', value: reason, inline: false }
+ )
+ .setFooter({ text: `Ticket ID: ${ticket.ticketId} • ${interaction.guild.name}` })
+ .setTimestamp();
- if (!interaction.channel.name.startsWith('🔒-')) {
- await interaction.channel.setName(`🔒-${interaction.channel.name}`).catch(() => {});
- }
+ await interaction.channel.send({ embeds: [embed] });
- // VISIBILITE : On retire la vue au membre
- await interaction.channel.permissionOverwrites.edit(ticket.userId, { ViewChannel: false });
+ // Générer automatiquement le transcript
+ try {
+ // Récupérer tous les messages du ticket
+ const [messages] = await db.query(
+ 'SELECT * FROM ticket_messages WHERE ticketId = ? ORDER BY timestamp ASC',
+ [ticket.ticketId]
+ );
- // 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) {}
+ // Générer la transcription
+ let transcript = `# Transcription du Ticket ${ticket.ticketId}\n\n`;
+ transcript += `**Type:** ${ticket.type}\n`;
+ transcript += `**Créé par:** ${ticket.userTag} (${ticket.userId})\n`;
+ transcript += `**Créé le:** \n`;
+ if (ticket.closedAt) {
+ transcript += `**Fermé le:** \n`;
+ transcript += `**Fermé par:** ${ticket.closedBy ? `<@${ticket.closedBy}>` : 'N/A'}\n`;
+ }
+ transcript += `\n---\n\n`;
- await interaction.editReply({ content: '✅ Ticket fermé.' });
- } catch (err) { await interaction.editReply({ content: `❌ Erreur: ${err.message}` }); }
+ if (messages.length === 0) {
+ transcript += '*Aucun message enregistré.*\n';
+ } else {
+ for (const msg of messages) {
+ const date = new Date(msg.timestamp).toLocaleString('fr-FR');
+ transcript += `**[${date}] ${msg.userTag}:**\n${msg.content || '*Message vide*'}\n`;
+ if (msg.attachments) {
+ transcript += `*Pièces jointes: ${msg.attachments}*\n`;
+ }
+ transcript += `\n`;
+ }
+ }
+
+ // Générer le fichier HTML
+ const fs = require('fs');
+ const path = require('path');
+
+ // Organiser par type et date
+ 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 typeDir = path.join(transcriptsBaseDir, typeFolder);
+ const dateDir = path.join(typeDir, dateFolder);
+
+ // Créer les dossiers si nécessaire
+ if (!fs.existsSync(transcriptsBaseDir)) {
+ fs.mkdirSync(transcriptsBaseDir, { recursive: true });
+ }
+ if (!fs.existsSync(typeDir)) {
+ fs.mkdirSync(typeDir, { recursive: true });
+ }
+ if (!fs.existsSync(dateDir)) {
+ fs.mkdirSync(dateDir, { recursive: true });
+ }
+
+ // Copier le CSS dans le dossier transcripts pour l'ouverture locale
+ const cssSourcePath = path.join(__dirname, '../../server/public/transcript.css');
+ const cssDestPath = path.join(transcriptsBaseDir, 'transcript.css');
+ if (fs.existsSync(cssSourcePath) && !fs.existsSync(cssDestPath)) {
+ fs.copyFileSync(cssSourcePath, cssDestPath);
+ }
+
+ const candidatureResponses = ticket.type === 'Candidature' ? await getCandidatureResponses(ticket.ticketId) : null;
+ const htmlContent = generateTranscriptHTML(ticket, messages, candidatureResponses, true);
+
+ // Nom du fichier
+ const fileName = `${dateFolder}-${cleanUsername}.html`;
+ const filePath = path.join(dateDir, fileName);
+
+ // Sauvegarder le fichier HTML
+ fs.writeFileSync(filePath, htmlContent, 'utf8');
+
+ // Sauvegarder le chemin web dans la DB (utiliser transcripts/ pour correspondre au dossier réel)
+ const webPath = `transcripts/${typeFolder}/${dateFolder}/${fileName}`;
+ await db.query(
+ 'UPDATE tickets SET transcript = ?, transcriptPath = ? WHERE ticketId = ?',
+ [transcript, webPath, ticket.ticketId]
+ );
+
+ console.log(`✅ Transcript généré automatiquement pour le ticket ${ticket.ticketId}`);
+ } catch (transcriptErr) {
+ console.error('⚠️ Erreur lors de la génération automatique du transcript:', transcriptErr);
+ // On continue même si le transcript échoue
+ }
+
+ // Supprimer les permissions de l'utilisateur
+ await interaction.channel.permissionOverwrites.edit(ticket.userId, {
+ ViewChannel: false,
+ });
+
+ // Renommer le canal avec le préfixe "🔒-" si ce n'est pas déjà fait
+ try {
+ const currentName = interaction.channel.name;
+ if (!currentName.startsWith('🔒-')) {
+ await interaction.channel.setName(`🔒-${currentName}`);
+ }
+ } catch (renameErr) {
+ console.error('⚠️ Erreur lors du renommage du canal:', renameErr);
+ // On continue même si le renommage échoue
+ }
+
+ await interaction.editReply({
+ content: '✅ Ticket fermé avec succès. Le transcript a été généré automatiquement.'
+ });
+
+ } catch (err) {
+ console.error('Erreur lors de la fermeture du ticket:', err);
+ await interaction.editReply({
+ content: `❌ Erreur lors de la fermeture du ticket: ${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];
+ await interaction.deferReply({ ephemeral: true });
- const [messages] = await db.query('SELECT * FROM ticket_messages WHERE ticketId = ? ORDER BY timestamp', [ticket.ticketId]);
+ try {
+ // Trouver le ticket
+ const [tickets] = await db.query(
+ 'SELECT * FROM tickets WHERE channelId = ?',
+ [interaction.channel.id]
+ );
- // 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();
+ if (tickets.length === 0) {
+ return interaction.editReply({
+ content: '❌ Ce canal n\'est pas un ticket.'
+ });
+ }
- const transcriptsBaseDir = path.join(process.cwd(), 'transcripts');
- const dateDir = path.join(transcriptsBaseDir, typeFolder, dateFolder);
- if (!fs.existsSync(dateDir)) fs.mkdirSync(dateDir, { recursive: true });
+ const ticket = tickets[0];
- // 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');
+ // Récupérer tous les messages du ticket
+ const [messages] = await db.query(
+ 'SELECT * FROM ticket_messages WHERE ticketId = ? ORDER BY timestamp ASC',
+ [ticket.ticketId]
+ );
- const webPath = `transcripts/${typeFolder}/${dateFolder}/${fileName}`;
- const webUrl = process.env.TRANSCRIPT_WEB_URL || 'transcript.syxpi.fr';
+ // Générer la transcription
+ let transcript = `# Transcription du Ticket ${ticket.ticketId}\n\n`;
+ transcript += `**Type:** ${ticket.type}\n`;
+ transcript += `**Créé par:** ${ticket.userTag} (${ticket.userId})\n`;
+ transcript += `**Créé le:** \n`;
+ if (ticket.closedAt) {
+ transcript += `**Fermé le:** \n`;
+ transcript += `**Fermé par:** ${ticket.closedBy ? `<@${ticket.closedBy}>` : 'N/A'}\n`;
+ }
+ transcript += `\n---\n\n`;
- // Mise à jour DB
- const dbPath = `transcripts/${typeFolder}/${dateFolder}/${fileName}`;
- await db.query('UPDATE tickets SET transcriptPath = ? WHERE ticketId = ?', [dbPath, ticket.ticketId]);
+ if (messages.length === 0) {
+ transcript += '*Aucun message enregistré.*\n';
+ } else {
+ for (const msg of messages) {
+ const date = new Date(msg.timestamp).toLocaleString('fr-FR');
+ transcript += `**[${date}] ${msg.userTag}:**\n${msg.content || '*Message vide*'}\n`;
+ if (msg.attachments) {
+ transcript += `*Pièces jointes: ${msg.attachments}*\n`;
+ }
+ transcript += `\n`;
+ }
+ }
- 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}` });
- }
+ // Les réponses de candidature seront incluses dans le HTML
+
+ // Sauvegarder la transcription dans la DB
+ await db.query(
+ 'UPDATE tickets SET transcript = ? WHERE ticketId = ?',
+ [transcript, ticket.ticketId]
+ );
+
+ // Générer le fichier HTML
+ const fs = require('fs');
+ const path = require('path');
+
+ // Organiser par type et date (ex: transcripts/Support/2025-11-08/)
+ const date = new Date(ticket.createdAt);
+ const dateFolder = date.toISOString().split('T')[0]; // Format: YYYY-MM-DD
+ const typeFolder = ticket.type.toLowerCase().replace(/\s+/g, '-'); // Format: support, plainte-staff, etc.
+ const cleanUsername = ticket.userTag.replace(/[^a-zA-Z0-9-_]/g, '-').toLowerCase();
+
+ const transcriptsBaseDir = path.join(process.cwd(), 'transcripts');
+ const typeDir = path.join(transcriptsBaseDir, typeFolder);
+ const dateDir = path.join(typeDir, dateFolder);
+
+ // Créer les dossiers si nécessaire
+ if (!fs.existsSync(transcriptsBaseDir)) {
+ fs.mkdirSync(transcriptsBaseDir, { recursive: true });
+ }
+ if (!fs.existsSync(typeDir)) {
+ fs.mkdirSync(typeDir, { recursive: true });
+ }
+ if (!fs.existsSync(dateDir)) {
+ fs.mkdirSync(dateDir, { recursive: true });
+ }
+
+ // Copier le CSS dans le dossier transcripts pour l'ouverture locale
+ const cssSourcePath = path.join(__dirname, '../../server/public/transcript.css');
+ const cssDestPath = path.join(transcriptsBaseDir, 'transcript.css');
+ if (fs.existsSync(cssSourcePath) && !fs.existsSync(cssDestPath)) {
+ fs.copyFileSync(cssSourcePath, cssDestPath);
+ }
+
+ // Générer le HTML
+ const htmlContent = generateTranscriptHTML(ticket, messages, ticket.type === 'Candidature' ? await getCandidatureResponses(ticket.ticketId) : null, true);
+
+ // Nom de fichier : date-username.html (ex: 2025-11-08-syxpi.html)
+ const fileName = `${dateFolder}-${cleanUsername}.html`;
+ const filePath = path.join(dateDir, fileName);
+
+ // Sauvegarder le chemin relatif dans la DB pour accès web (utiliser transcripts/ pour correspondre au dossier réel)
+ const webPath = `transcripts/${typeFolder}/${dateFolder}/${fileName}`;
+ await db.query(
+ 'UPDATE tickets SET transcript = ?, transcriptPath = ? WHERE ticketId = ?',
+ [transcript, webPath, ticket.ticketId]
+ );
+
+ fs.writeFileSync(filePath, htmlContent, 'utf8');
+
+ // Envoyer le fichier avec info sur le chemin web
+ const webUrl = process.env.TRANSCRIPT_WEB_URL || 'transcript.syxpi.fr';
+ const fullWebPath = `https://${webUrl}/${webPath}`;
+
+ await interaction.editReply({
+ content: `✅ Transcription générée !\n\n📄 **Fichier local:** \`${fileName}\`\n🌐 **URL web:** ${fullWebPath}\n\n*Note: L'URL web nécessite une authentification Discord.*`,
+ files: [{
+ attachment: filePath,
+ name: fileName
+ }]
+ });
+
+ } catch (err) {
+ console.error('Erreur lors de la génération de la transcription:', err);
+ await interaction.editReply({
+ content: `❌ Erreur lors de la génération de la transcription: ${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");
-}
+ await interaction.deferReply({ ephemeral: true });
-async function handleReopenModal(interaction, slashReason = null) {
- if (!slashReason) await interaction.deferReply({ flags: MessageFlags.Ephemeral });
- const reason = slashReason || interaction.fields.getTextInputValue('reason');
+ // Vérifier les permissions
+ if (!interaction.member.permissions.has(PermissionFlagsBits.ManageMessages)) {
+ return interaction.editReply({
+ content: '❌ Tu n\'as pas la permission de rouvrir un ticket.'
+ });
+ }
- try {
- const [tickets] = await db.query('SELECT * FROM tickets WHERE channelId = ?', [interaction.channel.id]);
- const ticket = tickets[0];
+ try {
+ const [tickets] = await db.query(
+ 'SELECT * FROM tickets WHERE channelId = ?',
+ [interaction.channel.id]
+ );
- await db.query('UPDATE tickets SET status = ?, closedAt = NULL, closedBy = NULL WHERE ticketId = ?', ['Ouvert', ticket.ticketId]);
+ if (tickets.length === 0) {
+ return interaction.editReply({
+ content: '❌ Ce canal n\'est pas un ticket.'
+ });
+ }
- // Restituer la vue
- await interaction.channel.permissionOverwrites.edit(ticket.userId, { ViewChannel: true, SendMessages: true });
+ const ticket = tickets[0];
- if (interaction.channel.name.startsWith('🔒-')) {
- await interaction.channel.setName(interaction.channel.name.replace('🔒-', ''));
- }
+ if (ticket.status !== 'Fermé') {
+ return interaction.editReply({
+ content: '❌ Ce ticket n\'est pas fermé.'
+ });
+ }
- 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}\`\`\`` });
+ // Rouvrir le ticket
+ await db.query(
+ 'UPDATE tickets SET status = ?, closedAt = NULL, closedBy = NULL WHERE ticketId = ?',
+ ['Ouvert', ticket.ticketId]
+ );
- // IMPORTANT : On remet le bouton FERMER
- const row = new ActionRowBuilder().addComponents(
- new ButtonBuilder().setCustomId(`ticket_close_${ticket.ticketId}`).setLabel('Fermer').setStyle(ButtonStyle.Danger).setEmoji('🔒')
- );
+ // Restaurer les permissions
+ await interaction.channel.permissionOverwrites.edit(ticket.userId, {
+ ViewChannel: true,
+ SendMessages: true,
+ ReadMessageHistory: true,
+ });
- await interaction.channel.send({ embeds: [embed], components: [row] });
+ // Retirer le préfixe "🔒-" du nom du canal si présent
+ try {
+ const currentName = interaction.channel.name;
+ if (currentName.startsWith('🔒-')) {
+ await interaction.channel.setName(currentName.replace('🔒-', ''));
+ }
+ } catch (renameErr) {
+ console.error('⚠️ Erreur lors du renommage du canal:', renameErr);
+ // On continue même si le renommage échoue
+ }
- // 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 embed = new EmbedBuilder()
+ .setAuthor({
+ name: `${interaction.user.displayName}`,
+ iconURL: interaction.user.displayAvatarURL({ dynamic: true })
+ })
+ .setTitle('🔓 Ticket Rouvert')
+ .setColor(colors.success)
+ .setDescription(`Ce ticket a été rouvert.`)
+ .addFields(
+ { name: '👮 Rouvert par', value: `${interaction.user.toString()}\n\`${interaction.user.tag}\``, inline: true }
+ )
+ .setFooter({ text: `Ticket ID: ${ticket.ticketId} • ${interaction.guild.name}` })
+ .setTimestamp();
- const msg = { content: '✅ Ticket rouvert.' };
- if (interaction.replied || interaction.deferred) await interaction.editReply(msg);
- else await interaction.reply({ ...msg, flags: MessageFlags.Ephemeral });
+ await interaction.channel.send({ embeds: [embed] });
- } catch (err) { console.error(err); }
+ await interaction.editReply({
+ content: '✅ Ticket rouvert avec succès.'
+ });
+
+ } catch (err) {
+ console.error('Erreur lors de la réouverture du ticket:', err);
+ await interaction.editReply({
+ content: `❌ Erreur lors de la réouverture du ticket: ${err.message}`
+ });
+ }
}
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 });
+ await interaction.deferReply({ ephemeral: true });
- const embed = new EmbedBuilder()
- .setTitle('👤 Utilisateur Ajouté')
- .setColor(colors.info)
- .setDescription(`${user.toString()} a été ajouté au ticket par ${interaction.user.toString()}.`)
- .setTimestamp();
+ try {
+ // Trouver le ticket associé à ce canal
+ const [tickets] = await db.query(
+ 'SELECT * FROM tickets WHERE channelId = ?',
+ [interaction.channel.id]
+ );
- await interaction.channel.send({ embeds: [embed] });
- await interaction.editReply({ content: `✅ ${user.tag} ajouté.` });
- } catch (err) {
- await interaction.editReply({ content: `❌ Erreur: ${err.message}` });
- }
+ if (tickets.length === 0) {
+ return interaction.editReply({
+ content: '❌ Ce canal n\'est pas un ticket.'
+ });
+ }
+
+ const ticket = tickets[0];
+
+ // Vérifier que le ticket n'est pas fermé
+ if (ticket.status === 'Fermé' || ticket.status === 'Supprimé') {
+ return interaction.editReply({
+ content: '❌ Vous ne pouvez pas ajouter un utilisateur à un ticket fermé ou supprimé.'
+ });
+ }
+
+ // Récupérer l'utilisateur à ajouter
+ const userToAdd = interaction.options.getUser('user');
+
+ if (!userToAdd) {
+ return interaction.editReply({
+ content: '❌ Utilisateur introuvable.'
+ });
+ }
+
+ // Vérifier que l'utilisateur n'est pas un bot (optionnel, mais recommandé)
+ if (userToAdd.bot) {
+ return interaction.editReply({
+ content: '❌ Vous ne pouvez pas ajouter un bot au ticket.'
+ });
+ }
+
+ // Vérifier que l'utilisateur n'est pas déjà dans le ticket
+ const member = await interaction.guild.members.fetch(userToAdd.id).catch(() => null);
+ if (!member) {
+ return interaction.editReply({
+ content: '❌ Cet utilisateur n\'est pas sur le serveur.'
+ });
+ }
+
+ // Vérifier si l'utilisateur a déjà accès au canal
+ try {
+ const channelPermissions = interaction.channel.permissionsFor(member);
+ if (channelPermissions && channelPermissions.has(PermissionFlagsBits.ViewChannel)) {
+ return interaction.editReply({
+ content: `❌ ${userToAdd.toString()} a déjà accès à ce ticket.`
+ });
+ }
+ } catch (permErr) {
+ // Si on ne peut pas vérifier les permissions, on continue quand même
+ console.warn('⚠️ Erreur lors de la vérification des permissions:', permErr);
+ }
+
+ // Ajouter les permissions pour l'utilisateur
+ await interaction.channel.permissionOverwrites.edit(userToAdd.id, {
+ ViewChannel: true,
+ SendMessages: true,
+ ReadMessageHistory: true,
+ });
+
+ const embed = new EmbedBuilder()
+ .setAuthor({
+ name: `${interaction.user.displayName}`,
+ iconURL: interaction.user.displayAvatarURL({ dynamic: true })
+ })
+ .setTitle('✅ Utilisateur Ajouté')
+ .setColor(colors.success)
+ .setDescription(`${userToAdd.toString()} a été ajouté au ticket.`)
+ .setThumbnail(userToAdd.displayAvatarURL({ dynamic: true }))
+ .addFields(
+ { name: '👤 Utilisateur ajouté', value: `${userToAdd.toString()}\n\`${userToAdd.tag}\``, inline: true },
+ { name: '👮 Ajouté par', value: `${interaction.user.toString()}\n\`${interaction.user.tag}\``, inline: true }
+ )
+ .setFooter({ text: `Ticket ID: ${ticket.ticketId} • ${interaction.guild.name}` })
+ .setTimestamp();
+
+ await interaction.channel.send({ embeds: [embed] });
+
+ await interaction.editReply({
+ content: `✅ ${userToAdd.toString()} a été ajouté au ticket avec succès.`
+ });
+
+ } catch (err) {
+ console.error('Erreur lors de l\'ajout d\'un utilisateur au ticket:', err);
+ if (err.code === 50013) {
+ await interaction.editReply({
+ content: '❌ Je n\'ai pas les permissions nécessaires pour ajouter cet utilisateur au ticket.'
+ });
+ } else {
+ await interaction.editReply({
+ content: `❌ Erreur lors de l'ajout de l'utilisateur: ${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.' });
+ await interaction.deferReply({ ephemeral: true });
- 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];
+ // Vérifier les permissions (MODÉRATEURS/ADMIN UNIQUEMENT)
+ if (!interaction.member.permissions.has(PermissionFlagsBits.ManageMessages) &&
+ !interaction.member.permissions.has(PermissionFlagsBits.Administrator)) {
+ return interaction.editReply({
+ content: '❌ Seuls les modérateurs et administrateurs peuvent réclamer un ticket.'
+ });
+ }
- 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é.' });
- }
+ try {
+ // Trouver le ticket associé à ce canal
+ const [tickets] = await db.query(
+ 'SELECT * FROM tickets WHERE channelId = ?',
+ [interaction.channel.id]
+ );
- if (ticket.claimedBy) return interaction.editReply({ content: `❌ Déjà réclamé par quelqu'un d'autre.` });
+ if (tickets.length === 0) {
+ return interaction.editReply({
+ content: '❌ Ce canal n\'est pas un ticket.'
+ });
+ }
- await db.query('UPDATE tickets SET claimedBy = ?, claimedByTag = ?, claimedAt = ? WHERE ticketId = ?', [interaction.user.id, interaction.user.tag, Date.now(), ticket.ticketId]);
+ const ticket = tickets[0];
- 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();
+ // Vérifier que le ticket n'est pas fermé ou supprimé
+ if (ticket.status === 'Fermé' || ticket.status === 'Supprimé') {
+ return interaction.editReply({
+ content: '❌ Vous ne pouvez pas réclamer un ticket fermé ou supprimé.'
+ });
+ }
- await interaction.channel.send({ embeds: [embed] });
- await interaction.editReply({ content: '✅ Ticket réclamé.' });
- } catch (err) {
- await interaction.editReply({ content: `❌ Erreur: ${err.message}` });
- }
+ // Vérifier si le ticket est déjà claim
+ if (ticket.claimedBy && ticket.claimedBy !== interaction.user.id) {
+ const claimedByUser = await interaction.client.users.fetch(ticket.claimedBy).catch(() => null);
+ return interaction.editReply({
+ content: `❌ Ce ticket est déjà réclamé par ${claimedByUser ? claimedByUser.toString() : 'un autre modérateur'}.`
+ });
+ }
+
+ // Si l'utilisateur a déjà claim le ticket, lui permettre de le "unclaim"
+ if (ticket.claimedBy === interaction.user.id) {
+ await db.query(
+ 'UPDATE tickets SET claimedBy = NULL, claimedAt = NULL, claimedByTag = NULL WHERE ticketId = ?',
+ [ticket.ticketId]
+ );
+
+ const embed = new EmbedBuilder()
+ .setAuthor({
+ name: `${interaction.user.displayName}`,
+ iconURL: interaction.user.displayAvatarURL({ dynamic: true })
+ })
+ .setTitle('✅ Ticket Non Réclamé')
+ .setColor(colors.info)
+ .setDescription(`Vous avez libéré ce ticket.`)
+ .setFooter({ text: `Ticket ID: ${ticket.ticketId} • ${interaction.guild.name}` })
+ .setTimestamp();
+
+ await interaction.channel.send({ embeds: [embed] });
+
+ return interaction.editReply({
+ content: '✅ Ticket libéré avec succès.'
+ });
+ }
+
+ // Claim le ticket (on stocke aussi le tag du modérateur pour l'affichage dans la WebUI)
+ await db.query(
+ 'UPDATE tickets SET claimedBy = ?, claimedAt = ?, claimedByTag = ? WHERE ticketId = ?',
+ [interaction.user.id, Date.now(), interaction.user.tag, ticket.ticketId]
+ );
+
+ const embed = new EmbedBuilder()
+ .setAuthor({
+ name: `${interaction.user.displayName}`,
+ iconURL: interaction.user.displayAvatarURL({ dynamic: true })
+ })
+ .setTitle('✅ Ticket Réclamé')
+ .setColor(colors.success)
+ .setDescription(`Ce ticket a été réclamé par ${interaction.user.toString()}.`)
+ .addFields(
+ { name: '👮 Réclamé par', value: `${interaction.user.toString()}\n\`${interaction.user.tag}\``, inline: true }
+ )
+ .setFooter({ text: `Ticket ID: ${ticket.ticketId} • ${interaction.guild.name}` })
+ .setTimestamp();
+
+ await interaction.channel.send({ embeds: [embed] });
+
+ await interaction.editReply({
+ content: '✅ Ticket réclamé avec succès.'
+ });
+
+ } catch (err) {
+ console.error('Erreur lors de la réclamation du ticket:', err);
+ await interaction.editReply({
+ content: `❌ Erreur lors de la réclamation du ticket: ${err.message}`
+ });
+ }
}
async function handleDelete(interaction) {
- // Suppression directe sans modal
- await handleDeleteModal(interaction, "Suppression demandée par l'utilisateur");
+ await interaction.deferReply({ ephemeral: true });
+
+ try {
+ // Trouver le ticket associé à ce canal
+ 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];
+
+ // Vérifier les permissions (MODÉRATEURS/ADMIN UNIQUEMENT)
+ if (!interaction.member.permissions.has(PermissionFlagsBits.ManageMessages) &&
+ !interaction.member.permissions.has(PermissionFlagsBits.Administrator)) {
+ return interaction.editReply({
+ content: '❌ Seuls les modérateurs et administrateurs peuvent supprimer un ticket.'
+ });
+ }
+
+ // Générer le transcript avant de supprimer (si pas déjà fait)
+ if (ticket.status !== 'Fermé') {
+ try {
+ // Générer le transcript avant suppression
+ const [messages] = await db.query(
+ 'SELECT * FROM ticket_messages WHERE ticketId = ? ORDER BY timestamp ASC',
+ [ticket.ticketId]
+ );
+
+ const fs = require('fs');
+ const path = require('path');
+
+ 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 typeDir = path.join(transcriptsBaseDir, typeFolder);
+ const dateDir = path.join(typeDir, dateFolder);
+
+ if (!fs.existsSync(dateDir)) {
+ fs.mkdirSync(dateDir, { recursive: true });
+ }
+
+ const candidatureResponses = ticket.type === 'Candidature' ? await getCandidatureResponses(ticket.ticketId) : null;
+ const htmlContent = generateTranscriptHTML({ ...ticket, status: 'Fermé', closedAt: Date.now(), closedBy: interaction.user.id }, messages, candidatureResponses, true);
+
+ const fileName = `${dateFolder}-${cleanUsername}.html`;
+ const filePath = path.join(dateDir, fileName);
+ fs.writeFileSync(filePath, htmlContent, 'utf8');
+
+ const webPath = `transcripts/${typeFolder}/${dateFolder}/${fileName}`;
+ await db.query(
+ 'UPDATE tickets SET transcriptPath = ?, status = ?, closedAt = ?, closedBy = ? WHERE ticketId = ?',
+ [webPath, 'Fermé', Date.now(), interaction.user.id, ticket.ticketId]
+ );
+ } catch (transcriptErr) {
+ console.error('⚠️ Erreur lors de la génération du transcript avant suppression:', transcriptErr);
+ }
+ }
+
+ // Supprimer le canal
+ await interaction.channel.delete(`Ticket supprimé par ${interaction.user.tag}`);
+
+ // Mettre à jour le ticket dans la DB (marquer comme supprimé)
+await db.query(
+ 'UPDATE tickets SET status = ?, closedAt = ?, closedBy = ? WHERE ticketId = ?',
+ ['Supprimé', Date.now(), interaction.user.id, ticket.ticketId]
+ ); // (Assure-toi que la valeur Supprimé est autorisée dans ENUM)
+
+ // Note: On ne peut pas envoyer de réponse car le canal est supprimé
+ // L'utilisateur verra la réponse ephemeral avant la suppression
+
+ } catch (err) {
+ console.error('Erreur lors de la suppression du ticket:', err);
+ if (err.code === 50013) {
+ await interaction.editReply({
+ content: '❌ Je n\'ai pas les permissions nécessaires pour supprimer ce canal.'
+ });
+ } else {
+ await interaction.editReply({
+ content: `❌ Erreur lors de la suppression du ticket: ${err.message}`
+ });
+ }
+ }
}
-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: 'Femboy Croissant 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
+// Exporter handleCreate, handleClose et handleDelete pour l'utiliser dans interactionCreate
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.CANDIDATURE_QUESTIONS = CANDIDATURE_QUESTIONS;
+module.exports.generateTicketId = generateTicketId;
+// Handler pour la soumission du modal de candidature
+commandModule.handleCandidatureModalSubmit = async function(interaction) {
+ const db = require('../../functions/database/db.js');
+ // Pas de require/référence module ici, tout est local dans ce fichier !
+ const { EmbedBuilder, ChannelType, PermissionFlagsBits, ActionRowBuilder, ButtonBuilder, ButtonStyle } = require('discord.js');
+ try {
+ // Générer ticketId, permissions, etc
+ const ticketId = generateTicketId('Candidature');
+ const cleanUsername = interaction.user.username.toLowerCase().replace(/[^a-z0-9-]/g, '').substring(0, 20);
+ const channelName = `candidature-${cleanUsername}`.substring(0, 100);
+ const permissionOverwrites = [
+ {
+ id: interaction.guild.id,
+ deny: [PermissionFlagsBits.ViewChannel],
+ },
+ {
+ id: interaction.user.id,
+ allow: [
+ PermissionFlagsBits.ViewChannel,
+ PermissionFlagsBits.SendMessages,
+ PermissionFlagsBits.ReadMessageHistory,
+ ],
+ },
+ {
+ id: interaction.client.user.id,
+ allow: [
+ PermissionFlagsBits.ViewChannel,
+ PermissionFlagsBits.SendMessages,
+ PermissionFlagsBits.ReadMessageHistory,
+ PermissionFlagsBits.EmbedLinks,
+ PermissionFlagsBits.AttachFiles,
+ PermissionFlagsBits.ManageMessages,
+ ],
+ },
+ ];
+ // Chercher ou créer la catégorie "Tickets"
+ let ticketCategory = interaction.guild.channels.cache.find(ch => ch.type === ChannelType.GuildCategory && ch.name.toLowerCase().includes('ticket'));
+ let channel;
+ if (!ticketCategory) {
+ ticketCategory = null; // Créer sans catégorie si non trouvée
+ }
+ channel = await interaction.guild.channels.create({
+ name: channelName,
+ type: ChannelType.GuildText,
+ parent: ticketCategory?.id,
+ permissionOverwrites,
+ reason: `Ticket candidature créé via Modal by ${interaction.user.tag} (${ticketId})`,
+ });
+ // Ajout BDD
+ 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, 'Candidature', 'Ouvert', Date.now()]
+ );
+ // Réponses modal -> BDD
+ for (let i = 0; i < Math.min(CANDIDATURE_QUESTIONS.length,5); i++) {
+ const qLabel = CANDIDATURE_QUESTIONS[i];
+ const field = interaction.fields.getTextInputValue(`cand_q${i+1}`);
+ await db.query(
+ 'INSERT INTO candidature_responses (ticketId, questionNumber, question, response, timestamp) VALUES (?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE response = VALUES(response), timestamp = VALUES(timestamp)',
+ [ticketId, i+1, qLabel, field, Date.now()]
+ );
+ }
+ // Staff perms
+ 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,
+ });
+ }
+ // Embed recap dans le ticket
+ const embed = new EmbedBuilder()
+ .setTitle('✅ Nouvelle candidature staff !')
+ .setColor(0x10b981)
+ .setDescription(`<@${interaction.user.id}> a complété sa candidature. Voici ses réponses :`)
+ .addFields(...CANDIDATURE_QUESTIONS.map((q, idx) => ({
+ name: `Question ${idx+1}`,
+ value: `**${q}**\n${interaction.fields.getTextInputValue(`cand_q${idx+1}`)}`,
+ })))
+ .setFooter({ text: `Ticket ID: ${ticketId}` })
+ .setTimestamp();
+ await channel.send({ embeds: [embed] });
+ await interaction.reply({
+ content: `✅ Salon de candidature créé ! ${channel.toString()}\nLe staff va étudier ta demande.`,
+ ephemeral: true
+ });
+ } catch (err) {
+ console.error('Erreur candidature modal:', err);
+ try {
+ await interaction.reply({
+ content: '❌ Une erreur est survenue lors de la soumission de ta candidature.',
+ ephemeral: true
+ });
+ } catch {}
+ }
+};
module.exports = commandModule;
module.exports.CANDIDATURE_QUESTIONS = CANDIDATURE_QUESTIONS;
-module.exports.generateTicketId = generateTicketId;
\ No newline at end of file
diff --git a/commands/utility/ping.js b/commands/utility/ping.js
index d32f9e5..973ce03 100644
--- a/commands/utility/ping.js
+++ b/commands/utility/ping.js
@@ -6,8 +6,7 @@ module.exports = {
.setName('ping')
.setDescription('Affiche la latence du bot.'),
async execute(interaction) {
- await interaction.deferReply();
- const sent = await interaction.fetchReply();
+ const sent = await interaction.deferReply({ fetchReply: true });
const apiLatency = Math.round(interaction.client.ws.ping);
const roundTripLatency = sent.createdTimestamp - interaction.createdTimestamp;
@@ -30,4 +29,4 @@ module.exports = {
await interaction.editReply({ embeds: [embed] });
},
-};
\ No newline at end of file
+};
diff --git a/commands/xp/bumptime.js b/commands/xp/bumptime.js
index 17edaf3..edb434b 100644
--- a/commands/xp/bumptime.js
+++ b/commands/xp/bumptime.js
@@ -1,79 +1,86 @@
-const { SlashCommandBuilder, EmbedBuilder, MessageFlags } = require('discord.js');
+const { SlashCommandBuilder, EmbedBuilder } = require('discord.js');
const db = require('../../functions/database/db.js');
-const { colors, emojis } = require('../../utils/constants.js');
+const { colors } = 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
+ 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({ ephemeral: true });
+
+ try {
+ // Récupérer le dernier bump pour ce serveur
+ 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 = lastBump.bumpTime;
+ const now = Date.now();
+ const timeSinceBump = now - bumpTime;
+ const twoHours = 2 * 60 * 60 * 1000;
+ const timeUntilNextBump = twoHours - timeSinceBump;
+
+ // Récupérer l'utilisateur qui a fait le bump
+ const user = await interaction.client.users.fetch(lastBump.userId).catch(() => null);
+ const userTag = user ? user.tag : `ID: ${lastBump.userId}`;
+
+ const { emojis } = require('../../utils/constants');
+
+ const embed = new EmbedBuilder()
+ .setAuthor({
+ name: `${interaction.guild.name}`,
+ iconURL: interaction.guild.iconURL({ dynamic: true }) || undefined
+ })
+ .setTimestamp();
+
+ if (timeUntilNextBump > 0) {
+ // Le prochain bump n'est pas encore disponible
+ 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 {
+ // Le prochain bump est disponible
+ 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 lors de la vérification du bump:', err);
+ await interaction.editReply({
+ content: '❌ Erreur lors de la vérification du bump.'
+ });
+ }
+ },
+};
+
diff --git a/commands/xp/leaderboard.js b/commands/xp/leaderboard.js
index 0462858..bef6b37 100644
--- a/commands/xp/leaderboard.js
+++ b/commands/xp/leaderboard.js
@@ -1,65 +1,72 @@
const { SlashCommandBuilder, EmbedBuilder } = require('discord.js');
const { getLeaderboard, getXPProgress } = require('../../functions/xp/xp.js');
-const { colors, emojis } = require('../../utils/constants');
+const { colors } = 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
+ 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.'
+ });
+ }
+
+ // Récupérer les informations des utilisateurs
+ 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 les erreurs
+ }
+ }
+
+ const { emojis } = require('../../utils/constants');
+
+ // Créer la description du classement
+ 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] });
+ },
+};
+
diff --git a/commands/xp/level.js b/commands/xp/level.js
index 23bf72d..2329fc4 100644
--- a/commands/xp/level.js
+++ b/commands/xp/level.js
@@ -1,97 +1,96 @@
const { SlashCommandBuilder, EmbedBuilder } = require('discord.js');
const { getUserXP, getXPProgress, getXPForNextLevel, getUserRank } = require('../../functions/xp/xp.js');
-const { colors, emojis } = require('../../utils/constants');
+const { colors } = 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`;
+ 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);
+
+ // Créer une barre de progression visuelle
+ const barLength = 20;
+ let filled = 0;
+ let empty = barLength;
+
+ // Calculer la barre de progression seulement si progress.needed > 0
+ 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);
+
+ const { emojis } = require('../../utils/constants');
+
+ 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: `\`${Math.floor((userXP.totalVoiceTime || 0) / 60)}h\``,
+ inline: true
+ }
+ )
+ .setFooter({
+ text: `${interaction.guild.name} • Niveau ${userXP.level}`,
+ iconURL: interaction.guild.iconURL({ dynamic: true }) || undefined
+ })
+ .setTimestamp();
+
+ await interaction.editReply({ embeds: [embed] });
+ },
+};
- 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
index 398a8ff..1fdd202 100644
--- a/commands/xp/resetlevel.js
+++ b/commands/xp/resetlevel.js
@@ -1,116 +1,165 @@
-const { SlashCommandBuilder, EmbedBuilder, PermissionFlagsBits, MessageFlags } = require('discord.js');
+const { SlashCommandBuilder, EmbedBuilder, PermissionFlagsBits } = require('discord.js');
const db = require('../../functions/database/db.js');
const { getUserXP } = require('../../functions/xp/xp.js');
-const { colors, emojis } = require('../../utils/constants');
+const { colors } = 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
+ 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({ ephemeral: true });
+
+ // Vérifier les permissions (Modérateur ou Admin)
+ if (!interaction.member.permissions.has(PermissionFlagsBits.ManageMessages) &&
+ !interaction.member.permissions.has(PermissionFlagsBits.Administrator)) {
+ return interaction.editReply({
+ content: '❌ Tu n\'as pas la permission d\'utiliser cette commande. (Modérateur/Admin requis)'
+ });
+ }
+
+ 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é !'
+ });
+ }
+
+ // Vérifier que l'utilisateur ne se reset pas lui-même
+ if (target.id === interaction.user.id) {
+ return interaction.editReply({
+ content: '❌ Tu ne peux pas te reset toi-même.'
+ });
+ }
+
+ // Vérifier que l'utilisateur ne reset pas le propriétaire du serveur
+ if (target.id === interaction.guild.ownerId) {
+ return interaction.editReply({
+ content: '❌ Tu ne peux pas reset le niveau du propriétaire du serveur.'
+ });
+ }
+
+ // Vérifier les rôles (ne pas permettre de reset quelqu'un avec un rôle supérieur)
+ 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 {
+ // Récupérer les données XP de l'utilisateur avant le reset
+ 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;
+
+ // Supprimer complètement l'utilisateur de la table user_xp
+ await db.query(
+ 'DELETE FROM user_xp WHERE userId = ? AND guildId = ?',
+ [target.id, interaction.guild.id]
+ );
+
+ // Supprimer aussi les logs XP de l'utilisateur (optionnel, pour un reset complet)
+ await db.query(
+ 'DELETE FROM xp_logs WHERE userId = ? AND guildId = ?',
+ [target.id, interaction.guild.id]
+ );
+
+ // Logger l'action dans la table logs
+ 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 { emojis } = require('../../utils/constants');
+
+ // Envoyer un log dans le canal de logs
+ 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] });
+
+ // Réponse à l'utilisateur
+ 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 lors du reset de niveau:', err);
+ await interaction.editReply({
+ content: `❌ Erreur lors du reset de niveau: ${err.message}`
+ });
+ }
+ },
+};
+
diff --git a/commands/xp/xpexclude.js b/commands/xp/xpexclude.js
index 9003e96..a109a7a 100644
--- a/commands/xp/xpexclude.js
+++ b/commands/xp/xpexclude.js
@@ -1,140 +1,154 @@
-const { SlashCommandBuilder, EmbedBuilder, PermissionFlagsBits, MessageFlags } = require('discord.js');
+const { SlashCommandBuilder, EmbedBuilder, PermissionFlagsBits } = require('discord.js');
const db = require('../../functions/database/db.js');
const { isChannelExcluded } = require('../../functions/xp/xp.js');
-const { colors, emojis } = require('../../utils/constants');
+const { colors } = 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
+ 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({ ephemeral: true });
+
+ // Vérifier les permissions (Admin uniquement)
+ 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.'
+ });
+ }
+
+ // Vérifier si déjà exclus
+ 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.`
+ });
+ }
+
+ // Ajouter l'exclusion
+ 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 { emojis } = require('../../utils/constants');
+
+ 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');
+
+ // Vérifier si exclu
+ 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.`
+ });
+ }
+
+ // Retirer l'exclusion
+ await db.query(
+ 'DELETE FROM xp_excluded_channels WHERE channelId = ? AND guildId = ?',
+ [channel.id, interaction.guild.id]
+ );
+
+ const { emojis } = require('../../utils/constants');
+
+ 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 { emojis } = require('../../utils/constants');
+
+ 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 lors de la gestion des exclusions XP:', err);
+ await interaction.editReply({
+ content: `❌ Erreur: ${err.message}`
+ });
+ }
+ },
+};
+
diff --git a/env.example b/env.example
index b3b001c..63443c9 100644
--- a/env.example
+++ b/env.example
@@ -1,4 +1,4 @@
- ===========================================
+# ===========================================
# Discord Bot Configuration
# ===========================================
diff --git a/events/interactionCreate.js b/events/interactionCreate.js
index a4137bf..9c2b55a 100644
--- a/events/interactionCreate.js
+++ b/events/interactionCreate.js
@@ -1,119 +1,141 @@
-const { Events, ModalBuilder, TextInputBuilder, TextInputStyle, ActionRowBuilder, MessageFlags } = require('discord.js');
+const { Events, EmbedBuilder, PermissionFlagsBits } = require('discord.js');
const chalk = require('chalk');
+const db = require('../functions/database/db.js');
+const { colors } = require('../utils/constants');
module.exports = {
- name: Events.InteractionCreate,
- async execute(interaction) {
- try {
- // --- 1. GESTION DES MODALS (Soumission) ---
- if (interaction.isModalSubmit()) {
- const ticketModule = require('../commands/ticket/ticket.js');
+ name: Events.InteractionCreate,
+ async execute(interaction) {
+ // Gérer la soumission des modals (ex: candidature staff)
+ if (interaction.isModalSubmit()) {
+ const ticketModule = require('../commands/ticket/ticket.js');
+ if (interaction.customId === 'candidature_modal') {
+ await ticketModule.handleCandidatureModalSubmit(interaction);
+ return;
+ }
+ }
- // 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(chalk.red(`Erreur lors de l'exécution d'une interaction :`), error);
- if (interaction.replied || interaction.deferred) {
- await interaction.followUp({ content: 'Une erreur est survenue lors de l\'exécution de cette interaction !', flags: MessageFlags.Ephemeral });
- } else {
- await interaction.reply({ content: 'Une erreur est survenue lors de l\'exécution de cette interaction !', flags: MessageFlags.Ephemeral });
- }
+ // Gérer les boutons
+ if (interaction.isButton()) {
+// Création de ticket via bouton
+ if (interaction.customId === 'ticket_create_candidature') {
+ // Sur clic, montrer le modal candidature, sans ticket encore
+ const { ModalBuilder, TextInputBuilder, TextInputStyle, ActionRowBuilder } = require('discord.js');
+ const questions = require('../commands/ticket/ticket.js').CANDIDATURE_QUESTIONS;
+ const modal = new ModalBuilder()
+ .setCustomId('candidature_modal')
+ .setTitle('Candidature Staff (5 max)');
+ for(let i = 0; i < Math.min(questions.length,5); i++) {
+ const input = new TextInputBuilder()
+ .setCustomId(`cand_q${i+1}`)
+ .setLabel(questions[i].slice(0, 45))
+ .setStyle(TextInputStyle.Paragraph)
+ .setRequired(true)
+ .setMaxLength(1000);
+ modal.addComponents(new ActionRowBuilder().addComponents(input));
}
- },
+ await interaction.showModal(modal);
+ return;
+ }
+ if (interaction.customId.startsWith('ticket_create_')) {
+ const ticketCommand = interaction.client.commands.get('ticket');
+ if (ticketCommand) {
+ const ticketModule = require('../commands/ticket/ticket.js');
+ await ticketModule.handleCreate(interaction);
+ }
+ return;
+ }
+
+ // Fermeture de ticket via bouton
+ if (interaction.customId.startsWith('ticket_close_')) {
+ try {
+ const ticketModule = require('../commands/ticket/ticket.js');
+ await ticketModule.handleClose(interaction);
+
+ // Désactiver le bouton après la fermeture
+ try {
+ const { ActionRowBuilder, ButtonBuilder } = require('discord.js');
+ const oldRow = interaction.message.components[0];
+ if (oldRow && oldRow.components.length > 0) {
+ const newRow = new ActionRowBuilder();
+ for (const component of oldRow.components) {
+ if (component.customId === interaction.customId) {
+ newRow.addComponents(
+ ButtonBuilder.from(component).setDisabled(true)
+ );
+ } else {
+ newRow.addComponents(component);
+ }
+ }
+ await interaction.message.edit({ components: [newRow] });
+ }
+ } catch (buttonErr) {
+ console.error('⚠️ Erreur lors de la désactivation du bouton:', buttonErr);
+ }
+ } catch (err) {
+ console.error('Erreur lors de la fermeture du ticket via bouton:', err);
+ if (!interaction.replied && !interaction.deferred) {
+ await interaction.reply({
+ content: '❌ Erreur lors de la fermeture du ticket.',
+ ephemeral: true
+ });
+ } else {
+ await interaction.editReply({
+ content: '❌ Erreur lors de la fermeture du ticket.'
+ });
+ }
+ }
+ return;
+ }
+
+ // Suppression de ticket via bouton
+ if (interaction.customId.startsWith('ticket_delete_')) {
+ try {
+ const ticketModule = require('../commands/ticket/ticket.js');
+ await ticketModule.handleDelete(interaction);
+ } catch (err) {
+ console.error('Erreur lors de la suppression du ticket via bouton:', err);
+ if (!interaction.replied && !interaction.deferred) {
+ await interaction.reply({
+ content: '❌ Erreur lors de la suppression du ticket.',
+ ephemeral: true
+ });
+ } else {
+ await interaction.editReply({
+ content: '❌ Erreur lors de la suppression du ticket.'
+ });
+ }
+ }
+ return;
+ }
+ }
+
+ // Gérer les 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;
+ }
+
+ try {
+ await command.execute(interaction);
+ console.log(chalk.green(`✅ ${interaction.user.tag} a utilisé la commande /${interaction.commandName}`));
+ } catch (error) {
+ console.error(chalk.red(`❌ Erreur lors de l'exécution de la commande ${interaction.commandName}:`), error);
+
+ const errorMessage = {
+ content: '❌ Une erreur est survenue lors de l\'exécution de cette commande !',
+ ephemeral: true
+ };
+
+ if (interaction.replied || interaction.deferred) {
+ await interaction.followUp(errorMessage).catch(() => null);
+ } else {
+ await interaction.reply(errorMessage).catch(() => null);
+ }
+ }
+ },
};
\ No newline at end of file
diff --git a/events/messageCreate.js b/events/messageCreate.js
index ca11499..e0c5d8a 100644
--- a/events/messageCreate.js
+++ b/events/messageCreate.js
@@ -1,162 +1,310 @@
-const { Events, EmbedBuilder } = require('discord.js');
+const { Events } = 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 ---
+const { addXP, isChannelExcluded, getUserXP, getXPMultiplier } = require('../functions/xp/xp.js');
+// Fonction pour détecter les bumps (Disboard, etc.)
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;
+ // Vérifier si le message vient d'un bot de bump (Disboard, etc.)
+ // Disboard a l'ID: 302050872383242240
+ // On peut aussi détecter par le nom du bot ou le contenu du message
+ const bumpBots = ['302050872383242240']; // Disboard bot ID
+
+ if (!message.author.bot) return null;
+ if (!bumpBots.includes(message.author.id)) return null;
+
+ // Détecter les messages de bump (Disboard envoie généralement un embed avec "Bump done!")
+ const content = message.content?.toLowerCase() || '';
+ const hasEmbed = message.embeds.length > 0;
+
+ // Vérifier si c'est un message de bump
+ // Disboard envoie généralement un embed avec "Bump done!" ou similaire
+ if (hasEmbed) {
+ const embed = message.embeds[0];
+ const embedDescription = embed.description?.toLowerCase() || '';
+ const embedTitle = embed.title?.toLowerCase() || '';
+
+ // Mots-clés pour détecter un bump
+ 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) {
+ // Chercher l'utilisateur qui a fait le bump dans les mentions ou dans l'embed
+ // Disboard mentionne généralement l'utilisateur dans l'embed
+ let bumpedUserId = null;
+
+ // Essayer de trouver l'utilisateur dans les mentions
+ if (message.mentions.users.size > 0) {
+ bumpedUserId = message.mentions.users.first().id;
+ }
+
+ // Si pas de mention, chercher dans l'embed (format: "User bumped the server!")
+ if (!bumpedUserId && embedDescription) {
+ // Chercher un ID utilisateur dans l'embed (format: <@userId>)
+ const userIdMatch = embedDescription.match(/<@!?(\d+)>/);
+ if (userIdMatch) {
+ bumpedUserId = userIdMatch[1];
+ }
+ }
+
+ // Si toujours pas trouvé, chercher dans le footer ou les fields
+ if (!bumpedUserId && embed.footer) {
+ const footerMatch = embed.footer.text?.match(/<@!?(\d+)>/);
+ if (footerMatch) {
+ bumpedUserId = footerMatch[1];
+ }
+ }
+
+ return bumpedUserId;
+ }
+ }
+
+ return null;
}
+// Fonction pour détecter les messages de bienvenue
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;
+ // Ignorer les bots
+ if (message.author.bot) return false;
+
+ // Mots-clés pour détecter les messages de bienvenue
+ const welcomeKeywords = ['bienvenue', 'welcome', 'bvn', 'salut', 'hey', 'bonjour'];
+ const content = message.content.toLowerCase();
+
+ // Vérifier si le message contient un mot de bienvenue
+ const hasWelcomeKeyword = welcomeKeywords.some(keyword => content.includes(keyword));
+
+ // Vérifier si le message mentionne un utilisateur (généralement pour accueillir quelqu'un)
+ const hasMention = message.mentions.users.size > 0;
+
+ // Vérifier si le message est assez court (pour éviter les faux positifs)
+ const isShortMessage = message.content.length < 100;
+
+ return hasWelcomeKeyword && hasMention && isShortMessage;
}
-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;
+ name: Events.MessageCreate,
+ async execute(message) {
+ // Ignorer les messages qui ne sont pas dans un canal de texte
+ 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;
- }
+ try {
+ // Détecter les bumps (AVANT d'ignorer les bots, car Disboard est un bot)
+ const bumpedUserId = await detectBump(message);
+ if (bumpedUserId) {
+ try {
+ // Enregistrer le bump dans la DB
+ await db.query(
+ 'INSERT INTO bumps (userId, guildId, bumpTime, reminderSent) VALUES (?, ?, ?, ?)',
+ [bumpedUserId, message.guild.id, Date.now(), false]
+ );
+
+ // Donner de l'XP pour le bump
+ const member = await message.guild.members.fetch(bumpedUserId).catch(() => null);
+ if (member) {
+ const multiplier = getXPMultiplier(member);
+ // Gain d'XP pour bump : 50-100 XP (plus que les messages normaux)
+ const xpGained = Math.floor(Math.random() * 51) + 50; // 50-100 XP
+ const result = await addXP(bumpedUserId, message.guild.id, xpGained, 'bump', multiplier);
+
+ if (result && result.levelUp) {
+ const { EmbedBuilder } = require('discord.js');
+ const { colors } = require('../utils/constants');
+ const { getXPProgress } = require('../functions/xp/xp.js');
+
+ 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] });
+ }
+ }
+
+ // Le reminder sera géré automatiquement par bumpReminder.js (vérifie toutes les minutes)
+ // Pas besoin de setTimeout ici, le système de reminder s'en occupe
+
+ } catch (err) {
+ console.error('Erreur lors de la détection du bump:', err);
+ }
+
+ // Ne pas continuer le traitement pour les messages de bump
+ return;
+ }
- // 2. IGNORER LES BOTS (Sauf pour les bumps traités au-dessus)
- if (message.author.bot) return;
+ // Ignorer les messages du bot (après la détection des bumps)
+ if (message.author.bot) return;
+ // Vérifier si ce canal est un ticket (logique existante pour les tickets)
+ const [tickets] = await db.query(
+ 'SELECT * FROM tickets WHERE channelId = ? AND status = ?',
+ [message.channel.id, 'Ouvert']
+ );
- // 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;
+ if (tickets.length > 0) {
+ // C'est un ticket, traiter la logique des tickets
+ const ticket = tickets[0];
- 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
- }
+ // Enregistrer le message dans la DB
+ const attachments = message.attachments.size > 0
+ ? message.attachments.map(a => a.url).join(', ')
+ : null;
- // 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;
+// Troncature des champs pour respecter les limites SQL
+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
+ ]
+);
- 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]);
- }
- }
+ // Ne pas donner d'XP dans les tickets
+ return;
+ }
- // 5. MESSAGES DE BIENVENUE
- if (detectWelcomeMessage(message)) {
- try {
- await message.react('👋').catch(() => null);
- await message.react('🎉').catch(() => null);
+ // Système XP : Gagner de l'XP pour les messages (pas dans les tickets)
+ // Vérifier si le salon est exclus de l'XP
+ const excluded = await isChannelExcluded(message.channel.id, message.guild.id);
+
+ if (!excluded) {
+ // Récupérer les données de l'utilisateur
+ const userXP = await getUserXP(message.author.id, message.guild.id);
+
+ // Cooldown : 15 secondes entre chaque gain d'XP par message
+ const cooldown = 15 * 1000; // 15 secondes
+ const now = Date.now();
+
+ // Convertir lastMessageTime en nombre (peut être string depuis la DB)
+ let lastMessageTime = 0;
+ if (userXP.lastMessageTime) {
+ lastMessageTime = parseInt(userXP.lastMessageTime, 10);
+ // Si lastMessageTime est dans le futur (erreur de données) ou trop ancien (plus de 1 an), on le réinitialise
+ if (lastMessageTime > now || lastMessageTime < (now - 365 * 24 * 60 * 60 * 1000)) {
+ lastMessageTime = 0;
+ }
+ }
+
+ const timeSinceLastMessage = now - lastMessageTime;
+
+ // Si lastMessageTime est 0 (premier message) ou si le cooldown est passé
+ if (lastMessageTime === 0 || timeSinceLastMessage >= cooldown) {
+ // Récupérer le membre pour calculer le multiplicateur
+ const member = await message.guild.members.fetch(message.author.id).catch(() => null);
+ const multiplier = member ? getXPMultiplier(member) : 1.0;
+
+ // Gain d'XP : 15-25 XP aléatoire par message
+ const xpGained = Math.floor(Math.random() * 11) + 15; // 15-25 XP
+
+ // Ajouter l'XP
+ const result = await addXP(message.author.id, message.guild.id, xpGained, 'message', multiplier);
+
+ if (result && result.levelUp) {
+ // Niveau supérieur atteint !
+ const { EmbedBuilder } = require('discord.js');
+ const { colors } = require('../utils/constants');
+ const { getXPProgress } = require('../functions/xp/xp.js');
+
+ const progress = getXPProgress(result.newXP, result.newLevel);
+
+ const embed = new EmbedBuilder()
+ .setTitle('🎉 Level Up !')
+ .setDescription(`Félicitations ${message.author.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(message.author.displayAvatarURL({ dynamic: true }))
+ .setTimestamp();
+
+ await message.channel.send({ embeds: [embed] });
+ }
+
+ // Mettre à jour lastMessageTime et totalMessages (AVANT le gain d'XP pour éviter les problèmes)
+ await db.query(
+ 'UPDATE user_xp SET lastMessageTime = ?, totalMessages = totalMessages + 1 WHERE userId = ? AND guildId = ?',
+ [now, message.author.id, message.guild.id]
+ );
+ } else {
+ // Cooldown actif, mettre à jour seulement totalMessages (sans XP)
+ await db.query(
+ 'UPDATE user_xp SET totalMessages = totalMessages + 1 WHERE userId = ? AND guildId = ?',
+ [message.author.id, message.guild.id]
+ );
+ }
+ }
- 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); }
- }
+ // Détecter les messages de bienvenue
+ if (detectWelcomeMessage(message)) {
+ try {
+ // Réagir avec un emoji de bienvenue
+ await message.react('👋').catch(() => null);
+ await message.react('🎉').catch(() => null);
+
+ // Donner de l'XP pour avoir dit bienvenue
+ const member = await message.guild.members.fetch(message.author.id).catch(() => null);
+ if (member) {
+ const multiplier = getXPMultiplier(member);
+ // Gain d'XP pour bienvenue : 20-40 XP
+ const xpGained = Math.floor(Math.random() * 21) + 20; // 20-40 XP
+ const result = await addXP(message.author.id, message.guild.id, xpGained, 'welcome', multiplier);
+
+ if (result && result.levelUp) {
+ const { EmbedBuilder } = require('discord.js');
+ const { colors } = require('../utils/constants');
+ const { getXPProgress } = require('../functions/xp/xp.js');
+
+ const progress = getXPProgress(result.newXP, result.newLevel);
+
+ const embed = new EmbedBuilder()
+ .setTitle('🎉 Level Up !')
+ .setDescription(`Félicitations ${message.author.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(message.author.displayAvatarURL({ dynamic: true }))
+ .setTimestamp();
+
+ await message.channel.send({ embeds: [embed] });
+ }
+ }
+ } catch (err) {
+ console.error('Erreur lors de la détection du message de bienvenue:', err);
+ }
+ }
- } catch (err) {
- console.error('Erreur globale messageCreate:', err);
- }
- },
-};
\ No newline at end of file
+ } catch (err) {
+ console.error('Erreur lors de l\'enregistrement du message:', err);
+ }
+ },
+};
diff --git a/events/ready.js b/events/ready.js
index 312408a..f13aa0c 100644
--- a/events/ready.js
+++ b/events/ready.js
@@ -10,13 +10,6 @@ module.exports = {
console.log(chalk.blue(`🔧 ${client.commands.size} commande(s) chargée(s)`));
// Statut du bot
- client.user.setPresence({
- activities: [{
- name: 'Surveille le discord Femboy Croissant 👀',
- type: ActivityType.Streaming,
- url: 'https://twitch.tv/femboycroissantoff'
- }],
- status: 'online'
- });
+ client.user.setActivity('France Femboy', { type: ActivityType.Watching });
},
};
\ No newline at end of file
diff --git a/events/voiceStateUpdate.js b/events/voiceStateUpdate.js
index 99ba83e..3f20b7b 100644
--- a/events/voiceStateUpdate.js
+++ b/events/voiceStateUpdate.js
@@ -1,143 +1,234 @@
/**
* 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 { Events } = require('discord.js');
const db = require('../functions/database/db.js');
-const { addXP, getXPMultiplier, getXPProgress } = require('../functions/xp/xp.js');
-const { colors } = require('../utils/constants');
+const { addXP, getUserXP, getXPMultiplier } = require('../functions/xp/xp.js');
-// 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);
- }
-}
+// Stocker les utilisateurs en vocal par serveur
+const voiceUsers = new Map(); // Map
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
+ name: Events.VoiceStateUpdate,
+ async execute(oldState, newState) {
+ const userId = newState.member?.id || oldState.member?.id;
+ const guildId = newState.guild?.id || oldState.guild?.id;
+
+ if (!userId || !guildId) return;
+
+ // Ignorer les bots
+ if (newState.member?.user.bot || oldState.member?.user.bot) return;
+
+ const key = `${guildId}_${userId}`;
+
+ // Utilisateur rejoint un canal vocal
+ if (!oldState.channelId && newState.channelId) {
+ // L'utilisateur a rejoint un canal vocal
+ const joinTime = Date.now();
+
+ // Mettre à jour lastVoiceJoin dans la DB
+ await db.query(
+ 'UPDATE user_xp SET lastVoiceJoin = ? WHERE userId = ? AND guildId = ?',
+ [joinTime, userId, guildId]
+ ).catch(() => {
+ // L'utilisateur n'existe pas encore, on le créera lors du premier gain d'XP
+ });
+
+ // Créer un interval pour gagner de l'XP toutes les 10 minutes
+ const interval = setInterval(async () => {
+ try {
+ // Récupérer le serveur et le membre
+ const guild = newState.guild || oldState.guild;
+ if (!guild) {
+ clearInterval(interval);
+ voiceUsers.delete(key);
+ return;
+ }
+
+ const member = await guild.members.fetch(userId).catch(() => null);
+ if (!member || !member.voice.channelId) {
+ // L'utilisateur n'est plus en vocal, arrêter l'interval
+ clearInterval(interval);
+ voiceUsers.delete(key);
+ return;
+ }
+
+ // Vérifier si l'utilisateur est seul (anti-farming ultra strict)
+ // Ne pas donner d'XP si l'utilisateur est seul dans le salon (peu importe s'il est muet ou non)
+ const voiceChannel = member.voice.channel;
+ if (voiceChannel) {
+ // Compter le nombre de membres dans le salon (sans les bots)
+ const membersInChannel = voiceChannel.members.filter(m => !m.user.bot).size;
+ const isAlone = membersInChannel === 1; // Seul dans le salon
+
+ // Si l'utilisateur est seul, ne pas donner d'XP (anti-farming ultra strict)
+ if (isAlone) {
+ // Ne pas donner d'XP mais continuer le timer (il pourra gagner de l'XP si quelqu'un le rejoint)
+ return;
+ }
+ }
+
+ // Récupérer le multiplicateur (avec source='voice' pour le bonus vocal)
+ const multiplier = getXPMultiplier(member, 'voice');
+
+ // Gain d'XP vocal : 5-25 XP toutes les 10 minutes
+ const xpGained = Math.floor(Math.random() * 21) + 5; // 5-25 XP
+
+ // Ajouter l'XP
+ const result = await addXP(userId, guildId, xpGained, 'voice', multiplier);
+
+ if (result) {
+ // Mettre à jour totalVoiceTime (en minutes)
+ await db.query(
+ 'UPDATE user_xp SET totalVoiceTime = totalVoiceTime + 10 WHERE userId = ? AND guildId = ?',
+ [userId, guildId]
+ );
+
+ // Si niveau supérieur, envoyer un message (optionnel, on peut le désactiver pour éviter le spam)
+ if (result.levelUp) {
+ const { EmbedBuilder } = require('discord.js');
+ const { colors } = require('../utils/constants');
+ const { getXPProgress } = require('../functions/xp/xp.js');
+
+ 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}** 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(member.user.displayAvatarURL({ dynamic: true }))
+ .setTimestamp();
+
+ // Envoyer dans le canal système (si disponible)
+ const systemChannel = guild.systemChannel;
+ if (systemChannel) {
+ await systemChannel.send({ embeds: [embed] }).catch(() => null);
+ }
+ }
+ }
+ } catch (err) {
+ console.error('Erreur lors du gain d\'XP vocal:', err);
+ }
+ }, 10 * 60 * 1000); // 10 minutes
+
+ voiceUsers.set(key, { joinTime, interval });
+ }
+
+ // Utilisateur quitte un canal vocal
+ if (oldState.channelId && !newState.channelId) {
+ // L'utilisateur a quitté le canal vocal
+ const userData = voiceUsers.get(key);
+ if (userData) {
+ clearInterval(userData.interval);
+ voiceUsers.delete(key);
+
+ // Calculer le temps passé en vocal et mettre à jour totalVoiceTime
+ const timeSpent = Math.floor((Date.now() - userData.joinTime) / 1000 / 60); // en minutes
+ if (timeSpent > 0) {
+ await db.query(
+ 'UPDATE user_xp SET totalVoiceTime = totalVoiceTime + ? WHERE userId = ? AND guildId = ?',
+ [timeSpent, userId, guildId]
+ ).catch(() => null);
+ }
+ }
+ }
+
+ // Utilisateur change de canal vocal
+ if (oldState.channelId && newState.channelId && oldState.channelId !== newState.channelId) {
+ // L'utilisateur a changé de canal vocal
+ // On récupère les données existantes et on met à jour le joinTime
+ const userData = voiceUsers.get(key);
+ if (userData) {
+ // Mettre à jour le joinTime pour le nouveau canal
+ userData.joinTime = Date.now();
+ // L'interval continue, pas besoin de le redémarrer
+ } else {
+ // Si pour une raison quelconque les données n'existent pas, créer un nouvel interval
+ // (ce cas ne devrait normalement pas arriver)
+ const joinTime = Date.now();
+ await db.query(
+ 'UPDATE user_xp SET lastVoiceJoin = ? WHERE userId = ? AND guildId = ?',
+ [joinTime, userId, guildId]
+ ).catch(() => null);
+
+ const interval = setInterval(async () => {
+ try {
+ const guild = newState.guild || oldState.guild;
+ if (!guild) {
+ clearInterval(interval);
+ voiceUsers.delete(key);
+ return;
+ }
+
+ const member = await guild.members.fetch(userId).catch(() => null);
+ if (!member || !member.voice.channelId) {
+ clearInterval(interval);
+ voiceUsers.delete(key);
+ return;
+ }
+
+ // Vérifier si l'utilisateur est seul (anti-farming ultra strict)
+ const voiceChannel = member.voice.channel;
+ if (voiceChannel) {
+ const membersInChannel = voiceChannel.members.filter(m => !m.user.bot).size;
+ const isAlone = membersInChannel === 1;
+
+ // Si l'utilisateur est seul, ne pas donner d'XP
+ if (isAlone) {
+ return;
+ }
+ }
+
+ const multiplier = getXPMultiplier(member, 'voice');
+ const xpGained = Math.floor(Math.random() * 21) + 5;
+ const result = await addXP(userId, guildId, xpGained, 'voice', multiplier);
+
+ if (result) {
+ await db.query(
+ 'UPDATE user_xp SET totalVoiceTime = totalVoiceTime + 10 WHERE userId = ? AND guildId = ?',
+ [userId, guildId]
+ );
+
+ if (result.levelUp) {
+ const { EmbedBuilder } = require('discord.js');
+ const { colors } = require('../utils/constants');
+ const { getXPProgress } = require('../functions/xp/xp.js');
+
+ 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}** 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(member.user.displayAvatarURL({ dynamic: true }))
+ .setTimestamp();
+
+ const systemChannel = guild.systemChannel;
+ if (systemChannel) {
+ await systemChannel.send({ embeds: [embed] }).catch(() => null);
+ }
+ }
+ }
+ } catch (err) {
+ console.error('Erreur lors du gain d\'XP vocal:', err);
+ }
+ }, 10 * 60 * 1000);
+
+ voiceUsers.set(key, { joinTime, interval });
+ }
+ }
+ },
+};
+
diff --git a/functions/bump/bumpReminder.js b/functions/bump/bumpReminder.js
index 5760e21..4e9d552 100644
--- a/functions/bump/bumpReminder.js
+++ b/functions/bump/bumpReminder.js
@@ -4,53 +4,85 @@
*/
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
+ setInterval(async () => {
+ try {
+ const now = Date.now();
+ // Récupérer les bumps qui ont besoin d'un reminder (2h après, avec une fenêtre de 1 minute)
+ const twoHours = 2 * 60 * 60 * 1000;
+ const oneMinute = 60 * 1000;
+
+ const [bumps] = await db.query(
+ 'SELECT * FROM bumps WHERE reminderSent = ? AND bumpTime <= ? AND bumpTime >= ?',
+ [false, now - twoHours + oneMinute, now - twoHours - oneMinute]
+ );
+
+ if (!bumps.length) return;
+
+ for (const bump of bumps) {
+ try {
+ const guild = client.guilds.cache.get(bump.guildId);
+ if (!guild) {
+ console.warn(chalk.yellow(`⚠️ Impossible d'envoyer le reminder de bump: le bot n'est pas dans la guild ${bump.guildId}`));
+ continue;
+ }
+
+ const member = await guild.members.fetch(bump.userId).catch(() => null);
+ if (!member) {
+ console.warn(chalk.yellow(`⚠️ Utilisateur ${bump.userId} introuvable dans la guild ${guild.id}`));
+ continue;
+ }
+
+ // Trouver le canal de bump (ou utiliser le canal système)
+ // On cherche dans les canaux de bump configurés, sinon on utilise le canal système
+ const [bumpChannels] = await db.query(
+ 'SELECT * FROM bump_channels WHERE guildId = ?',
+ [bump.guildId]
+ );
+
+ let channel = null;
+ if (bumpChannels.length > 0) {
+ // Utiliser le premier canal de bump configuré
+ channel = guild.channels.cache.get(bumpChannels[0].channelId);
+ }
+
+ // Si pas de canal de bump configuré, utiliser le canal système
+ if (!channel) {
+ channel = guild.systemChannel;
+ }
+
+ if (!channel) {
+ console.warn(chalk.yellow(`⚠️ Aucun canal disponible pour envoyer le reminder de bump dans la guild ${guild.id}`));
+ continue;
+ }
+
+ const { EmbedBuilder } = require('discord.js');
+ const { colors } = require('../../utils/constants');
+
+ 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] });
+
+ // Marquer le reminder comme envoyé
+ 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 lors de l'envoi du reminder de bump ${bump.id}:`), err);
+ }
+ }
+ } catch (err) {
+ console.error(chalk.red('❌ Erreur lors de la vérification des reminders de bump:'), err);
+ }
+ }, 60 * 1000); // Vérifier toutes les minutes
+};
+
diff --git a/functions/database/db.js b/functions/database/db.js
index 894c088..07221a7 100644
--- a/functions/database/db.js
+++ b/functions/database/db.js
@@ -1,10 +1,10 @@
const mysql = require('mysql2/promise');
const pool = mysql.createPool({
- 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',
+ 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
@@ -13,20 +13,28 @@ 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),
- guildId VARCHAR(32),
+ userId VARCHAR(32),
+ guildId VARCHAR(32),
reason TEXT,
modId VARCHAR(32),
timestamp BIGINT,
type VARCHAR(20) NOT NULL,
- unbanDate BIGINT,
- PRIMARY KEY (userId, guildId)
- )
+ unbanDate BIGINT,
+ PRIMARY KEY (userId, guildId)
+ )
`);
+ // Ajouter la colonne guildId si elle n'existe pas (migration)
+ 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 {
+ // La colonne existe déjà, on continue
+ }
+
await conn.query(`
CREATE TABLE IF NOT EXISTS logs (
id INT AUTO_INCREMENT PRIMARY KEY,
@@ -34,203 +42,231 @@ async function initDB() {
userTag VARCHAR(100),
modId VARCHAR(32),
modTag VARCHAR(100),
- action VARCHAR(50),
+ action VARCHAR(50),
reason TEXT,
type ENUM('Permanent','Temporary') DEFAULT 'Permanent',
- guildId VARCHAR(32),
+ guildId VARCHAR(32),
+ timestamp BIGINT
+ )
+ `);
+
+ // Ajouter la colonne guildId si elle n'existe pas (migration)
+ try {
+ await conn.query('ALTER TABLE logs ADD COLUMN guildId VARCHAR(32)');
+ } catch {
+ // La colonne existe déjà, on continue
+ }
+
+ // Agrandir la colonne action si elle est trop petite (migration)
+ try {
+ await conn.query('ALTER TABLE logs MODIFY COLUMN action VARCHAR(50)');
+ } catch {
+ // La colonne est déjà de la bonne taille ou n'existe pas, on continue
+ }
+
+ // Table pour les mutes
+ 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)
+ )
+ `);
+
+ // Table pour les messages de ban personnalisés
+ await conn.query(`
+ CREATE TABLE IF NOT EXISTS staffbanmessages (
+ userId VARCHAR(32) PRIMARY KEY,
+ userTag VARCHAR(100),
+ message TEXT,
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)
- )
- `);
+ // Table pour les 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),
+ INDEX idx_userId (userId),
+ INDEX idx_guildId (guildId),
+ INDEX idx_status (status)
+ )
+ `);
- await conn.query(`
- CREATE TABLE IF NOT EXISTS staffbanmessages (
- userId VARCHAR(32) PRIMARY KEY,
- userTag VARCHAR(100),
- message TEXT,
- timestamp BIGINT
- )
- `);
+ // Ajouter la colonne transcriptPath si elle n'existe pas (migration)
+ try {
+ await conn.query('ALTER TABLE tickets ADD COLUMN transcriptPath VARCHAR(255)');
+ } catch {
+ // La colonne existe déjà, on continue
+ }
- // 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)
- )
- `);
+ // Ajouter la colonne claimedBy si elle n'existe pas (migration)
+ try {
+ await conn.query('ALTER TABLE tickets ADD COLUMN claimedBy VARCHAR(32)');
+ } catch {
+ // La colonne existe déjà, on continue
+ }
- 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)
- )
- `);
+ // Ajouter la colonne claimedAt si elle n'existe pas (migration)
+ try {
+ await conn.query('ALTER TABLE tickets ADD COLUMN claimedAt BIGINT');
+ } catch {
+ // La colonne existe déjà, on continue
+ }
- 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)
- )
- `);
+ // Ajouter la colonne claimedByTag si elle n'existe pas (migration)
+ try {
+ await conn.query('ALTER TABLE tickets ADD COLUMN claimedByTag VARCHAR(100)');
+ } catch {
+ // La colonne existe déjà, on continue
+ }
- // 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)
- )
- `);
+ // Ajouter l'index pour claimedBy si elle n'existe pas (migration)
+ try {
+ await conn.query('CREATE INDEX idx_claimedBy ON tickets(claimedBy)');
+ } catch {
+ // L'index existe déjà, on continue
+ }
- 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)
- )
- `);
+ // Table pour les messages des tickets (pour transcription)
+ 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 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)
- )
- `);
+ // Table pour les réponses aux questions de candidature
+ 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 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)
- )
- `);
+ // Table pour les niveaux/XP des utilisateurs
+ 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 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)
- )
- `);
+ // Table pour les salons exclus de l'XP
+ 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)
+ )
+ `);
- // 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)
- )
- `);
+ // Table pour les logs de gain d'XP (optionnel, pour debugging)
+ 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)
+ )
+ `);
- // 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 {}
+ // Table pour stocker les bumps (pour reminder et XP)
+ 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)
+ )
+ `);
- } finally {
- conn.release();
- }
+ // Table pour stocker les salons de bump (configuration)
+ 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)
+ )
+ `);
+
+ // Table pour les profils utilisateurs (signatures, etc.)
+ await conn.query(`
+ CREATE TABLE IF NOT EXISTS user_profiles (
+ userId VARCHAR(32) NOT NULL,
+ guildId VARCHAR(32) NOT NULL,
+ signature TEXT,
+ birthday DATE,
+ updatedAt BIGINT,
+ PRIMARY KEY (userId, guildId),
+ INDEX idx_guildId (guildId)
+ )
+ `);
+ } finally {
+ conn.release();
+ }
}
initDB().catch(console.error);
-module.exports = pool;
\ No newline at end of file
+module.exports = pool;
diff --git a/functions/moderation/autoUnban.js b/functions/moderation/autoUnban.js
index 9f6f406..580c962 100644
--- a/functions/moderation/autoUnban.js
+++ b/functions/moderation/autoUnban.js
@@ -1,41 +1,43 @@
const chalk = require('chalk');
module.exports = (client, db) => {
- setInterval(async () => {
- try {
- const now = Date.now();
- const [expiredBans] = await db.query(
- 'SELECT * FROM bans WHERE type = ? AND unbanDate <= ?',
- ['Temporary', now]
- );
+ setInterval(async () => {
+ try {
+ const now = Date.now();
+ const [expiredBans] = await db.query(
+ 'SELECT * FROM bans WHERE type = ? AND unbanDate <= ?',
+ ['Temporary', now]
+ );
- if (!expiredBans.length) return;
+ if (!expiredBans.length) return;
- for (const ban of expiredBans) {
- const guild = client.guilds.cache.get(ban.guildId);
- if (!guild) {
- console.warn(chalk.yellow(`⚠️ Impossible de débannir ${ban.userId}: le bot n'est pas dans la guild ${ban.guildId}`));
- continue;
- }
+ for (const ban of expiredBans) {
+ const guild = client.guilds.cache.get(ban.guildId);
+ if (!guild) {
+ 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, 'Bannissement temporaire expiré');
- console.log(chalk.green(`✅ Auto-débanni ${ban.userId} de la guild ${guild.name} (${guild.id})`));
- } catch (err) {
- console.error(chalk.red(`❌ Échec du débannissement de ${ban.userId} de la guild ${guild.id}:`), err.message);
- }
+ try {
+ 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) {
+ console.error(chalk.red(`❌ Échec du débannissement de ${ban.userId} de la guild ${guild.id}:`), err.message);
+ }
- await db.query('DELETE FROM bans WHERE userId = ? AND guildId = ?', [ban.userId, ban.guildId]);
+ // Supprime uniquement le ban correspondant à cette guild
+ await db.query('DELETE FROM bans WHERE userId = ? AND guildId = ?', [ban.userId, ban.guildId]);
- await db.query(
- `INSERT INTO logs (userId, userTag, modId, modTag, action, reason, type, timestamp, guildId)
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`,
- [ban.userId, null, client.user.id, client.user.tag, 'Débannissement automatique', 'Bannissement temporaire expiré', 'Temporary', Date.now(), 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, client.user.tag, 'Débannissement automatique', 'Bannissement temporaire expiré', 'Temporary', Date.now(), ban.guildId]
+ );
+ }
- } catch (err) {
- console.error(chalk.red('❌ Erreur lors de l\'auto-débannissement:'), err);
- }
- }, 60_000);
-};
\ No newline at end of file
+ } catch (err) {
+ console.error(chalk.red('❌ Erreur lors de l\'auto-débannissement:'), err);
+ }
+ }, 60_000);
+};
diff --git a/functions/moderation/autoUnmute.js b/functions/moderation/autoUnmute.js
index 0a2f6b9..e1d2e63 100644
--- a/functions/moderation/autoUnmute.js
+++ b/functions/moderation/autoUnmute.js
@@ -1,47 +1,51 @@
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]
- );
+ 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;
+ 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;
- }
+ 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;
- }
+ const member = await guild.members.fetch(mute.userId).catch(() => null);
+ if (!member) {
+ // L'utilisateur n'est plus sur le serveur, on supprime quand même le mute
+ 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);
- }
+ 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]);
+ // Supprime le mute de la DB
+ 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]
- );
- }
+ // Log automatique
+ 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);
+};
- } 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
index 9d87565..b91dc75 100644
--- a/functions/xp/xp.js
+++ b/functions/xp/xp.js
@@ -5,173 +5,217 @@
const db = require('../database/db.js');
// Formule de calcul de l'XP nécessaire pour atteindre un niveau
+// XP total nécessaire = 5 * (level^2) + (50 * level) + 100
+// Exemples :
+// - Niveau 1 : 5 * 1^2 + 50 * 1 + 100 = 155 XP total
+// - Niveau 2 : 5 * 2^2 + 50 * 2 + 100 = 220 XP total
+// - Niveau 3 : 5 * 3^2 + 50 * 3 + 100 = 295 XP total
function getXPForLevel(level) {
- if (level <= 0) return 0;
- return Math.floor(5 * Math.pow(level, 2) + 50 * level + 100);
+ 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;
+ if (xp < 0) return 0;
+
+ let level = 0;
+ let requiredXP = getXPForLevel(level + 1);
+
+ // Trouver le niveau en vérifiant l'XP nécessaire
+ 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);
+ 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 };
+ // XP nécessaire pour atteindre le niveau actuel
+ const xpForCurrentLevel = getXPForLevel(level);
+ // XP nécessaire pour atteindre le prochain niveau
+ const xpForNextLevel = getXPForLevel(level + 1);
+
+ // XP dans le niveau actuel (différence entre l'XP total et l'XP du niveau actuel)
+ const xpInLevel = Math.max(0, xp - xpForCurrentLevel);
+ // XP nécessaire pour passer au niveau suivant
+ const xpNeeded = xpForNextLevel - xpForCurrentLevel;
+
+ // Éviter la division par zéro
+ 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: 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;
- }
+ try {
+ const [rows] = await db.query(
+ 'SELECT * FROM user_xp WHERE userId = ? AND guildId = ?',
+ [userId, guildId]
+ );
+
+ if (rows.length === 0) {
+ // Créer l'utilisateur avec 0 XP
+ 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 lors de la récupération de l\'XP:', 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;
- }
+ 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);
+
+ // Mettre à jour l'XP et le niveau
+ await db.query(
+ 'UPDATE user_xp SET xp = ?, level = ? WHERE userId = ? AND guildId = ?',
+ [newXP, newLevel, userId, guildId]
+ );
+
+ // Logger le gain d'XP (optionnel, pour debugging)
+ try {
+ await db.query(
+ 'INSERT INTO xp_logs (userId, guildId, xpGained, source, multiplier, timestamp) VALUES (?, ?, ?, ?, ?, ?)',
+ [userId, guildId, finalXP, source, multiplier, Date.now()]
+ );
+ } catch (logErr) {
+ // Ignorer les erreurs de log
+ }
+
+ return {
+ oldXP: userXP.xp,
+ newXP,
+ oldLevel: userXP.level,
+ newLevel,
+ xpGained: finalXP,
+ levelUp: newLevel > userXP.level
+ };
+ } catch (err) {
+ console.error('Erreur lors de l\'ajout d\'XP:', 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;
- }
+ 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 lors de la vérification de l\'exclusion:', err);
+ return false;
+ }
}
-// Obtenir le multiplicateur XP d'un utilisateur
+// Obtenir le multiplicateur XP d'un utilisateur (booster, vocal, etc.)
function getXPMultiplier(member, source = 'message') {
- let multiplier = 1.0;
- if (member.premiumSince) multiplier *= 1.2;
- return multiplier;
+ let multiplier = 1.0;
+
+ // Vérifier si l'utilisateur est booster (1.2x)
+ if (member.premiumSince) {
+ multiplier *= 1.2;
+ }
+
+ // Multiplicateur vocal : 1.0x après 5 minutes de vocal (selon Issue #11)
+ // Note: Cette fonction est appelée toutes les 10 minutes, donc on applique déjà le bonus
+ if (source === 'voice') {
+ // Le bonus vocal est déjà appliqué car on gagne de l'XP toutes les 10 minutes
+ // Donc on considère qu'on a déjà passé plus de 5 minutes
+ multiplier *= 1.0; // Pas de changement, mais on pourrait ajouter un bonus ici
+ }
+
+ 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 [];
- }
+ 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 lors de la récupération du classement:', 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;
- }
+ 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 lors de la récupération du rang:', err);
+ return 0;
+ }
}
module.exports = {
- getXPForLevel,
- getLevelFromXP,
- getXPForNextLevel,
- getXPProgress,
- getUserXP,
- addXP,
- isChannelExcluded,
- getXPMultiplier,
- getLeaderboard,
- getUserRank,
-};
\ No newline at end of file
+ getXPForLevel,
+ getLevelFromXP,
+ getXPForNextLevel,
+ getXPProgress,
+ getUserXP,
+ addXP,
+ isChannelExcluded,
+ getXPMultiplier,
+ getLeaderboard,
+ getUserRank,
+};
+
diff --git a/index.js b/index.js
index d208576..f1c21f2 100644
--- a/index.js
+++ b/index.js
@@ -8,19 +8,19 @@ const chalk = require('chalk');
const token = process.env.TOKEN;
if (!token) {
- console.error(chalk.red('❌ Le token Discord n\'est pas défini dans les variables d\'environnement !'));
- process.exit(1);
+ 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,
- ],
+ intents: [
+ GatewayIntentBits.Guilds,
+ GatewayIntentBits.GuildMembers,
+ GatewayIntentBits.GuildPresences,
+ GatewayIntentBits.GuildMessages,
+ GatewayIntentBits.MessageContent,
+ GatewayIntentBits.GuildVoiceStates,
+ ],
});
const db = require('./functions/database/db.js');
@@ -40,15 +40,11 @@ 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);
- 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);
+ 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".`));
}
}
}
@@ -58,19 +54,15 @@ const eventFiles = fs.readdirSync(eventsPath).filter(file => file.endsWith('.js'
for (const file of eventFiles) {
const filePath = path.join(eventsPath, file);
- 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);
+ const event = require(filePath);
+ if (event.once) {
+ client.once(event.name, (...args) => event.execute(...args));
+ } else {
+ client.on(event.name, (...args) => event.execute(...args));
}
}
client.login(token).catch(err => {
- console.error(chalk.red('❌ Erreur lors de la connexion:'), err);
- process.exit(1);
+ console.error(chalk.red('❌ Erreur lors de la connexion:'), err);
+ process.exit(1);
});
\ No newline at end of file
diff --git a/node_modules/@discordjs/builders/README.md b/node_modules/@discordjs/builders/README.md
index 626d709..dc88b7f 100644
--- a/node_modules/@discordjs/builders/README.md
+++ b/node_modules/@discordjs/builders/README.md
@@ -9,8 +9,7 @@
-
-
+
diff --git a/node_modules/@discordjs/builders/dist/index.d.mts b/node_modules/@discordjs/builders/dist/index.d.mts
index ed32ea0..428a46b 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, 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';
+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';
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$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 };
+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 };
}
/**
@@ -181,7 +181,7 @@ declare class EmbedBuilder {
*
* @remarks
* This method behaves similarly
- * to {@link https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/splice | Array.prototype.splice()}.
+ * to {@link https://developer.mozilla.org/en-US/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,9 +362,6 @@ 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;
@@ -396,32 +393,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$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 };
+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 };
}
/**
* Any action row component data represented as an object.
*/
-type AnyAPIActionRowComponent = APIActionRowComponent | APIComponentInActionRow | APIMessageComponent | APIModalComponent;
+type AnyAPIActionRowComponent = APIActionRowComponent | APIComponentInActionRow | APIMessageComponent;
/**
* The base component builder that contains common symbols for all sorts of components.
*
@@ -564,9 +561,9 @@ declare abstract class BaseSelectMenuBuilder i
* ```ts
* const textInput = new TextInputBuilder({
* custom_id: 'a cool text input',
- * placeholder: 'Type something',
+ * label: 'Type something',
* style: TextInputStyle.Short,
* });
* ```
@@ -894,7 +884,7 @@ declare class TextInputBuilder extends ComponentBuilder i
* Creating a text input using setters and API data:
* ```ts
* const textInput = new TextInputBuilder({
- * placeholder: 'Type something else',
+ * label: 'Type something else',
* })
* .setCustomId('woah')
* .setStyle(TextInputStyle.Paragraph);
@@ -913,7 +903,6 @@ 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;
/**
@@ -1041,169 +1030,6 @@ 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.
@@ -1367,8 +1193,7 @@ declare class ContainerBuilder extends ComponentBuilder {
* },
* ],
* })
- * .addSeparatorComponents(separator)
- * .addSectionComponents(section);
+ * .addComponents(separator, section);
* ```
*/
constructor({ components, ...data }?: Partial);
@@ -1767,14 +1592,6 @@ 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.
@@ -1801,39 +1618,17 @@ 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 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 function validateRequiredParameters$3(customId?: string, style?: TextInputStyle, label?: string): void;
-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 };
+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 };
}
/**
@@ -1847,7 +1642,7 @@ declare class ModalBuilder implements JSONEncodable | LabelBuilder | TextDisplayBuilder)[];
+ readonly components: ActionRowBuilder[];
/**
* Creates a new modal from API data.
*
@@ -1870,71 +1665,14 @@ declare class ModalBuilder implements JSONEncodable | 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;
+ addComponents(...components: RestOrArray | APIActionRowComponent>): this;
/**
* Sets components for this modal.
*
* @param components - The components to set
- * @deprecated Use {@link ModalBuilder.setLabelComponents} instead
*/
- setComponents(...components: RestOrArray | LabelBuilder | TextDisplayBuilder>): this;
+ setComponents(...components: RestOrArray>): this;
/**
* {@inheritDoc ComponentBuilder.toJSON}
*/
@@ -1942,11966 +1680,13 @@ declare class ModalBuilder implements JSONEncodable;
-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 componentsValidator: _sapphire_shapeshift.ArrayValidator<[ActionRowBuilder, ...ActionRowBuilder[]], ActionRowBuilder>;
+declare function validateRequiredParameters$2(customId?: string, title?: string, components?: ActionRowBuilder[]): void;
-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 const Assertions$3_componentsValidator: typeof componentsValidator;
+declare const Assertions$3_titleValidator: typeof titleValidator;
declare namespace Assertions$3 {
- export { Assertions$3_labelPredicate as labelPredicate };
+ export { Assertions$3_componentsValidator as componentsValidator, Assertions$3_titleValidator as titleValidator, validateRequiredParameters$2 as validateRequiredParameters };
}
declare const unfurledMediaItemPredicate: _sapphire_shapeshift.ObjectValidator<{
@@ -14823,4 +2608,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$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 };
+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 };
diff --git a/node_modules/@discordjs/builders/dist/index.d.ts b/node_modules/@discordjs/builders/dist/index.d.ts
index ed32ea0..428a46b 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, 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';
+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';
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$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 };
+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 };
}
/**
@@ -181,7 +181,7 @@ declare class EmbedBuilder {
*
* @remarks
* This method behaves similarly
- * to {@link https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/splice | Array.prototype.splice()}.
+ * to {@link https://developer.mozilla.org/en-US/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,9 +362,6 @@ 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;
@@ -396,32 +393,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$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 };
+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 };
}
/**
* Any action row component data represented as an object.
*/
-type AnyAPIActionRowComponent = APIActionRowComponent | APIComponentInActionRow | APIMessageComponent | APIModalComponent;
+type AnyAPIActionRowComponent = APIActionRowComponent | APIComponentInActionRow | APIMessageComponent;
/**
* The base component builder that contains common symbols for all sorts of components.
*
@@ -564,9 +561,9 @@ declare abstract class BaseSelectMenuBuilder i
* ```ts
* const textInput = new TextInputBuilder({
* custom_id: 'a cool text input',
- * placeholder: 'Type something',
+ * label: 'Type something',
* style: TextInputStyle.Short,
* });
* ```
@@ -894,7 +884,7 @@ declare class TextInputBuilder extends ComponentBuilder i
* Creating a text input using setters and API data:
* ```ts
* const textInput = new TextInputBuilder({
- * placeholder: 'Type something else',
+ * label: 'Type something else',
* })
* .setCustomId('woah')
* .setStyle(TextInputStyle.Paragraph);
@@ -913,7 +903,6 @@ 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;
/**
@@ -1041,169 +1030,6 @@ 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.
@@ -1367,8 +1193,7 @@ declare class ContainerBuilder extends ComponentBuilder {
* },
* ],
* })
- * .addSeparatorComponents(separator)
- * .addSectionComponents(section);
+ * .addComponents(separator, section);
* ```
*/
constructor({ components, ...data }?: Partial);
@@ -1767,14 +1592,6 @@ 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.
@@ -1801,39 +1618,17 @@ 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 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 function validateRequiredParameters$3(customId?: string, style?: TextInputStyle, label?: string): void;
-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 };
+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 };
}
/**
@@ -1847,7 +1642,7 @@ declare class ModalBuilder implements JSONEncodable | LabelBuilder | TextDisplayBuilder)[];
+ readonly components: ActionRowBuilder[];
/**
* Creates a new modal from API data.
*
@@ -1870,71 +1665,14 @@ declare class ModalBuilder implements JSONEncodable | 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;
+ addComponents(...components: RestOrArray | APIActionRowComponent>): this;
/**
* Sets components for this modal.
*
* @param components - The components to set
- * @deprecated Use {@link ModalBuilder.setLabelComponents} instead
*/
- setComponents(...components: RestOrArray | LabelBuilder | TextDisplayBuilder>): this;
+ setComponents(...components: RestOrArray>): this;
/**
* {@inheritDoc ComponentBuilder.toJSON}
*/
@@ -1942,11966 +1680,13 @@ declare class ModalBuilder implements JSONEncodable;
-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 componentsValidator: _sapphire_shapeshift.ArrayValidator<[ActionRowBuilder, ...ActionRowBuilder[]], ActionRowBuilder>;
+declare function validateRequiredParameters$2(customId?: string, title?: string, components?: ActionRowBuilder[]): void;
-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 const Assertions$3_componentsValidator: typeof componentsValidator;
+declare const Assertions$3_titleValidator: typeof titleValidator;
declare namespace Assertions$3 {
- export { Assertions$3_labelPredicate as labelPredicate };
+ export { Assertions$3_componentsValidator as componentsValidator, Assertions$3_titleValidator as titleValidator, validateRequiredParameters$2 as validateRequiredParameters };
}
declare const unfurledMediaItemPredicate: _sapphire_shapeshift.ObjectValidator<{
@@ -14823,4 +2608,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$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 };
+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 };
diff --git a/node_modules/@discordjs/builders/dist/index.js b/node_modules/@discordjs/builders/dist/index.js
index 4d6d43e..7c929c3 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 index_exports = {};
-__export(index_exports, {
+var src_exports = {};
+__export(src_exports, {
ActionRowBuilder: () => ActionRowBuilder,
ApplicationCommandNumericOptionMinMaxValueMixin: () => ApplicationCommandNumericOptionMinMaxValueMixin,
ApplicationCommandOptionBase: () => ApplicationCommandOptionBase,
@@ -51,25 +51,20 @@ __export(index_exports, {
ChannelSelectMenuBuilder: () => ChannelSelectMenuBuilder,
ComponentAssertions: () => Assertions_exports2,
ComponentBuilder: () => ComponentBuilder,
- ComponentsV2Assertions: () => Assertions_exports7,
+ ComponentsV2Assertions: () => Assertions_exports4,
ContainerBuilder: () => ContainerBuilder,
- ContextMenuCommandAssertions: () => Assertions_exports10,
+ ContextMenuCommandAssertions: () => Assertions_exports7,
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_exports8,
+ ModalAssertions: () => Assertions_exports5,
ModalBuilder: () => ModalBuilder,
RoleSelectMenuBuilder: () => RoleSelectMenuBuilder,
SectionBuilder: () => SectionBuilder,
- SelectMenuAssertions: () => Assertions_exports5,
SelectMenuBuilder: () => StringSelectMenuBuilder,
SelectMenuOptionBuilder: () => StringSelectMenuOptionBuilder,
SeparatorBuilder: () => SeparatorBuilder,
@@ -77,7 +72,7 @@ __export(index_exports, {
SharedSlashCommand: () => SharedSlashCommand,
SharedSlashCommandOptions: () => SharedSlashCommandOptions,
SharedSlashCommandSubcommands: () => SharedSlashCommandSubcommands,
- SlashCommandAssertions: () => Assertions_exports9,
+ SlashCommandAssertions: () => Assertions_exports6,
SlashCommandAttachmentOption: () => SlashCommandAttachmentOption,
SlashCommandBooleanOption: () => SlashCommandBooleanOption,
SlashCommandBuilder: () => SlashCommandBuilder,
@@ -93,7 +88,7 @@ __export(index_exports, {
StringSelectMenuBuilder: () => StringSelectMenuBuilder,
StringSelectMenuOptionBuilder: () => StringSelectMenuOptionBuilder,
TextDisplayBuilder: () => TextDisplayBuilder,
- TextInputAssertions: () => Assertions_exports4,
+ TextInputAssertions: () => Assertions_exports3,
TextInputBuilder: () => TextInputBuilder,
ThumbnailBuilder: () => ThumbnailBuilder,
UserSelectMenuBuilder: () => UserSelectMenuBuilder,
@@ -106,7 +101,7 @@ __export(index_exports, {
resolveBuilder: () => resolveBuilder,
version: () => version
});
-module.exports = __toCommonJS(index_exports);
+module.exports = __toCommonJS(src_exports);
// src/messages/embed/Assertions.ts
var Assertions_exports = {};
@@ -247,7 +242,7 @@ var EmbedBuilder = class {
*
* @remarks
* This method behaves similarly
- * to {@link https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/splice | Array.prototype.splice()}.
+ * to {@link https://developer.mozilla.org/en-US/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.
@@ -408,7 +403,7 @@ var EmbedBuilder = class {
};
// src/index.ts
-__reExport(index_exports, require("@discordjs/formatters"), module.exports);
+__reExport(src_exports, require("@discordjs/formatters"), module.exports);
// src/components/Assertions.ts
var Assertions_exports2 = {};
@@ -591,7 +586,7 @@ function validateRequiredButtonParameters(style, label, emoji, customId, skuId,
__name(validateRequiredButtonParameters, "validateRequiredButtonParameters");
// src/components/ActionRow.ts
-var import_v1024 = require("discord-api-types/v10");
+var import_v1019 = require("discord-api-types/v10");
// src/components/Component.ts
var ComponentBuilder = class {
@@ -629,7 +624,7 @@ var ComponentBuilder = class {
};
// src/components/Components.ts
-var import_v1023 = require("discord-api-types/v10");
+var import_v1018 = require("discord-api-types/v10");
// src/components/button/Button.ts
var import_v102 = require("discord-api-types/v10");
@@ -755,159 +750,8 @@ var ButtonBuilder = class extends ComponentBuilder {
}
};
-// 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");
+var import_v103 = require("discord-api-types/v10");
// src/components/selectMenu/BaseSelectMenu.ts
var BaseSelectMenuBuilder = class extends ComponentBuilder {
@@ -933,9 +777,9 @@ var BaseSelectMenuBuilder = class extends ComponentBuilder {
return this;
}
/**
- * Sets the maximum values that can be selected in the select menu.
+ * Sets the maximum values that must be selected in the select menu.
*
- * @param maxValues - The maximum values that can be selected
+ * @param maxValues - The maximum values that must be selected
*/
setMaxValues(maxValues) {
this.data.max_values = minMaxValidator.parse(maxValues);
@@ -959,16 +803,6 @@ 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}
*/
@@ -1009,7 +843,7 @@ var ChannelSelectMenuBuilder = class extends BaseSelectMenuBuilder {
* ```
*/
constructor(data) {
- super({ ...data, type: import_v106.ComponentType.ChannelSelect });
+ super({ ...data, type: import_v103.ComponentType.ChannelSelect });
}
/**
* Adds channel types to this select menu.
@@ -1045,7 +879,7 @@ var ChannelSelectMenuBuilder = class extends BaseSelectMenuBuilder {
this.data.default_values.push(
...normalizedValues.map((id) => ({
id,
- type: import_v106.SelectMenuDefaultValueType.Channel
+ type: import_v103.SelectMenuDefaultValueType.Channel
}))
);
return this;
@@ -1060,7 +894,7 @@ var ChannelSelectMenuBuilder = class extends BaseSelectMenuBuilder {
optionsLengthValidator.parse(normalizedValues.length);
this.data.default_values = normalizedValues.map((id) => ({
id,
- type: import_v106.SelectMenuDefaultValueType.Channel
+ type: import_v103.SelectMenuDefaultValueType.Channel
}));
return this;
}
@@ -1076,7 +910,7 @@ var ChannelSelectMenuBuilder = class extends BaseSelectMenuBuilder {
};
// src/components/selectMenu/MentionableSelectMenu.ts
-var import_v107 = require("discord-api-types/v10");
+var import_v104 = require("discord-api-types/v10");
var MentionableSelectMenuBuilder = class extends BaseSelectMenuBuilder {
static {
__name(this, "MentionableSelectMenuBuilder");
@@ -1104,7 +938,7 @@ var MentionableSelectMenuBuilder = class extends BaseSelectMenuBuilder {
* ```
*/
constructor(data) {
- super({ ...data, type: import_v107.ComponentType.MentionableSelect });
+ super({ ...data, type: import_v104.ComponentType.MentionableSelect });
}
/**
* Adds default roles to this auto populated select menu.
@@ -1118,7 +952,7 @@ var MentionableSelectMenuBuilder = class extends BaseSelectMenuBuilder {
this.data.default_values.push(
...normalizedValues.map((id) => ({
id,
- type: import_v107.SelectMenuDefaultValueType.Role
+ type: import_v104.SelectMenuDefaultValueType.Role
}))
);
return this;
@@ -1135,7 +969,7 @@ var MentionableSelectMenuBuilder = class extends BaseSelectMenuBuilder {
this.data.default_values.push(
...normalizedValues.map((id) => ({
id,
- type: import_v107.SelectMenuDefaultValueType.User
+ type: import_v104.SelectMenuDefaultValueType.User
}))
);
return this;
@@ -1166,7 +1000,7 @@ var MentionableSelectMenuBuilder = class extends BaseSelectMenuBuilder {
};
// src/components/selectMenu/RoleSelectMenu.ts
-var import_v108 = require("discord-api-types/v10");
+var import_v105 = require("discord-api-types/v10");
var RoleSelectMenuBuilder = class extends BaseSelectMenuBuilder {
static {
__name(this, "RoleSelectMenuBuilder");
@@ -1194,7 +1028,7 @@ var RoleSelectMenuBuilder = class extends BaseSelectMenuBuilder {
* ```
*/
constructor(data) {
- super({ ...data, type: import_v108.ComponentType.RoleSelect });
+ super({ ...data, type: import_v105.ComponentType.RoleSelect });
}
/**
* Adds default roles to this auto populated select menu.
@@ -1208,7 +1042,7 @@ var RoleSelectMenuBuilder = class extends BaseSelectMenuBuilder {
this.data.default_values.push(
...normalizedValues.map((id) => ({
id,
- type: import_v108.SelectMenuDefaultValueType.Role
+ type: import_v105.SelectMenuDefaultValueType.Role
}))
);
return this;
@@ -1223,78 +1057,14 @@ var RoleSelectMenuBuilder = class extends BaseSelectMenuBuilder {
optionsLengthValidator.parse(normalizedValues.length);
this.data.default_values = normalizedValues.map((id) => ({
id,
- type: import_v108.SelectMenuDefaultValueType.Role
+ type: import_v105.SelectMenuDefaultValueType.Role
}));
return this;
}
};
// src/components/selectMenu/StringSelectMenu.ts
-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 import_v106 = require("discord-api-types/v10");
var StringSelectMenuBuilder = class extends BaseSelectMenuBuilder {
static {
__name(this, "StringSelectMenuBuilder");
@@ -1336,7 +1106,7 @@ var StringSelectMenuBuilder = class extends BaseSelectMenuBuilder {
*/
constructor(data) {
const { options, ...initData } = data ?? {};
- super({ ...initData, type: import_v1010.ComponentType.StringSelect });
+ super({ ...initData, type: import_v106.ComponentType.StringSelect });
this.options = options?.map((option) => new StringSelectMenuOptionBuilder(option)) ?? [];
}
/**
@@ -1349,7 +1119,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(selectMenuStringOptionPredicate.parse(normalizedOption))
+ (normalizedOption) => normalizedOption instanceof StringSelectMenuOptionBuilder ? normalizedOption : new StringSelectMenuOptionBuilder(jsonOptionValidator.parse(normalizedOption))
)
);
return this;
@@ -1396,7 +1166,7 @@ var StringSelectMenuBuilder = class extends BaseSelectMenuBuilder {
index,
deleteCount,
...normalizedOptions.map(
- (normalizedOption) => normalizedOption instanceof StringSelectMenuOptionBuilder ? normalizedOption : new StringSelectMenuOptionBuilder(selectMenuStringOptionPredicate.parse(normalizedOption))
+ (normalizedOption) => normalizedOption instanceof StringSelectMenuOptionBuilder ? normalizedOption : new StringSelectMenuOptionBuilder(jsonOptionValidator.parse(normalizedOption))
)
);
optionsLengthValidator.parse(clone.length);
@@ -1416,7 +1186,7 @@ var StringSelectMenuBuilder = class extends BaseSelectMenuBuilder {
};
// src/components/selectMenu/UserSelectMenu.ts
-var import_v1011 = require("discord-api-types/v10");
+var import_v107 = require("discord-api-types/v10");
var UserSelectMenuBuilder = class extends BaseSelectMenuBuilder {
static {
__name(this, "UserSelectMenuBuilder");
@@ -1444,7 +1214,7 @@ var UserSelectMenuBuilder = class extends BaseSelectMenuBuilder {
* ```
*/
constructor(data) {
- super({ ...data, type: import_v1011.ComponentType.UserSelect });
+ super({ ...data, type: import_v107.ComponentType.UserSelect });
}
/**
* Adds default users to this auto populated select menu.
@@ -1458,7 +1228,7 @@ var UserSelectMenuBuilder = class extends BaseSelectMenuBuilder {
this.data.default_values.push(
...normalizedValues.map((id) => ({
id,
- type: import_v1011.SelectMenuDefaultValueType.User
+ type: import_v107.SelectMenuDefaultValueType.User
}))
);
return this;
@@ -1473,7 +1243,7 @@ var UserSelectMenuBuilder = class extends BaseSelectMenuBuilder {
optionsLengthValidator.parse(normalizedValues.length);
this.data.default_values = normalizedValues.map((id) => ({
id,
- type: import_v1011.SelectMenuDefaultValueType.User
+ type: import_v107.SelectMenuDefaultValueType.User
}));
return this;
}
@@ -1481,8 +1251,38 @@ var UserSelectMenuBuilder = class extends BaseSelectMenuBuilder {
// src/components/textInput/TextInput.ts
var import_util = require("@discordjs/util");
-var import_v1012 = require("discord-api-types/v10");
+var import_v109 = 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");
@@ -1496,7 +1296,7 @@ var TextInputBuilder = class extends ComponentBuilder {
* ```ts
* const textInput = new TextInputBuilder({
* custom_id: 'a cool text input',
- * placeholder: 'Type something',
+ * label: 'Type something',
* style: TextInputStyle.Short,
* });
* ```
@@ -1504,14 +1304,14 @@ var TextInputBuilder = class extends ComponentBuilder {
* Creating a text input using setters and API data:
* ```ts
* const textInput = new TextInputBuilder({
- * placeholder: 'Type something else',
+ * label: 'Type something else',
* })
* .setCustomId('woah')
* .setStyle(TextInputStyle.Paragraph);
* ```
*/
constructor(data) {
- super({ type: import_v1012.ComponentType.TextInput, ...data });
+ super({ type: import_v109.ComponentType.TextInput, ...data });
}
/**
* Sets the custom id for this text input.
@@ -1526,7 +1326,6 @@ 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);
@@ -1590,7 +1389,7 @@ var TextInputBuilder = class extends ComponentBuilder {
* {@inheritDoc ComponentBuilder.toJSON}
*/
toJSON() {
- validateRequiredParameters(this.data.custom_id, this.data.style);
+ validateRequiredParameters(this.data.custom_id, this.data.style, this.data.label);
return {
...this.data
};
@@ -1606,177 +1405,12 @@ 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_v1020 = require("discord-api-types/v10");
+var import_v1015 = require("discord-api-types/v10");
// src/components/v2/Assertions.ts
-var Assertions_exports7 = {};
-__export(Assertions_exports7, {
+var Assertions_exports4 = {};
+__export(Assertions_exports4, {
accessoryPredicate: () => accessoryPredicate,
assertReturnOfBuilder: () => assertReturnOfBuilder,
containerColorPredicate: () => containerColorPredicate,
@@ -1789,11 +1423,11 @@ __export(Assertions_exports7, {
unfurledMediaItemPredicate: () => unfurledMediaItemPredicate,
validateComponentArray: () => validateComponentArray
});
-var import_shapeshift7 = require("@sapphire/shapeshift");
-var import_v1016 = require("discord-api-types/v10");
+var import_shapeshift4 = require("@sapphire/shapeshift");
+var import_v1011 = require("discord-api-types/v10");
// src/components/v2/Thumbnail.ts
-var import_v1015 = require("discord-api-types/v10");
+var import_v1010 = require("discord-api-types/v10");
var ThumbnailBuilder = class extends ComponentBuilder {
static {
__name(this, "ThumbnailBuilder");
@@ -1825,7 +1459,7 @@ var ThumbnailBuilder = class extends ComponentBuilder {
*/
constructor(data = {}) {
super({
- type: import_v1015.ComponentType.Thumbnail,
+ type: import_v1010.ComponentType.Thumbnail,
...data,
media: data.media ? { url: data.media.url } : void 0
});
@@ -1874,33 +1508,33 @@ var ThumbnailBuilder = class extends ComponentBuilder {
};
// src/components/v2/Assertions.ts
-var unfurledMediaItemPredicate = import_shapeshift7.s.object({
- url: import_shapeshift7.s.string().url(
+var unfurledMediaItemPredicate = import_shapeshift4.s.object({
+ url: import_shapeshift4.s.string().url(
{ allowedProtocols: ["http:", "https:", "attachment:"] },
{ message: "Invalid protocol for media URL. Must be http:, https:, or attachment:" }
)
}).setValidationEnabled(isValidationEnabled);
-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:" })
+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:" })
}).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 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 containerColorPredicate = colorPredicate.nullish();
function assertReturnOfBuilder(input, ExpectedInstanceOf) {
- import_shapeshift7.s.instance(ExpectedInstanceOf).setValidationEnabled(isValidationEnabled).parse(input);
+ import_shapeshift4.s.instance(ExpectedInstanceOf).setValidationEnabled(isValidationEnabled).parse(input);
}
__name(assertReturnOfBuilder, "assertReturnOfBuilder");
function validateComponentArray(input, min, max, ExpectedInstanceOf) {
- (ExpectedInstanceOf ? import_shapeshift7.s.instance(ExpectedInstanceOf) : import_shapeshift7.s.instance(ComponentBuilder)).array().lengthGreaterThanOrEqual(min).lengthLessThanOrEqual(max).setValidationEnabled(isValidationEnabled).parse(input);
+ (ExpectedInstanceOf ? import_shapeshift4.s.instance(ExpectedInstanceOf) : import_shapeshift4.s.instance(ComponentBuilder)).array().lengthGreaterThanOrEqual(min).lengthLessThanOrEqual(max).setValidationEnabled(isValidationEnabled).parse(input);
}
__name(validateComponentArray, "validateComponentArray");
// src/components/v2/File.ts
-var import_v1017 = require("discord-api-types/v10");
+var import_v1012 = require("discord-api-types/v10");
var FileBuilder = class extends ComponentBuilder {
static {
__name(this, "FileBuilder");
@@ -1931,7 +1565,7 @@ var FileBuilder = class extends ComponentBuilder {
* ```
*/
constructor(data = {}) {
- super({ type: import_v1017.ComponentType.File, ...data, file: data.file ? { url: data.file.url } : void 0 });
+ super({ type: import_v1012.ComponentType.File, ...data, file: data.file ? { url: data.file.url } : void 0 });
}
/**
* Sets the spoiler status of this file.
@@ -1961,7 +1595,7 @@ var FileBuilder = class extends ComponentBuilder {
};
// src/components/v2/Separator.ts
-var import_v1018 = require("discord-api-types/v10");
+var import_v1013 = require("discord-api-types/v10");
var SeparatorBuilder = class extends ComponentBuilder {
static {
__name(this, "SeparatorBuilder");
@@ -1989,7 +1623,7 @@ var SeparatorBuilder = class extends ComponentBuilder {
*/
constructor(data = {}) {
super({
- type: import_v1018.ComponentType.Separator,
+ type: import_v1013.ComponentType.Separator,
...data
});
}
@@ -2027,7 +1661,7 @@ var SeparatorBuilder = class extends ComponentBuilder {
};
// src/components/v2/TextDisplay.ts
-var import_v1019 = require("discord-api-types/v10");
+var import_v1014 = require("discord-api-types/v10");
var TextDisplayBuilder = class extends ComponentBuilder {
static {
__name(this, "TextDisplayBuilder");
@@ -2054,7 +1688,7 @@ var TextDisplayBuilder = class extends ComponentBuilder {
*/
constructor(data = {}) {
super({
- type: import_v1019.ComponentType.TextDisplay,
+ type: import_v1014.ComponentType.TextDisplay,
...data
});
}
@@ -2112,12 +1746,11 @@ var ContainerBuilder = class extends ComponentBuilder {
* },
* ],
* })
- * .addSeparatorComponents(separator)
- * .addSectionComponents(section);
+ * .addComponents(separator, section);
* ```
*/
constructor({ components, ...data } = {}) {
- super({ type: import_v1020.ComponentType.Container, ...data });
+ super({ type: import_v1015.ComponentType.Container, ...data });
this.components = components?.map((component) => createComponentBuilder(component)) ?? [];
}
/**
@@ -2240,7 +1873,7 @@ var ContainerBuilder = class extends ComponentBuilder {
};
// src/components/v2/MediaGallery.ts
-var import_v1021 = require("discord-api-types/v10");
+var import_v1016 = require("discord-api-types/v10");
// src/components/v2/MediaGalleryItem.ts
var MediaGalleryItemBuilder = class {
@@ -2370,7 +2003,7 @@ var MediaGalleryBuilder = class extends ComponentBuilder {
* ```
*/
constructor({ items, ...data } = {}) {
- super({ type: import_v1021.ComponentType.MediaGallery, ...data });
+ super({ type: import_v1016.ComponentType.MediaGallery, ...data });
this.items = items?.map((item) => new MediaGalleryItemBuilder(item)) ?? [];
}
/**
@@ -2420,7 +2053,7 @@ var MediaGalleryBuilder = class extends ComponentBuilder {
};
// src/components/v2/Section.ts
-var import_v1022 = require("discord-api-types/v10");
+var import_v1017 = require("discord-api-types/v10");
var SectionBuilder = class extends ComponentBuilder {
static {
__name(this, "SectionBuilder");
@@ -2469,7 +2102,7 @@ var SectionBuilder = class extends ComponentBuilder {
* ```
*/
constructor({ components, accessory, ...data } = {}) {
- super({ type: import_v1022.ComponentType.Section, ...data });
+ super({ type: import_v1017.ComponentType.Section, ...data });
this.components = components?.map((component) => createComponentBuilder(component)) ?? [];
this.accessory = accessory ? createComponentBuilder(accessory) : void 0;
}
@@ -2544,40 +2177,36 @@ function createComponentBuilder(data) {
return data;
}
switch (data.type) {
- case import_v1023.ComponentType.ActionRow:
+ case import_v1018.ComponentType.ActionRow:
return new ActionRowBuilder(data);
- case import_v1023.ComponentType.Button:
+ case import_v1018.ComponentType.Button:
return new ButtonBuilder(data);
- case import_v1023.ComponentType.StringSelect:
+ case import_v1018.ComponentType.StringSelect:
return new StringSelectMenuBuilder(data);
- case import_v1023.ComponentType.TextInput:
+ case import_v1018.ComponentType.TextInput:
return new TextInputBuilder(data);
- case import_v1023.ComponentType.UserSelect:
+ case import_v1018.ComponentType.UserSelect:
return new UserSelectMenuBuilder(data);
- case import_v1023.ComponentType.RoleSelect:
+ case import_v1018.ComponentType.RoleSelect:
return new RoleSelectMenuBuilder(data);
- case import_v1023.ComponentType.MentionableSelect:
+ case import_v1018.ComponentType.MentionableSelect:
return new MentionableSelectMenuBuilder(data);
- case import_v1023.ComponentType.ChannelSelect:
+ case import_v1018.ComponentType.ChannelSelect:
return new ChannelSelectMenuBuilder(data);
- case import_v1023.ComponentType.File:
+ case import_v1018.ComponentType.File:
return new FileBuilder(data);
- case import_v1023.ComponentType.Container:
+ case import_v1018.ComponentType.Container:
return new ContainerBuilder(data);
- case import_v1023.ComponentType.Section:
+ case import_v1018.ComponentType.Section:
return new SectionBuilder(data);
- case import_v1023.ComponentType.Separator:
+ case import_v1018.ComponentType.Separator:
return new SeparatorBuilder(data);
- case import_v1023.ComponentType.TextDisplay:
+ case import_v1018.ComponentType.TextDisplay:
return new TextDisplayBuilder(data);
- case import_v1023.ComponentType.Thumbnail:
+ case import_v1018.ComponentType.Thumbnail:
return new ThumbnailBuilder(data);
- case import_v1023.ComponentType.MediaGallery:
+ case import_v1018.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}`);
}
@@ -2642,7 +2271,7 @@ var ActionRowBuilder = class extends ComponentBuilder {
* ```
*/
constructor({ components, ...data } = {}) {
- super({ type: import_v1024.ComponentType.ActionRow, ...data });
+ super({ type: import_v1019.ComponentType.ActionRow, ...data });
this.components = components?.map((component) => createComponentBuilder(component)) ?? [];
}
/**
@@ -2674,19 +2303,16 @@ 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_exports8 = {};
-__export(Assertions_exports8, {
+var Assertions_exports5 = {};
+__export(Assertions_exports5, {
componentsValidator: () => componentsValidator,
titleValidator: () => titleValidator,
validateRequiredParameters: () => validateRequiredParameters2
});
-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);
+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);
function validateRequiredParameters2(customId, title, components) {
customIdValidator.parse(customId);
titleValidator.parse(title);
@@ -2738,121 +2364,19 @@ 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, 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}!`);
- })
+ ...normalizeArray(components).map(
+ (component) => component instanceof ActionRowBuilder ? component : new ActionRowBuilder(component)
+ )
);
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));
@@ -2871,8 +2395,8 @@ var ModalBuilder = class {
};
// src/interactions/slashCommands/Assertions.ts
-var Assertions_exports9 = {};
-__export(Assertions_exports9, {
+var Assertions_exports6 = {};
+__export(Assertions_exports6, {
assertReturnOfBuilder: () => assertReturnOfBuilder2,
contextsPredicate: () => contextsPredicate,
integrationTypesPredicate: () => integrationTypesPredicate,
@@ -2890,20 +2414,20 @@ __export(Assertions_exports9, {
validateRequired: () => validateRequired,
validateRequiredParameters: () => validateRequiredParameters3
});
-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);
+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);
function validateName(name) {
namePredicate.parse(name);
}
__name(validateName, "validateName");
-var descriptionPredicate3 = import_shapeshift9.s.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(100).setValidationEnabled(isValidationEnabled);
-var localePredicate = import_shapeshift9.s.nativeEnum(import_v1026.Locale);
+var descriptionPredicate3 = import_shapeshift6.s.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(100).setValidationEnabled(isValidationEnabled);
+var localePredicate = import_shapeshift6.s.nativeEnum(import_v1020.Locale);
function validateDescription(description) {
descriptionPredicate3.parse(description);
}
__name(validateDescription, "validateDescription");
-var maxArrayLengthPredicate = import_shapeshift9.s.unknown().array().lengthLessThanOrEqual(25).setValidationEnabled(isValidationEnabled);
+var maxArrayLengthPredicate = import_shapeshift6.s.unknown().array().lengthLessThanOrEqual(25).setValidationEnabled(isValidationEnabled);
function validateLocale(locale) {
return localePredicate.parse(locale);
}
@@ -2918,7 +2442,7 @@ function validateRequiredParameters3(name, description, options) {
validateMaxOptionsLength(options);
}
__name(validateRequiredParameters3, "validateRequiredParameters");
-var booleanPredicate = import_shapeshift9.s.boolean();
+var booleanPredicate = import_shapeshift6.s.boolean();
function validateDefaultPermission(value) {
booleanPredicate.parse(value);
}
@@ -2927,29 +2451,29 @@ function validateRequired(required) {
booleanPredicate.parse(required);
}
__name(validateRequired, "validateRequired");
-var choicesLengthPredicate = import_shapeshift9.s.number().lessThanOrEqual(25).setValidationEnabled(isValidationEnabled);
+var choicesLengthPredicate = import_shapeshift6.s.number().lessThanOrEqual(25).setValidationEnabled(isValidationEnabled);
function validateChoicesLength(amountAdding, choices) {
choicesLengthPredicate.parse((choices?.length ?? 0) + amountAdding);
}
__name(validateChoicesLength, "validateChoicesLength");
function assertReturnOfBuilder2(input, ExpectedInstanceOf) {
- import_shapeshift9.s.instance(ExpectedInstanceOf).parse(input);
+ import_shapeshift6.s.instance(ExpectedInstanceOf).parse(input);
}
__name(assertReturnOfBuilder2, "assertReturnOfBuilder");
-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);
+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);
function validateLocalizationMap(value) {
localizationMapPredicate.parse(value);
}
__name(validateLocalizationMap, "validateLocalizationMap");
-var dmPermissionPredicate = import_shapeshift9.s.boolean().nullish();
+var dmPermissionPredicate = import_shapeshift6.s.boolean().nullish();
function validateDMPermission(value) {
dmPermissionPredicate.parse(value);
}
__name(validateDMPermission, "validateDMPermission");
-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+$/)
+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+$/)
]).nullish();
function validateDefaultMemberPermissions(permissions) {
return memberPermissionPredicate.parse(permissions);
@@ -2959,11 +2483,11 @@ function validateNSFW(value) {
booleanPredicate.parse(value);
}
__name(validateNSFW, "validateNSFW");
-var contextsPredicate = import_shapeshift9.s.array(
- import_shapeshift9.s.nativeEnum(import_v1026.InteractionContextType).setValidationEnabled(isValidationEnabled)
+var contextsPredicate = import_shapeshift6.s.array(
+ import_shapeshift6.s.nativeEnum(import_v1020.InteractionContextType).setValidationEnabled(isValidationEnabled)
);
-var integrationTypesPredicate = import_shapeshift9.s.array(
- import_shapeshift9.s.nativeEnum(import_v1026.ApplicationIntegrationType).setValidationEnabled(isValidationEnabled)
+var integrationTypesPredicate = import_shapeshift6.s.array(
+ import_shapeshift6.s.nativeEnum(import_v1020.ApplicationIntegrationType).setValidationEnabled(isValidationEnabled)
);
// src/interactions/slashCommands/SlashCommandBuilder.ts
@@ -3083,7 +2607,7 @@ var SharedNameAndDescription = class {
};
// src/interactions/slashCommands/mixins/SharedSlashCommand.ts
-var import_v1027 = require("discord-api-types/v10");
+var import_v1021 = require("discord-api-types/v10");
var SharedSlashCommand = class {
static {
__name(this, "SharedSlashCommand");
@@ -3188,14 +2712,14 @@ var SharedSlashCommand = class {
validateLocalizationMap(this.description_localizations);
return {
...this,
- type: import_v1027.ApplicationCommandType.ChatInput,
+ type: import_v1021.ApplicationCommandType.ChatInput,
options: this.options.map((option) => option.toJSON())
};
}
};
// src/interactions/slashCommands/options/attachment.ts
-var import_v1028 = require("discord-api-types/v10");
+var import_v1022 = require("discord-api-types/v10");
// src/interactions/slashCommands/mixins/ApplicationCommandOptionBase.ts
var ApplicationCommandOptionBase = class extends SharedNameAndDescription {
@@ -3237,7 +2761,7 @@ var SlashCommandAttachmentOption = class extends ApplicationCommandOptionBase {
/**
* The type of this option.
*/
- type = import_v1028.ApplicationCommandOptionType.Attachment;
+ type = import_v1022.ApplicationCommandOptionType.Attachment;
/**
* {@inheritDoc ApplicationCommandOptionBase.toJSON}
*/
@@ -3248,7 +2772,7 @@ var SlashCommandAttachmentOption = class extends ApplicationCommandOptionBase {
};
// src/interactions/slashCommands/options/boolean.ts
-var import_v1029 = require("discord-api-types/v10");
+var import_v1023 = require("discord-api-types/v10");
var SlashCommandBooleanOption = class extends ApplicationCommandOptionBase {
static {
__name(this, "SlashCommandBooleanOption");
@@ -3256,7 +2780,7 @@ var SlashCommandBooleanOption = class extends ApplicationCommandOptionBase {
/**
* The type of this option.
*/
- type = import_v1029.ApplicationCommandOptionType.Boolean;
+ type = import_v1023.ApplicationCommandOptionType.Boolean;
/**
* {@inheritDoc ApplicationCommandOptionBase.toJSON}
*/
@@ -3267,25 +2791,25 @@ var SlashCommandBooleanOption = class extends ApplicationCommandOptionBase {
};
// src/interactions/slashCommands/options/channel.ts
-var import_v1031 = require("discord-api-types/v10");
+var import_v1025 = require("discord-api-types/v10");
var import_ts_mixer = require("ts-mixer");
// src/interactions/slashCommands/mixins/ApplicationCommandOptionChannelTypesMixin.ts
-var import_shapeshift10 = require("@sapphire/shapeshift");
-var import_v1030 = require("discord-api-types/v10");
+var import_shapeshift7 = require("@sapphire/shapeshift");
+var import_v1024 = require("discord-api-types/v10");
var allowedChannelTypes = [
- 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
+ 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
];
-var channelTypesPredicate = import_shapeshift10.s.array(import_shapeshift10.s.union(allowedChannelTypes.map((type) => import_shapeshift10.s.literal(type))));
+var channelTypesPredicate = import_shapeshift7.s.array(import_shapeshift7.s.union(allowedChannelTypes.map((type) => import_shapeshift7.s.literal(type))));
var ApplicationCommandOptionChannelTypesMixin = class {
static {
__name(this, "ApplicationCommandOptionChannelTypesMixin");
@@ -3313,7 +2837,7 @@ var SlashCommandChannelOption = class extends ApplicationCommandOptionBase {
/**
* The type of this option.
*/
- type = import_v1031.ApplicationCommandOptionType.Channel;
+ type = import_v1025.ApplicationCommandOptionType.Channel;
/**
* {@inheritDoc ApplicationCommandOptionBase.toJSON}
*/
@@ -3328,8 +2852,8 @@ SlashCommandChannelOption = __decorateClass([
], SlashCommandChannelOption);
// src/interactions/slashCommands/options/integer.ts
-var import_shapeshift13 = require("@sapphire/shapeshift");
-var import_v1033 = require("discord-api-types/v10");
+var import_shapeshift10 = require("@sapphire/shapeshift");
+var import_v1027 = require("discord-api-types/v10");
var import_ts_mixer2 = require("ts-mixer");
// src/interactions/slashCommands/mixins/ApplicationCommandNumericOptionMinMaxValueMixin.ts
@@ -3348,8 +2872,8 @@ var ApplicationCommandNumericOptionMinMaxValueMixin = class {
};
// src/interactions/slashCommands/mixins/ApplicationCommandOptionWithAutocompleteMixin.ts
-var import_shapeshift11 = require("@sapphire/shapeshift");
-var booleanPredicate2 = import_shapeshift11.s.boolean();
+var import_shapeshift8 = require("@sapphire/shapeshift");
+var booleanPredicate2 = import_shapeshift8.s.boolean();
var ApplicationCommandOptionWithAutocompleteMixin = class {
static {
__name(this, "ApplicationCommandOptionWithAutocompleteMixin");
@@ -3380,14 +2904,14 @@ var ApplicationCommandOptionWithAutocompleteMixin = class {
};
// src/interactions/slashCommands/mixins/ApplicationCommandOptionWithChoicesMixin.ts
-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({
+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({
name: stringPredicate,
name_localizations: localizationMapPredicate,
- value: import_shapeshift12.s.union([stringPredicate, numberPredicate])
+ value: import_shapeshift9.s.union([stringPredicate, numberPredicate])
}).array();
var ApplicationCommandOptionWithChoicesMixin = class {
static {
@@ -3419,7 +2943,7 @@ var ApplicationCommandOptionWithChoicesMixin = class {
}
validateChoicesLength(normalizedChoices.length, this.choices);
for (const { name, name_localizations, value } of normalizedChoices) {
- if (this.type === import_v1032.ApplicationCommandOptionType.String) {
+ if (this.type === import_v1026.ApplicationCommandOptionType.String) {
stringPredicate.parse(value);
} else {
numberPredicate.parse(value);
@@ -3446,12 +2970,12 @@ var ApplicationCommandOptionWithChoicesMixin = class {
};
// src/interactions/slashCommands/options/integer.ts
-var numberValidator = import_shapeshift13.s.number().int();
+var numberValidator = import_shapeshift10.s.number().int();
var SlashCommandIntegerOption = class extends ApplicationCommandOptionBase {
/**
* The type of this option.
*/
- type = import_v1033.ApplicationCommandOptionType.Integer;
+ type = import_v1027.ApplicationCommandOptionType.Integer;
/**
* {@inheritDoc ApplicationCommandNumericOptionMinMaxValueMixin.setMaxValue}
*/
@@ -3489,7 +3013,7 @@ SlashCommandIntegerOption = __decorateClass([
], SlashCommandIntegerOption);
// src/interactions/slashCommands/options/mentionable.ts
-var import_v1034 = require("discord-api-types/v10");
+var import_v1028 = require("discord-api-types/v10");
var SlashCommandMentionableOption = class extends ApplicationCommandOptionBase {
static {
__name(this, "SlashCommandMentionableOption");
@@ -3497,7 +3021,7 @@ var SlashCommandMentionableOption = class extends ApplicationCommandOptionBase {
/**
* The type of this option.
*/
- type = import_v1034.ApplicationCommandOptionType.Mentionable;
+ type = import_v1028.ApplicationCommandOptionType.Mentionable;
/**
* {@inheritDoc ApplicationCommandOptionBase.toJSON}
*/
@@ -3508,15 +3032,15 @@ var SlashCommandMentionableOption = class extends ApplicationCommandOptionBase {
};
// src/interactions/slashCommands/options/number.ts
-var import_shapeshift14 = require("@sapphire/shapeshift");
-var import_v1035 = require("discord-api-types/v10");
+var import_shapeshift11 = require("@sapphire/shapeshift");
+var import_v1029 = require("discord-api-types/v10");
var import_ts_mixer3 = require("ts-mixer");
-var numberValidator2 = import_shapeshift14.s.number();
+var numberValidator2 = import_shapeshift11.s.number();
var SlashCommandNumberOption = class extends ApplicationCommandOptionBase {
/**
* The type of this option.
*/
- type = import_v1035.ApplicationCommandOptionType.Number;
+ type = import_v1029.ApplicationCommandOptionType.Number;
/**
* {@inheritDoc ApplicationCommandNumericOptionMinMaxValueMixin.setMaxValue}
*/
@@ -3554,7 +3078,7 @@ SlashCommandNumberOption = __decorateClass([
], SlashCommandNumberOption);
// src/interactions/slashCommands/options/role.ts
-var import_v1036 = require("discord-api-types/v10");
+var import_v1030 = require("discord-api-types/v10");
var SlashCommandRoleOption = class extends ApplicationCommandOptionBase {
static {
__name(this, "SlashCommandRoleOption");
@@ -3562,7 +3086,7 @@ var SlashCommandRoleOption = class extends ApplicationCommandOptionBase {
/**
* The type of this option.
*/
- type = import_v1036.ApplicationCommandOptionType.Role;
+ type = import_v1030.ApplicationCommandOptionType.Role;
/**
* {@inheritDoc ApplicationCommandOptionBase.toJSON}
*/
@@ -3573,16 +3097,16 @@ var SlashCommandRoleOption = class extends ApplicationCommandOptionBase {
};
// src/interactions/slashCommands/options/string.ts
-var import_shapeshift15 = require("@sapphire/shapeshift");
-var import_v1037 = require("discord-api-types/v10");
+var import_shapeshift12 = require("@sapphire/shapeshift");
+var import_v1031 = require("discord-api-types/v10");
var import_ts_mixer4 = require("ts-mixer");
-var minLengthValidator2 = import_shapeshift15.s.number().greaterThanOrEqual(0).lessThanOrEqual(6e3);
-var maxLengthValidator2 = import_shapeshift15.s.number().greaterThanOrEqual(1).lessThanOrEqual(6e3);
+var minLengthValidator2 = import_shapeshift12.s.number().greaterThanOrEqual(0).lessThanOrEqual(6e3);
+var maxLengthValidator2 = import_shapeshift12.s.number().greaterThanOrEqual(1).lessThanOrEqual(6e3);
var SlashCommandStringOption = class extends ApplicationCommandOptionBase {
/**
* The type of this option.
*/
- type = import_v1037.ApplicationCommandOptionType.String;
+ type = import_v1031.ApplicationCommandOptionType.String;
/**
* The maximum length of this option.
*/
@@ -3628,7 +3152,7 @@ SlashCommandStringOption = __decorateClass([
], SlashCommandStringOption);
// src/interactions/slashCommands/options/user.ts
-var import_v1038 = require("discord-api-types/v10");
+var import_v1032 = require("discord-api-types/v10");
var SlashCommandUserOption = class extends ApplicationCommandOptionBase {
static {
__name(this, "SlashCommandUserOption");
@@ -3636,7 +3160,7 @@ var SlashCommandUserOption = class extends ApplicationCommandOptionBase {
/**
* The type of this option.
*/
- type = import_v1038.ApplicationCommandOptionType.User;
+ type = import_v1032.ApplicationCommandOptionType.User;
/**
* {@inheritDoc ApplicationCommandOptionBase.toJSON}
*/
@@ -3742,7 +3266,7 @@ var SharedSlashCommandOptions = class {
};
// src/interactions/slashCommands/SlashCommandSubcommands.ts
-var import_v1039 = require("discord-api-types/v10");
+var import_v1033 = require("discord-api-types/v10");
var import_ts_mixer5 = require("ts-mixer");
var SlashCommandSubcommandGroupBuilder = class {
/**
@@ -3780,7 +3304,7 @@ var SlashCommandSubcommandGroupBuilder = class {
toJSON() {
validateRequiredParameters3(this.name, this.description, this.options);
return {
- type: import_v1039.ApplicationCommandOptionType.SubcommandGroup,
+ type: import_v1033.ApplicationCommandOptionType.SubcommandGroup,
name: this.name,
name_localizations: this.name_localizations,
description: this.description,
@@ -3816,7 +3340,7 @@ var SlashCommandSubcommandBuilder = class {
toJSON() {
validateRequiredParameters3(this.name, this.description, this.options);
return {
- type: import_v1039.ApplicationCommandOptionType.Subcommand,
+ type: import_v1033.ApplicationCommandOptionType.Subcommand,
name: this.name,
name_localizations: this.name_localizations,
description: this.description,
@@ -3924,8 +3448,8 @@ SlashCommandBuilder = __decorateClass([
], SlashCommandBuilder);
// src/interactions/contextMenuCommands/Assertions.ts
-var Assertions_exports10 = {};
-__export(Assertions_exports10, {
+var Assertions_exports7 = {};
+__export(Assertions_exports7, {
contextsPredicate: () => contextsPredicate2,
integrationTypesPredicate: () => integrationTypesPredicate2,
validateDMPermission: () => validateDMPermission2,
@@ -3935,11 +3459,11 @@ __export(Assertions_exports10, {
validateRequiredParameters: () => validateRequiredParameters4,
validateType: () => validateType
});
-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();
+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();
function validateDefaultPermission2(value) {
booleanPredicate3.parse(value);
}
@@ -3957,25 +3481,25 @@ function validateRequiredParameters4(name, type) {
validateType(type);
}
__name(validateRequiredParameters4, "validateRequiredParameters");
-var dmPermissionPredicate2 = import_shapeshift16.s.boolean().nullish();
+var dmPermissionPredicate2 = import_shapeshift13.s.boolean().nullish();
function validateDMPermission2(value) {
dmPermissionPredicate2.parse(value);
}
__name(validateDMPermission2, "validateDMPermission");
-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+$/)
+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+$/)
]).nullish();
function validateDefaultMemberPermissions2(permissions) {
return memberPermissionPredicate2.parse(permissions);
}
__name(validateDefaultMemberPermissions2, "validateDefaultMemberPermissions");
-var contextsPredicate2 = import_shapeshift16.s.array(
- import_shapeshift16.s.nativeEnum(import_v1040.InteractionContextType).setValidationEnabled(isValidationEnabled)
+var contextsPredicate2 = import_shapeshift13.s.array(
+ import_shapeshift13.s.nativeEnum(import_v1034.InteractionContextType).setValidationEnabled(isValidationEnabled)
);
-var integrationTypesPredicate2 = import_shapeshift16.s.array(
- import_shapeshift16.s.nativeEnum(import_v1040.ApplicationIntegrationType).setValidationEnabled(isValidationEnabled)
+var integrationTypesPredicate2 = import_shapeshift13.s.array(
+ import_shapeshift13.s.nativeEnum(import_v1034.ApplicationIntegrationType).setValidationEnabled(isValidationEnabled)
);
// src/interactions/contextMenuCommands/ContextMenuCommandBuilder.ts
@@ -4156,7 +3680,7 @@ function embedLength(data) {
__name(embedLength, "embedLength");
// src/index.ts
-var version = "1.13.1";
+var version = "1.11.3";
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
ActionRowBuilder,
@@ -4177,10 +3701,6 @@ var version = "1.13.1";
EmbedAssertions,
EmbedBuilder,
FileBuilder,
- FileUploadAssertions,
- FileUploadBuilder,
- LabelAssertions,
- LabelBuilder,
MediaGalleryBuilder,
MediaGalleryItemBuilder,
MentionableSelectMenuBuilder,
@@ -4188,7 +3708,6 @@ var version = "1.13.1";
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 051e7c2..47769e9 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/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
+{"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