const { ActionRowBuilder, ButtonBuilder, ButtonStyle } = require("discord.js"); const { emojis, moderationperms } = require("../../../config.json"); const Moderation = require("../../../schemas/smoderation"); const { addPoints } = require("../../../utils/addPoints"); async function generateModerationId() { const latest = await Moderation.findOne({}).sort({ caseId: -1}).exec(); if (!latest) return 1; return Number(latest.caseId) + 1; } module.exports = { role: moderationperms, name: "ban", description: "Bans a user from the Discord server.", async execute(message, client, args) { if (!message.member.roles.cache.some(role => moderationperms.includes(role.id))) return; const user = message.mentions.users.first() || client.users.cache.get(args[0]); if (!user) { return message.channel.send(`${emojis.ex} Please specify a user.`) } const reason = args.slice(1).join(" "); if (!reason) { return message.channel.send(`${emojis.ex} Please provide a reason.`) } if (user.id === message.author.id) return message.channel.send(`${emojis.ex} You cannot ban yourself.`); if (user.id === client.user.id) return; const actionPoints = { Warn: 1, Mute: 3, Kick: 5, Softban: 8, Ban: 10 }; const points = actionPoints["Ban"]; const caseId = await generateModerationId(); await Moderation.create({ caseId, userId: user.id, reason, duration: null, moderatorId: message.author.id, action: "Ban", points: points, }); await addPoints(user.id, "Ban", caseId, message.guild); let member = null; try { member = await message.guild.members.fetch(user.id); } catch (e) { member = null; } if (member) { try { await member.ban({ reason }); } catch { return message.channel.send(`${emojis.ex} Failed to ban ${user.tag}.`) } } else { try { await message.guild.bans.create(user.id, { reason }); } catch { return message.channel.send(`${emojis.ex} Failed to ban ${user.tag}.`) } } await message.channel.send(`${emojis.check} **Case #${caseId} - ${user.tag}** has been banned.`); const banRow = new ActionRowBuilder().addComponents( new ButtonBuilder() .setCustomId("appeal-ban") .setLabel("Appeal Ban") .setStyle(ButtonStyle.Secondary) ); try { await user.send({ content: `You have been banned from **penguin development**.\n**Reason:** ${reason || "None"}${ reason.endsWith(".") ? `` : `.` }`, components: [banRow] }); } catch (e) { console.error(`Could not dm ${user.tag}:`, e); } await message.delete().catch(() => {}); }, };