Discord机器人Ban命令崩溃:permissions未定义错误求助
Discord机器人Ban命令崩溃问题修复
你遇到的崩溃报错「Cannot read properties of undefined, reading 'permissions'」,核心原因是代码里错误使用了不存在的message.auth属性。
具体错误点
message对象中并没有auth这个属性,你原本想检查命令使用者的权限,但错误地引用了一个不存在的对象,导致读取permissions时触发未定义错误。
修复步骤
- 修正权限检查代码
将原来的:
const auth = message.author.id const permission = message.auth.permissions.has("BanMembers")
替换为:
const hasPermission = message.member.permissions.has("BanMembers")
message.member才是当前用户在服务器中的成员实例,包含其服务器内的权限信息,而message.author只是全局用户对象,不关联服务器权限。
- 修复其他细节问题
- 权限回复里的
contents拼写错误,应该改为content member变量未声明,添加const变为局部变量,避免全局污染- 最后异步操作的拼接写法错误,
member.ban()是异步方法,需要用await正确处理,再执行回复逻辑
修复后的完整代码
else if(message.content.startsWith("s!ban")){ const user = message.author.username console.log(`${user} used s!ban`) const args = message.content.split(" ") const member = message.mentions.members.first() const hasPermission = message.member.permissions.has("BanMembers") if (!hasPermission) return message.reply({ content: "You don't have permission to use this command" }); if (!args[1]) return message.reply(`Please specify someone to ban!`); if (!member) return message.reply(`Sorry, I couldnt find that user!`); if (member.id === message.author.id) return message.reply({ content: `You cant ban yourself silly!` }); if (message.member.roles.highest.position < member.roles.highest.position) return message.reply({ content: `You cant ban a user who has a higher role than you silly!` }); if (!member.bannable) return message.reply({ content: `Sorry, I cant ban that member`}); await member.ban(); const replyMessage = await message.reply({ content: `${member} has been banned successfully!` }); setTimeout(() => replyMessage.delete(), 5000); }
内容的提问来源于stack exchange,提问作者user21484220
相关产品推荐
相关产品推荐

