Discord.js中.getMember()与.getUser()返回null的问题求助
Discord.js斜杠命令中getMember()和getUser()返回null的解决方法
问题场景
我开发了一个Discord.js机器人,其中定义了removerole斜杠命令,代码如下:
const { SlashCommandBuilder } = require("discord.js"); module.exports = { data: new SlashCommandBuilder() .setName('removerole') .setDescription("Remove a role from a user. Officer use only.") .addUserOption(option => option.setName('target') .setDescription("The user whose role should be removed.") .setRequired(true)) .addChannelOption(option => option.setName('gamechannel') .setDescription("The channel that is associated with the role to be removed.") .setRequired(true)), async execute(interaction) { await interaction.deferReply({ ephemeral: true }); //collect member const member = interaction.options.getMember('target'); console.log(`member is ${member}`); console.log(`user is ${interaction.options.getUser('target')}`); //rest of function... } }
执行命令后控制台输出:
member is null user is null
后续依赖这些变量的代码因读取null值报错,即使已将斜杠命令选项设为必填,getMember()和getUser()仍返回null。
原因分析
出现这个问题的核心原因是机器人未启用Guild Members意图权限。Discord的API要求机器人必须明确申请并启用该意图,才能获取服务器成员和用户的相关数据,否则无法正确读取interaction.options中的用户/成员对象。
解决方案
需要分两步完成配置:
在Discord开发者门户启用Guild Members意图
- 登录Discord开发者平台,进入你的机器人应用页面
- 切换到「Bot」标签页
- 在「Privileged Gateway Intents」区域,找到「Server Members Intent」并开启它
在机器人客户端初始化时添加对应的意图
修改机器人登录的代码,在Client实例化时包含GatewayIntentBits.GuildMembers:const { Client, GatewayIntentBits } = require('discord.js'); const client = new Client({ intents: [ GatewayIntentBits.Guilds, // 基础服务器意图,通常已存在 GatewayIntentBits.GuildMembers // 添加这个意图 // 其他你需要的意图... ] });
完成以上两步后,重新启动机器人,getMember()和getUser()就能正常返回对应的对象了。
内容的提问来源于stack exchange,提问作者CombustibleToast
相关产品推荐
相关产品推荐

