122 lines
5.2 KiB
JavaScript
122 lines
5.2 KiB
JavaScript
const { SlashCommandBuilder, EmbedBuilder, ActionRowBuilder, ButtonBuilder, ButtonStyle, MessageFlags } = require('discord.js');
|
|
const { getUserLink, deleteUserLink } = require('../../database.js');
|
|
|
|
module.exports = {
|
|
data: new SlashCommandBuilder()
|
|
.setName('delier-rygainland')
|
|
.setDescription('Délier votre compte Discord de votre compte Palworld'),
|
|
|
|
async execute(interaction) {
|
|
try {
|
|
const existingLink = await getUserLink(interaction.user.id);
|
|
|
|
if (!existingLink) {
|
|
const embed = new EmbedBuilder()
|
|
.setColor(0xFF9900)
|
|
.setTitle('⚠️ Aucune liaison trouvée')
|
|
.setDescription('Votre compte Discord n\'est pas lié à un compte Palworld.')
|
|
.addFields(
|
|
{ name: '💡 Pour vous lier', value: 'Utilisez la commande `/lier-rygainland`' }
|
|
)
|
|
.setTimestamp();
|
|
|
|
return interaction.reply({ embeds: [embed], flags: MessageFlags.Ephemeral });
|
|
}
|
|
|
|
// Afficher un embed de confirmation avec boutons
|
|
const confirmEmbed = new EmbedBuilder()
|
|
.setColor(0xFF6600)
|
|
.setTitle('⚠️ Confirmation de déliaison')
|
|
.setDescription('Êtes-vous sûr de vouloir délier votre compte ?')
|
|
.addFields(
|
|
{ name: '👤 Discord', value: `${interaction.user.globalName}`, inline: false },
|
|
{ name: '🎮 Palworld', value: `**${existingLink.palworld_username}**`, inline: true },
|
|
{ name: '🆔 Steam ID', value: `\`${existingLink.steam_id}\``, inline: true },
|
|
{ name: '🎯 Player ID', value: `\`${existingLink.player_id || 'N/A'}\``, inline: false }
|
|
)
|
|
.setFooter({ text: 'Cette action est irréversible' })
|
|
.setTimestamp();
|
|
|
|
const row = new ActionRowBuilder()
|
|
.addComponents(
|
|
new ButtonBuilder()
|
|
.setCustomId('confirm_unlink')
|
|
.setLabel('✅ Confirmer la déliaison')
|
|
.setStyle(ButtonStyle.Danger),
|
|
new ButtonBuilder()
|
|
.setCustomId('cancel_unlink')
|
|
.setLabel('❌ Annuler')
|
|
.setStyle(ButtonStyle.Secondary)
|
|
);
|
|
|
|
const response = await interaction.reply({
|
|
embeds: [confirmEmbed],
|
|
components: [row],
|
|
flags: MessageFlags.Ephemeral
|
|
});
|
|
|
|
// Attendre la réponse de l'utilisateur (60 secondes)
|
|
const collectorFilter = i => i.user.id === interaction.user.id;
|
|
|
|
try {
|
|
const confirmation = await response.awaitMessageComponent({
|
|
filter: collectorFilter,
|
|
time: 60000
|
|
});
|
|
|
|
if (confirmation.customId === 'confirm_unlink') {
|
|
// Supprimer la liaison
|
|
await deleteUserLink(interaction.user.id);
|
|
|
|
const successEmbed = new EmbedBuilder()
|
|
.setColor(0x00FF00)
|
|
.setTitle('✅ Déliaison réussie')
|
|
.setDescription('Votre compte Discord a été délié avec succès de votre compte Palworld.')
|
|
.addFields(
|
|
{ name: '🎮 Compte Palworld délié', value: `**${existingLink.palworld_username}**` },
|
|
{ name: '💡 Pour vous lier à nouveau', value: 'Utilisez la commande `/lier-rygainland`' }
|
|
)
|
|
.setTimestamp();
|
|
|
|
await confirmation.update({
|
|
embeds: [successEmbed],
|
|
components: []
|
|
});
|
|
|
|
} else if (confirmation.customId === 'cancel_unlink') {
|
|
const cancelEmbed = new EmbedBuilder()
|
|
.setColor(0x808080)
|
|
.setTitle('❌ Déliaison annulée')
|
|
.setDescription('Votre compte reste lié.')
|
|
.setTimestamp();
|
|
|
|
await confirmation.update({
|
|
embeds: [cancelEmbed],
|
|
components: []
|
|
});
|
|
}
|
|
|
|
} catch (error) {
|
|
// Timeout ou erreur
|
|
const timeoutEmbed = new EmbedBuilder()
|
|
.setColor(0x808080)
|
|
.setTitle('⏱️ Temps écoulé')
|
|
.setDescription('La demande de déliaison a expiré. Votre compte reste lié.')
|
|
.setTimestamp();
|
|
|
|
await interaction.editReply({
|
|
embeds: [timeoutEmbed],
|
|
components: []
|
|
});
|
|
}
|
|
|
|
} catch (error) {
|
|
console.error('Erreur lors de la déliaison:', error);
|
|
await interaction.reply({
|
|
content: '❌ Une erreur est survenue lors de la déliaison.',
|
|
flags: MessageFlags.Ephemeral
|
|
});
|
|
}
|
|
},
|
|
};
|