首页 > 解决方案 > Audio Discord Bot 播放/暂停

问题描述

嘿,我正在使用这个开源的机器人它是响应最灵敏的机器人,用于与我的朋友搞乱并使用 Discord.js

我遇到的问题是当机器人检测到语音时,它会从头开始播放音频文件。我希望它暂停然后恢复文件,除非它到达末尾。不幸的是我不熟悉 discord.js

如果有人能帮我一把,那就太好了!

const fs = require('fs'),
{ Client, } = require('discord.js')

const { token, bypass } = require('./config.json')
const client = new Client()

let previousChannel, connection, dispather;
client
.on('ready', () => {
    console.log(`Logged in as ${client.user.tag}`)
})
.on('voiceStateUpdate', async (oldState, newState) => {
    if (newState.id == client.user.id) return
    if (newState.channelID !== null) previousChannel = newState.channelID
    if (newState.channelID == null && !bypass.includes(newState.id) && !!previousChannel) {
        client.channels.cache.get(previousChannel).leave()
        return [previousChannel, dispather] = [null, null];
    }

    if (bypass.includes(newState.id)) return
    let channel = client.channels.cache.get(newState.channelID)
    if (!channel) return

    return connection = await channel.join()
})
.on('guildMemberSpeaking', async (member, speaking) => {
    if (!connection) return
    if (bypass.includes(member.user.id)) return

    if (!dispather)
        dispather = connection.play(fs.createReadStream('./audio.mp3'), {
            volume: 1
        })
    else if (dispather && !speaking.bitfield) {
        dispather.destroy()
        dispather = undefined
    }
})
.on('error', console.log)
.on('warn', console.log)
.login(token)

process.on('unhandledRejection', console.log)

标签: javascriptaudiodiscord.jsbots

解决方案


您可以使用StreamDispatcher's.resume().pause()方法。

if (speaking.bitfield) {
    dispather.resume();
} else {
    dispather.pause();
}

如果您使用的是 Node.js v14.17.0+,可能会出现一些奇怪的错误

我还发现 LTS v14.17.0 发生了这种情况,
通过使用 v14.16 修复

此外,您可能会发现他们正在开发的 Discord.js 的新语音 API 实现很有帮助。

我们正在开发 Discord 语音 API 的新实现,它具有更好的播放质量,并且比我们目前在 Discord.js v12 中支持的更可靠。

新库解决了用户面临的许多问题,作为其中的一部分,我们将在下一个主要版本中放弃对语音的内置支持。


推荐阅读