如何制作 Discord 音乐机器人
本页内容
音乐机器人是一种加入语音频道并播放音频的 Discord 机器人。机器人部分——命令、播放队列、“正在播放”消息——就是普通的机器人代码。难点在于音频:获取曲目、对其编码,并流畅无卡顿地推流到语音频道。
本指南介绍处理音频的两种方式、哪些库在 Discord 2026 年语音变更后仍然可用,以及音乐机器人可以播放和不可以播放的内容。如果你从未做过机器人,请先阅读如何制作 Discord 机器人。
首先:Discord 的加密语音(DAVE)
自 2026 年 3 月 1 日起,Discord 只允许通过名为 DAVE 的协议进行端到端加密的语音通话。基于不支持该协议的库构建的机器人将完全无法加入语音频道。这就是许多旧的音乐机器人教程和代码仓库失效的原因。
开始之前,请确认你的技术栈足够新:
| 库 | 支持 DAVE 的起始版本 |
|---|---|
| discord.py | 2.7.0,以 discord.py[voice] 安装 |
| @discordjs/voice | 0.19,需要 Node.js 22.12 或更高版本 |
| Lavalink 服务器 | 4.2.0 |
| discord-player | 7.2.0 |
播放音频的两种方式:Lavalink 或 FFmpeg
| Lavalink | 机器人内置 FFmpeg | |
|---|---|---|
| 工作原理 | 由独立的音频服务器推流音乐,机器人向它发送命令 | 机器人自己用 FFmpeg 解码并推流音频 |
| 机器人需要 | 一个 Lavalink 客户端库 | 在机器人旁安装 FFmpeg 和 Opus |
| 可扩展到 | 同时服务很多服务器;一个 Lavalink 可供多个机器人使用 | 少数几个服务器,之后机器人的 CPU 就会成为瓶颈 |
| 适合 | 任何你预计会发展壮大的机器人 | 学习,或只用于一个服务器的机器人 |
大多数公开的音乐机器人都使用 Lavalink。FFmpeg 入门更简单,因为只需运行一个程序。
仍在维护的 Lavalink 客户端库
以下客户端都在 Lavalink 的官方列表中,并在 2026 年发布了适配上述语音变更的版本:
- JavaScript (discord.js): lavalink-client, Shoukaku, Riffy, Moonlink.js
- Python (discord.py): Wavelink, lavalink.py, mafic, pomice
- C#: Lavalink4NET
- Java (JDA): Lavalink-Client
每个客户端都通过主机、端口和密码连接到 Lavalink 服务器,然后为你的机器人提供搜索、播放、跳过和音量等命令。服务器本身的搭建请参阅如何托管 Lavalink 服务器。
JavaScript 中还有 discord-player,它在机器人内部处理音频。其当前版本已不再支持 YouTube;它通过其他来源播放 SoundCloud、Vimeo、附件以及 Spotify 或 Apple Music 链接。
FFmpeg 方式,几行代码搞定
要验证语音功能,请播放一个你拥有版权的文件。在 Python 中,安装语音扩展,并确保系统中有 ffmpeg:
pip install "discord.py[voice]"
然后在斜杠命令中加入调用者所在的频道并播放本地文件:
channel = interaction.user.voice.channel
voice = await channel.connect()
voice.play(discord.FFmpegPCMAudio("song.mp3"))
await interaction.response.send_message("Playing.")
在 JavaScript 中,对应的是 @discordjs/voice 配合 @discordjs/opus 和 FFmpeg。真正的机器人还会加入播放队列、跳过和停止命令,并在频道无人时自动离开。
音乐机器人可以播放什么
这是大多数音乐机器人惹上麻烦的地方,所以在动手之前务必弄清楚:
- YouTube 的条款不允许未经许可下载或转播其内容,也不允许绕过其保护措施。一些大型音乐机器人正是因此被关停。
- Discord 的社区准则禁止分享侵犯任何人知识产权的内容,机器人的所有者要对机器人的行为负责。
- 更安全的来源:你拥有或已获得授权的音乐、免版税和 Creative Commons 曲库、允许转播的网络电台,以及成员上传且有权分享的文件。
Lavalink 及其插件在技术上可以从许多网站播放;你是否被允许这么做是另一个问题,需要由你自己来回答。
托管音乐机器人
音乐机器人需要保持在线,并在推流时维持稳定的连接,而连接 Wi-Fi 的家用电脑很难长期做到这一点。在 HytHost Discord 机器人托管上:
- 机器人运行在你下单时选择的 Node.js、Python、Java、Go、C# 或 Bun 运行时上。
- Lavalink 是一个独立的运行时。它作为单独的服务器运行:为机器人订购一个方案,再订购一个使用 Lavalink 运行时的方案;或者在拥有多个机器人槽位的方案上,请我们把其中一个转为 Lavalink。
- 将机器人的 Lavalink 客户端指向 Lavalink 服务器的地址、端口和密码,这些信息显示在其面板中。
如何让机器人本身保持在线、自动重启并安全存放令牌,请参阅如何 24/7 托管 Discord 机器人。
在 HytHost Discord 机器人托管上运行机器人及其 Lavalink 服务器——支持 Node.js、Python、Java、Lavalink 等,€0.89/月起。
查看机器人托管方案常见问题
很可能是 Discord 的加密语音导致的。自 2026 年 3 月 1 日起,只有支持 DAVE 协议的客户端才能加入语音通话。请升级到 discord.py 2.7、@discordjs/voice 0.19 或 Lavalink 4.2 及更高版本,并使用最新的 Lavalink 客户端。
不需要。小型机器人可以直接用 FFmpeg 推流。当机器人同时在多个服务器播放时,Lavalink 就很值得使用,因为它能把音频处理工作从机器人身上卸下。
技术上有些工具仍然可以,但 YouTube 的条款不允许未经许可下载或转播其内容,而且这些工具经常失效。播放你拥有或已获授权的音乐才是安全的选择。
使用 discord.js 时,选择 lavalink-client 或 Shoukaku 等 Lavalink 客户端;使用 discord.py 时,选择 Wavelink 或 lavalink.py。请挑选在 2026 年有发布版本的库,以确保它支持 Discord 的加密语音。
机器人本身很轻量,耗资源的是音频处理。使用 Lavalink 时,小型机器人可给 Lavalink 服务器大约 1 GB(我们的建议),机器人则按不播放音乐时的需求分配即可。
这篇指南对你有帮助吗?