discord.js检测用户是否拥有指定角色时报has属性未定义如何修复
问题修复方案
报错根因
你代码中用于角色检查的check变量取值为message.mentions.users.first(),拿到的是全局User对象,该对象不存储服务器成员的角色数据,没有roles属性,因此调用check.roles.has时会因为check.roles为undefined抛出对应错误。
修复调整点
- 删除冗余的
check变量,直接使用你已经获取到的服务器成员对象memberTarget做角色检查 - discord.js v12及以上版本中,成员角色集合存放在
roles.cache下,需要通过memberTarget.roles.cache.has()判断角色持有状态 - 补充
gulagRole存在性校验,避免服务器未创建对应角色时触发报错 - 修正权限校验位错误:管理员权限枚举值为
ADMINISTRATOR,原代码多写了后缀s会导致权限判断失效
修复后完整代码
const { Role, ThreadManager } = require("discord.js"); const ms = require('ms'); module.exports = { name: 'gulag', description: "gulag", execute(message, args) { // 修正权限枚举值 if (message.member.permissions.has("ADMINISTRATOR")) { const target = message.mentions.users.first(); if (target) { let gulagRole = message.guild.roles.cache.find(role => role.name === 'gulag'); // 补充角色存在判断 if (!gulagRole) { return message.reply("服务器未找到gulag角色,请先创建对应角色"); } let memberTarget = message.guild.members.cache.get(target.id); // 修正角色检查逻辑 if (memberTarget.roles.cache.has(gulagRole.id)) { message.reply(`<@${memberTarget.user.id}> 已经在gulag中了。`) } else { memberTarget.roles.add(gulagRole.id); message.channel.send(`<@${memberTarget.user.id}>`); message.channel.send('https://tenor.com/view/gulag-warzone-call-of-duty-cod-battle-royale-gif-16853559'); } } } } }
内容的提问来源于stack exchange,提问作者Bolt
相关产品推荐
相关产品推荐

