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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 11:40:32