@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.
Files changed (60) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +474 -0
  3. package/dist/discord-client.d.ts +57 -0
  4. package/dist/discord-client.js +188 -0
  5. package/dist/discord-client.js.map +1 -0
  6. package/dist/index.d.ts +9 -0
  7. package/dist/index.js +135 -0
  8. package/dist/index.js.map +1 -0
  9. package/dist/mcp-server.d.ts +15 -0
  10. package/dist/mcp-server.js +65 -0
  11. package/dist/mcp-server.js.map +1 -0
  12. package/dist/tools/automod.d.ts +6 -0
  13. package/dist/tools/automod.js +376 -0
  14. package/dist/tools/automod.js.map +1 -0
  15. package/dist/tools/channels.d.ts +6 -0
  16. package/dist/tools/channels.js +840 -0
  17. package/dist/tools/channels.js.map +1 -0
  18. package/dist/tools/emojis.d.ts +6 -0
  19. package/dist/tools/emojis.js +295 -0
  20. package/dist/tools/emojis.js.map +1 -0
  21. package/dist/tools/events.d.ts +6 -0
  22. package/dist/tools/events.js +304 -0
  23. package/dist/tools/events.js.map +1 -0
  24. package/dist/tools/forums.d.ts +6 -0
  25. package/dist/tools/forums.js +276 -0
  26. package/dist/tools/forums.js.map +1 -0
  27. package/dist/tools/guild.d.ts +6 -0
  28. package/dist/tools/guild.js +88 -0
  29. package/dist/tools/guild.js.map +1 -0
  30. package/dist/tools/index.d.ts +13 -0
  31. package/dist/tools/index.js +142 -0
  32. package/dist/tools/index.js.map +1 -0
  33. package/dist/tools/members.d.ts +6 -0
  34. package/dist/tools/members.js +628 -0
  35. package/dist/tools/members.js.map +1 -0
  36. package/dist/tools/messages.d.ts +6 -0
  37. package/dist/tools/messages.js +688 -0
  38. package/dist/tools/messages.js.map +1 -0
  39. package/dist/tools/reactions.d.ts +6 -0
  40. package/dist/tools/reactions.js +137 -0
  41. package/dist/tools/reactions.js.map +1 -0
  42. package/dist/tools/roles.d.ts +6 -0
  43. package/dist/tools/roles.js +469 -0
  44. package/dist/tools/roles.js.map +1 -0
  45. package/dist/tools/server.d.ts +6 -0
  46. package/dist/tools/server.js +607 -0
  47. package/dist/tools/server.js.map +1 -0
  48. package/dist/tools/stage.d.ts +6 -0
  49. package/dist/tools/stage.js +153 -0
  50. package/dist/tools/stage.js.map +1 -0
  51. package/dist/tools/threads.d.ts +6 -0
  52. package/dist/tools/threads.js +331 -0
  53. package/dist/tools/threads.js.map +1 -0
  54. package/dist/tools/utils.d.ts +21 -0
  55. package/dist/tools/utils.js +315 -0
  56. package/dist/tools/utils.js.map +1 -0
  57. package/dist/tools/webhooks.d.ts +6 -0
  58. package/dist/tools/webhooks.js +195 -0
  59. package/dist/tools/webhooks.js.map +1 -0
  60. package/package.json +48 -0
@@ -0,0 +1,628 @@
1
+ import { getGuild, refreshServerCache } from '../discord-client.js';
2
+ import { smartFindMember, smartFindRole, smartFindChannel } from './utils.js';
3
+ import { ChannelType } from 'discord.js';
4
+ /**
5
+ * Member management tools
6
+ */
7
+ export const memberTools = [
8
+ {
9
+ name: 'list_members',
10
+ description: 'List members in the Discord server with optional filters. Returns usernames, display names, roles, and join dates. Role filter is fuzzy-matched.',
11
+ inputSchema: {
12
+ type: 'object',
13
+ properties: {
14
+ limit: {
15
+ type: 'number',
16
+ description: 'Maximum number of members to return (default: 50, max: 1000)',
17
+ },
18
+ role: {
19
+ type: 'string',
20
+ description: 'Filter members by role name or ID (fuzzy matched)',
21
+ },
22
+ search: {
23
+ type: 'string',
24
+ description: 'Search members by username or display name',
25
+ },
26
+ },
27
+ required: [],
28
+ },
29
+ },
30
+ {
31
+ name: 'get_member',
32
+ description: 'Get detailed information about a specific member including their roles, join date, and status. Member name is fuzzy-matched.',
33
+ inputSchema: {
34
+ type: 'object',
35
+ properties: {
36
+ member: {
37
+ type: 'string',
38
+ description: 'The member\'s username, display name, or user ID (fuzzy matched)',
39
+ },
40
+ },
41
+ required: ['member'],
42
+ },
43
+ },
44
+ {
45
+ name: 'kick_member',
46
+ description: 'Kick a member from the Discord server. They can rejoin with a new invite. Member name is fuzzy-matched.',
47
+ inputSchema: {
48
+ type: 'object',
49
+ properties: {
50
+ member: {
51
+ type: 'string',
52
+ description: 'The member\'s username, display name, or user ID to kick (fuzzy matched)',
53
+ },
54
+ reason: {
55
+ type: 'string',
56
+ description: 'The reason for kicking this member (shown in audit log)',
57
+ },
58
+ },
59
+ required: ['member'],
60
+ },
61
+ },
62
+ {
63
+ name: 'ban_member',
64
+ description: 'Ban a member from the Discord server. They cannot rejoin until unbanned. Member name is fuzzy-matched.',
65
+ inputSchema: {
66
+ type: 'object',
67
+ properties: {
68
+ member: {
69
+ type: 'string',
70
+ description: 'The member\'s username, display name, or user ID to ban (fuzzy matched)',
71
+ },
72
+ reason: {
73
+ type: 'string',
74
+ description: 'The reason for banning this member (shown in audit log)',
75
+ },
76
+ deleteMessageDays: {
77
+ type: 'number',
78
+ description: 'Number of days of messages to delete (0-7, default: 0)',
79
+ },
80
+ },
81
+ required: ['member'],
82
+ },
83
+ },
84
+ {
85
+ name: 'unban_member',
86
+ description: 'Remove a ban from a user, allowing them to rejoin the server.',
87
+ inputSchema: {
88
+ type: 'object',
89
+ properties: {
90
+ user: {
91
+ type: 'string',
92
+ description: 'The user\'s username or user ID to unban',
93
+ },
94
+ reason: {
95
+ type: 'string',
96
+ description: 'The reason for unbanning this user (shown in audit log)',
97
+ },
98
+ },
99
+ required: ['user'],
100
+ },
101
+ },
102
+ {
103
+ name: 'timeout_member',
104
+ description: 'Apply a timeout to a member, temporarily preventing them from sending messages or joining voice channels. Member name is fuzzy-matched.',
105
+ inputSchema: {
106
+ type: 'object',
107
+ properties: {
108
+ member: {
109
+ type: 'string',
110
+ description: 'The member\'s username, display name, or user ID to timeout (fuzzy matched)',
111
+ },
112
+ duration: {
113
+ type: 'string',
114
+ description: 'Duration of the timeout (e.g., "10m" for 10 minutes, "1h" for 1 hour, "1d" for 1 day). Use "remove" to remove timeout.',
115
+ },
116
+ reason: {
117
+ type: 'string',
118
+ description: 'The reason for the timeout (shown in audit log)',
119
+ },
120
+ },
121
+ required: ['member', 'duration'],
122
+ },
123
+ },
124
+ {
125
+ name: 'move_to_voice',
126
+ description: 'Move a member from their current voice channel to a different voice channel. The member must already be in a voice channel.',
127
+ inputSchema: {
128
+ type: 'object',
129
+ properties: {
130
+ member: {
131
+ type: 'string',
132
+ description: 'The member\'s username, display name, or user ID (fuzzy matched)',
133
+ },
134
+ channel: {
135
+ type: 'string',
136
+ description: 'The voice channel name or ID to move them to (fuzzy matched)',
137
+ },
138
+ },
139
+ required: ['member', 'channel'],
140
+ },
141
+ },
142
+ {
143
+ name: 'disconnect_from_voice',
144
+ description: 'Disconnect a member from their current voice channel.',
145
+ inputSchema: {
146
+ type: 'object',
147
+ properties: {
148
+ member: {
149
+ type: 'string',
150
+ description: 'The member\'s username, display name, or user ID (fuzzy matched)',
151
+ },
152
+ reason: {
153
+ type: 'string',
154
+ description: 'The reason for disconnecting (shown in audit log)',
155
+ },
156
+ },
157
+ required: ['member'],
158
+ },
159
+ },
160
+ {
161
+ name: 'prune_members',
162
+ description: 'Remove inactive members who have not logged in within the specified number of days. Returns the number of members pruned.',
163
+ inputSchema: {
164
+ type: 'object',
165
+ properties: {
166
+ days: {
167
+ type: 'number',
168
+ description: 'Number of days of inactivity required for pruning (1-30, default: 7)',
169
+ },
170
+ roles: {
171
+ type: 'array',
172
+ items: { type: 'string' },
173
+ description: 'Role names or IDs to include in the prune (fuzzy matched). By default only members without roles are pruned.',
174
+ },
175
+ dryRun: {
176
+ type: 'boolean',
177
+ description: 'If true, returns the count of members that would be pruned without actually pruning (default: false)',
178
+ },
179
+ reason: {
180
+ type: 'string',
181
+ description: 'The reason for pruning (shown in audit log)',
182
+ },
183
+ },
184
+ required: [],
185
+ },
186
+ },
187
+ {
188
+ name: 'bulk_assign_role',
189
+ description: 'Assign a role to multiple members at once. Member names are fuzzy-matched.',
190
+ inputSchema: {
191
+ type: 'object',
192
+ properties: {
193
+ members: {
194
+ type: 'array',
195
+ items: { type: 'string' },
196
+ description: 'Array of member usernames, display names, or user IDs (fuzzy matched)',
197
+ },
198
+ role: {
199
+ type: 'string',
200
+ description: 'The role name or ID to assign (fuzzy matched)',
201
+ },
202
+ reason: {
203
+ type: 'string',
204
+ description: 'The reason for assigning this role (shown in audit log)',
205
+ },
206
+ },
207
+ required: ['members', 'role'],
208
+ },
209
+ },
210
+ {
211
+ name: 'bulk_remove_role',
212
+ description: 'Remove a role from multiple members at once. Member names are fuzzy-matched.',
213
+ inputSchema: {
214
+ type: 'object',
215
+ properties: {
216
+ members: {
217
+ type: 'array',
218
+ items: { type: 'string' },
219
+ description: 'Array of member usernames, display names, or user IDs (fuzzy matched)',
220
+ },
221
+ role: {
222
+ type: 'string',
223
+ description: 'The role name or ID to remove (fuzzy matched)',
224
+ },
225
+ reason: {
226
+ type: 'string',
227
+ description: 'The reason for removing this role (shown in audit log)',
228
+ },
229
+ },
230
+ required: ['members', 'role'],
231
+ },
232
+ },
233
+ {
234
+ name: 'set_nickname',
235
+ description: 'Change a member\'s nickname in the server. Member name is fuzzy-matched.',
236
+ inputSchema: {
237
+ type: 'object',
238
+ properties: {
239
+ member: {
240
+ type: 'string',
241
+ description: 'The member\'s username, display name, or user ID (fuzzy matched)',
242
+ },
243
+ nickname: {
244
+ type: 'string',
245
+ description: 'The new nickname (use empty string or "reset" to remove nickname)',
246
+ },
247
+ reason: {
248
+ type: 'string',
249
+ description: 'The reason for changing the nickname (shown in audit log)',
250
+ },
251
+ },
252
+ required: ['member', 'nickname'],
253
+ },
254
+ },
255
+ ];
256
+ export async function executeMemberTool(name, args) {
257
+ switch (name) {
258
+ case 'list_members':
259
+ return await listMembers(args);
260
+ case 'get_member':
261
+ return await getMember(args);
262
+ case 'kick_member':
263
+ return await kickMember(args);
264
+ case 'ban_member':
265
+ return await banMember(args);
266
+ case 'unban_member':
267
+ return await unbanMember(args);
268
+ case 'timeout_member':
269
+ return await timeoutMember(args);
270
+ case 'prune_members':
271
+ return await pruneMembers(args);
272
+ case 'bulk_assign_role':
273
+ return await bulkAssignRole(args);
274
+ case 'bulk_remove_role':
275
+ return await bulkRemoveRole(args);
276
+ case 'move_to_voice':
277
+ return await moveToVoice(args);
278
+ case 'disconnect_from_voice':
279
+ return await disconnectFromVoice(args);
280
+ case 'set_nickname':
281
+ return await setNickname(args);
282
+ default:
283
+ throw new Error(`Unknown member tool: ${name}`);
284
+ }
285
+ }
286
+ async function listMembers(args) {
287
+ const guild = await getGuild();
288
+ const limit = Math.min(args['limit'] || 50, 1000);
289
+ const roleFilter = args['role'];
290
+ const searchQuery = args['search'];
291
+ await guild.members.fetch();
292
+ let members = [...guild.members.cache.values()];
293
+ // Filter by role using smart matching
294
+ if (roleFilter) {
295
+ try {
296
+ const role = await smartFindRole(roleFilter);
297
+ members = members.filter(m => m.roles.cache.has(role.id));
298
+ }
299
+ catch {
300
+ // If role not found, return empty list
301
+ members = [];
302
+ }
303
+ }
304
+ // Filter by search query
305
+ if (searchQuery) {
306
+ const query = searchQuery.toLowerCase();
307
+ members = members.filter(m => m.user.username.toLowerCase().includes(query) ||
308
+ m.displayName.toLowerCase().includes(query));
309
+ }
310
+ // Sort by join date and limit
311
+ members = members
312
+ .sort((a, b) => (a.joinedTimestamp ?? 0) - (b.joinedTimestamp ?? 0))
313
+ .slice(0, limit);
314
+ const memberList = members.map(m => ({
315
+ id: m.id,
316
+ username: m.user.username,
317
+ displayName: m.displayName,
318
+ isBot: m.user.bot,
319
+ joinedAt: m.joinedAt?.toISOString() ?? null,
320
+ roles: m.roles.cache
321
+ .filter(r => r.id !== guild.id)
322
+ .map(r => r.name),
323
+ isTimedOut: m.isCommunicationDisabled(),
324
+ }));
325
+ return JSON.stringify({
326
+ totalShown: memberList.length,
327
+ totalInServer: guild.memberCount,
328
+ members: memberList,
329
+ }, null, 2);
330
+ }
331
+ async function getMember(args) {
332
+ const guild = await getGuild();
333
+ const memberIdentifier = args['member'];
334
+ const member = await smartFindMember(memberIdentifier);
335
+ const info = {
336
+ id: member.id,
337
+ username: member.user.username,
338
+ displayName: member.displayName,
339
+ nickname: member.nickname,
340
+ avatar: member.displayAvatarURL(),
341
+ isBot: member.user.bot,
342
+ createdAt: member.user.createdAt.toISOString(),
343
+ joinedAt: member.joinedAt?.toISOString() ?? null,
344
+ roles: member.roles.cache
345
+ .filter(r => r.id !== guild.id)
346
+ .sort((a, b) => b.position - a.position)
347
+ .map(r => ({ id: r.id, name: r.name, color: r.hexColor })),
348
+ permissions: member.permissions.toArray(),
349
+ isOwner: member.id === guild.ownerId,
350
+ isTimedOut: member.isCommunicationDisabled(),
351
+ timeoutUntil: member.communicationDisabledUntil?.toISOString() ?? null,
352
+ premiumSince: member.premiumSince?.toISOString() ?? null,
353
+ };
354
+ return JSON.stringify(info, null, 2);
355
+ }
356
+ async function kickMember(args) {
357
+ const memberIdentifier = args['member'];
358
+ const reason = args['reason'];
359
+ const member = await smartFindMember(memberIdentifier);
360
+ if (!member.kickable) {
361
+ throw new Error(`Cannot kick "${member.displayName}" - insufficient permissions or they have higher role`);
362
+ }
363
+ const memberName = member.displayName;
364
+ await member.kick(reason ?? 'Kicked via MCP');
365
+ return JSON.stringify({
366
+ success: true,
367
+ message: `Member "${memberName}" has been kicked from the server`,
368
+ reason: reason ?? 'Kicked via MCP',
369
+ }, null, 2);
370
+ }
371
+ async function banMember(args) {
372
+ const memberIdentifier = args['member'];
373
+ const reason = args['reason'];
374
+ const deleteMessageDays = args['deleteMessageDays'] || 0;
375
+ const member = await smartFindMember(memberIdentifier);
376
+ if (!member.bannable) {
377
+ throw new Error(`Cannot ban "${member.displayName}" - insufficient permissions or they have higher role`);
378
+ }
379
+ const memberName = member.displayName;
380
+ await member.ban({
381
+ reason: reason ?? 'Banned via MCP',
382
+ deleteMessageSeconds: deleteMessageDays * 24 * 60 * 60,
383
+ });
384
+ return JSON.stringify({
385
+ success: true,
386
+ message: `Member "${memberName}" has been banned from the server`,
387
+ reason: reason ?? 'Banned via MCP',
388
+ deletedMessageDays: deleteMessageDays,
389
+ }, null, 2);
390
+ }
391
+ async function unbanMember(args) {
392
+ const guild = await getGuild();
393
+ const userIdentifier = args['user'];
394
+ const reason = args['reason'];
395
+ // Fetch bans
396
+ const bans = await guild.bans.fetch();
397
+ const ban = bans.find(b => b.user.id === userIdentifier ||
398
+ b.user.username.toLowerCase() === userIdentifier.toLowerCase() ||
399
+ b.user.tag.toLowerCase() === userIdentifier.toLowerCase());
400
+ if (!ban) {
401
+ throw new Error(`No ban found for user "${userIdentifier}"`);
402
+ }
403
+ await guild.members.unban(ban.user, reason ?? 'Unbanned via MCP');
404
+ return JSON.stringify({
405
+ success: true,
406
+ message: `User "${ban.user.username}" has been unbanned`,
407
+ user: {
408
+ id: ban.user.id,
409
+ username: ban.user.username,
410
+ },
411
+ reason: reason ?? 'Unbanned via MCP',
412
+ }, null, 2);
413
+ }
414
+ function parseDuration(duration) {
415
+ if (duration.toLowerCase() === 'remove') {
416
+ return null;
417
+ }
418
+ const match = duration.match(/^(\d+)(s|m|h|d|w)$/i);
419
+ if (!match) {
420
+ throw new Error('Invalid duration format. Use format like "10m", "1h", "1d", "1w" or "remove"');
421
+ }
422
+ const value = parseInt(match[1], 10);
423
+ const unit = match[2].toLowerCase();
424
+ const multipliers = {
425
+ s: 1000,
426
+ m: 60 * 1000,
427
+ h: 60 * 60 * 1000,
428
+ d: 24 * 60 * 60 * 1000,
429
+ w: 7 * 24 * 60 * 60 * 1000,
430
+ };
431
+ return value * multipliers[unit];
432
+ }
433
+ async function timeoutMember(args) {
434
+ const memberIdentifier = args['member'];
435
+ const duration = args['duration'];
436
+ const reason = args['reason'];
437
+ const member = await smartFindMember(memberIdentifier);
438
+ if (!member.moderatable) {
439
+ throw new Error(`Cannot timeout "${member.displayName}" - insufficient permissions or they have higher role`);
440
+ }
441
+ const durationMs = parseDuration(duration);
442
+ if (durationMs === null) {
443
+ // Remove timeout
444
+ await member.timeout(null, reason ?? 'Timeout removed via MCP');
445
+ return JSON.stringify({
446
+ success: true,
447
+ message: `Timeout removed from "${member.displayName}"`,
448
+ }, null, 2);
449
+ }
450
+ // Max timeout is 28 days
451
+ const maxTimeout = 28 * 24 * 60 * 60 * 1000;
452
+ if (durationMs > maxTimeout) {
453
+ throw new Error('Timeout duration cannot exceed 28 days');
454
+ }
455
+ await member.timeout(durationMs, reason ?? 'Timed out via MCP');
456
+ const timeoutUntil = new Date(Date.now() + durationMs);
457
+ return JSON.stringify({
458
+ success: true,
459
+ message: `Member "${member.displayName}" has been timed out`,
460
+ duration,
461
+ timeoutUntil: timeoutUntil.toISOString(),
462
+ reason: reason ?? 'Timed out via MCP',
463
+ }, null, 2);
464
+ }
465
+ async function setNickname(args) {
466
+ const memberIdentifier = args['member'];
467
+ let nickname = args['nickname'];
468
+ const reason = args['reason'];
469
+ const member = await smartFindMember(memberIdentifier);
470
+ if (!member.manageable) {
471
+ throw new Error(`Cannot change nickname for "${member.displayName}" - insufficient permissions or they have higher role`);
472
+ }
473
+ // Handle reset
474
+ const shouldReset = nickname === 'reset' || nickname === '';
475
+ const oldNickname = member.nickname;
476
+ await member.setNickname(shouldReset ? null : nickname, reason ?? 'Nickname changed via MCP');
477
+ return JSON.stringify({
478
+ success: true,
479
+ message: shouldReset
480
+ ? `Nickname reset for "${member.user.username}"`
481
+ : `Nickname for "${member.user.username}" changed to "${nickname}"`,
482
+ oldNickname,
483
+ newNickname: shouldReset ? null : nickname,
484
+ }, null, 2);
485
+ }
486
+ async function moveToVoice(args) {
487
+ const memberIdentifier = args['member'];
488
+ const channelIdentifier = args['channel'];
489
+ const member = await smartFindMember(memberIdentifier);
490
+ const channel = await smartFindChannel(channelIdentifier);
491
+ if (channel.type !== ChannelType.GuildVoice && channel.type !== ChannelType.GuildStageVoice) {
492
+ throw new Error(`"${channel.name}" is not a voice channel`);
493
+ }
494
+ if (!member.voice.channel) {
495
+ throw new Error(`"${member.displayName}" is not currently in a voice channel`);
496
+ }
497
+ const oldChannel = member.voice.channel.name;
498
+ await member.voice.setChannel(channel);
499
+ return JSON.stringify({
500
+ success: true,
501
+ message: `Moved "${member.displayName}" from "${oldChannel}" to "${channel.name}"`,
502
+ member: { id: member.id, displayName: member.displayName },
503
+ from: oldChannel,
504
+ to: channel.name,
505
+ }, null, 2);
506
+ }
507
+ async function pruneMembers(args) {
508
+ const guild = await getGuild();
509
+ const days = Math.min(Math.max(args['days'] || 7, 1), 30);
510
+ const roleNames = args['roles'];
511
+ const dryRun = args['dryRun'] ?? false;
512
+ const reason = args['reason'];
513
+ // Resolve role names to IDs
514
+ let roleIds;
515
+ if (roleNames && roleNames.length > 0) {
516
+ roleIds = [];
517
+ for (const roleName of roleNames) {
518
+ const role = await smartFindRole(roleName);
519
+ roleIds.push(role.id);
520
+ }
521
+ }
522
+ if (dryRun) {
523
+ const count = await guild.members.prune({
524
+ days,
525
+ roles: roleIds,
526
+ dry: true,
527
+ reason: reason ?? 'Prune dry run via MCP',
528
+ });
529
+ return JSON.stringify({
530
+ success: true,
531
+ dryRun: true,
532
+ message: `${count ?? 0} members would be pruned (${days} days inactive)`,
533
+ wouldPrune: count ?? 0,
534
+ days,
535
+ }, null, 2);
536
+ }
537
+ const pruned = await guild.members.prune({
538
+ days,
539
+ roles: roleIds,
540
+ reason: reason ?? 'Pruned via MCP',
541
+ });
542
+ await refreshServerCache();
543
+ return JSON.stringify({
544
+ success: true,
545
+ message: `${pruned ?? 0} members pruned (${days} days inactive)`,
546
+ pruned: pruned ?? 0,
547
+ days,
548
+ reason: reason ?? 'Pruned via MCP',
549
+ }, null, 2);
550
+ }
551
+ async function bulkAssignRole(args) {
552
+ const memberIdentifiers = args['members'];
553
+ const roleIdentifier = args['role'];
554
+ const reason = args['reason'];
555
+ const role = await smartFindRole(roleIdentifier);
556
+ const results = [];
557
+ for (const identifier of memberIdentifiers) {
558
+ try {
559
+ const member = await smartFindMember(identifier);
560
+ if (member.roles.cache.has(role.id)) {
561
+ results.push({ member: member.displayName, success: true, error: 'Already has role' });
562
+ }
563
+ else {
564
+ await member.roles.add(role, reason ?? 'Bulk assigned via MCP');
565
+ results.push({ member: member.displayName, success: true });
566
+ }
567
+ }
568
+ catch (err) {
569
+ results.push({ member: identifier, success: false, error: err.message });
570
+ }
571
+ }
572
+ const succeeded = results.filter(r => r.success).length;
573
+ const failed = results.filter(r => !r.success).length;
574
+ return JSON.stringify({
575
+ success: failed === 0,
576
+ message: `Role "${role.name}" assigned: ${succeeded} succeeded, ${failed} failed`,
577
+ role: { id: role.id, name: role.name },
578
+ results,
579
+ }, null, 2);
580
+ }
581
+ async function bulkRemoveRole(args) {
582
+ const memberIdentifiers = args['members'];
583
+ const roleIdentifier = args['role'];
584
+ const reason = args['reason'];
585
+ const role = await smartFindRole(roleIdentifier);
586
+ const results = [];
587
+ for (const identifier of memberIdentifiers) {
588
+ try {
589
+ const member = await smartFindMember(identifier);
590
+ if (!member.roles.cache.has(role.id)) {
591
+ results.push({ member: member.displayName, success: true, error: 'Does not have role' });
592
+ }
593
+ else {
594
+ await member.roles.remove(role, reason ?? 'Bulk removed via MCP');
595
+ results.push({ member: member.displayName, success: true });
596
+ }
597
+ }
598
+ catch (err) {
599
+ results.push({ member: identifier, success: false, error: err.message });
600
+ }
601
+ }
602
+ const succeeded = results.filter(r => r.success).length;
603
+ const failed = results.filter(r => !r.success).length;
604
+ return JSON.stringify({
605
+ success: failed === 0,
606
+ message: `Role "${role.name}" removed: ${succeeded} succeeded, ${failed} failed`,
607
+ role: { id: role.id, name: role.name },
608
+ results,
609
+ }, null, 2);
610
+ }
611
+ async function disconnectFromVoice(args) {
612
+ const memberIdentifier = args['member'];
613
+ const reason = args['reason'];
614
+ const member = await smartFindMember(memberIdentifier);
615
+ if (!member.voice.channel) {
616
+ throw new Error(`"${member.displayName}" is not currently in a voice channel`);
617
+ }
618
+ const channelName = member.voice.channel.name;
619
+ await member.voice.disconnect(reason ?? 'Disconnected via MCP');
620
+ return JSON.stringify({
621
+ success: true,
622
+ message: `Disconnected "${member.displayName}" from "${channelName}"`,
623
+ member: { id: member.id, displayName: member.displayName },
624
+ disconnectedFrom: channelName,
625
+ reason: reason ?? 'Disconnected via MCP',
626
+ }, null, 2);
627
+ }
628
+ //# sourceMappingURL=members.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"members.js","sourceRoot":"","sources":["../../src/tools/members.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { Tool } from '@modelcontextprotocol/sdk/types.js';
2
+ /**
3
+ * Messaging tools - with smart fuzzy matching for channel names
4
+ */
5
+ export declare const messageTools: Tool[];
6
+ export declare function executeMessageTool(name: string, args: Record<string, unknown>): Promise<string>;