如何将数据从JSON文件导入到嵌入中?

时间:2019-02-15 16:29:54

标签: javascript json bots discord.js

我是一个完全的假人,尝试在没有任何先验编码知识的情况下编写Discord.js机器人。我在尝试学习。
我们正在尝试的项目是一个机器人,它将以不和谐的嵌入消息进行回复。这是在线游戏的行会,那里有多个不同的角色。每个人都有独特的统计信息,技能和类型。
这个想法是将所有单位的所有信息填充到JSON文件中,然后让人们使用.unitname并让漫游器回复嵌入该单位的所有信息。
它应该是这样的:
Image of the embed

首先,为每个单元添加数十种不同的命令似乎并不正确,所以我让机器人检查了每条消息是否有潜在的单元请求。
这听起来对我来说还不是最优化,但是在实践中会降低机器人的速度吗?
而我该如何编码以将其识别为.OneOfDozensOfPossibleUnits
也许我可以有一个包含所有单位名称的单独列表,并在.AnyOfThose处触发它,但这是最佳方法吗?

比方说,漫游器将.Lucius识别为一个单元请求。该机器人必须收集输入消息,减去"."(哦,天哪,我希望这是可能的,"." + "input"听起来超级笨拙哈哈哈)。
然后,他将不得不研究具有数十个单位的JSON文件,并专门从Lucius收集数据。我该怎么办?
然后,我将保存数据,例如统计数据。这些必须放在我称为“变量”的地方(检查代码),但是它的语法是什么?
我还想添加一些额外的if检查(例如,如果单元类型==“ defense”,则将颜色设置为蓝色)。我可能可以搜索并找到其语法,但是如果您可以包含它,我将非常高兴。

对不起,这是一条“请帮我忙”的帖子,但是无济于事,哈哈。我通常会花时间学习一点点的东西,但是由于这是一个社区项目,所以我会盲目进入很多领域。如果您还有其他提示或发现程序中潜在的缺陷,请告诉我。预先谢谢你!

client.on('message', message => {
  if (message.content === '.' + "unit") {
    const embed = new Discord.RichEmbed()
      .setAuthor("Author", "https://lh3.googleusercontent.com/rA0lKRGI_-bP-Jj4nkVc5lm6WJfO3nYlAz089otvQnLeevIoao1CTvaU0l0dqnnWIvLZTSOTaEwj6W04IZSRHQz3NYWiePtJnW3bANh54aI=w120")
      .setColor(0xFF0000)
      .addField("<:stats:545991150486421514> Stats", "⧫ ATK: " + "variable" + "\r\n ⧫ HP: " + "variable" + "\r\n ⧫ DEF: " + "variable", true)
      .addField("\u200B", "⧫ CRIT RATE: " + "variable" + "\r\n ⧫ CRIT DMG: " + "variable" + "\r\n ⧫ AGI: " + "variable", true)
      .addField("<:skills:545991578355761152> Skills", "Skill descriptions")
      .setImage("https://lh3.googleusercontent.com/rA0lKRGI_-bP-Jj4nkVc5lm6WJfO3nYlAz089otvQnLeevIoao1CTvaU0l0dqnnWIvLZTSOTaEwj6W04IZSRHQz3NYWiePtJnW3bANh54aI=w120", 2, 2)
      .setThumbnail("https://lh3.googleusercontent.com/rA0lKRGI_-bP-Jj4nkVc5lm6WJfO3nYlAz089otvQnLeevIoao1CTvaU0l0dqnnWIvLZTSOTaEwj6W04IZSRHQz3NYWiePtJnW3bANh54aI=w120")
      .setFooter("Footer", "https://lh3.googleusercontent.com/rA0lKRGI_-bP-Jj4nkVc5lm6WJfO3nYlAz089otvQnLeevIoao1CTvaU0l0dqnnWIvLZTSOTaEwj6W04IZSRHQz3NYWiePtJnW3bANh54aI=w120");
    message.channel.send(embed);
  }
});

1 个答案:

答案 0 :(得分:0)

您肯定可以得到存储在JSON文件中的内容,实际上这很容易,MDN here上有一个不错的文档。

当您说检查每个命令的方式与检查您的操作时一样时,我同意您的看法,因此您可以删除前缀,然后处理其余命令,.slice()将允许您这样做,您可以找到有关此here的更多信息。因此,例如,您可能有<message>.content.slice(1);,如果您输入unitname,它将返回.unitname,然后可以使用它在另一个文件的JSON对象中进行搜索,例。

如果要从JSON文件中获取单位并检查单位类型是什么,则可以肯定地更改嵌入的颜色,只需创建一个变量,然后在发送嵌入时使用它即可(例如{{1} }),但只需确保颜色变量为.setColor(myColourVariable)即可。我希望这会有所帮助,如果您需要其他任何帮助,请发表评论。