首页 > 解决方案 > 将 JSON 中的值获取到 discord.js 嵌入中

问题描述

我正在制作一个 discord.js 机器人,其中所有命令数据都存储在 JSON 文件中,当help命令运行时,我希望它在用户输入的级别上迭代 JSON。

到目前为止,我已经设法检查输入的值是命令还是类别,并且我已经能够获取console.log所有信息,并且它显示了我想要在嵌入中显示的正确数据。

例如,在我的 JSON 文件中,我有:

{
  "category1": {
    "command1": {
      "Aliases": [],
      "Description": "Runs a command"
    }
  }
}

当我执行console.log()用户运行时,g!help category1它会输出:

command1
Runs a command

当它发送嵌入时,我得到:

[object Object]
undefined

这是遍历 JSON 并将数据添加到嵌入的代码部分:

for (ctg in help_data) {
  if (args[0] === ctg) {
    embed.setTitle(ctg)
    for (command in help_data[ctg]) {
      var cmd = command
      var desc = help_data[ctg][command].Description

      console.log(cmd)
      console.log(desc)

      embed.addField({
        "name": cmd,
        "Value": desc
      })
    }
  }
}

我不明白为什么它在console.log和之间发生变化embed.addField,如果有人可以解释为什么会发生这种情况以及我如何解决它,那将是惊人的!

标签: javascriptnode.jsjsondiscord.js

解决方案


embed.addField接受三个参数,第一个是name字段的,第二个是它的value。这两个都是字符串。在您的示例中,您的第一个参数是一个对象,该对象被转换为字符串(因此变为[object Object]),第二个参数(因为您不提供任何内容)是undefined.

要解决此问题,您可以像这样添加两个字符串:

embed.addField(cmd, desc);

或者改用addFields接受这样一个对象的方法:

embed.addFields({
  name: cmd,
  value: desc,
});

推荐阅读