如何修复Discord机器人中的DeprecationWarning: Collection#filterArray警告?
解决Discord机器人的Collection#filterArray弃用警告
这个警告是因为你使用的discord.js或discord.js-commando版本里,Collection#filterArray方法已经被官方弃用,官方推荐改用Collection#filter。虽然你的代码里没直接调用这个方法,但discord.js-commando的旧版本内部可能在使用它,所以终端会弹出警告。下面是具体的解决步骤:
1. 更新依赖库到兼容版本
旧版本的discord.js-commando和discord.js存在API兼容问题,更新到匹配的稳定版本就能消除这个警告:
- 先卸载现有依赖:
npm uninstall discord.js discord.js-commando - 安装经过验证的兼容版本(这个组合能避免大部分弃用警告):
npm install discord.js@12.5.3 discord.js-commando@0.12.0
2. 修正代码中的过时API
你当前的代码里还在用Discord.js v11的旧API,这些API在新版本里也已经被移除或重命名,不仅可能导致警告,还可能让命令无法正常工作。修改后的代码如下:
const commando = require('discord.js-commando'); class JoinChannelCommand extends commando.Command { constructor(client) { super(client, { name: 'join', group: 'music', memberName: 'join', description: 'Joins the voice channel of the commander' }); } async run(message, args) { // 获取用户所在的语音频道(新版API) const userVoiceChannel = message.member.voice.channel; if (userVoiceChannel) { // 获取机器人当前在服务器的语音连接(新版API) const botVoiceConnection = message.guild.me.voice.connection; if (!botVoiceConnection) { userVoiceChannel.join() .then(connection => { message.reply("Successfully Joined!"); }) .catch(err => { console.error("加入频道出错:", err); message.reply("抱歉,我没办法加入你的语音频道😥"); }); } else { message.reply("我已经在一个语音频道里啦!"); } } else { message.reply("你得先加入一个语音频道才能召唤我哦!"); } } } module.exports = JoinChannelCommand;
额外说明
- 如果你想使用更高版本的Discord.js(比如v13+),注意discord.js-commando的维护状态,目前官方的discord.js-commando已经停止更新,可能需要改用其他框架(比如discord.js的原生命令系统),不过上面的版本组合对于基础的语音机器人需求来说足够稳定。
- 加入错误处理能帮你快速定位机器人无法加入频道的原因(比如权限不足)。
内容的提问来源于stack exchange,提问作者Nacho Villafane
相关产品推荐
相关产品推荐

