音频 Discord Bot 播放/暂停

时间:2021-07-26 19:43:27

标签: javascript audio discord.js bots

嘿,我正在使用这个开源机器人,它是响应最快的机器人,用于与我的朋友搞乱并使用 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)

1 个答案:

答案 0 :(得分:0)

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

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

如果您使用的是 Node.js v14.17.0+,可能会出现一些 weird bugs

<块引用>

我也发现 LTS v14.17.0 发生了这种情况
使用 v14.16 修复

您也可能会发现 Discord.js 的 new Voice API implementation 他们正在开发中很有帮助。

<块引用>

我们正在努力实现 Discord 的 Voice API 的新实现,该实现具有更好的播放质量并且比我们目前在 Discord.js v12 中支持的更可靠。

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