如何编写discord.js全员封禁命令?现有代码无法运行求解决
Discord全员封禁命令实现修复
原有代码问题
- 语法结构错误:
forEach未传入合法回调函数,代码缺少闭合的花括号,执行逻辑写在了forEach的参数位之外 - 调用属性错误:
message.guild.member是无效属性,ban方法只能针对单个成员实例调用 - 成员拉取不全:仅访问
members.cache默认只会拉取部分缓存的成员,无法覆盖全量服务器用户 - 缺少权限校验:未判断命令触发者和机器人自身是否持有「封禁成员」权限,容易触发接口报错
修复后代码
// discord.js v14+ 版本适用,低版本适配方案见下方说明 client.on('messageCreate', async (message) => { // 只响应!test命令 if (message.content !== '!test') return // 校验命令发送者权限 if (!message.member.permissions.has('BanMembers')) return message.reply('你没有封禁成员权限') // 校验机器人自身权限 if (!message.guild.members.me.permissions.has('BanMembers')) return message.reply('机器人没有封禁成员权限') try { // 拉取全量服务器成员 const allMembers = await message.guild.members.fetch() // 遍历执行封禁 allMembers.forEach(async (member) => { // 可按需开启排除逻辑,比如排除服务器所有者、机器人自己,避免操作后无法管理 // if(member.id === message.guild.ownerId || member.id === client.user.id) return await member.ban({ reason: '教学测试封禁' }).catch(err => console.log(`封禁${member.user.tag}失败:`, err)) }) message.reply('封禁指令已执行') } catch (err) { console.log('执行失败:', err) message.reply('指令执行出错') } })
补充说明
注意:本代码仅用于合法教学测试场景,请勿在未获得服务器所有人授权的公共服务器内使用,滥用Discord API进行恶意操作会导致账号和机器人被官方封禁。
如果你使用的是v12及以下版本的discord.js,将messageCreate事件改回message,权限字段改为BAN_MEMBERS即可正常运行。
内容的提问来源于stack exchange,提问作者IDEC
相关产品推荐
相关产品推荐

