Discord.js mute命令报错:TypeError: Cannot read 'highest' of undefined
问题排查:Discord.js Mute命令 TypeError 错误
错误原因
错误触发于这一行代码:
if (message.author.roles.highest.position <= mutedMember.roles.highest.position)
message.author返回的是User对象,该对象不包含roles属性——只有GuildMember对象(用户在当前服务器的成员实例)才存储角色相关数据。你误将全局用户信息(message.author)当成了服务器成员身份(message.member)来调用roles,导致尝试读取undefined的highest属性,最终抛出TypeError。
修复方案
将message.author.roles替换为message.member.roles,修改后的代码行如下:
if (message.member.roles.highest.position <= mutedMember.roles.highest.position)
额外提示
- 明确Discord.js中
User与GuildMember的区别:User是用户的全局账号信息,GuildMember是用户在特定服务器的身份实例,包含角色、服务器昵称等专属数据。 - 后续可以在获取
mutedMember后增加缓存检查(比如判断mutedMember.roles是否存在),避免极端缓存未加载场景下的潜在问题。
内容的提问来源于stack exchange,提问作者Roman Beard
相关产品推荐
相关产品推荐

