请求编写Discord服务器解封所有用户的JS命令,用于Ban Royale活动
解封Discord服务器所有用户的JS命令(适用于Ban Royale活动)
嘿,我懂你在Ban Royale活动结束后需要快速批量解封用户的需求——折腾完这类活动确实得赶紧让服务器回到正常状态对吧?下面给你一个基于Discord.js v14的实现方案,先把前提条件理清楚:
- 你的机器人必须拥有管理员权限(至少得有
BanMembers权限,毕竟解封操作需要这个权限支撑) - 确保你使用的是Discord.js v14版本(如果是v13或更早版本,我会在后面提语法调整点)
完整代码实现
const { Client, GatewayIntentBits } = require('discord.js'); // 初始化机器人客户端,必须开启Guilds和GuildMembers意图 const client = new Client({ intents: [ GatewayIntentBits.Guilds, GatewayIntentBits.GuildMembers ] }); // 机器人登录成功后的提示 client.on('ready', () => { console.log(`已登录为 ${client.user.tag}!`); }); // 前缀式命令实现(你也可以改成斜杠命令,核心逻辑一致) client.on('messageCreate', async (message) => { // 跳过机器人消息,只响应!unbanall命令 if (message.author.bot || !message.content.startsWith('!unbanall')) return; // 检查发命令的用户是否有管理员权限 if (!message.member.permissions.has('Administrator')) { return message.reply('你没有权限执行这个命令哦!'); } try { // 获取服务器所有被封禁的用户列表 const bans = await message.guild.bans.fetch(); if (bans.size === 0) { return message.reply('当前服务器没有被封禁的用户呀!'); } // 并行批量解封(效率高,但人数多可能触发限流) await Promise.all( bans.map(async (ban) => { await message.guild.members.unban(ban.user.id, 'Ban Royale活动后批量解封'); console.log(`已解封用户:${ban.user.tag}`); }) ); message.reply(`已成功解封所有 ${bans.size} 名被封禁用户!`); } catch (error) { console.error('解封过程中出错:', error); message.reply('解封时出现错误,请查看控制台日志排查问题!'); } }); // 替换成你的机器人Token client.login('你的机器人Token');
重要注意事项
- 务必谨慎执行! 这个命令会解封所有被封禁的用户,包括那些因严重违规被永久封禁的账号,一定要确认是Ban Royale活动后的清理需求再运行
- 如果用的是Discord.js v13,把
GatewayIntentBits换成Intents.FLAGS,比如Intents.FLAGS.GUILDS和Intents.FLAGS.GUILD_MEMBERS - 服务器人数较多时,并行解封可能触发Discord的速率限制,你可以改成串行处理避免限流:
// 串行解封的替代代码(替换原Promise.all部分) let successCount = 0; for (const ban of bans.values()) { try { await message.guild.members.unban(ban.user.id, 'Ban Royale活动后批量解封'); successCount++; console.log(`已解封用户:${ban.user.tag}`); // 每次解封后等待1秒,降低限流风险 await new Promise(resolve => setTimeout(resolve, 1000)); } catch (err) { console.error(`解封用户${ban.user.tag}失败:`, err); } } message.reply(`已成功解封 ${successCount} 名用户,部分用户可能解封失败,请查看控制台日志!`); - 如果想用更规范的斜杠命令(Slash Command),只需要把
messageCreate事件的逻辑改成斜杠命令的注册与响应即可,核心的获取封禁列表、解封用户的代码完全通用
内容的提问来源于stack exchange,提问作者Dark Zero
相关产品推荐
相关产品推荐

