我正在使用最新版本的不和谐,他们删除了语音 API 的内置库。我想出了如何加入频道,但我已经尝试了很多尝试在该频道上播放音乐。
我想使用 yt-dl 下载文件,使用 discordjs/voice 进行连接和播放。
感谢任何帮助我的人。
我正在使用最新版本的不和谐,他们删除了语音 API 的内置库。我想出了如何加入频道,但我已经尝试了很多尝试在该频道上播放音乐。
我想使用 yt-dl 下载文件,使用 discordjs/voice 进行连接和播放。
感谢任何帮助我的人。
自从 Discord.js 库的相对较新更新以来,您在 Discord 语音通道中通过客户端播放音频文件或流的方式发生了很多变化。Discord 提供了一个非常有用的指南,可以在此处从基础层面向您解释很多事情,但我将对其进行压缩,并向您解释如何使其工作。
重要的是要注意,对于与您的机器人的语音通道有关的任何事情,都必须GUILD_VOICE_STATES
在您的客户端中有意图。没有它,您的机器人实际上将无法连接到语音通道,即使看起来确实如此。如果您还不知道意图是什么,请参阅同一指南中的相关页面。
此外,您将需要一些额外的库来帮助您处理和流式传输音频文件。这些东西会在后台做很多你不需要担心的事情,但是没有它们播放任何音频都将无法工作。要找出您需要的内容,您可以使用@discordjs/voicegenerateDependecyReport()
中的函数。这是解释如何使用它以及您需要哪些依赖项的页面。要使用该功能,您必须从@discordjs/voice库中导入它。
因此,一旦一切就绪,您就可以了解如何播放音频和音乐。这是从包中获取流开始的几个步骤ytdl-core
。一旦你有了这个流,你需要制作一个 AudioPlayer 并给它一个 AudioResource,它是用你得到的流构建的。这可能看起来有点复杂,但让我们分解一下。
从这个包中获取流实际上相当容易,您只需要一个要流式传输的 youtube 视频的 url 并以下列方式使用它:
const stream = ytdl(url, { filter: 'audioonly' })
这使得来自 youtube 的可读流和过滤器使得您不会浪费资源来获取视频,因为您只需要音频。
AudioPlayer 本质上是您的点唱机。您可以通过简单地调用其函数并将其存储在 const 中来创建一个,如下所示:
const player = createAudioPlayer()
这是@discordjs/voice库中的一个函数,必须像generateDependencyReport()
. 你可以给它一些参数来修改它的行为,但现在这并不重要。您可以在此处从 Discord 指南的页面上阅读更多相关信息。
要让您的 AudioPlayer 真正播放任何内容,您必须创建一个 AudioResource。这基本上是您的文件或流的一个版本,已修改为与播放器一起使用。这可以通过@discord.js/voice库中的另一个名为createAudioResource(...)
. 这必须再次导入。作为参数,您可以解析 mp3 或 webm 文件的位置,但您也可以使用已经获取的流对象。只需输入stream
该函数的参数即可。
现在播放资源还有两个步骤。首先,您必须订阅与播放器的连接。这基本上告诉连接广播您的 AudioPlayer 正在播放的任何内容。为此,只需调用对象上的.subscribe()
函数connection
,您可以从joinVoiceChannel()
用于加入频道的函数中获取该函数,并将播放器作为参数,如下所示:
const connection = joinVoiceChannel({
channelId: channel.id,
guildId: channel.guild.id,
adapterCreator: channel.guild.voiceAdapterCreator,
})
connection.subscribe(player)
player.play(resource)
您在上面看到的第二行代码是如何让播放器播放 AudioResource。只需将资源解析为参数,它就会开始播放。您可以在此处的 Discord 指南中的页面上找到有关 AudioResource 方面的更多信息。
这种方式比 V12 中的步骤多一些,但是一旦你掌握了这个系统的窍门,它就真的没有那么糟糕或困难了。