@chinchillaenterprises/mcp-discord
Version:
Modular Discord MCP server with 45+ tools for comprehensive server management, featuring clean architecture and discord_ prefixed tools
56 lines • 4.17 kB
JavaScript
import { ChannelType } from "discord.js";
export const toolDefinition = {
name: "discord_add_reaction",
description: "Add a reaction emoji to a message",
inputSchema: {
type: "object",
properties: {
channel: {
type: "string",
description: "Channel ID or name where the message is",
},
messageId: {
type: "string",
description: "Message ID to react to",
},
emoji: {
type: "string",
description: "Emoji to react with (Unicode or custom emoji ID)",
}
},
required: ["channel", "messageId", "emoji"],
}
};
export const handler = async (args, services) => {
const { channel: channelInput, messageId, emoji } = 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);
await message.react(emoji);
return {
content: [
{
type: "text",
text: `Reaction added successfully!
Emoji: ${emoji}
Message ID: ${messageId}
Channel: #${textChannel.name} (${textChannel.id})
Added at: ${new Date().toISOString()}`
}
]
};
}
catch (error) {
console.error(`[AddReaction] Error adding reaction:`, error);
throw new Error(`Failed to add reaction: ${error.message}`);
}
};
export { AddReactionArgsSchema as schema } from "../../schemas/messaging.js";
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLXJlYWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Rvb2xzL21lc3NhZ2luZy9hZGQtcmVhY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFFLFdBQVcsRUFBZSxNQUFNLFlBQVksQ0FBQztBQUV0RCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQVM7SUFDbEMsSUFBSSxFQUFFLHNCQUFzQjtJQUM1QixXQUFXLEVBQUUsbUNBQW1DO0lBQ2hELFdBQVcsRUFBRTtRQUNYLElBQUksRUFBRSxRQUFRO1FBQ2QsVUFBVSxFQUFFO1lBQ1YsT0FBTyxFQUFFO2dCQUNQLElBQUksRUFBRSxRQUFRO2dCQUNkLFdBQVcsRUFBRSx5Q0FBeUM7YUFDdkQ7WUFDRCxTQUFTLEVBQUU7Z0JBQ1QsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsV0FBVyxFQUFFLHdCQUF3QjthQUN0QztZQUNELEtBQUssRUFBRTtnQkFDTCxJQUFJLEVBQUUsUUFBUTtnQkFDZCxXQUFXLEVBQUUsa0RBQWtEO2FBQ2hFO1NBQ0Y7UUFDRCxRQUFRLEVBQUUsQ0FBQyxTQUFTLEVBQUUsV0FBVyxFQUFFLE9BQU8sQ0FBQztLQUM1QztDQUNGLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsS0FBSyxFQUFFLElBQXFCLEVBQUUsUUFBMEIsRUFBRSxFQUFFO0lBQ2pGLE1BQU0sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUM7SUFFekQsTUFBTSxNQUFNLEdBQUcsTUFBTSxRQUFRLENBQUMsZUFBZSxFQUFFLENBQUM7SUFFaEQsSUFBSSxDQUFDO1FBQ0gsdUNBQXVDO1FBQ3ZDLE1BQU0sU0FBUyxHQUFHLE1BQU0sUUFBUSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUU5RCxNQUFNLE9BQU8sR0FBRyxNQUFNLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZELElBQUksQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxXQUFXLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDdkQsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLFNBQVMscUNBQXFDLENBQUMsQ0FBQztRQUM3RSxDQUFDO1FBRUQsTUFBTSxXQUFXLEdBQUcsT0FBc0IsQ0FBQztRQUMzQyxNQUFNLE9BQU8sR0FBRyxNQUFNLFdBQVcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRTVELE1BQU0sT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUUzQixPQUFPO1lBQ0wsT0FBTyxFQUFFO2dCQUNQO29CQUNFLElBQUksRUFBRSxNQUFNO29CQUNaLElBQUksRUFBRTtTQUNQLEtBQUs7Y0FDQSxTQUFTO1lBQ1gsV0FBVyxDQUFDLElBQUksS0FBSyxXQUFXLENBQUMsRUFBRTtZQUNuQyxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxFQUFFO2lCQUM3QjthQUNGO1NBQ0YsQ0FBQztJQUVKLENBQUM7SUFBQyxPQUFPLEtBQVUsRUFBRSxDQUFDO1FBQ3BCLE9BQU8sQ0FBQyxLQUFLLENBQUMsc0NBQXNDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDN0QsTUFBTSxJQUFJLEtBQUssQ0FBQywyQkFBMkIsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDOUQsQ0FBQztBQUNILENBQUMsQ0FBQztBQUVGLE9BQU8sRUFBRSxxQkFBcUIsSUFBSSxNQUFNLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQyJ9