@chinchillaenterprises/mcp-discord
Version:
Modular Discord MCP server with 45+ tools for comprehensive server management, featuring clean architecture and discord_ prefixed tools
83 lines • 6.3 kB
JavaScript
import { ChannelType, EmbedBuilder } from "discord.js";
export const toolDefinition = {
name: "discord_edit_message",
description: "Edit an existing Discord message",
inputSchema: {
type: "object",
properties: {
channel: {
type: "string",
description: "Channel ID or name where the message is",
},
messageId: {
type: "string",
description: "Message ID to edit",
},
text: {
type: "string",
description: "New text content",
},
embed: {
type: "object",
description: "New embed object",
properties: {
title: { type: "string" },
description: { type: "string" },
color: { type: "number" }
}
}
},
required: ["channel", "messageId"],
}
};
export const handler = async (args, services) => {
const { channel: channelInput, messageId, text, embed } = 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;
const message = await textChannel.messages.fetch(messageId);
if (message.author.id !== client.user?.id) {
throw new Error("Can only edit messages sent by this bot");
}
// Build edit options
const editOptions = {};
if (text !== undefined) {
editOptions.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);
editOptions.embeds = [embedBuilder];
}
await message.edit(editOptions);
return {
content: [
{
type: "text",
text: `Message edited successfully!
Message ID: ${messageId}
Channel: #${textChannel.name} (${textChannel.id})
New content: ${text || '[Embed content updated]'}
Updated: ${new Date().toISOString()}`
}
]
};
}
catch (error) {
console.error(`[EditMessage] Error editing message:`, error);
throw new Error(`Failed to edit message: ${error.message}`);
}
};
export { EditMessageArgsSchema as schema } from "../../schemas/messaging.js";
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdC1tZXNzYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Rvb2xzL21lc3NhZ2luZy9lZGl0LW1lc3NhZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFFLFdBQVcsRUFBZSxZQUFZLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFcEUsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFTO0lBQ2xDLElBQUksRUFBRSxzQkFBc0I7SUFDNUIsV0FBVyxFQUFFLGtDQUFrQztJQUMvQyxXQUFXLEVBQUU7UUFDWCxJQUFJLEVBQUUsUUFBUTtRQUNkLFVBQVUsRUFBRTtZQUNWLE9BQU8sRUFBRTtnQkFDUCxJQUFJLEVBQUUsUUFBUTtnQkFDZCxXQUFXLEVBQUUseUNBQXlDO2FBQ3ZEO1lBQ0QsU0FBUyxFQUFFO2dCQUNULElBQUksRUFBRSxRQUFRO2dCQUNkLFdBQVcsRUFBRSxvQkFBb0I7YUFDbEM7WUFDRCxJQUFJLEVBQUU7Z0JBQ0osSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsV0FBVyxFQUFFLGtCQUFrQjthQUNoQztZQUNELEtBQUssRUFBRTtnQkFDTCxJQUFJLEVBQUUsUUFBUTtnQkFDZCxXQUFXLEVBQUUsa0JBQWtCO2dCQUMvQixVQUFVLEVBQUU7b0JBQ1YsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtvQkFDekIsV0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtvQkFDL0IsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtpQkFDMUI7YUFDRjtTQUNGO1FBQ0QsUUFBUSxFQUFFLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQztLQUNuQztDQUNGLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsS0FBSyxFQUFFLElBQXFCLEVBQUUsUUFBMEIsRUFBRSxFQUFFO0lBQ2pGLE1BQU0sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxJQUFJ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