Discord.js 解封命令报错:TypeError: message.author.hasPermission非函数
问题修复方案
核心错误原因
message.author是Discord.js中的User对象,该对象没有hasPermission方法——权限是用户在服务器内的身份属性,对应的是Member对象(即message.member),这就是你触发TypeError: message.author.hasPermission is not a function报错的根本原因。
其他逻辑错误&修复点
除核心报错外,代码还有几处逻辑颠倒的问题,一并修正:
- 权限判断逻辑颠倒:原代码是用户有权限时返回错误,应改为用户无权限时提示
- 参数检查逻辑颠倒:原代码是有参数时提示需提供ID,应改为未传参数时提示
- 默认理由赋值颠倒:原代码是有理由时设为默认值,应改为无理由时用默认值
- 机器人权限判断颠倒:原代码是机器人有权限时返回错误,应改为机器人无权限时提示
修复后的完整代码
if (message.content.startsWith('L!unban')) { // 检查用户是否有解封权限(使用message.member而非message.author) if (!message.member.hasPermission(["BAN_MEMBERS"])) { return message.channel.send("You do not have the required permissions to use the unban command."); } // 检查是否传入了用户ID if (!args[0]) { return message.channel.send("Provide me a valid USER ID."); } let bannedMember; try { bannedMember = await bot.users.cache.fetch(args[0]); } catch (e) { if (!bannedMember) { return message.channel.send("That's not a valid USER ID."); } } // 检查用户是否被封禁 try { await message.guild.fetchBan(args[0]); } catch (e) { message.channel.send('This user is not banned.'); return; } // 处理解封理由 let reason = args.slice(1).join(" "); if (!reason) { reason = "No reason provided."; } // 检查机器人是否有解封权限 if (!message.guild.me.hasPermission(["BAN_MEMBERS"])) { return message.channel.send("I am missing permissions to unban."); } message.delete(); try { await message.guild.members.unban(bannedMember, { reason: reason }); message.channel.send(`${bannedMember.tag} has been unbanned.`); } catch (e) { console.log(e.message); } }
内容的提问来源于stack exchange,提问作者FBILOLIGIRL
相关产品推荐
相关产品推荐

