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

Discord.js v14音乐Bot报错:client.player.createQueue不是函数的解决办法

解决Discord.js v14音乐Bot中client.player.createQueue is not a function报错

你遇到的这个报错根源是discord-player v6+版本重构了队列API,原有的createQueue和getQueue方法已被移除,替换为基于nodes的新接口。以下是具体修复步骤:

1. 确认discord-player版本

先执行命令检查当前版本:

npm list discord-player

若版本为v6.x及以上,必须使用新API适配。

2. 替换队列创建/获取逻辑

原错误代码:

const queue = await client.player.createQueue(interaction.guild)

修改为:

// 创建新队列(不存在则创建,存在则返回现有队列)
const queue = await client.player.nodes.create(interaction.guild, {
  metadata: interaction, // 绑定交互元数据,方便后续调用
  leaveOnEmpty: true, // 可选:队列空时自动离开语音频道
  leaveOnEnd: true // 可选:所有曲目播放完毕后自动离开
})

若需获取已存在的队列,替换原getQueue逻辑:

// 原代码:client.player.getQueue(interaction.guild)
const existingQueue = client.player.nodes.get(interaction.guildId)

3. 修正播放列表添加逻辑

你的代码中处理播放列表的部分存在逻辑错误:原代码将result.tracks[0]当作播放列表,实际上result.tracks是整个播放列表的曲目数组,需修改:

原错误代码:

const playlist = result.tracks[0]
await queue.addTracks(playlist)

修改为:

await queue.addTracks(result.tracks)
embed.setDescription(`Added **[${result.playlist.title}](${result.playlist.url})** (${result.tracks.length} tracks) to the queue.`)
     .setThumbnail(result.playlist.thumbnail)
     .setFooter({ text: `Total Duration: ${result.playlist.duration}` })

4. 完整修改后的核心代码片段

async execute({ client, interaction }) {
  if (!interaction.member.voice.channel) {
    await interaction.reply('You must be in a voice channel to use this command.')
    return
  }

  // 替换队列创建逻辑
  const queue = await client.player.nodes.create(interaction.guild, {
    metadata: interaction
  })

  if (!queue.connection) await queue.connect(interaction.member.voice.channel)

  const embed = new EmbedBuilder()

  if (interaction.options.getSubcommand() === 'song') {
    const url = interaction.options.getString('url')
    const result = await client.player.search(url, {
      requestedBy: interaction.user,
      searchEngine: QueryType.YOUTUBE_VIDEO,
    })

    if (result.tracks.length === 0) {
      await interaction.reply('No results found...')
      return
    }

    const song = result.tracks[0]
    await queue.addTrack(song)

    embed
      .setDescription(`Added **[${song.title}](${song.url})** to the queue.`)
      .setThumbnail(song.thumbnail)
      .setFooter({ text: `Duration: ${song.duration}` })
  } else if (interaction.options.getSubcommand() === 'playlist') {
    const url = interaction.options.getString('url')
    const result = await client.player.search(url, {
      requestedBy: interaction.user,
      searchEngine: QueryType.YOUTUBE_PLAYLIST,
    })

    if (result.tracks.length === 0) {
      await interaction.reply('No playlist found...')
      return
    }

    // 修正播放列表添加逻辑
    await queue.addTracks(result.tracks)
    embed
      .setDescription(`Added **[${result.playlist.title}](${result.playlist.url})** (${result.tracks.length} tracks) to the queue.`)
      .setThumbnail(result.playlist.thumbnail)
      .setFooter({ text: `Total Duration: ${result.playlist.duration}` })
  } else if (interaction.options.getSubcommand() === 'search') {
    const url = interaction.options.getString('searchterms')
    const result = await client.player.search(url, {
      requestedBy: interaction.user,
      searchEngine: QueryType.AUTO,
    })

    if (result.tracks.length === 0) {
      await interaction.reply('No results found...')
      return
    }

    const song = result.tracks[0]
    await queue.addTrack(song)

    embed
      .setDescription(`Added **[${song.title}](${song.url})** to the queue.`)
      .setThumbnail(song.thumbnail)
      .setFooter({ text: `Duration: ${song.duration}` })
  }

  if (!queue.playing) await queue.play()

  await interaction.reply({
    embeds: [embed],
  })
}

额外注意事项

  • 确保Bot入口文件正确初始化discord-player:
const { Player } = require('discord-player')
// 在client初始化后执行:
client.player = new Player(client, {
  ytdlOptions: {
    quality: 'highestaudio',
    highWaterMark: 1 << 25
  }
})
  • 若使用Spotify等其他音频源,需额外安装对应扩展包(如@discord-player/extractor)并完成注册。

内容的提问来源于stack exchange,提问作者Neonz.dev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 23:35:39