const { PermissionsBitField } = require('discord.js'); const { Roles } = require('../config'); const { successEmbed, infoEmbed, errorEmbed } = require('../utils/embeds'); module.exports = { name: 'create roles', async execute(client, message) { const guildId = process.env.GUILD_ID; const guild = await client.guilds.fetch(guildId); await message.reply({ embeds: [infoEmbed('Creating Roles', 'Setting up role hierarchy...')] }); const createdRoles = []; // Create roles in reverse order so the first role ends up highest for (let i = Roles.length - 1; i >= 0; i--) { const roleDef = Roles[i]; // Check if role already exists const existing = guild.roles.cache.find(r => r.name === roleDef.name); if (existing) { createdRoles.unshift(`⚠️ **${roleDef.name}** — already exists`); continue; } // Build permissions const permissions = new PermissionsBitField(); for (const perm of roleDef.permissions) { permissions.add(perm); } try { const role = await guild.roles.create({ name: roleDef.name, color: parseInt(roleDef.color.replace('#', ''), 16), permissions, hoist: roleDef.hoist, mentionable: roleDef.mentionable, reason: 'WSB Setup', }); createdRoles.unshift(`✅ **${role.name}** — created`); } catch (err) { createdRoles.unshift(`❌ **${roleDef.name}** — failed: ${err.message}`); console.error(`[CreateRoles] Failed to create ${roleDef.name}:`, err.message); } } // Reorder roles to match hierarchy (Owner highest) const roleOrder = []; for (const roleDef of Roles) { const role = guild.roles.cache.find(r => r.name === roleDef.name); if (role) roleOrder.push(role); } // Set positions (higher index = higher position) const botRole = guild.members.me.roles.highest; let position = botRole.position - 1; for (const role of roleOrder) { try { await role.setPosition(Math.max(position, 1)); position--; } catch (err) { // May fail if bot role isn't high enough console.warn(`Could not reposition ${role.name}: ${err.message}`); } } await message.reply({ embeds: [successEmbed('Roles Created', createdRoles.join('\n'))], }); }, };