You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 13:18:05