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

discord.js v12音乐指令传入带<>的YouTube链接报无视频ID错误求助

问题根源

Discord 平台中使用 <> 包裹链接的作用是关闭链接的嵌入预览,你通过 args[1] 拿到的参数会保留首尾的 <、> 符号,ytdl 库无法识别带有这两个符号的URL,因此抛出找不到视频ID的错误。

修复方案

在调用 ytdl.getInfo 前对链接参数做清洗,移除首尾的尖括号即可,你可以用正则表达式快速完成这个操作。

修改后的代码如下:

if (message.content.startsWith(`${prefix}play`)) {
    const voiceChannel = message.member.voice.channel;
    if (!voiceChannel) return message.channel.send("Musisz być na kanale głosowym!");
    const permissions = voiceChannel.permissionsFor(message.client.user);
    if (!permissions.has(`CONNECT`)) return message.channel.send("Nie mam potrzebnych permisji by wejść na kanał głosowy!");
    if (!permissions.has(`SPEAK`)) return message.channel.send("Nie mam potrzebnych permisji by wejść na kanał głosowym!");
    
    // 新增行:清洗链接,移除首尾的尖括号
    const videoUrl = args[1].replace(/^<|>$/g, '');
    const songInfo = await ytdl.getInfo(videoUrl);
    const song = {
        title: songInfo.videoDetails.title,
        url: songInfo.videoDetails.video_url,
    };
}

补充优化建议

你可以额外增加参数存在性校验,避免用户没有传入链接时程序抛出未捕获异常:

if (!args[1]) return message.channel.send("请传入你要播放的YouTube链接");

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 23:09:01