You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python编写的Discord音乐机器人无法播放YouTube链接音频求解

Discord Python 音乐机器人YouTube播放故障修复方案

核心问题定位

你当前的代码存在两个核心问题:

  • 依赖的youtube-dl已经停止维护多年,无法适配YouTube最新的反爬机制和接口变动
  • 音频链接提取分支存在逻辑错误,单个视频场景下会调用不存在的entries字段直接报错

分步修复方案

1. 替换依赖库

卸载旧的youtube-dl,安装活跃维护的兼容分支yt-dlp,执行命令:

pip uninstall youtube-dl
pip install yt-dlp

代码导入部分修改为:

import yt_dlp as youtube_dl

原有YoutubeDL相关的调用逻辑无需修改即可兼容。

2. 修正提取逻辑与配置参数

调整YDL_OPTIONS配置,修复音频链接提取的分支错误,修复后完整代码如下:

@commands.command()
async def play(self,ctx,*,url):
    # 新增未连接语音频道时的自动连接逻辑
    if not ctx.voice_client:
        await ctx.author.voice.channel.connect()
    ctx.voice_client.stop()
    FFMPEG_OPTIONS = {
        'before_options': '-reconnect 1 -reconnect_streamed 1 -reconnect_delay_max 5 -referer https://www.youtube.com/',
        'options': '-vn'
    }
    YDL_OPTIONS = {
        'format':"bestaudio/best",
        'noplaylist': True,
        'quiet': True
    }
    vc = ctx.voice_client

    with youtube_dl.YoutubeDL(YDL_OPTIONS) as ydl:
        info = ydl.extract_info(url, download=False)
        # 修复分支逻辑错误
        if 'entries' in info:
            # 处理搜索结果/播放列表场景,取第一个条目
            entry = info["entries"][0]
        else:
            # 处理单个视频场景
            entry = info
        url2 = entry["formats"][0]['url']
        source = discord.FFmpegOpusAudio(url2, **FFMPEG_OPTIONS)
        vc.play(source)

3. 额外注意事项

  • 该方案仅适合私人小范围服务器使用,公开大规模投放会触发YouTube的IP封禁规则
  • 如果出现偶发播放失败,可检查服务器网络是否可以正常访问YouTube,或者升级yt-dlp到最新版本

内容的提问来源于stack exchange,提问作者Timothy Yuri Kartika

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 10:24:04