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

Discord.js检查目标用户特定角色失败问题求助

问题分析与解决

你的问题核心出在获取用户的方式错误:interaction.options.getUser('target')拿到的是Discord的User对象,这个对象仅包含用户的全局基础信息,没有服务器内的角色数据。要检查用户在当前服务器的角色,必须获取对应服务器的GuildMember对象。

修正步骤

  1. 替换获取用户的方法:把getUser改成getMember,直接拿到服务器成员对象
  2. 增加成员存在性校验:避免目标用户不在当前服务器时触发报错
  3. 正常执行角色判断逻辑

修正后的代码

// Points remove command
if (interaction.commandName === 'points-remove') {
    const player = interaction.options.getMember('target'); // 改用getMember获取服务器成员
    const pToRemove = interaction.options.getInteger('points');
    const sqlQ = `UPDATE playerdata SET points = points - ${mysql.escape(pToRemove)} WHERE playerid = ${mysql.escape(player.id)}`;

    // 先确认成员存在,再判断角色权限
    if (player && player.roles.cache.has('1136220928666251325')) {
        con.query(sqlQ, (error, result) => {
            if (error) throw error;
            interaction.reply({ content: `${player.user} has lost ${pToRemove} successfully!`, ephemeral: true });
        });
    } else {
        interaction.reply('Cannot remove from unregistered player!');
    }
}

额外补充

如果业务场景必须先获取User对象,后续也可以通过interaction.guild.members.fetch(user.id)来拉取对应的GuildMember,但这种方式需要额外发起API请求,效率不如直接用getMember高。

内容的提问来源于stack exchange,提问作者Idoski

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 17:54:57