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

Discord Bot语音播放器执行stop指令无法停止问题求助

问题原因

你的代码存在4个核心问题导致stop指令失效:

  • stop指令的判断逻辑被嵌套在play baka radio的判断分支内部,只有发送内容完全匹配play baka radio时才会执行stop判断,单独发送stop消息根本进不到对应逻辑。
  • player和语音连接connection是play分支内的局部变量,每次触发play都会生成新的实例,stop逻辑既拿不到正在运行的播放器实例,也不会被独立触发。
  • player.stop()方法不需要传入resource参数,传入参数属于无效用法。
  • 代码里message.channel.send(...) + player.play(resource)的写法存在语法错误,加号在这里没有任何实际逻辑作用,两个操作应该独立执行。
修复方案

你需要将语音连接、播放器实例按服务器维度做持久化存储,把stop指令的判断逻辑移到play分支外部独立执行,修正语法错误和错误的API调用。参考修复代码如下:

// 放在messageCreate事件监听外部,按服务器ID存储对应语音实例
const guildVoiceMap = new Map()

client.on('messageCreate', async (message) => {
  const msgContent = message.content?.toLowerCase().trim()
  if (!msgContent) return

  // 播放指令逻辑
  if (msgContent === 'play baka radio') {
    if (!message.member.voice?.channel) return message.channel.send('你需要先加入语音频道才能执行这个命令')
    
    const guildId = message.guildId
    // 存在旧播放实例时先清理,避免重复创建连接
    if (guildVoiceMap.has(guildId)) {
      const oldIns = guildVoiceMap.get(guildId)
      oldIns.player.stop()
      oldIns.connection.destroy()
    }

    const connection = joinVoiceChannel({
      channelId: message.member.voice.channelId,
      guildId: guildId,
      adapterCreator: message.guild.voiceAdapterCreator
    })
    const player = createAudioPlayer()
    const resource = createAudioResource('https://nrf1.newradio.it:10328/alfaanime')
    connection.subscribe(player)

    // 存储当前服务器的语音实例
    guildVoiceMap.set(guildId, { connection, player })
    // 分开执行两个操作,移除错误的加号拼接
    message.channel.send({ content: "正在播放", embeds: [embed2], files: ['./logo/bkrlogo.png'] })
    player.play(resource)
  }

  // 停止指令逻辑,独立于播放分支判断
  if (msgContent === 'stop') {
    const guildId = message.guildId
    const currentIns = guildVoiceMap.get(guildId)
    if (!currentIns) return message.channel.send('当前没有正在运行的语音播放任务')

    // stop方法无需传参
    currentIns.player.stop()
    currentIns.connection.destroy()
    guildVoiceMap.delete(guildId)
    message.channel.send('已停止播放并退出语音频道')
  }
})
补充说明

如果需要更稳定的运行效果,可以给player添加idle、error事件监听,在播放结束、出现异常时自动销毁连接、清理Map里存储的实例,避免内存泄漏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 10:30:39