Discord.js v14中av命令触发CombinedPropertyError错误的求助
Discord.js v14中av命令触发CombinedPropertyError错误的求助
问题描述
之前的错误是因为命令处理器本身,现在解决后又遇到了一堆错误,尤其是这个CombinedPropertyError,完全看不懂,希望有人帮忙解释并解决。下面是出问题的av命令代码,以及对应的错误信息。
出错的代码
const { Discord, Client, Partials, Collection, GatewayIntentBits } = require('discord.js'); const client = new Client({ intents: [GatewayIntentBits.Guilds, GatewayIntentBits.GuildMessages] }) const { EmbedBuilder } = require('discord.js'); module.exports = { name: 'av', aliases: ['av'], category: 'Util', utilisation: '{prefix}av <mention user or dont>', async run(client,message,args) { console.log("test") let member = message.mentions.users.first() || message.guild.members.cache.get(args[0]) || message.member; let avatar = member.user.displayAvatarURL({ size: 1024, dynamic: true }); const embed = new EmbedBuilder() .setTitle(`${member}'s Avatar`) .setImage(avatar) .setColor("BLACK") .setAuthor(member); message.channel.send({embeds: [embed]}); }, };
错误信息
{ name: 'av', aliases: [ 'av' ], category: 'Util', utilisation: '{prefix}av <mention user or dont>', run: [AsyncFunction: run] } av C:\WebDev\Sutilbot\node_modules\@sapphire\shapeshift\dist\index.js:1252 return errors.length === 0 ? Result.ok(finalObject) : Result.err(new CombinedPropertyError(errors)); ^ CombinedPropertyError: Received one or more errors at ObjectValidator.handleIgnoreStrategy (C:\WebDev\Sutilbot\node_modules\@sapphire\shapeshift\dist\index.js:1252:70) at ObjectValidator.handleStrategy (C:\WebDev\Sutilbot\node_modules\@sapphire\shapeshift\dist\index.js:1105:47) at ObjectValidator.handle (C:\WebDev\Sutilbot\node_modules\@sapphire\shapeshift\dist\index.js:1205:17) at ObjectValidator.parse (C:\WebDev\Sutilbot\node_modules\@sapphire\shapeshift\dist\index.js:201:88) at EmbedBuilder.setAuthor (C:\WebDev\Sutilbot\node_modules\@discordjs\builders\dist\index.js:223:26) at Object.run (C:\WebDev\Sutilbot\commands\av.js:19:10) at module.exports (C:\WebDev\Sutilbot\events\messageCreate.js:14:18) at Client.emit (node:events:524:35) at MessageCreateAction.handle (C:\WebDev\Sutilbot\node_modules\discord.js\src\client\actions\MessageCreate.js:28:14) at module.exports [as MESSAGE_CREATE] (C:\WebDev\Sutilbot\node_modules\discord.js\src\client\websocket\handlers\MESSAGE_CREATE.js:4:32) { errors: [ [ 'name', MissingPropertyError: A required property is missing at ObjectValidator.handleIgnoreStrategy (C:\WebDev\Sutilbot\node_modules\@sapphire\shapeshift\dist\index.js:1227:27) at ObjectValidator.handleStrategy (C:\WebDev\Sutilbot\node_modules\@sapphire\shapeshift\dist\index.js:1105:47) at ObjectValidator.handle (C:\WebDev\Sutilbot\node_modules\@sapphire\shapeshift\dist\index.js:1205:17) at ObjectValidator.parse (C:\WebDev\Sutilbot\node_modules\@sapphire\shapeshift\dist\index.js:201:88) at EmbedBuilder.setAuthor (C:\WebDev\Sutilbot\node_modules\@discordjs\builders\dist\index.js:223:26) at Object.run (C:\WebDev\Sutilbot\commands\av.js:19:10) at module.exports (C:\WebDev\Sutilbot\events\messageCreate.js:14:18) at Client.emit (node:events:524:35) at MessageCreateAction.handle (C:\WebDev\Sutilbot\node_modules\discord.js\src\client\actions\MessageCreate.js:28:14) at module.exports [as MESSAGE_CREATE] (C:\WebDev\Sutilbot\node_modules\discord.js\src\client\websocket\handlers\MESSAGE_CREATE.js:4:32) { property: 'name' } ] ] }
错误解释与解决方案
别慌,这个错误其实很好解决!咱们从错误栈里抓关键信息——你看errors数组里明确写了MissingPropertyError: A required property is missing,对应的必填属性是name,而且错误是在EmbedBuilder.setAuthor这一行触发的。
这是因为Discord.js v14里的setAuthor方法不再支持直接传入用户/成员对象了,它要求传入一个包含name(必填)、iconURL(可选)等属性的配置对象。你之前直接传member对象,不符合v14的API规范,所以才报错。
修复后的代码
先把setAuthor那行改成符合要求的写法,比如:
.setAuthor({ name: member.user.tag, iconURL: member.user.displayAvatarURL() })
另外还有个小细节:你定义的member变量,有时候是User对象(比如message.mentions.users.first()),有时候是GuildMember对象(比如message.member),统一处理成User对象会更稳妥,避免后续调用属性时出错:
let user = message.mentions.users.first() || message.guild.members.cache.get(args[0])?.user || message.author;
完整的修复后run函数代码如下:
async run(client,message,args) { console.log("test") let user = message.mentions.users.first() || message.guild.members.cache.get(args[0])?.user || message.author; let avatar = user.displayAvatarURL({ size: 1024, dynamic: true }); const embed = new EmbedBuilder() .setTitle(`${user.tag}'s Avatar`) .setImage(avatar) .setColor("BLACK") .setAuthor({ name: user.tag, iconURL: avatar }); message.channel.send({embeds: [embed]}); }
补充说明
Discord.js v14相对于v13有不少API变更,尤其是Embed相关的方法,很多都从接受单个参数改成了接受配置对象,以后写代码的时候可以多留意官方文档里的EmbedBuilder部分,避免踩类似的坑~
备注:内容来源于stack exchange,提问作者Siddharth Sinha
相关产品推荐
相关产品推荐

