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

discord.py音乐bot实现无URL搜索及youtube-dl无效URL报错解决

discord.py音乐机器人关键词搜索功能修改方案

你遇到的报错是因为youtube-dl默认仅处理URL链接,需要添加默认搜索配置触发关键词搜索逻辑,修改后的完整代码如下:

@commands.command()
async def play(self, ctx, *search):
    # 拼接多关键词搜索内容,解决歌名带空格的参数识别问题
    query = ' '.join(search)
    voice_channel = ctx.author.voice.channel
    if ctx.voice_client is None:
      await voice_channel.connect()

    ctx.voice_client.stop()
    FFMPEG_OPTIONS = {'before_options': '-reconnect 1 -reconnect_streamed 1 -reconnect_delay_max 5', 'options': '-vn'}
    # 新增default_search配置,非URL内容自动用YouTube搜索,取第一条结果
    YDL_OPTIONS = {'format':"bestaudio", 'default_search': 'ytsearch1'}
    vc = ctx.voice_client

    with youtube_dl.YoutubeDL(YDL_OPTIONS) as ydl:
        info = ydl.extract_info(query, download=False)
        # 处理搜索结果结构,搜索返回的内容会嵌套在entries列表中
        if 'entries' in info:
            info = info['entries'][0]
        url2 = info['formats'][0]['url']
        source = await discord.FFmpegOpusAudio.from_probe(url2,**FFMPEG_OPTIONS)
        vc.play(source)
    # 改用实际搜索到的视频标题显示,而非原始输入内容
    video_title = info.get('title', query)
    embed=discord.Embed(title="Now playing.", url="https://discord.com/api/oauth2/authorize?client_id=889553173583368252&permissions=8&scope=bot", description=f"Now playing {video_title}", color=0xEC4444)
    await ctx.send(embed=embed)

核心修改点说明

  • 命令参数调整为*search:支持接收带空格的歌名,所有输入内容会拼接为完整的搜索字符串
  • 新增YDL配置项default_search: 'ytsearch1':告诉youtube-dl如果输入内容不是有效URL,自动到YouTube搜索,取第一条结果返回,直接解决你遇到的报错
  • 新增搜索结果结构判断:关键词搜索返回的结果会嵌套在entries列表中,需要取列表第一个元素才能拿到正确的音频链接和视频信息
  • 优化播放提示文案:直接取搜索到的视频标题展示,比原始输入内容更准确

内容的提问来源于stack exchange,提问作者DaanHun

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 19:24:08