我正在用一个嵌入式生成器为我的Discord机器人构建一个serverinfo斜杠命令,但是我遇到了这个错误,这可能是由于我的代码的.addFields节所致.以下是我在测试该命令时得到的错误:

CombinedPropertyError (5)
  Received one or more errors

  input[1]
  | CombinedPropertyError (1)
  |   Received one or more errors
  | 
  |   input.value
  |   | ValidationError > s.string
  |   |   Expected a string primitive
  |   | 
  |   |   Received:
  |   |   | 16

  input[2]
  | CombinedPropertyError (1)
  |   Received one or more errors
  | 
  |   input.value
  |   | ValidationError > s.string
  |   |   Expected a string primitive
  |   | 
  |   |   Received:
  |   |   | 1

  input[3]
  | CombinedPropertyError (1)
  |   Received one or more errors
  | 
  |   input.value
  |   | ValidationError > s.string
  |   |   Expected a string primitive
  |   | 
  |   |   Received:
  |   |   | 5

  input[4]
  | CombinedPropertyError (1)
  |   Received one or more errors
  | 
  |   input.value
  |   | ValidationError > s.string
  |   |   Expected a string primitive
  |   | 
  |   |   Received:
  |   |   | 2

  input[5]
  | CombinedPropertyError (1)
  |   Received one or more errors
  | 
  |   input.value
  |   | ValidationError > s.string
  |   |   Expected a string primitive
  |   | 
  |   |   Received:
  |   |   | 2

    at ArrayValidator.handle (/home/runner/tester/node_modules/@sapphire/shapeshift/dist/index.js:468:70)
    at ArrayValidator.parse (/home/runner/tester/node_modules/@sapphire/shapeshift/dist/index.js:207:88)
    at EmbedBuilder.addFields (/home/runner/tester/node_modules/@discordjs/builders/dist/index.js:222:31)
    at Object.execute (/home/runner/tester/commands/info/serverinfo.js:21:8)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)

我不知道在这一点上会是什么.以下是我编写的代码:

const {
  SlashCommandBuilder,
  EmbedBuilder
} = require("discord.js");

  module.exports = {
    data: new SlashCommandBuilder()
      .setName("serverinfo")
      .setDescription("Provides information about the server.")
      .setDMPermission(false),
  
    async execute(client, interaction) {
      const { guild } = interaction;
      const { members, channels, emojis, roles, stickers } = guild;
  
      const embed = new EmbedBuilder()
        .setColor("#2B2D31")
        .setTitle(`${guild.name} - Server info`)
        .setThumbnail(guild.iconURL({ size: 256 }))
        .setImage(guild.bannerURL({ size: 256 }))
        .addFields(
          { name: "Owner", value: (await guild.fetchOwner()).user.tag, inline: true },
          { name: "Text Channels", value: guild.channels.cache.filter((c) => c.type === 0).toJSON().length, inline: true },
          { name: "Voice Channels", value: guild.channels.cache.filter((c) => c.type === 2).toJSON().length, inline: true },
          { name: "Category Channels", value: guild.channels.cache.filter((c) => c.type === 4).toJSON().length, inline: true },
          { name: "Members", value: guild.memberCount, inline: true },
          { name: "Roles", value: guild.roles.cache.size, inline: true },
          { name: "Role List", value: guild.roles.cache.toJSON().join(', ')},
        );
      interaction.reply({ embeds: [embed] });
    },
  };

有什么主意吗?提前谢谢你

推荐答案

这个错误是非常直接的.字段值应该是字符串基元,但您提供的是数字.所有这.length个属性,guild.memberCountcache.size都是数字.

要解决这个问题,您需要将它们转换为字符串.此外,您不需要使用toJSON(),因为filter()返回集合,您可以改用size属性:

const embed = new EmbedBuilder()
  .setColor('#2B2D31')
  .setTitle(`${guild.name} - Server info`)
  .setThumbnail(guild.iconURL({ size: 256 }))
  .setImage(guild.bannerURL({ size: 256 }))
  .addFields(
    { name: 'Owner', value: (await guild.fetchOwner()).user.tag, inline: true },
    {
      name: 'Text Channels',
      value: guild.channels.cache.filter((c) => c.type === 0).size.toString(),
      inline: true,
    },
    {
      name: 'Voice Channels',
      value: guild.channels.cache.filter((c) => c.type === 2).size.toString(),
      inline: true,
    },
    {
      name: 'Category Channels',
      value: guild.channels.cache.filter((c) => c.type === 4).size.toString(),
      inline: true,
    },
    { name: 'Members', value: guild.memberCount.toString(), inline: true },
    { name: 'Roles', value: guild.roles.cache.size.toString(), inline: true },
    { name: 'Role List', value: guild.roles.cache.toJSON().join(', ') },
  );

如果您喜欢这样的模板文字,您也可以使用它们:

{
  name: 'Text Channels',
  value: `${guild.channels.cache.filter((c) => c.type === 0).size}`,
  inline: true,
},
// ...

Javascript相关问答推荐

如果没有尾随斜线,托管在收件箱中的React/Vite将无法工作

有什么(最佳)方法可以从模块中获取脚本模块的多姆元素吗?

将状态向下传递给映射的子元素

如何在Angular中插入动态组件

React 17与React 18中的不同setState行为

扫描qr code后出错whatter—web.js

如何在Javascript中的控制台上以一行形式打印循环的结果

react—router v6:路由没有路径

更改JSON中使用AJAX返回的图像的路径

手机上的渲染错误文本必须在文本组件中渲染,但在浏览器上没有问题<><>

在286之后恢复轮询

如何使用子字符串在数组中搜索重复项

try 使用PM2在AWS ubuntu服务器上运行 node 进程时出错

AJAX POST在控制器中返回空(ASP.NET MVC)

与svg相反;S getPointAtLength(D)-我想要getLengthAtPoint(x,y)

在SuperBase JS客户端中寻址JSON数据

JWT Cookie安全性

使用API调用的VUE 3键盘输入同步问题

如何将字符串拆分成单词并跟踪每个单词的索引(在原始字符串中)?

AstroJS混合模式服务器终结点返回404