You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

86 lines
3.6 KiB

const {Command,ErrorMessage, ErrorType, EmbedBuilder, ActionRowBuilder, ButtonBuilder, ButtonStyle} = require('../../lib.js')
const strikeM = require('../../models/strikes');
class strike extends Command{
constructor(client){
super(client, {
name: 'strike',
group:'admin',
description: 'Strikes an user. Usage !strike @USER REASON',
needsAdmin:true,
})
this.client = client;
this.message;
}
async run(message, args)
{
//Check admin privilege
this.message = message;
var confirm = await this.confirmArgs(message,args);
if(confirm=='Error') return new ErrorMessage(this.client).send(ErrorType.Arguments, message, ['Use the mention method to pass the user.', 'Make sure you provide a reason.'])
var strike = new strikeM();
strike.strikerID = confirm.strikerID;
strike.strokedID = confirm.strokedID;
strike.guildName = message.guild.name;
strike.guildID = message.guild.id
strike.reason = confirm.reason;
strike.date = Date.now();
strike.save(err=>
{
if(err)console.log(err);
this.sendMessage(confirm.strokedID,confirm.reason);
message.delete();
})
}
async sendMessage(strokedID, reason)
{
let name = this.client.guilds.cache.get(this.message.guildId).members.cache.get(strokedID);
const embed = new EmbedBuilder()
embed.setFooter({text:'Rem-chan on ', iconURL:"https://i.imgur.com/g6FSNhL.png"})
embed.setAuthor({name:"Rem-chan", iconURL:"https://i.imgur.com/g6FSNhL.png",url:'https://rem.wordfights.com/addtodiscord'});
embed.setColor(0x110809);
embed.setTimestamp()
embed.setTitle(`Strike`)
embed.setDescription(`${name} has been struck.`)
embed.addFields({name:'Reason:', value:reason})
const row = new ActionRowBuilder()
.addComponents(
new ButtonBuilder()
.setCustomId('RemoveStrikeMessage')
.setLabel('Remove this.')
.setStyle(ButtonStyle.Primary),
);
const filter = i => i.customId === 'RemoveStrikeMessage';
const Message = await this.message.channel.send({ephemeral: true, embeds: [embed], components: [row] });
const collector = this.message.channel.createMessageComponentCollector({ filter, time: 60000 });
collector.on('collect', async m =>
{
m.message.delete()
.then(()=>
{
// console.log('Strikes: Embed Message: Deleted');
})
.catch(()=>
{
// console.log('Strikes: Embed Message: failed to delete.');
})
});
collector.on('end', async ()=>
{
this.client.guilds.cache.get(Message.guildId).channels.cache.get(Message.channelId).messages.cache.get(Message.id).edit({ components: [] });
})
}
async confirmArgs(message,args)
{
if(args.length<2) return 'Error'
if(!args[0].split('@')) return 'Error'
let strikerID = message.author.id;
let strokedID = args[0].split('@')[1].split('>')[0];
return {strikerID, strokedID, reason:args.splice(-1,1).join(' ')}
}
}module.exports = strike;