const BaseCommand = require("../../../Structures/BaseCommand.js"); const { Interaction, Collector, ComponentOptions, Embed, Component } = require("discordeno.js"); class warncommand extends BaseCommand { static name = "warn"; static description = "Warn a user from the server"; static usage = ""; static category = "Moderation"; static slash = { name: "warn", category: "mod" }; constructor(data) { super(data); } async execute() { // Show Case Modal if (!this.interaction) return this.reply("You currently can just use this command as slash command."); if (!this.interaction.member.permissions.has("KICK_MEMBERS")) { return this.reply("You need the permission `KICK_MEMBERS` to use this command."); } const textinput = new Component() .setType("TEXT_INPUT") .setStyle("SHORT") .setCustomId("t1") .setLabel("User ID") .setPlaceholder("User ID") .setRequired(true) .setMaxLength(20) .setMinLength(1) .setValue(this.args[0]) .toJSON(); const textinput2 = new Component().setType("TEXT_INPUT").setStyle("PARAGRAPH").setCustomId("t2") .setLabel("Reason").setPlaceholder("Reason for Warning").setRequired(false) .setMaxLength(300).toJSON(); const actionrow = new Component().setType(1).setComponents(textinput).toJSON(); const actionrow2 = new Component().setType(1).setComponents(textinput2).toJSON(); this.interaction.popupModal({ customId: "warn_modal", title: "Warn User", components: [actionrow, actionrow2] }); const filter = (m) => m.data?.customId === "warn_modal"; const collector = new Collector("interactionCreate", { client: this.client, timeout: 60000, filter }); collector.on("collect", (m) => { const options = new ComponentOptions(m.data.components); const i = new Interaction(this.client, m); collector.stop(); const memberId = options.get("t1").value; const reason = options.get("t2").value; const embed = new Embed() .setTitle("Warned User:") .setDescription(`User ID: <@${memberId}> \n Reason: ${reason}`) .setColor(0x00ff00) .toJSON(); const warnMessage = new Embed() .setTitle("Warning:") .setDescription(`You have been warned in **${this.guild.name}** for ${"`" + reason + "`"}`) .toJSON(); this.guild.members.fetch(memberId).then((m) => { m.send({ embeds: [warnMessage] }).then(() => { i.reply({ embeds: [embed] }); }).catch((e) => { console.log(e); i.reply({ content: `Could not warn user ${"<@" + m.id + ">"} | They likely do not have their DMs open.` }); }); }).catch((e) => { const embed = new Embed() .setTitle("Member not found") .setDescription(`The member with the ID of ${"`" + memberId + "`"} has not been found in this Server.`) .setColor(0xff0000) .toJSON(); i.reply({ embeds: [embed] }); }); }); } } module.exports = warncommand;