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

开发Discord音乐机器人:检查用户与机器人同频道时遇TypeError报错

解决Discord音乐机器人语音频道校验错误

错误原因

你碰到的TypeError: Cannot read properties of undefined (reading 'find'),核心问题在于:

  • 新版discord.js(v14+)中client.voice.connections的结构已变更,直接调用find方法会触发未定义报错;
  • 全局遍历所有语音连接的方式既低效又容易出错,应该针对当前服务器(Guild)定位机器人的语音状态。

正确实现代码

要实现“仅允许同频道用户执行跳过歌曲等操作”的需求,用以下代码替代原有逻辑:

// 先检查用户是否在语音频道
if (!interaction.member.voice.channel) {
    return interaction.reply('❌ 请先加入一个语音频道!');
}

// 获取机器人在当前服务器的语音频道
const botVoiceChannel = interaction.guild.members.me.voice.channel;

// 校验机器人是否在频道,且和用户同频道
if (!botVoiceChannel || botVoiceChannel.id !== interaction.member.voice.channel.id) {
    return interaction.reply('❌ 你必须和机器人处于同一个语音频道才能执行此操作!');
}

// 后续的跳过歌曲等操作代码...

如果使用的是discord-player v6+版本,也可以通过队列实例直接校验:

const queue = player.getQueue(interaction.guildId);
if (!queue || queue.connection.channel.id !== interaction.member.voice.channel.id) {
    return interaction.reply('❌ 你必须和机器人处于同一个语音频道才能执行此操作!');
}

代码说明

  1. 先校验用户的语音状态,避免后续读取voice.channel时出现未定义错误;
  2. 通过interaction.guild锁定当前服务器,只检查该服务器内机器人的语音频道,逻辑更精准;
  3. 双重校验确保机器人处于语音频道,且与用户频道一致,符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 08:02:17