File size: 2,736 Bytes
3c7e34b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
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'))],
        });
    },
};