diff --git a/commands/ban.js b/commands/ban.js new file mode 100644 index 0000000..492d1f4 --- /dev/null +++ b/commands/ban.js @@ -0,0 +1,101 @@ +const { SlashCommandBuilder, PermissionFlagsBits, userMention } = require('discord.js') +const { admin, helper } = require('../config/roles.json') +const { color } = require('../config/options.json') + +module.exports = { + name: 'ban', + description: 'Ban a user', + type: 'slash', + + data: new SlashCommandBuilder() + .setName('ban') + .setDescription('Ban a user') + .addUserOption(option => + option + .setName('user') + .setDescription('User to ban') + .setRequired(true)) + .addStringOption(option => + option + .setName('reason') + .setDescription('Reason for ban')) + .addNumberOption(option => + option + .setName('messagedeletiondays') + .setDescription('Number of days to delete messages') + .addChoices( + { name: "1 day", value: 1 }, + { name: "2 days", value: 2 }, + { name: "3 days", value: 3 }, + { name: "4 days", value: 4 }, + { name: "5 days", value: 5 }, + { name: "6 days", value: 6 }, + { name: "7 days", value: 7 } + ) + ) + .setDefaultMemberPermissions(PermissionFlagsBits.Administrator) + .setDMPermission(false), + + async execute (interaction) { + + await interaction.deferReply() + + const member = interaction.options.getMember('user') + const reason = interaction.options.getString('reason') ?? "No reason provided." + const messageDeletionDays = interaction.options.getNumber('messagedeletiondays') ?? 0 + const mod = await interaction.guild.members.fetch(interaction.user.id) + const memberRoles = member.roles.cache.map(role => role.id) + const modRoles = mod.roles.cache.map(role => role.id) + const embedColor = Number(color.replace('#', '0x')) + + if (!modRoles.includes(admin)) { + await interaction.editReply("You do not have permission to use this command.") + return + } + + if (member.id === interaction.applicationId) { + await interaction.editReply("I cannot ban myself.") + return + } + + if (member.id === interaction.guild.ownerId) { + await interaction.editReply("I ban kick the server owner.") + return + } + + if (member.id === mod.id) { + return interaction.editReply("You cannot ban yourself.") + } + + if (memberRoles.includes(helper) || memberRoles.includes(admin)) { + await interaction.editReply("I cannot ban a moderator.") + return + } + + if (!member.bannable) { + await interaction.editReply("I cannot ban this member.") + return + } + + await member.ban({ + deleteMessageSeconds: messageDeletionDays * 86400, + reason: reason + ` - ${mod.user.username}` + }) + + await interaction.editReply({ + embeds: [{ + title: "Member Banned", + description: "**User:** " + userMention(member.user.id) + "\n" + + "**Reason:** " + reason + "\n" + + "**Moderator:** " + mod.user.username + "\n" + + "**Messages Deleted:** " + messageDeletionDays + " days", + color: embedColor, + footer: { + text: member.user.id, + icon_url: member.user.avatarURL({ dynamic: true }) + }, + }] + }) + + } +}