0

我正在使用最新版本的不和谐,他们删除了语音 API 的内置库。我想出了如何加入频道,但我已经尝试了很多尝试在该频道上播放音乐。

我想使用 yt-dl 下载文件,使用 discordjs/voice 进行连接和播放。

感谢任何帮助我的人。

4

1 回答 1

0

Discord.js V13 和 @discordjs/voice

自从 Discord.js 库的相对较新更新以来,您在 Discord 语音通道中通过客户端播放音频文件或流的方式发生了很多变化。Discord 提供了一个非常有用的指南,可以在此处从基础层面向您解释很多事情,但我将对其进行压缩,并向您解释如何使其工作。

一些先决条件

重要的是要注意,对于与您的机器人的语音通道有关的任何事情,都必须GUILD_VOICE_STATES在您的客户端中有意图。没有它,您的机器人实际上将无法连接到语音通道,即使看起来确实如此。如果您还不知道意图是什么,请参阅同一指南中相关页面。

此外,您将需要一些额外的库来帮助您处理和流式传输音频文件。这些东西会在后台做很多你不需要担心的事情,但是没有它们播放任何音频都将无法工作。要找出您需要的内容,您可以使用@discordjs/voicegenerateDependecyReport()中的函数。是解释如何使用它以及您需要哪些依赖项的页面。要使用该功能,您必须从@discordjs/voice库中导入它。

通过客户端播放音频

因此,一旦一切就绪,您就可以了解如何播放音频和音乐。这是从包中获取流开始的几个步骤ytdl-core。一旦你有了这个流,你需要制作一个 AudioPlayer 并给它一个 AudioResource,它是用你得到的流构建的。这可能看起来有点复杂,但让我们分解一下。

ytdl-核心

从这个包中获取流实际上相当容易,您只需要一个要流式传输的 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 中的步骤多一些,但是一旦你掌握了这个系统的窍门,它就真的没有那么糟糕或困难了。

于 2021-09-29T12:39:07.073 回答