@quadslab.io/discord-mcp 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +474 -0
- package/dist/discord-client.d.ts +57 -0
- package/dist/discord-client.js +188 -0
- package/dist/discord-client.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.js +135 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp-server.d.ts +15 -0
- package/dist/mcp-server.js +65 -0
- package/dist/mcp-server.js.map +1 -0
- package/dist/tools/automod.d.ts +6 -0
- package/dist/tools/automod.js +376 -0
- package/dist/tools/automod.js.map +1 -0
- package/dist/tools/channels.d.ts +6 -0
- package/dist/tools/channels.js +840 -0
- package/dist/tools/channels.js.map +1 -0
- package/dist/tools/emojis.d.ts +6 -0
- package/dist/tools/emojis.js +295 -0
- package/dist/tools/emojis.js.map +1 -0
- package/dist/tools/events.d.ts +6 -0
- package/dist/tools/events.js +304 -0
- package/dist/tools/events.js.map +1 -0
- package/dist/tools/forums.d.ts +6 -0
- package/dist/tools/forums.js +276 -0
- package/dist/tools/forums.js.map +1 -0
- package/dist/tools/guild.d.ts +6 -0
- package/dist/tools/guild.js +88 -0
- package/dist/tools/guild.js.map +1 -0
- package/dist/tools/index.d.ts +13 -0
- package/dist/tools/index.js +142 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/members.d.ts +6 -0
- package/dist/tools/members.js +628 -0
- package/dist/tools/members.js.map +1 -0
- package/dist/tools/messages.d.ts +6 -0
- package/dist/tools/messages.js +688 -0
- package/dist/tools/messages.js.map +1 -0
- package/dist/tools/reactions.d.ts +6 -0
- package/dist/tools/reactions.js +137 -0
- package/dist/tools/reactions.js.map +1 -0
- package/dist/tools/roles.d.ts +6 -0
- package/dist/tools/roles.js +469 -0
- package/dist/tools/roles.js.map +1 -0
- package/dist/tools/server.d.ts +6 -0
- package/dist/tools/server.js +607 -0
- package/dist/tools/server.js.map +1 -0
- package/dist/tools/stage.d.ts +6 -0
- package/dist/tools/stage.js +153 -0
- package/dist/tools/stage.js.map +1 -0
- package/dist/tools/threads.d.ts +6 -0
- package/dist/tools/threads.js +331 -0
- package/dist/tools/threads.js.map +1 -0
- package/dist/tools/utils.d.ts +21 -0
- package/dist/tools/utils.js +315 -0
- package/dist/tools/utils.js.map +1 -0
- package/dist/tools/webhooks.d.ts +6 -0
- package/dist/tools/webhooks.js +195 -0
- package/dist/tools/webhooks.js.map +1 -0
- package/package.json +48 -0
|
@@ -0,0 +1,376 @@
|
|
|
1
|
+
import { getGuild } from '../discord-client.js';
|
|
2
|
+
import { AutoModerationRuleTriggerType, AutoModerationActionType, AutoModerationRuleKeywordPresetType, } from 'discord.js';
|
|
3
|
+
/**
|
|
4
|
+
* Auto-moderation tools for managing Discord AutoMod rules
|
|
5
|
+
*/
|
|
6
|
+
export const automodTools = [
|
|
7
|
+
{
|
|
8
|
+
name: 'list_automod_rules',
|
|
9
|
+
description: 'List all auto-moderation rules in the Discord server. Returns rule details including triggers, actions, and exemptions.',
|
|
10
|
+
inputSchema: {
|
|
11
|
+
type: 'object',
|
|
12
|
+
properties: {},
|
|
13
|
+
required: [],
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
name: 'create_automod_rule',
|
|
18
|
+
description: 'Create a new auto-moderation rule in the Discord server. Supports keyword filtering, spam detection, keyword presets, and mention spam prevention.',
|
|
19
|
+
inputSchema: {
|
|
20
|
+
type: 'object',
|
|
21
|
+
properties: {
|
|
22
|
+
name: {
|
|
23
|
+
type: 'string',
|
|
24
|
+
description: 'The name for the auto-moderation rule',
|
|
25
|
+
},
|
|
26
|
+
triggerType: {
|
|
27
|
+
type: 'string',
|
|
28
|
+
enum: ['keyword', 'spam', 'keyword_preset', 'mention_spam'],
|
|
29
|
+
description: 'The type of trigger for the rule',
|
|
30
|
+
},
|
|
31
|
+
keywords: {
|
|
32
|
+
type: 'array',
|
|
33
|
+
items: { type: 'string' },
|
|
34
|
+
description: 'Keywords to filter (for "keyword" trigger type)',
|
|
35
|
+
},
|
|
36
|
+
regexPatterns: {
|
|
37
|
+
type: 'array',
|
|
38
|
+
items: { type: 'string' },
|
|
39
|
+
description: 'Regex patterns to filter (for "keyword" trigger type)',
|
|
40
|
+
},
|
|
41
|
+
presets: {
|
|
42
|
+
type: 'array',
|
|
43
|
+
items: {
|
|
44
|
+
type: 'string',
|
|
45
|
+
enum: ['profanity', 'sexual_content', 'slurs'],
|
|
46
|
+
},
|
|
47
|
+
description: 'Keyword presets to use (for "keyword_preset" trigger type)',
|
|
48
|
+
},
|
|
49
|
+
mentionLimit: {
|
|
50
|
+
type: 'number',
|
|
51
|
+
description: 'Maximum number of mentions allowed (for "mention_spam" trigger type)',
|
|
52
|
+
},
|
|
53
|
+
actions: {
|
|
54
|
+
type: 'array',
|
|
55
|
+
items: {
|
|
56
|
+
type: 'object',
|
|
57
|
+
properties: {
|
|
58
|
+
type: {
|
|
59
|
+
type: 'string',
|
|
60
|
+
enum: ['block', 'alert', 'timeout'],
|
|
61
|
+
description: 'The action type',
|
|
62
|
+
},
|
|
63
|
+
channelId: {
|
|
64
|
+
type: 'string',
|
|
65
|
+
description: 'Channel ID for alert actions',
|
|
66
|
+
},
|
|
67
|
+
durationSeconds: {
|
|
68
|
+
type: 'number',
|
|
69
|
+
description: 'Timeout duration in seconds (for timeout actions)',
|
|
70
|
+
},
|
|
71
|
+
},
|
|
72
|
+
required: ['type'],
|
|
73
|
+
},
|
|
74
|
+
description: 'Actions to take when the rule is triggered',
|
|
75
|
+
},
|
|
76
|
+
enabled: {
|
|
77
|
+
type: 'boolean',
|
|
78
|
+
description: 'Whether the rule is enabled (default: true)',
|
|
79
|
+
},
|
|
80
|
+
exemptRoles: {
|
|
81
|
+
type: 'array',
|
|
82
|
+
items: { type: 'string' },
|
|
83
|
+
description: 'Role IDs exempt from this rule',
|
|
84
|
+
},
|
|
85
|
+
exemptChannels: {
|
|
86
|
+
type: 'array',
|
|
87
|
+
items: { type: 'string' },
|
|
88
|
+
description: 'Channel IDs exempt from this rule',
|
|
89
|
+
},
|
|
90
|
+
},
|
|
91
|
+
required: ['name', 'triggerType', 'actions'],
|
|
92
|
+
},
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
name: 'edit_automod_rule',
|
|
96
|
+
description: 'Modify an existing auto-moderation rule. Only specified fields will be updated.',
|
|
97
|
+
inputSchema: {
|
|
98
|
+
type: 'object',
|
|
99
|
+
properties: {
|
|
100
|
+
ruleId: {
|
|
101
|
+
type: 'string',
|
|
102
|
+
description: 'The ID of the auto-moderation rule to edit',
|
|
103
|
+
},
|
|
104
|
+
name: {
|
|
105
|
+
type: 'string',
|
|
106
|
+
description: 'New name for the rule',
|
|
107
|
+
},
|
|
108
|
+
keywords: {
|
|
109
|
+
type: 'array',
|
|
110
|
+
items: { type: 'string' },
|
|
111
|
+
description: 'Updated keywords to filter',
|
|
112
|
+
},
|
|
113
|
+
regexPatterns: {
|
|
114
|
+
type: 'array',
|
|
115
|
+
items: { type: 'string' },
|
|
116
|
+
description: 'Updated regex patterns to filter',
|
|
117
|
+
},
|
|
118
|
+
actions: {
|
|
119
|
+
type: 'array',
|
|
120
|
+
items: {
|
|
121
|
+
type: 'object',
|
|
122
|
+
properties: {
|
|
123
|
+
type: {
|
|
124
|
+
type: 'string',
|
|
125
|
+
enum: ['block', 'alert', 'timeout'],
|
|
126
|
+
description: 'The action type',
|
|
127
|
+
},
|
|
128
|
+
channelId: {
|
|
129
|
+
type: 'string',
|
|
130
|
+
description: 'Channel ID for alert actions',
|
|
131
|
+
},
|
|
132
|
+
durationSeconds: {
|
|
133
|
+
type: 'number',
|
|
134
|
+
description: 'Timeout duration in seconds (for timeout actions)',
|
|
135
|
+
},
|
|
136
|
+
},
|
|
137
|
+
required: ['type'],
|
|
138
|
+
},
|
|
139
|
+
description: 'Updated actions for the rule',
|
|
140
|
+
},
|
|
141
|
+
enabled: {
|
|
142
|
+
type: 'boolean',
|
|
143
|
+
description: 'Whether the rule is enabled',
|
|
144
|
+
},
|
|
145
|
+
exemptRoles: {
|
|
146
|
+
type: 'array',
|
|
147
|
+
items: { type: 'string' },
|
|
148
|
+
description: 'Updated role IDs exempt from this rule',
|
|
149
|
+
},
|
|
150
|
+
exemptChannels: {
|
|
151
|
+
type: 'array',
|
|
152
|
+
items: { type: 'string' },
|
|
153
|
+
description: 'Updated channel IDs exempt from this rule',
|
|
154
|
+
},
|
|
155
|
+
},
|
|
156
|
+
required: ['ruleId'],
|
|
157
|
+
},
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
name: 'delete_automod_rule',
|
|
161
|
+
description: 'Delete an auto-moderation rule from the Discord server.',
|
|
162
|
+
inputSchema: {
|
|
163
|
+
type: 'object',
|
|
164
|
+
properties: {
|
|
165
|
+
ruleId: {
|
|
166
|
+
type: 'string',
|
|
167
|
+
description: 'The ID of the auto-moderation rule to delete',
|
|
168
|
+
},
|
|
169
|
+
},
|
|
170
|
+
required: ['ruleId'],
|
|
171
|
+
},
|
|
172
|
+
},
|
|
173
|
+
];
|
|
174
|
+
export async function executeAutomodTool(name, args) {
|
|
175
|
+
switch (name) {
|
|
176
|
+
case 'list_automod_rules':
|
|
177
|
+
return await listAutomodRules();
|
|
178
|
+
case 'create_automod_rule':
|
|
179
|
+
return await createAutomodRule(args);
|
|
180
|
+
case 'edit_automod_rule':
|
|
181
|
+
return await editAutomodRule(args);
|
|
182
|
+
case 'delete_automod_rule':
|
|
183
|
+
return await deleteAutomodRule(args);
|
|
184
|
+
default:
|
|
185
|
+
throw new Error(`Unknown automod tool: ${name}`);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
// --- Helper mappings ---
|
|
189
|
+
const triggerTypeMap = {
|
|
190
|
+
keyword: AutoModerationRuleTriggerType.Keyword,
|
|
191
|
+
spam: AutoModerationRuleTriggerType.Spam,
|
|
192
|
+
keyword_preset: AutoModerationRuleTriggerType.KeywordPreset,
|
|
193
|
+
mention_spam: AutoModerationRuleTriggerType.MentionSpam,
|
|
194
|
+
};
|
|
195
|
+
const triggerTypeNameMap = {
|
|
196
|
+
[AutoModerationRuleTriggerType.Keyword]: 'keyword',
|
|
197
|
+
[AutoModerationRuleTriggerType.Spam]: 'spam',
|
|
198
|
+
[AutoModerationRuleTriggerType.KeywordPreset]: 'keyword_preset',
|
|
199
|
+
[AutoModerationRuleTriggerType.MentionSpam]: 'mention_spam',
|
|
200
|
+
};
|
|
201
|
+
const actionTypeMap = {
|
|
202
|
+
block: AutoModerationActionType.BlockMessage,
|
|
203
|
+
alert: AutoModerationActionType.SendAlertMessage,
|
|
204
|
+
timeout: AutoModerationActionType.Timeout,
|
|
205
|
+
};
|
|
206
|
+
const actionTypeNameMap = {
|
|
207
|
+
[AutoModerationActionType.BlockMessage]: 'block',
|
|
208
|
+
[AutoModerationActionType.SendAlertMessage]: 'alert',
|
|
209
|
+
[AutoModerationActionType.Timeout]: 'timeout',
|
|
210
|
+
};
|
|
211
|
+
const presetMap = {
|
|
212
|
+
profanity: AutoModerationRuleKeywordPresetType.Profanity,
|
|
213
|
+
sexual_content: AutoModerationRuleKeywordPresetType.SexualContent,
|
|
214
|
+
slurs: AutoModerationRuleKeywordPresetType.Slurs,
|
|
215
|
+
};
|
|
216
|
+
const presetNameMap = {
|
|
217
|
+
[AutoModerationRuleKeywordPresetType.Profanity]: 'profanity',
|
|
218
|
+
[AutoModerationRuleKeywordPresetType.SexualContent]: 'sexual_content',
|
|
219
|
+
[AutoModerationRuleKeywordPresetType.Slurs]: 'slurs',
|
|
220
|
+
};
|
|
221
|
+
function buildActions(actions) {
|
|
222
|
+
return actions.map(action => {
|
|
223
|
+
const type = actionTypeMap[action.type];
|
|
224
|
+
if (type === undefined) {
|
|
225
|
+
throw new Error(`Invalid action type: "${action.type}". Must be "block", "alert", or "timeout".`);
|
|
226
|
+
}
|
|
227
|
+
const result = { type };
|
|
228
|
+
if (action.type === 'alert' && action.channelId) {
|
|
229
|
+
result.metadata = { channel: action.channelId };
|
|
230
|
+
}
|
|
231
|
+
else if (action.type === 'timeout' && action.durationSeconds) {
|
|
232
|
+
result.metadata = { durationSeconds: action.durationSeconds };
|
|
233
|
+
}
|
|
234
|
+
return result;
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
// --- Tool implementations ---
|
|
238
|
+
async function listAutomodRules() {
|
|
239
|
+
const guild = await getGuild();
|
|
240
|
+
const rules = await guild.autoModerationRules.fetch();
|
|
241
|
+
const result = rules.map(rule => ({
|
|
242
|
+
id: rule.id,
|
|
243
|
+
name: rule.name,
|
|
244
|
+
enabled: rule.enabled,
|
|
245
|
+
creatorId: rule.creatorId,
|
|
246
|
+
triggerType: triggerTypeNameMap[rule.triggerType] ?? 'unknown',
|
|
247
|
+
triggerMetadata: {
|
|
248
|
+
keywords: rule.triggerMetadata.keywordFilter,
|
|
249
|
+
regexPatterns: rule.triggerMetadata.regexPatterns,
|
|
250
|
+
presets: rule.triggerMetadata.presets.map(p => presetNameMap[p] ?? 'unknown'),
|
|
251
|
+
mentionTotalLimit: rule.triggerMetadata.mentionTotalLimit,
|
|
252
|
+
},
|
|
253
|
+
actions: rule.actions.map(action => ({
|
|
254
|
+
type: actionTypeNameMap[action.type] ?? 'unknown',
|
|
255
|
+
metadata: action.metadata,
|
|
256
|
+
})),
|
|
257
|
+
exemptRoles: rule.exemptRoles.map(r => r.name),
|
|
258
|
+
exemptChannels: rule.exemptChannels.map(c => c.name),
|
|
259
|
+
}));
|
|
260
|
+
return JSON.stringify(result, null, 2);
|
|
261
|
+
}
|
|
262
|
+
async function createAutomodRule(args) {
|
|
263
|
+
const guild = await getGuild();
|
|
264
|
+
const name = args['name'];
|
|
265
|
+
const triggerTypeStr = args['triggerType'];
|
|
266
|
+
const keywords = args['keywords'];
|
|
267
|
+
const regexPatterns = args['regexPatterns'];
|
|
268
|
+
const presets = args['presets'];
|
|
269
|
+
const mentionLimit = args['mentionLimit'];
|
|
270
|
+
const actions = args['actions'];
|
|
271
|
+
const enabled = args['enabled'] ?? true;
|
|
272
|
+
const exemptRoles = args['exemptRoles'];
|
|
273
|
+
const exemptChannels = args['exemptChannels'];
|
|
274
|
+
const triggerType = triggerTypeMap[triggerTypeStr];
|
|
275
|
+
if (triggerType === undefined) {
|
|
276
|
+
throw new Error(`Invalid trigger type: ${triggerTypeStr}. Must be one of: keyword, spam, keyword_preset, mention_spam`);
|
|
277
|
+
}
|
|
278
|
+
// Build trigger metadata based on trigger type
|
|
279
|
+
const triggerMetadata = {};
|
|
280
|
+
if (triggerTypeStr === 'keyword') {
|
|
281
|
+
if (keywords)
|
|
282
|
+
triggerMetadata['keywordFilter'] = keywords;
|
|
283
|
+
if (regexPatterns)
|
|
284
|
+
triggerMetadata['regexPatterns'] = regexPatterns;
|
|
285
|
+
}
|
|
286
|
+
else if (triggerTypeStr === 'keyword_preset') {
|
|
287
|
+
if (presets) {
|
|
288
|
+
triggerMetadata['presets'] = presets.map(p => {
|
|
289
|
+
const mapped = presetMap[p];
|
|
290
|
+
if (mapped === undefined) {
|
|
291
|
+
throw new Error(`Invalid preset: ${p}. Must be one of: profanity, sexual_content, slurs`);
|
|
292
|
+
}
|
|
293
|
+
return mapped;
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
else if (triggerTypeStr === 'mention_spam') {
|
|
298
|
+
if (mentionLimit !== undefined)
|
|
299
|
+
triggerMetadata['mentionTotalLimit'] = mentionLimit;
|
|
300
|
+
}
|
|
301
|
+
const rule = await guild.autoModerationRules.create({
|
|
302
|
+
name,
|
|
303
|
+
eventType: 1, // MessageSend
|
|
304
|
+
triggerType,
|
|
305
|
+
triggerMetadata,
|
|
306
|
+
actions: buildActions(actions),
|
|
307
|
+
enabled,
|
|
308
|
+
exemptRoles: exemptRoles ?? [],
|
|
309
|
+
exemptChannels: exemptChannels ?? [],
|
|
310
|
+
});
|
|
311
|
+
return JSON.stringify({
|
|
312
|
+
success: true,
|
|
313
|
+
message: `Auto-moderation rule "${rule.name}" created successfully`,
|
|
314
|
+
rule: {
|
|
315
|
+
id: rule.id,
|
|
316
|
+
name: rule.name,
|
|
317
|
+
enabled: rule.enabled,
|
|
318
|
+
triggerType: triggerTypeNameMap[rule.triggerType] ?? 'unknown',
|
|
319
|
+
},
|
|
320
|
+
}, null, 2);
|
|
321
|
+
}
|
|
322
|
+
async function editAutomodRule(args) {
|
|
323
|
+
const guild = await getGuild();
|
|
324
|
+
const ruleId = args['ruleId'];
|
|
325
|
+
const rule = await guild.autoModerationRules.fetch(ruleId);
|
|
326
|
+
const updates = {};
|
|
327
|
+
if (args['name'] !== undefined)
|
|
328
|
+
updates['name'] = args['name'];
|
|
329
|
+
if (args['enabled'] !== undefined)
|
|
330
|
+
updates['enabled'] = args['enabled'];
|
|
331
|
+
if (args['exemptRoles'] !== undefined)
|
|
332
|
+
updates['exemptRoles'] = args['exemptRoles'];
|
|
333
|
+
if (args['exemptChannels'] !== undefined)
|
|
334
|
+
updates['exemptChannels'] = args['exemptChannels'];
|
|
335
|
+
if (args['actions'] !== undefined) {
|
|
336
|
+
const actions = args['actions'];
|
|
337
|
+
updates['actions'] = buildActions(actions);
|
|
338
|
+
}
|
|
339
|
+
// Build trigger metadata updates
|
|
340
|
+
const triggerMetadata = {};
|
|
341
|
+
let hasTriggerMetadata = false;
|
|
342
|
+
if (args['keywords'] !== undefined) {
|
|
343
|
+
triggerMetadata['keywordFilter'] = args['keywords'];
|
|
344
|
+
hasTriggerMetadata = true;
|
|
345
|
+
}
|
|
346
|
+
if (args['regexPatterns'] !== undefined) {
|
|
347
|
+
triggerMetadata['regexPatterns'] = args['regexPatterns'];
|
|
348
|
+
hasTriggerMetadata = true;
|
|
349
|
+
}
|
|
350
|
+
if (hasTriggerMetadata) {
|
|
351
|
+
updates['triggerMetadata'] = triggerMetadata;
|
|
352
|
+
}
|
|
353
|
+
const updatedRule = await rule.edit(updates);
|
|
354
|
+
return JSON.stringify({
|
|
355
|
+
success: true,
|
|
356
|
+
message: `Auto-moderation rule "${updatedRule.name}" updated successfully`,
|
|
357
|
+
rule: {
|
|
358
|
+
id: updatedRule.id,
|
|
359
|
+
name: updatedRule.name,
|
|
360
|
+
enabled: updatedRule.enabled,
|
|
361
|
+
triggerType: triggerTypeNameMap[updatedRule.triggerType] ?? 'unknown',
|
|
362
|
+
},
|
|
363
|
+
}, null, 2);
|
|
364
|
+
}
|
|
365
|
+
async function deleteAutomodRule(args) {
|
|
366
|
+
const guild = await getGuild();
|
|
367
|
+
const ruleId = args['ruleId'];
|
|
368
|
+
const rule = await guild.autoModerationRules.fetch(ruleId);
|
|
369
|
+
const ruleName = rule.name;
|
|
370
|
+
await rule.delete();
|
|
371
|
+
return JSON.stringify({
|
|
372
|
+
success: true,
|
|
373
|
+
message: `Auto-moderation rule "${ruleName}" deleted successfully`,
|
|
374
|
+
}, null, 2);
|
|
375
|
+
}
|
|
376
|
+
//# sourceMappingURL=automod.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"automod.js","sourceRoot":"","sources":["../../src/tools/automod.ts"],"names":[],"mappings":"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"}
|