UNPKG

@chinchillaenterprises/mcp-discord

Version:

Modular Discord MCP server with 45+ tools for comprehensive server management, featuring clean architecture and discord_ prefixed tools

85 lines 6.12 kB
export const toolDefinition = { name: "discord_assign_role", description: "Add or remove a role from a user", inputSchema: { type: "object", properties: { userId: { type: "string", description: "User ID to modify roles for", }, roleId: { type: "string", description: "Role ID or name to assign/remove", }, action: { type: "string", enum: ["add", "remove"], description: "Whether to add or remove the role", }, }, required: ["userId", "roleId"], } }; export const handler = async (args, services) => { const { userId, roleId, action = "add" } = args; const guild = await services.getGuild(); try { const member = await guild.members.fetch(userId); if (!member) { throw new Error(`Member ${userId} not found`); } let role; if (!/^\d+$/.test(roleId)) { // Role is a name, find it const foundRole = guild.roles.cache.find(r => r.name.toLowerCase() === roleId.toLowerCase()); if (!foundRole) { throw new Error(`Role '${roleId}' not found`); } role = foundRole; } else { const fetchedRole = await guild.roles.fetch(roleId); if (!fetchedRole) { throw new Error(`Role ${roleId} not found`); } role = fetchedRole; } if (action === 'add') { await member.roles.add(role); return { content: [ { type: "text", text: `✅ Added role **@${role.name}** to **${member.displayName}**! User: ${member.user.username} (${member.id}) Role: @${role.name} (${role.id}) Action: Added role Member now has ${member.roles.cache.size} roles`, }, ], }; } else { await member.roles.remove(role); return { content: [ { type: "text", text: `✅ Removed role **@${role.name}** from **${member.displayName}**! User: ${member.user.username} (${member.id}) Role: @${role.name} (${role.id}) Action: Removed role Member now has ${member.roles.cache.size} roles`, }, ], }; } } catch (error) { console.error(`[AssignRole] Error assigning role:`, error); throw new Error(`Failed to ${action} role: ${error.message}`); } }; export { AssignRoleArgsSchema as schema } from "../../schemas/server.js"; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzaWduLXJvbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdG9vbHMvc2VydmVyL2Fzc2lnbi1yb2xlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUtBLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBUztJQUNsQyxJQUFJLEVBQUUscUJBQXFCO0lBQzNCLFdBQVcsRUFBRSxrQ0FBa0M7SUFDL0MsV0FBVyxFQUFFO1FBQ1gsSUFBSSxFQUFFLFFBQVE7UUFDZCxVQUFVLEVBQUU7WUFDVixNQUFNLEVBQUU7Z0JBQ04sSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsV0FBVyxFQUFFLDZCQUE2QjthQUMzQztZQUNELE1BQU0sRUFBRTtnQkFDTixJQUFJLEVBQUUsUUFBUTtnQkFDZCxXQUFXLEVBQUUsa0NBQWtDO2FBQ2hEO1lBQ0QsTUFBTSxFQUFFO2dCQUNOLElBQUksRUFBRSxRQUFRO2dCQUNkLElBQUksRUFBRSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUM7Z0JBQ3ZCLFdBQVcsRUFBRSxtQ0FBbUM7YUFDakQ7U0FDRjtRQUNELFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUM7S0FDL0I7Q0FDRixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLEtBQUssRUFBRSxJQUFvQixFQUFFLFFBQTBCLEVBQUUsRUFBRTtJQUNoRixNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEdBQUcsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDO0lBRWhELE1BQU0sS0FBSyxHQUFHLE1BQU0sUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBRXhDLElBQUksQ0FBQztRQUNILE1BQU0sTUFBTSxHQUFHLE1BQU0sS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ1osTUFBTSxJQUFJLEtBQUssQ0FBQyxVQUFVLE1BQU0sWUFB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