finish
This commit is contained in:
parent
03ab6b4b74
commit
c483e8f5da
@ -1,4 +1,4 @@
|
|||||||
const { SlashCommandBuilder, EmbedBuilder, MessageFlags } = require('discord.js');
|
const { SlashCommandBuilder, EmbedBuilder, ActionRowBuilder, ButtonBuilder, ButtonStyle, MessageFlags } = require('discord.js');
|
||||||
const { getUserLink, deleteUserLink } = require('../../database.js');
|
const { getUserLink, deleteUserLink } = require('../../database.js');
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
@ -6,32 +6,71 @@ module.exports = {
|
|||||||
.setName('delier')
|
.setName('delier')
|
||||||
.setDescription('Délier un compte Discord de son compte Palworld (Admin)')
|
.setDescription('Délier un compte Discord de son compte Palworld (Admin)')
|
||||||
.addUserOption(option =>
|
.addUserOption(option =>
|
||||||
option.setName('discord-account')
|
option.setName('compte-discord')
|
||||||
.setDescription('Le compte Discord à délier')
|
.setDescription('Le compte Discord à délier')
|
||||||
.setRequired(true)),
|
.setRequired(true)),
|
||||||
|
|
||||||
async execute(interaction) {
|
async execute(interaction) {
|
||||||
try {
|
try {
|
||||||
await interaction.deferReply({ flags: MessageFlags.Ephemeral });
|
const discordUser = interaction.options.getUser('compte-discord');
|
||||||
|
|
||||||
const discordUser = interaction.options.getUser('discord-account');
|
|
||||||
|
|
||||||
// Vérifier si l'utilisateur est lié
|
|
||||||
const existingLink = await getUserLink(discordUser.id);
|
const existingLink = await getUserLink(discordUser.id);
|
||||||
|
|
||||||
if (!existingLink) {
|
if (!existingLink) {
|
||||||
return interaction.editReply({
|
const embed = new EmbedBuilder()
|
||||||
content: `❌ Le compte <@${discordUser.id}> n'est pas lié à un compte Palworld.`,
|
.setColor(0xFF9900)
|
||||||
flags: MessageFlags.Ephemeral
|
.setTitle('⚠️ Aucune liaison trouvée')
|
||||||
});
|
.setDescription(`Le compte <@${discordUser.id}> n'est pas lié à un compte Palworld.`)
|
||||||
|
.setTimestamp();
|
||||||
|
|
||||||
|
return interaction.reply({ embeds: [embed]});
|
||||||
}
|
}
|
||||||
|
|
||||||
// Supprimer la liaison
|
// Afficher un embed de confirmation avec boutons
|
||||||
|
const confirmEmbed = new EmbedBuilder()
|
||||||
|
.setColor(0xFF6600)
|
||||||
|
.setTitle('⚠️ Confirmation de déliaison (Admin)')
|
||||||
|
.setDescription(`Êtes-vous sûr de vouloir délier ce compte ?`)
|
||||||
|
.addFields(
|
||||||
|
{ name: '👤 Discord', value: `${discordUser.tag} (<@${discordUser.id}>)`, 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('admin_confirm_unlink')
|
||||||
|
.setLabel('✅ Confirmer la déliaison')
|
||||||
|
.setStyle(ButtonStyle.Danger),
|
||||||
|
new ButtonBuilder()
|
||||||
|
.setCustomId('admin_cancel_unlink')
|
||||||
|
.setLabel('❌ Annuler')
|
||||||
|
.setStyle(ButtonStyle.Secondary)
|
||||||
|
);
|
||||||
|
|
||||||
|
const response = await interaction.reply({
|
||||||
|
embeds: [confirmEmbed],
|
||||||
|
components: [row]
|
||||||
|
});
|
||||||
|
|
||||||
|
const collectorFilter = i => i.user.id === interaction.user.id;
|
||||||
|
|
||||||
|
try {
|
||||||
|
const confirmation = await response.awaitMessageComponent({
|
||||||
|
filter: collectorFilter,
|
||||||
|
time: 60000
|
||||||
|
});
|
||||||
|
|
||||||
|
if (confirmation.customId === 'admin_confirm_unlink') {
|
||||||
await deleteUserLink(discordUser.id);
|
await deleteUserLink(discordUser.id);
|
||||||
|
|
||||||
const embed = new EmbedBuilder()
|
const successEmbed = new EmbedBuilder()
|
||||||
.setColor(0xFF0000)
|
.setColor(0x00FF00)
|
||||||
.setTitle('🔓 Liaison supprimée')
|
.setTitle('✅ Liaison supprimée')
|
||||||
.setDescription(`Le compte Discord a été délié avec succès.`)
|
.setDescription(`Le compte Discord a été délié avec succès.`)
|
||||||
.addFields(
|
.addFields(
|
||||||
{ name: '👤 Discord', value: `${discordUser.tag} (<@${discordUser.id}>)`, inline: false },
|
{ name: '👤 Discord', value: `${discordUser.tag} (<@${discordUser.id}>)`, inline: false },
|
||||||
@ -40,20 +79,53 @@ module.exports = {
|
|||||||
)
|
)
|
||||||
.setTimestamp();
|
.setTimestamp();
|
||||||
|
|
||||||
// Envoyer un MP au joueur délié
|
|
||||||
await discordUser.send(
|
await discordUser.send(
|
||||||
`🔓 **Liaison supprimée**\n\n` +
|
`🔓 **Liaison supprimée**\n\n` +
|
||||||
`Votre compte Discord a été délié de votre compte Palworld par un administrateur.\n` +
|
`Votre compte Discord a été délié de votre compte Palworld par un administrateur.\n` +
|
||||||
`Vous pouvez vous lier à nouveau avec \`/rygainland-link\`.`
|
`Vous pouvez vous lier à nouveau avec \`/lier-rygainland\`.`
|
||||||
).catch(() => {});
|
).catch(() => {});
|
||||||
|
|
||||||
await interaction.editReply({ embeds: [embed], flags: MessageFlags.Ephemeral });
|
await confirmation.update({
|
||||||
|
embeds: [successEmbed],
|
||||||
|
components: []
|
||||||
|
});
|
||||||
|
|
||||||
|
} else if (confirmation.customId === 'admin_cancel_unlink') {
|
||||||
|
const cancelEmbed = new EmbedBuilder()
|
||||||
|
.setColor(0x808080)
|
||||||
|
.setTitle('❌ Déliaison annulée')
|
||||||
|
.setDescription('La liaison n\'a pas été modifiée.')
|
||||||
|
.setTimestamp();
|
||||||
|
|
||||||
|
await confirmation.update({
|
||||||
|
embeds: [cancelEmbed],
|
||||||
|
components: []
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (error) {
|
||||||
|
const timeoutEmbed = new EmbedBuilder()
|
||||||
|
.setColor(0x808080)
|
||||||
|
.setTitle('⏱️ Temps écoulé')
|
||||||
|
.setDescription('La demande de déliaison a expiré. La liaison n\'a pas été modifiée.')
|
||||||
|
.setTimestamp();
|
||||||
|
|
||||||
|
await interaction.editReply({
|
||||||
|
embeds: [timeoutEmbed],
|
||||||
|
components: []
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Erreur lors de la suppression de la liaison:', error);
|
console.error('Erreur lors de la suppression de la liaison:', error);
|
||||||
await interaction.editReply({
|
await interaction.reply({
|
||||||
content: '❌ Une erreur est survenue lors de la suppression de la liaison.',
|
content: '❌ Une erreur est survenue lors de la suppression de la liaison.',
|
||||||
flags: MessageFlags.Ephemeral
|
flags: MessageFlags.Ephemeral
|
||||||
|
}).catch(() => {
|
||||||
|
interaction.editReply({
|
||||||
|
content: '❌ Une erreur est survenue lors de la suppression de la liaison.',
|
||||||
|
flags: MessageFlags.Ephemeral
|
||||||
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user