Discord.py音乐机器人报错:Unable to extract uploader id 求助
解决Discord音乐机器人
Error: Unable to extract uploader id问题 这个报错的核心原因是youtube-dl已停止维护,YouTube页面结构更新后,它无法再正确解析视频数据——哪怕更新youtube-dl也没用,因为项目已经不再迭代。解决办法是替换为持续维护的分支项目yt-dlp,下面是具体步骤:
1. 替换依赖
卸载旧的youtube-dl,安装yt-dlp:
pip uninstall youtube-dl -y pip install yt-dlp
2. 修改代码中的配置与导入
将原代码中所有youtube_dl相关的引用替换为yt_dlp,同时优化部分配置项(yt-dlp兼容大部分youtube-dl配置,新增参数提升兼容性):
修改后的YouTube配置设置
import yt_dlp import discord import asyncio yt_dlp.utils.bug_reports_message = lambda: '' ytdl_format_options = { 'format': 'bestaudio/best', 'outtmpl': '%(extractor)s-%(id)s-%(title)s.%(ext)s', 'restrictfilenames': True, 'noplaylist': True, 'nocheckcertificate': True, 'ignoreerrors': False, 'logtostderr': False, 'quiet': True, 'no_warnings': True, 'default_search': 'auto', 'source_address': '0.0.0.0', # yt-dlp新增参数,优化解析逻辑 'extract_flat': False, } ffmpeg_options = { 'options': '-vn', } ytdl = yt_dlp.YoutubeDL(ytdl_format_options) class YTDLSource(discord.PCMVolumeTransformer): def __init__(self, source, *, data, volume=0.5): super().__init__(source, volume) self.data = data self.title = data.get('title') self.url = data.get('url') self.duration = data.get('duration') # 增加空值判断,避免无缩略图时索引报错 self.image = data.get("thumbnails", [{}])[0].get("url", "") @classmethod async def from_url(cls, url, *, loop=None, stream=False): loop = loop or asyncio.get_event_loop() # yt-dlp的extract_info用法与youtube-dl完全兼容,直接替换即可 data = await loop.run_in_executor(None, lambda: ytdl.extract_info(url, download=not stream)) if 'entries' in data: data = data['entries'][0] filename = data['url'] if stream else ytdl.prepare_filename(data) return cls(discord.FFmpegPCMAudio(filename, **ffmpeg_options), data=data)
3. 修复代码小错误
你的播放命令示例存在拼写错误:sessionChanel应改为sessionChannel,修正后:
sessionChannel = message.author.voice.channel await sessionChannel.connect() url = matched.group(1) player = await YTDLSource.from_url(url, loop=client.loop, stream=True) sessionChannel.guild.voice_client.play(player, after=lambda e: print( f'Player error: {e}') if e else None)
4. 测试运行
完成上述修改后重启机器人,尝试播放YouTube链接即可正常工作。若出现FFmpeg相关报错,确保系统已安装FFmpeg且可通过环境变量访问。
内容的提问来源于stack exchange,提问作者nikita goncharov
相关产品推荐
相关产品推荐

