| 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 = []; |
|
|
| |
| for (let i = Roles.length - 1; i >= 0; i--) { |
| const roleDef = Roles[i]; |
|
|
| |
| const existing = guild.roles.cache.find(r => r.name === roleDef.name); |
| if (existing) { |
| createdRoles.unshift(`β οΈ **${roleDef.name}** β already exists`); |
| continue; |
| } |
|
|
| |
| 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); |
| } |
| } |
|
|
| |
| const roleOrder = []; |
| for (const roleDef of Roles) { |
| const role = guild.roles.cache.find(r => r.name === roleDef.name); |
| if (role) roleOrder.push(role); |
| } |
|
|
| |
| 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) { |
| |
| console.warn(`Could not reposition ${role.name}: ${err.message}`); |
| } |
| } |
|
|
| await message.reply({ |
| embeds: [successEmbed('Roles Created', createdRoles.join('\n'))], |
| }); |
| }, |
| }; |
|
|