UNPKG

@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
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=