javascript - 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)
解决方案
您可以使用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 中支持的更可靠。
新库解决了用户面临的许多问题,作为其中的一部分,我们将在下一个主要版本中放弃对语音的内置支持。
推荐阅读
- presto - 尽管有双引号,但当键是保留关键字时,AWS Athena 行转换失败
- c# - 尝试使用 C# .NET Framework 以编程方式登录网站,但它只返回登录页面
- javascript - 有什么办法可以纠正这种失真?(三个 JS)
- c# - 在另一个列表中创建按顺序排序的排序列表
- json - 从 vb.net 中的 httpwebrequest 获取 Json 响应
- java - 如何在不移动另一个应用程序的情况下使用意图共享
- python - fetchone 只返回我表中的最后一项?
- c++ - 如何使用多维数组映射原始缓冲区?
- arrays - 如何实现计数排序以在 C 中对 char 数组进行排序?
- amazon-web-services - docker 最适合生产环境吗?