Discord YouTube音乐机器人报错:未注册提取器,无法执行提取逻辑
解决Discord Bot提示「Skipping extractors execution since zero extractors were registered」问题
这个警告的核心原因是:discord-player v6+版本不再自动注册平台提取器,你需要手动为Player实例注册YouTube提取器才能正常解析YouTube的链接和搜索请求。以下是具体修复步骤:
1. 在主文件(Index.js)中注册YouTube提取器
在初始化Player实例后,添加提取器注册逻辑:
require('dotenv').config(); const {REST} = require('@discordjs/rest'); const { Routes } = require('discord-api-types/v9'); const { Client, Collection, GatewayIntentBits } = require('discord.js'); const { Player } = require("discord-player"); // 新增导入YouTubeExtractor const { YouTubeExtractor } = require("@discord-player/extractor"); const fs = require('fs'); const path = require('path'); const client = new Client({ intents: [GatewayIntentBits.Guilds, GatewayIntentBits.GuildMessages, GatewayIntentBits.GuildVoiceStates, ] }); // ... 命令加载逻辑保持不变 ... // 初始化Player并注册提取器 client.player = new Player(client, { ytdlOptions: { quality: "highestaudio", highWaterMark: 1 << 25 }, }); // 注册YouTube提取器 client.player.extractors.register(YouTubeExtractor, {}); // ... ready和interactionCreate事件逻辑保持不变 ...
2. 调整Play.js中的搜索引擎参数(可选,更规范)
在song子命令中,将searchEngine参数替换为官方定义的QueryType常量,避免直接使用提取器标识符:
// song子命令中的搜索逻辑修改 const result = await client.player.search(url, { requestedBy: interaction.user, searchEngine: QueryType.YOUTUBE_SONG // 替换原YouTubeExtractor.identifier })
完成以上修改后,重新启动Bot,执行命令时就不会再出现提取器未注册的警告,YouTube链接和搜索请求也能正常被解析。
内容的提问来源于stack exchange,提问作者Witha
相关产品推荐
相关产品推荐

