@chinchillaenterprises/mcp-discord
Version:
Modular Discord MCP server with 45+ tools for comprehensive server management, featuring clean architecture and discord_ prefixed tools
89 lines • 7.07 kB
JavaScript
import { ChannelType } from "discord.js";
export const toolDefinition = {
name: "discord_create_channel",
description: "Create a new channel in the Discord server",
inputSchema: {
type: "object",
properties: {
name: {
type: "string",
description: "Name for the new channel",
},
type: {
type: "string",
enum: ["text", "voice", "category"],
description: "Type of channel to create (default: text)",
},
topic: {
type: "string",
description: "Topic/description for the channel",
},
parent: {
type: "string",
description: "Category ID or name to place the channel in",
},
},
required: ["name"],
}
};
export const handler = async (args, services) => {
const { name, type = "text", topic, parent } = args;
const client = await services.getActiveClient();
const guild = await services.getGuild();
try {
let parentChannel = null;
if (parent) {
// Try to resolve parent category
if (!/^\d+$/.test(parent)) {
// Parent is a name, find the category
parentChannel = guild.channels.cache.find(ch => ch.type === ChannelType.GuildCategory &&
ch.name.toLowerCase() === parent.toLowerCase());
if (!parentChannel) {
throw new Error(`Category '${parent}' not found`);
}
}
else {
parentChannel = await guild.channels.fetch(parent);
if (!parentChannel || parentChannel.type !== ChannelType.GuildCategory) {
throw new Error(`Category ${parent} not found`);
}
}
}
const channelType = type === 'voice' ? ChannelType.GuildVoice :
type === 'category' ? ChannelType.GuildCategory :
ChannelType.GuildText;
const channelOptions = {
name,
type: channelType,
};
if (topic && channelType === ChannelType.GuildText) {
channelOptions.topic = topic;
}
if (parentChannel) {
channelOptions.parent = parentChannel.id;
}
const channel = await guild.channels.create(channelOptions);
const channelTypeEmoji = type === 'voice' ? '🔊' :
type === 'category' ? '📁' : '💬';
return {
content: [
{
type: "text",
text: `${channelTypeEmoji} Created ${type} channel **${channel.name}**!
Channel ID: ${channel.id}
Type: ${type}
${topic ? `Topic: ${topic}` : ''}
${parentChannel ? `Parent category: ${parentChannel.name}` : ''}
Position: ${channel.position}
Created: ${channel.createdAt?.toISOString() || 'just now'}`,
},
],
};
}
catch (error) {
console.error(`[CreateChannel] Error creating channel:`, error);
throw new Error(`Failed to create channel: ${error.message}`);
}
};
export { CreateChannelArgsSchema as schema } from "../../schemas/server.js";
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWNoYW5uZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdG9vbHMvc2VydmVyL2NyZWF0ZS1jaGFubmVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFekMsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFTO0lBQ2xDLElBQUksRUFBRSx3QkFBd0I7SUFDOUIsV0FBVyxFQUFFLDRDQUE0QztJQUN6RCxXQUFXLEVBQUU7UUFDWCxJQUFJLEVBQUUsUUFBUTtRQUNkLFVBQVUsRUFBRTtZQUNWLElBQUksRUFBRTtnQkFDSixJQUFJLEVBQUUsUUFBUTtnQkFDZCxXQUFXLEVBQUUsMEJBQTBCO2FBQ3hDO1lBQ0QsSUFBSSxFQUFFO2dCQUNKLElBQUksRUFBRSxRQUFRO2dCQUNkLElBQUksRUFBRSxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsVUFBVSxDQUFDO2dCQUNuQyxXQUFXLEVBQUUsMkNBQTJDO2FBQ3pEO1lBQ0QsS0FBSyxFQUFFO2dCQUNMLElBQUksRUFBRSxRQUFRO2dCQUNkLFdBQVcsRUFBRSxtQ0FBbUM7YUFDakQ7WUFDRCxNQUFNLEVBQUU7Z0JBQ04sSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsV0FBVyxFQUFFLDZDQUE2QzthQUMzRDtTQUNGO1FBQ0QsUUFBUSxFQUFFLENBQUMsTUFBTSxDQUFDO0tBQ25CO0NBQ0YsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxLQUFLLEVBQUUsSUFBdUIsRUFBRSxRQUEwQixFQUFFLEVBQUU7SUFDbkYsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEdBQUcsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUM7SUFFcEQsTUFBTSxNQUFNLEdBQUcsTUFBTSxRQUFRLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDaEQsTUFBTSxLQUFLLEdBQUcsTUFBTSxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7SUFFeEMsSUFBSSxDQUFDO1FBQ0gsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLElBQUksTUFBTSxFQUFFLENBQUM7WUFDWCxpQ0FBaUM7WUFDakMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDMUIsc0NBQXNDO2dCQUN0QyxhQUFhLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUN2QyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEtBQUssV0FBVyxDQUFDLGFBQWE7b0JBQ3JDLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEtBQUssTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUNyRCxDQUFDO2dCQUNGLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztvQkFDbkIsTUFBTSxJQUFJLEtBQUssQ0FBQyxhQUFhLE1BQU0sYUFBYSxDQUFDLENBQUM7Z0JBQ3BELENBQUM7WUFDSCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sYUFBYSxHQUFHLE1BQU0sS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ25ELElBQUksQ0FBQyxhQUFhLElBQUksYUFBYSxDQUFDLElBQUksS0FBSyxXQUFXLENBQUMsYUFBYSxFQUFFLENBQUM7b0JBQ3ZFLE1BQU0sSUFBSSxLQUFLLENBQUMsWUFBWSxNQUFNLFlBQVksQ0FBQyxDQUFDO2dCQUNsRCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFFRCxNQUFNLFdBQVcsR0FBRyxJQUFJLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDNUMsSUFBSSxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUNqRCxXQUFXLENBQUMsU0FBUyxDQUFDO1FBRXpDLE1BQU0sY0FBYyxHQUFRO1lBQzFCLElBQUk7WUFDSixJQUFJLEVBQUUsV0FBVztTQUNsQixDQUFDO1FBRUYsSUFBSSxLQUFLLElBQUksV0FBVyxLQUFLLFdBQVcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNuRCxjQUFjLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUMvQixDQUFDO1FBRUQsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUNsQixjQUFjLENBQUMsTUFBTSxHQUFHLGFBQWEsQ0FBQyxFQUFFLENBQUM7UUFDM0MsQ0FBQztRQUVELE1BQU0sT0FBTyxHQUFHLE1BQU0sS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFNUQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMzQixJQUFJLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUV6RCxPQUFPO1lBQ0wsT0FBTyxFQUFFO2dCQUNQO29CQUNFLElBQUksRUFBRSxNQUFNO29CQUNaLElBQUksRUFBRSxHQUFHLGdCQUFnQixZQUFZLElBQUksY0FBYyxPQUFPLENBQUMsSUFBSTtjQUMvRCxPQUFPLENBQUMsRUFBRTtRQUNoQixJQUFJO0VBQ1YsS0FBSyxDQUFDLENBQUMsQ0FBQyxVQUFVLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFO0VBQzlCLGFBQWEsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNuRCxPQUFPLENBQUMsUUFBUTtXQUNqQixPQUFPLENBQUMsU0FBUyxFQUFFLFdBQVcsRUFBRSxJQUFJLFVBQVUsRUFBRTtpQkFDbEQ7YUFDRjtTQUNGLENBQUM7SUFDSixDQUFDO0lBQUMsT0FBTyxLQUFVLEVBQUUsQ0FBQztRQUNwQixPQUFPLENBQUMsS0FBSyxDQUFDLHlDQUF5QyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7QUFDSCxDQUFDLENBQUM7QUFFRixPQUFPLEVBQUUsdUJBQXVCLElBQUksTUFBTSxFQUFFLE1BQU0seUJBQXlCLENBQUMifQ==