Discord.js检查目标用户特定角色失败问题求助
问题分析与解决
你的问题核心出在获取用户的方式错误:interaction.options.getUser('target')拿到的是Discord的User对象,这个对象仅包含用户的全局基础信息,没有服务器内的角色数据。要检查用户在当前服务器的角色,必须获取对应服务器的GuildMember对象。
修正步骤
- 替换获取用户的方法:把
getUser改成getMember,直接拿到服务器成员对象 - 增加成员存在性校验:避免目标用户不在当前服务器时触发报错
- 正常执行角色判断逻辑
修正后的代码
// 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
相关产品推荐
相关产品推荐

