@chinchillaenterprises/mcp-discord
Version:
Modular Discord MCP server with 45+ tools for comprehensive server management, featuring clean architecture and discord_ prefixed tools
62 lines • 5.27 kB
JavaScript
export const toolDefinition = {
name: "discord_timeout_member",
description: "Timeout (moderate) a member",
inputSchema: {
type: "object",
properties: {
userId: {
type: "string",
description: "User ID to timeout",
},
duration: {
type: "number",
description: "Timeout duration in minutes (max 40320 = 28 days)",
},
reason: {
type: "string",
description: "Reason for timeout (optional)",
},
},
required: ["userId", "duration"],
}
};
export const handler = async (args, services) => {
const { userId, duration, reason } = args;
const guild = await services.getGuild();
try {
const member = await guild.members.fetch(userId);
if (!member) {
throw new Error(`Member ${userId} not found`);
}
const timeoutUntil = Date.now() + duration * 60000;
await member.timeout(timeoutUntil, reason);
// Calculate human-readable duration
const days = Math.floor(duration / 1440);
const hours = Math.floor((duration % 1440) / 60);
const minutes = duration % 60;
const durationString = [
days > 0 ? `${days} day${days > 1 ? 's' : ''}` : '',
hours > 0 ? `${hours} hour${hours > 1 ? 's' : ''}` : '',
minutes > 0 ? `${minutes} minute${minutes > 1 ? 's' : ''}` : ''
].filter(Boolean).join(', ');
return {
content: [
{
type: "text",
text: `Successfully timed out member!
User: ${member.user.username}#${member.user.discriminator} (${userId})
Duration: ${durationString} (${duration} minutes)
${reason ? `Reason: ${reason}` : 'No reason provided'}
Server: ${guild.name}
Timeout until: ${new Date(timeoutUntil).toISOString()}`
}
]
};
}
catch (error) {
console.error(`[TimeoutMember] Error timing out member:`, error);
throw new Error(`Failed to timeout member: ${error.message}`);
}
};
export { TimeoutMemberArgsSchema as schema } from "../../schemas/moderation.js";
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZW91dC1tZW1iZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdG9vbHMvbW9kZXJhdGlvbi90aW1lb3V0LW1lbWJlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQVM7SUFDbEMsSUFBSSxFQUFFLHdCQUF3QjtJQUM5QixXQUFXLEVBQUUsNkJBQTZCO0lBQzFDLFdBQVcsRUFBRTtRQUNYLElBQUksRUFBRSxRQUFRO1FBQ2QsVUFBVSxFQUFFO1lBQ1YsTUFBTSxFQUFFO2dCQUNOLElBQUksRUFBRSxRQUFRO2dCQUNkLFdBQVcsRUFBRSxvQkFBb0I7YUFDbEM7WUFDRCxRQUFRLEVBQUU7Z0JBQ1IsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsV0FBVyxFQUFFLG1EQUFtRDthQUNqRTtZQUNELE1BQU0sRUFBRTtnQkFDTixJQUFJLEVBQUUsUUFBUTtnQkFDZCxXQUFXLEVBQUUsK0JBQStCO2FBQzdDO1NBQ0Y7UUFDRCxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDO0tBQ2pDO0NBQ0YsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxLQUFLLEVBQUUsSUFBdUIsRUFBRSxRQUEwQixFQUFFLEVBQUU7SUFDbkYsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDO0lBRTFDLE1BQU0sS0FBSyxHQUFHLE1BQU0sUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBRXhDLElBQUksQ0FBQztRQUNILE1BQU0sTUFBTSxHQUFHLE1BQU0sS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ1osTUFBTSxJQUFJLEtBQUssQ0FBQyxVQUFVLE1BQU0sWUFBWSxDQUFDLENBQUM7UUFDaEQsQ0FBQztRQUVELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ25ELE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFM0Msb0NBQW9DO1FBQ3BDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDakQsTUFBTSxPQUFPLEdBQUcsUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUM5QixNQUFNLGNBQWMsR0FBRztZQUNyQixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksT0FBTyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ25ELEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxRQUFRLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDdkQsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLFVBQVUsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRTtTQUNoRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFN0IsT0FBTztZQUNMLE9BQU8sRUFBRTtnQkFDUDtvQkFDRSxJQUFJLEVBQUUsTUFBTTtvQkFDWixJQUFJLEVBQUU7UUFDUixNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsS0FBSyxNQUFNO1lBQ3hELGNBQWMsS0FBSyxRQUFRO0VBQ3JDLE1BQU0sQ0FBQyxDQUFDLENBQUMsV0FBVyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsb0JBQW9CO1VBQzNDLEtBQUssQ0FBQyxJQUFJO2lCQUNILElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFO2lCQUM5QzthQUNGO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFBQyxPQUFPLEtBQVUsRUFBRSxDQUFDO1FBQ3BCLE9BQU8sQ0FBQyxLQUFLLENBQUMsMENBQTBDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDakUsTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDaEUsQ0FBQztBQUNILENBQUMsQ0FBQztBQUVGLE9BQU8sRUFBRSx1QkFBdUIsSUFBSSxNQUFNLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQyJ9