Files
discordeno/examples/nodejs/Plugins/Moderation/commands/warn.js
2023-04-01 02:46:46 +02:00

90 lines
3.0 KiB
JavaScript

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