UNPKG

@chinchillaenterprises/mcp-discord

Version:

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

87 lines (85 loc) 7.18 kB
import { PermissionsBitField } from "discord.js"; export const toolDefinition = { name: "discord_set_channel_permissions", description: "Set channel permissions for a role or member", inputSchema: { type: "object", properties: { channelId: { type: "string", description: "Channel ID or name", }, targetId: { type: "string", description: "Role ID or User ID to set permissions for", }, type: { type: "string", enum: ["role", "member"], description: "Whether target is a role or member", }, allow: { type: "array", items: { type: "string" }, description: "Permissions to allow", }, deny: { type: "array", items: { type: "string" }, description: "Permissions to deny", }, reason: { type: "string", description: "Reason for permission change (optional)", }, }, required: ["channelId", "targetId", "type"], } }; export const handler = async (args, services) => { const { channelId, targetId, type, allow = [], deny = [], reason } = args; const client = await services.getActiveClient(); const guild = await services.getGuild(); try { const resolvedChannelId = await services.resolveChannel(channelId); const channel = await client.channels.fetch(resolvedChannelId); if (!channel || !guild.channels.cache.has(channel.id)) { throw new Error(`Channel ${channelId} not found`); } const textOrVoiceChannel = channel; // Create permission bitfields const allowBits = allow.length > 0 ? new PermissionsBitField(allow) : new PermissionsBitField(); const denyBits = deny.length > 0 ? new PermissionsBitField(deny) : new PermissionsBitField(); // Create permission overwrite object const permissionOverwrite = {}; // Map permissions to boolean values for the edit method allow.forEach(perm => { permissionOverwrite[perm] = true; }); deny.forEach(perm => { permissionOverwrite[perm] = false; }); // Edit the permission overwrites await textOrVoiceChannel.permissionOverwrites.edit(targetId, permissionOverwrite, { reason }); return { content: [ { type: "text", text: `✅ Successfully updated channel permissions! **Channel:** #${textOrVoiceChannel.name} (${textOrVoiceChannel.id}) **Target:** ${type} ${targetId} **Allowed permissions:** ${allow.length > 0 ? allow.join(', ') : 'None'} **Denied permissions:** ${deny.length > 0 ? deny.join(', ') : 'None'} ${reason ? `**Reason:** ${reason}` : ''} Permissions have been applied to the channel.`, }, ], }; } catch (error) { console.error(`[SetChannelPermissions] Error setting permissions:`, error); throw new Error(`Failed to set channel permissions: ${error.message}`); } }; export { SetChannelPermissionsArgsSchema as schema } from "../../schemas/server.js"; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0LWNoYW5uZWwtcGVybWlzc2lvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdG9vbHMvc2VydmVyL3NldC1jaGFubmVsLXBlcm1pc3Npb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBNkIsbUJBQW1CLEVBQWlCLE1BQU0sWUFBWSxDQUFDO0FBRTNGLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBUztJQUNsQyxJQUFJLEVBQUUsaUNBQWlDO0lBQ3ZDLFdBQVcsRUFBRSw4Q0FBOEM7SUFDM0QsV0FBVyxFQUFFO1FBQ1gsSUFBSSxFQUFFLFFBQVE7UUFDZCxVQUFVLEVBQUU7WUFDVixTQUFTLEVBQUU7Z0JBQ1QsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsV0FBVyxFQUFFLG9CQUFvQjthQUNsQztZQUNELFFBQVEsRUFBRTtnQkFDUixJQUFJLEVBQUUsUUFBUTtnQkFDZCxXQUFXLEVBQUUsMkNBQTJDO2FBQ3pEO1lBQ0QsSUFBSSxFQUFFO2dCQUNKLElBQUksRUFBRSxRQUFRO2dCQUNkLElBQUksRUFBRSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUM7Z0JBQ3hCLFdBQVcsRUFBRSxvQ0FBb0M7YUFDbEQ7WUFDRCxLQUFLLEVBQUU7Z0JBQ0wsSUFBSSxFQUFFLE9BQU87Z0JBQ2IsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtnQkFDekIsV0FBVyxFQUFFLHNCQUFzQjthQUNwQztZQUNELElBQUksRUFBRTtnQkFDSixJQUFJLEVBQUUsT0FBTztnQkFDYixLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO2dCQUN6QixXQUFXLEVBQUUscUJBQXFCO2FBQ25DO1lBQ0QsTUFBTSxFQUFFO2dCQUNOLElBQUksRUFBRSxRQUFRO2dCQUNkLFdBQVcsRUFBRSx5Q0FBeUM7YUFDdkQ7U0FDRjtRQUNELFFBQVEsRUFBRSxDQUFDLFdBQVcsRUFBRSxVQUFVLEVBQUUsTUFBTSxDQUFDO0tB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