UNPKG

@chinchillaenterprises/mcp-discord

Version:

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

84 lines 6.38 kB
import { ChannelType } from "discord.js"; export const toolDefinition = { name: "discord_move_member", description: "Move a member to a different voice channel", inputSchema: { type: "object", properties: { userId: { type: "string", description: "User ID to move", }, channelId: { type: "string", description: "Voice channel ID or name to move to (null to disconnect)", }, reason: { type: "string", description: "Reason for moving (optional)", }, }, required: ["userId"], } }; export const handler = async (args, services) => { const { userId, channelId, reason } = args; const guild = await services.getGuild(); const client = await services.getActiveClient(); try { const member = await guild.members.fetch(userId); if (!member) { throw new Error(`Member ${userId} not found`); } if (!member.voice.channel) { throw new Error(`${member.user.username} is not in a voice channel`); } const currentChannel = member.voice.channel; if (channelId) { // Resolve channel name to ID if needed const resolvedChannelId = await services.resolveChannel(channelId); const targetChannel = await client.channels.fetch(resolvedChannelId); if (!targetChannel || targetChannel.type !== ChannelType.GuildVoice) { throw new Error(`Channel ${channelId} is not a voice channel`); } await member.voice.setChannel(targetChannel, reason); return { content: [ { type: "text", text: `Successfully moved member! User: ${member.user.username}#${member.user.discriminator} (${userId}) From: ${currentChannel.name} To: ${targetChannel.name} ${reason ? `Reason: ${reason}` : 'No reason provided'} Server: ${guild.name} Moved at: ${new Date().toISOString()}` } ] }; } else { // Disconnect from voice await member.voice.disconnect(reason); return { content: [ { type: "text", text: `Successfully disconnected member from voice! User: ${member.user.username}#${member.user.discriminator} (${userId}) From: ${currentChannel.name} ${reason ? `Reason: ${reason}` : 'No reason provided'} Server: ${guild.name} Disconnected at: ${new Date().toISOString()}` } ] }; } } catch (error) { console.error(`[MoveMember] Error moving member:`, error); throw new Error(`Failed to move member: ${error.message}`); } }; export { MoveMemberArgsSchema as schema } from "../../schemas/moderation.js"; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW92ZS1tZW1iZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdG9vbHMvbW9kZXJhdGlvbi9tb3ZlLW1lbWJlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsV0FBVyxFQUFnQixNQUFNLFlBQVksQ0FBQztBQUV2RCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQVM7SUFDbEMsSUFBSSxFQUFFLHFCQUFxQjtJQUMzQixXQUFXLEVBQUUsNENBQTRDO0lBQ3pELFdBQVcsRUFBRTtRQUNYLElBQUksRUFBRSxRQUFRO1FBQ2QsVUFBVSxFQUFFO1lBQ1YsTUFBTSxFQUFFO2dCQUNOLElBQUksRUFBRSxRQUFRO2dCQUNkLFdBQVcsRUFBRSxpQkFBaUI7YUFDL0I7WUFDRCxTQUFTLEVBQUU7Z0JBQ1QsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsV0FBVyxFQUFFLDBEQUEwRDthQUN4RTtZQUNELE1BQU0sRUFBRTtnQkFDTixJQUFJLEVBQUUsUUFBUTtnQkFDZCxXQUFXLEVBQUUsOEJBQThCO2FBQzVDO1NBQ0Y7UUFDRCxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUM7S0FDckI7Q0FDRixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLEtBQUssRUFBRSxJQUFvQixFQUFFLFFBQTBCLEVBQUUsRUFBRTtJQUNoRixNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUM7SUFFM0MsTUFBTSxLQUFLLEdBQUcsTUFBTSxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDeEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxRQUFRLENBQUMsZUFBZSxFQUFFLENBQUM7SUFFaEQsSUFBSSxDQUFDO1FBQ0gsTUFBTSxNQUFNLEdBQUcsTUFBTSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFD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