const { SlashCommandBuilder, ModalBuilder, TextInputBuilder, ActionRowBuilder, EmbedBuilder, time, TimestampStyles, TextInputStyle } = require('discord.js'); module.exports = { data: new SlashCommandBuilder() .setName('report-utilisateur') .setDescription(`Permet de report un utilisateur aux staffs`) .setDMPermission(false) .setDefaultMemberPermissions(null) .addUserOption(opt => opt.setName(`utilisateur`).setDescription(`Quel utilisateur a report ?`).setRequired(true)) .addAttachmentOption(opt => opt.setName(`image`).setDescription(`Envoyer une image pouvant prouver votre report`).setRequired(false)), async run(interaction) { const db = interaction.client.db; const user = interaction.options.getUser(`utilisateur`); if(!user) return interaction.reply({ content: `<:error:1256251210818781266> | Utilisateur inconnu.`, ephemeral: true }); let member = interaction.guild.members.cache.get(user.id); if(!member) return interaction.reply({content: `<:error:1256251210818781266> | Utilisateur inconnu.`, ephemeral: true}); const files = interaction.options.getAttachment(`image`); db.query(`SELECT * FROM server WHERE guildID = ${interaction.guild.id}`, async (err, req) => { if(req.length < 1) return; if(req[0].report === "true") { const date = new Date(); const timeString = time(date); const relative = time(date, TimestampStyles.RelativeTime); const channel = interaction.client.channels.cache.get(req[0].reportChannel); if(!channel) return; const Modal = new ModalBuilder() .setCustomId(`report`) .setTitle(`Fait ton report`); const question = new TextInputBuilder() .setCustomId('Description') .setLabel('Veuillez mettre la/les raison(s) du report') .setRequired(true) .setPlaceholder('Ecrit ici...') .setStyle(TextInputStyle.Paragraph); const ActionRow = new ActionRowBuilder().addComponents(question); Modal.addComponents(ActionRow); await interaction.showModal(Modal); const reponse = await interaction.awaitModalSubmit({ time: 900000 }); const reason = reponse.fields.getTextInputValue('Description'); const Embed1 = new EmbedBuilder() .setDescription(`<:succes:1256258672363966475> | Votre report concernant l'utilisateur ${user} a été envoyer avec succès !\nUne copie de votre report se trouve dans vos messages privés s'ils sont ouvert.`) .setColor("#CC0033") await reponse.reply({embeds: [Embed1], ephemeral: true}).catch(error => {}); const EmbedMP = new EmbedBuilder() .setColor("#CC0033") .setTitle(`Copie du report`) .addFields( { name: `<:user:1256259522419232788> | Utilisateur report:`, value: `${user}` }, { name: `<:reason:1256259678241816667> | Raison:`, value: `${reason}` }, { name: `<:time:1228461601599000698> | Date:`, value: `${relative}` }, ) .setTimestamp() .setFooter({ text: interaction.client.user.username, iconURL: interaction.client.user.avatarURL({ dynamic: true }) }); await interaction.user.send({ embeds: [EmbedMP] }).catch(error => {}); await interaction.user.send({ files: [files] }).catch(error => {}); const EmbedReport = new EmbedBuilder() .setColor("#CC0033") .setTitle(`Nouveau Report`) .setDescription(`<:user:1256259522419232788> | ${interaction.user} vient de report ${user}\n<:reason:1256259678241816667> | Raison: \n${reason}\n<:time:1228461601599000698> | Date du report: ${relative}`) .setTimestamp() .setFooter({ text: interaction.client.user.username, iconURL: interaction.client.user.avatarURL({ dynamic: true }) }); channel.send({ embeds: [EmbedReport] }); channel.send({ files: [files] }).catch(error => {error}); } else if(req[0].report === "false") { interaction.reply({ content: `<:error:1256251210818781266> | Vous ne pouvez pas utiliser la commande report car il n'a pas été configuré sur le serveur.`, ephemeral: true }); }; }); }, };