@chinchillaenterprises/mcp-discord
Version:
Modular Discord MCP server with 45+ tools for comprehensive server management, featuring clean architecture and discord_ prefixed tools
86 lines (84 loc) • 6.03 kB
JavaScript
import { ChannelType } from "discord.js";
export const toolDefinition = {
name: "discord_create_invite",
description: "Create an invite link for the server",
inputSchema: {
type: "object",
properties: {
channelId: {
type: "string",
description: "Channel ID or name to create invite for (default: general)",
},
maxAge: {
type: "number",
description: "Max age in seconds (0 = never expires, default: 86400)",
},
maxUses: {
type: "number",
description: "Max uses (0 = unlimited, default: 0)",
},
temporary: {
type: "boolean",
description: "Grant temporary membership (default: false)",
},
unique: {
type: "boolean",
description: "Create unique invite (default: false)",
},
reason: {
type: "string",
description: "Reason for creating invite (optional)",
},
},
}
};
export const handler = async (args, services) => {
const { channelId, maxAge = 86400, maxUses = 0, temporary = false, unique = false, reason } = args;
const client = await services.getActiveClient();
const guild = await services.getGuild();
try {
let channel;
if (channelId) {
const resolvedChannelId = await services.resolveChannel(channelId);
channel = await client.channels.fetch(resolvedChannelId);
}
else {
// Use first available text channel
channel = guild.channels.cache.find(ch => ch.type === ChannelType.GuildText);
}
if (!channel) {
throw new Error('No suitable channel found for invite');
}
const invite = await channel.createInvite({
maxAge,
maxUses,
temporary,
unique,
reason
});
const expiresAt = maxAge === 0 ? 'Never' :
new Date(Date.now() + maxAge * 1000).toISOString();
return {
content: [
{
type: "text",
text: `🎟️ Created invite successfully!
**Invite Link:** ${invite.url}
**Code:** ${invite.code}
**Channel:** #${channel.name}
**Max Uses:** ${maxUses === 0 ? 'Unlimited' : maxUses}
**Expires:** ${expiresAt}
**Temporary Membership:** ${temporary ? 'Yes' : 'No'}
${reason ? `**Reason:** ${reason}` : ''}
Share this link to invite people to the server!`,
},
],
};
}
catch (error) {
console.error(`[CreateInvite] Error creating invite:`, error);
throw new Error(`Failed to create invite: ${error.message}`);
}
};
export { CreateInviteArgsSchema as schema } from "../../schemas/server.js";
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWludml0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90b29scy9zZXJ2ZXIvY3JlYXRlLWludml0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsV0FBVyxFQUFlLE1BQU0sWUFBWSxDQUFDO0FBRXRELE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBUztJQUNsQyxJQUFJLEVBQUUsdUJBQXVCO0lBQzdCLFdBQVcsRUFBRSxzQ0FBc0M7SUFDbkQsV0FBVyxFQUFFO1FBQ1gsSUFBSSxFQUFFLFFBQVE7UUFDZCxVQUFVLEVBQUU7WUFDVixTQUFTLEVBQUU7Z0JBQ1QsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsV0FBVyxFQUFFLDREQUE0RDthQUMxRTtZQUNELE1BQU0sRUFBRTtnQkFDTixJQUFJLEVBQUUsUUFBUTtnQkFDZCxXQUFXLEVBQUUsd0RBQXdEO2FBQ3RFO1lBQ0QsT0FBTyxFQUFFO2dCQUNQLElBQUksRUFBRSxRQUFRO2dCQUNkLFdBQVcsRUFBRSxzQ0FBc0M7YUFDcEQ7WUFDRCxTQUFTLEVBQUU7Z0JBQ1QsSUFBSSxFQUFFLFNBQVM7Z0JBQ2YsV0FBVyxFQUFFLDZDQUE2QzthQUMzRDtZQUNELE1BQU0sRUFBRTtnQkFDTixJQUFJLEVBQUUsU0FBUztnQkFDZixXQUFXLEVBQUUsdUNBQXVDO2FBQ3JEO1lBQ0QsTUFBTSxFQUFFO2dCQUNOLElBQUksRUFBRSxRQUFRO2dCQUNkLFdBQVcsRUFBRSx1Q0FBdUM7YUFDckQ7U0FDRjtLQUNGO0NBQ0YsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxLQUFLLEVBQUUsSUFBc0IsRUFBRSxRQUEwQixFQUFFLEVBQUU7SUFDbEYsTUFBTSxFQUNKLFNBQVMsRUFDVCxNQUFNLEdBQUcsS0FBSyxFQUNkLE9BQU8sR0FBRyxDQUFDLEVBQ1gsU0FBUyxHQUFHLEtBQUssRUFDakIsTUFBTSxHQUFHLEtBQUssRUFDZCxNQUFNLEVBQ1AsR0FBRyxJQUFJLENBQUM7SUFFVCxNQUFNLE1BQU0sR0FBRyxNQUFNLFFBQVEsQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUNoRCxNQUFNLEtBQUssR0FBRyxNQUFNLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUV4QyxJQUFJLENBQUM7UUFDSCxJQUFJLE9BQU8sQ0FBQztRQUNaLElBQUksU0FBUyxFQUFFLENBQUM7WUFDZCxNQUFNLGlCQUFpQixHQUFHLE1BQU0sUUFBUSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNuRSxPQUFPLEdBQUcsTUFBTSxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQzNELENBQUM7YUFBTSxDQUFDO1lBQ04sbUNBQW1DO1lBQ25DLE9BQU8sR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxLQUFLLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMvRSxDQUFDO1FBRUQsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2IsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO1FBQzFELENBQUM7UUFFRCxNQUFNLE1BQU0sR0FBRyxNQUFPLE9BQXVCLENBQUMsWUFBWSxDQUFDO1lBQ3pELE1BQU07WUFDTixPQUFPO1lBQ1AsU0FBUztZQUNULE1BQU07WUFDTixNQUFNO1NBQ1AsQ0FBQyxDQUFDO1FBRUgsTUFBTSxTQUFTLEdBQUcsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDeEMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUVyRCxPQUFPO1lBQ0wsT0FBTyxFQUFFO2dCQUNQO29CQUNFLElBQUksRUFBRSxNQUFNO29CQUNaLElBQUksRUFBRTs7bUJBRUcsTUFBTSxDQUFDLEdBQUc7WUFDakIsTUFBTSxDQUFDLElBQUk7Z0JBQ04sT0FBZSxDQUFDLElBQUk7Z0JBQ3JCLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsT0FBTztlQUN0QyxTQUFTOzRCQUNJLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJO0VBQ2xELE1BQU0sQ0FBQyxDQUFDLENBQUMsZUFBZSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRTs7Z0RBRVM7aUJBQ3ZDO2FBQ0Y7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUFDLE9BQU8sS0FBVSxFQUFFLENBQUM7UUFDcEIsT0FBTyxDQUFDLEtBQUssQ0FBQyx1Q0FBdUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM5RCxNQUFNLElBQUksS0FBSyxDQUFDLDRCQUE0QixLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUMvRCxDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBRUYsT0FBTyxFQUFFLHNCQUFzQixJQUFJLE1BQU0sRUFBRSxNQUFNLHlCQUF5QixDQUFDIn0=