如何让Discord bot新增Spotify平台音乐播放功能
Discord Bot新增Spotify音乐播放功能操作步骤
1. 环境与凭证准备
- 首先注册Spotify开发者账号,创建应用后获取对应的
Client ID和Client Secret,这两个是调用Spotify API的必要凭证 - 安装需要的依赖包:
pip install spotipy python-dotenv pynacl
注:pynacl是discord.py/nextcord等框架实现语音播放的必要依赖,如果你之前已经安装可以跳过
2. 初始化Spotipy客户端
在你的bot代码中新增Spotipy初始化逻辑,建议用环境变量存储敏感凭证,避免硬编码泄露:
import os import spotipy from spotipy.oauth2 import SpotifyClientCredentials from dotenv import load_dotenv # 加载.env文件中的环境变量 load_dotenv() # 初始化spotipy客户端 sp = spotipy.Spotify(auth_manager=SpotifyClientCredentials( client_id=os.getenv("SPOTIFY_CLIENT_ID"), client_secret=os.getenv("SPOTIFY_CLIENT_SECRET") ))
你需要在项目根目录新建.env文件,写入两行内容:
SPOTIFY_CLIENT_ID=你申请的Client ID SPOTIFY_CLIENT_SECRET=你申请的Client Secret
3. 处理Spotify链接请求
因为Spotify官方不对外提供可直接播放的音频流,新手最稳妥的实现方式是:用Spotipy获取Spotify链接对应的歌曲/专辑/播放列表的曲目信息,复用你原有逻辑去YouTube搜索对应资源进行播放,不需要改动原有播放模块。
示例逻辑如下:
def get_spotify_track_info(url): # 提取Spotify单曲ID track_id = url.split("/track/")[1].split("?")[0] # 调用API获取曲目信息 track = sp.track(track_id) # 拼接搜索关键词:歌名 + 歌手 search_keyword = f"{track['name']} {track['artists'][0]['name']}" return search_keyword
如果需要支持专辑、播放列表,对应调用sp.album_tracks()、sp.playlist_items()接口批量获取曲目信息即可。
4. 整合到原有播放命令
修改你的play命令逻辑,先判断用户输入的内容是否为Spotify链接:
- 如果包含
spotify.com/track/、spotify.com/album/、spotify.com/playlist/特征,走上述Spotipy逻辑拿到搜索关键词,再调用原有YouTube搜索播放逻辑 - 如果是YouTube链接或普通搜索词,走原有逻辑即可
常见注意事项
- 不要频繁调用Spotify API,超出速率限制会被临时封禁接口调用权限
- 拼接搜索关键词时可以去掉
(feat. xxx)、(Remix)等非必要后缀,提高YouTube搜索匹配准确率 - 不要尝试破解Spotify的音频流,该行为违反Spotify服务条款,且实现复杂度极高,完全不适合新手操作
内容的提问来源于stack exchange,提问作者rpicoder
相关产品推荐
相关产品推荐

