wsb-bot / src /commands /createRoles.js
APRK01
Initial commit: WSB Discord Bot
3c7e34b
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'))],
});
},
};