You need to enable JavaScript to run this app. Discord.js斜杠命令报错:Cannot read property 'voice' of undefined
优惠活动
大模型
产品
解决方案
定价
更多

Discord.js斜杠命令报错:Cannot read property 'voice' of undefined

TypeError: Cannot read property 'voice' of undefined 问题解决方案

报错原因

该错误触发的核心是interaction.member返回了undefined,你尝试读取不存在对象的voice属性才会抛出异常。interaction.member不存在的常见场景有两个:

  • 触发斜杠命令的场景是Discord私信(DM)频道,只有在服务器(Guild)内触发的交互才会携带member属性,私信场景仅会携带user属性,不存在member字段
  • 客户端连接网关时未开启必要的意图(Intent),导致服务器没有返回member和语音状态相关的字段

解决方案

按以下顺序排查修复:

  1. 优先增加场景判断,过滤非服务器内的交互请求,同时使用可选链避免运行时报错
client.ws.on('INTERACTION_CREATE', async (interaction) => {
  // 新增校验逻辑
  if (!interaction.guild_id || !interaction.member) {
    // 可根据业务需求返回对应的用户提示
    return;
  }
  // 用可选链避免用户未加入语音频道时的二次报错
  const memberVoice = interaction.member?.voice?.channel;
  if (!memberVoice) {
    // 可提示用户先加入语音频道后再执行命令
    return;
  }
  // 原有业务逻辑
})
  1. 检查网关连接时的意图配置,必须开启以下两个核心意图才能拿到对应字段:
  • GUILD_MEMBERS(服务器成员相关权限)
  • GUILD_VOICE_STATES(语音状态相关权限)

如果使用discord.js库,初始化配置参考如下:

const { Client, GatewayIntentBits } = require('discord.js');
const client = new Client({
  intents: [
    GatewayIntentBits.Guilds,
    GatewayIntentBits.GuildMembers,
    GatewayIntentBits.GuildVoiceStates,
    // 其他业务需要的意图
  ]
});

如果是直接调用原生网关接口,需要在连接参数的intents字段中累加上述两个意图的枚举值。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 14:15:03