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

为什么我开发的discord.js音乐播放play命令持续报错?

代码错误点及修正方案

你提交的代码存在以下几处可直接导致运行报错的问题:

  • 导出语法错误:module.export 应为 module.exports,末尾缺失的s会导致命令文件无法被正常加载识别
  • 异步语法错误:execute 函数内部使用了 await 关键字,但函数本身没有标记为异步,需改为 async execute(message, args)
  • 废弃属性调用:如果使用的是discord.js v12及以上版本,message.member.voiceChannel 已经被官方废弃,需替换为 message.member.voice.channel
  • 搜索逻辑错误:视频搜索结果判断逻辑写为 videoResult.videos.length > 1,会导致仅返回1条匹配结果时直接输出null,需改为 videoResult.videos.length >= 1
修正后完整代码
const ytdl = require("ytdl-core");
const ytSearch = require("yt-search");

module.exports = {
  name: "play",
  description: "加入语音频道并播放YouTube视频",
  async execute(message, args) {
    const voiceChannel = message.member.voice.channel;

    if (!voiceChannel)
      return message.channel.send("你需要加入一个语音频道才能使用该命令");
    const permissions = voiceChannel.permissionsFor(message.client.user);
    if (!permissions.has("CONNECT"))
      return message.channel.send("我没有加入该语音频道的权限");
    if (!permissions.has("SPEAK"))
      return message.channel.send("我没有在该语音频道发言的权限");
    if (!args.length)
      return message.channel.send("你需要指定要播放的视频关键词或链接");

    const connection = await voiceChannel.join();

    const videoFinder = async (query) => {
      const videoResult = await ytSearch(query);
      return videoResult.videos.length >= 1 ? videoResult.videos[0] : null;
    };

    const video = await videoFinder(args.join(" "));

    if (video) {
      const stream = ytdl(video.url, { filter: "audioonly" });
      const dispatcher = connection.play(stream, { seek: 0, volume: 1 });
      // 播放结束后自动离开频道
      dispatcher.on("finish", () => {
        voiceChannel.leave();
      });
      await message.reply(`现在正在播放:*${video.title}*`)
    } else {
      await message.channel.send("没有找到匹配的视频内容")
    }
  },
};
额外注意事项
  • 使用前请确保已经安装全部依赖:ytdl-core、yt-search、@discordjs/opus(语音编码必须依赖)
  • 若使用discord.js v14及以上版本,语音相关功能需额外安装@discordjs/voice组件,原有语音接口已全部重构

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 07:54:08