mirror of
https://github.com/discordeno/discordeno.git
synced 2026-05-30 07:20:08 +00:00
90 lines
3.0 KiB
JavaScript
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
|