@chinchillaenterprises/mcp-discord
Version:
Modular Discord MCP server with 45+ tools for comprehensive server management, featuring clean architecture and discord_ prefixed tools
77 lines • 5.38 kB
JavaScript
import { PermissionsBitField } from "discord.js";
export const toolDefinition = {
name: "discord_create_role",
description: "Create a new role in the Discord server",
inputSchema: {
type: "object",
properties: {
name: {
type: "string",
description: "Name for the new role",
},
color: {
type: "number",
description: "Role color (decimal value)",
},
permissions: {
type: "array",
items: { type: "string" },
description: "Array of permission names",
},
hoist: {
type: "boolean",
description: "Display role separately in member list",
},
mentionable: {
type: "boolean",
description: "Allow role to be mentioned",
},
},
required: ["name"],
}
};
export const handler = async (args, services) => {
const { name, color, permissions, hoist = false, mentionable = true } = args;
const guild = await services.getGuild();
try {
const roleOptions = {
name,
hoist,
mentionable
};
if (color !== undefined) {
roleOptions.color = color;
}
if (permissions && permissions.length > 0) {
// Convert permission names to PermissionsBitField
try {
roleOptions.permissions = new PermissionsBitField(permissions);
}
catch (error) {
throw new Error(`Invalid permissions: ${permissions.join(', ')}`);
}
}
const role = await guild.roles.create(roleOptions);
return {
content: [
{
type: "text",
text: `✅ Created role **@${role.name}**!
Role ID: ${role.id}
Color: ${role.hexColor}
Position: ${role.position}
${hoist ? '📌 Hoisted (displays separately)' : 'Not hoisted'}
${mentionable ? '🔔 Mentionable' : 'Not mentionable'}
Members: 0 (new role)
${permissions && permissions.length > 0 ? `Permissions: ${permissions.join(', ')}` : 'Default permissions'}`,
},
],
};
}
catch (error) {
console.error(`[CreateRole] Error creating role:`, error);
throw new Error(`Failed to create role: ${error.message}`);
}
};
export { CreateRoleArgsSchema as schema } from "../../schemas/server.js";
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXJvbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdG9vbHMvc2VydmVyL2NyZWF0ZS1yb2xlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUVqRCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQVM7SUFDbEMsSUFBSSxFQUFFLHFCQUFxQjtJQUMzQixXQUFXLEVBQUUseUNBQXlDO0lBQ3RELFdBQVcsRUFBRTtRQUNYLElBQUksRUFBRSxRQUFRO1FBQ2QsVUFBVSxFQUFFO1lBQ1YsSUFBSSxFQUFFO2dCQUNKLElBQUksRUFBRSxRQUFRO2dCQUNkLFdBQVcsRUFBRSx1QkFBdUI7YUFDckM7WUFDRCxLQUFLLEVBQUU7Z0JBQ0wsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsV0FBVyxFQUFFLDRCQUE0QjthQUMxQztZQUNELFdBQVcsRUFBRTtnQkFDWCxJQUFJLEVBQUUsT0FBTztnQkFDYixLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO2dCQUN6QixXQUFXLEVBQUUsMkJBQTJCO2FBQ3pDO1lBQ0QsS0FBSyxFQUFFO2dCQUNMLElBQUksRUFBRSxTQUFTO2dCQUNmLFdBQVcsRUFBRSx3Q0FBd0M7YUFDdEQ7WUFDRCxXQUFXLEVBQUU7Z0JBQ1gsSUFBSSxFQUFFLFNBQVM7Z0JBQ2YsV0FBVyxFQUFFLDRCQUE0QjthQUMxQztTQUNGO1FBQ0QsUUFBUSxFQUFFLENBQUMsTUFBTSxDQUFDO0tBQ25CO0NBQ0YsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxLQUFLLEVBQUUsSUFBb0IsRUFBRSxRQUEwQixFQUFFLEVBQUU7SUFDaEYsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLEtBQUssR0FBRyxLQUFLLEVBQUUsV0FBVyxHQUFHLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQztJQUU3RSxNQUFNLEtBQUssR0FBRyxNQUFNLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUV4QyxJQUFJLENBQUM7UUFDSCxNQUFNLFdBQVcsR0FBUTtZQUN2QixJQUFJO1lBQ0osS0FBSztZQUNMLFdBQVc7U0FDWixDQUFDO1FBRUYsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDeEIsV0FBVyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDNUIsQ0FBQztRQUVELElBQUksV0FBVyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDMUMsa0RBQWtEO1lBQ2xELElBQUksQ0FBQztnQkFDSCxXQUFXLENBQUMsV0FBVyxHQUFHLElBQUksbUJBQW1CLENBQUMsV0FBa0IsQ0FBQyxDQUFDO1lBQ3hFLENBQUM7WUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO2dCQUNmLE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3BFLENBQUM7UUFDSCxDQUFDO1FBRUQsTUFBTSxJQUFJLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUVuRCxPQUFPO1lBQ0wsT0FBTyxFQUFFO2dCQUNQO29CQUNFLElBQUksRUFBRSxNQUFNO29CQUNaLElBQUksRUFBRSxxQkFBcUIsSUFBSSxDQUFDLElBQUk7V0FDbkMsSUFBSSxDQUFDLEVBQUU7U0FDVCxJQUFJLENBQUMsUUFBUTtZQUNWLElBQUksQ0FBQyxRQUFRO0VBQ3ZCLEtBQUssQ0FBQyxDQUFDLENBQUMsa0NBQWtDLENBQUMsQ0FBQyxDQUFDLGFBQWE7RUFDMUQsV0FBVyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsaUJBQWlCOztFQUVsRCxXQUFXLElBQUksV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixFQUFFO2lCQUNuRzthQUNGO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFBQyxPQUFPLEtBQVUsRUFBRSxDQUFDO1FBQ3BCLE9BQU8sQ0FBQyxLQUFLLENBQUMsbUNBQW1DLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDMUQsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDN0QsQ0FBQztBQUNILENBQUMsQ0FBQztBQUVGLE9BQU8sRUFBRSxvQkFBb0IsSUFBSSxNQUFNLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQyJ9