UNPKG

@chinchillaenterprises/mcp-discord

Version:

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

124 lines 9.67 kB
import { ChannelType, EmbedBuilder } from "discord.js"; export const toolDefinition = { name: "discord_send_message", description: "Send a message to a Discord channel", inputSchema: { type: "object", properties: { channel: { type: "string", description: "Channel ID or name (e.g. '1234567890' or 'general')", }, text: { type: "string", description: "Text content of the message", }, embed: { type: "object", description: "Rich embed object", properties: { title: { type: "string", description: "Embed title" }, description: { type: "string", description: "Embed description" }, color: { type: "number", description: "Embed color (decimal)" }, fields: { type: "array", description: "Embed fields", items: { type: "object", properties: { name: { type: "string" }, value: { type: "string" }, inline: { type: "boolean" } }, required: ["name", "value"] } }, footer: { type: "object", properties: { text: { type: "string" }, iconUrl: { type: "string" } } }, timestamp: { type: "boolean", description: "Add current timestamp" } } }, replyTo: { type: "string", description: "Message ID to reply to", }, }, required: ["channel"], } }; export const handler = async (args, services) => { const { channel: channelInput, text, embed, replyTo } = args; const client = await services.getActiveClient(); try { // Resolve channel name to ID if needed const channelId = await services.resolveChannel(channelInput); const channel = await client.channels.fetch(channelId); if (!channel || channel.type !== ChannelType.GuildText) { throw new Error(`Channel ${channelId} not found or is not a text channel`); } const textChannel = channel; // Build message options const messageOptions = {}; if (text) { messageOptions.content = text; } if (embed) { const embedBuilder = new EmbedBuilder(); if (embed.title) embedBuilder.setTitle(embed.title); if (embed.description) embedBuilder.setDescription(embed.description); if (embed.color) embedBuilder.setColor(embed.color); if (embed.fields) { embed.fields.forEach(field => { embedBuilder.addFields({ name: field.name, value: field.value, inline: field.inline || false }); }); } if (embed.footer) { embedBuilder.setFooter({ text: embed.footer.text, iconURL: embed.footer.iconUrl }); } if (embed.timestamp) { embedBuilder.setTimestamp(); } messageOptions.embeds = [embedBuilder]; } if (replyTo) { messageOptions.reply = { messageReference: replyTo }; } const message = await textChannel.send(messageOptions); return { content: [ { type: "text", text: `Message sent successfully to #${textChannel.name}! Message ID: ${message.id} Content: ${text || '[Embed message]'} Channel: #${textChannel.name} (${textChannel.id}) Author: ${message.author.username}#${message.author.discriminator} Created: ${message.createdAt.toISOString()} ${replyTo ? `Reply to: ${replyTo}` : ''} ${embed ? `Contains embed: ${embed.title || 'Yes'}` : ''}` } ] }; } catch (error) { console.error(`[SendMessage] Error sending message:`, error); throw new Error(`Failed to send message: ${error.message}`); } }; export { SendMessageArgsSchema as schema } from "../../schemas/messaging.js"; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VuZC1tZXNzYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Rvb2xzL21lc3NhZ2luZy9zZW5kLW1lc3NhZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFFLFdBQVcsRUFBcUMsWUFBWSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRTFGLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBUztJQUNsQyxJQUFJLEVBQUUsc0JBQXNCO0lBQzVCLFdBQVcsRUFBRSxxQ0FBcUM7SUFDbEQsV0FBVyxFQUFFO1FBQ1gsSUFBSSxFQUFFLFFBQVE7UUFDZCxVQUFVLEVBQUU7WUFDVixPQUFPLEVBQUU7Z0JBQ1AsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsV0FBVyxFQUFFLHFEQUFxRDthQUNuRTtZQUNELElBQUksRUFBRTtnQkFDSixJQUFJLEVBQUUsUUFBUTtnQkFDZCxXQUFXLEVBQUUsNkJBQTZCO2FBQzNDO1lBQ0QsS0FBSyxFQUFFO2dCQUNMLElBQUksRUFBRSxRQUFRO2dCQUNkLFdBQVcsRUFBRSxtQkFBbUI7Z0JBQ2hDLFVBQVUsRUFBRTtvQkFDVixLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUU7b0JBQ3JELFdBQVcsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFO29CQUNqRSxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSx1QkFBdUIsRUFBRTtvQkFDL0QsTUFBTSxFQUFFO3dCQUNOLElBQUksRUFBRSxPQUFPO3dCQUNiLFdBQVcsRUFBRSxjQUFjO3dCQUMzQixLQUFLLEVBQUU7NEJBQ0wsSUFBSSxFQUFFLFFBQVE7NEJBQ2QsVUFBVSxFQUFFO2dDQUNWLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7Z0NBQ3hCLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxRQUFR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