如何将 JSON 文件中的数据导入嵌入?
Posted
技术标签:
【中文标题】如何将 JSON 文件中的数据导入嵌入?【英文标题】:How to import data from a JSON file into an embed? 【发布时间】:2019-07-09 20:06:44 【问题描述】:我是个十足的傻瓜,试图在没有任何编码知识的情况下编写一个 Discord.js 机器人。我正在努力学习。
我们正在尝试制作的项目是一个机器人,它会回复一条不和谐的嵌入消息。这是一个在线游戏的公会,其中有多个不同的角色。他们每个人都有独特的统计数据、技能和类型。
这个想法是用所有单元的所有信息填充一个 JSON 文件,然后让人们使用 .unitname
并让机器人回复嵌入关于该单元的所有信息。
它应该是这样的:
首先,为每个单元添加几十个不同的命令似乎不正确,所以我让机器人检查每条消息是否有潜在的单元请求。
这对我来说听起来很不优化,但它会在实践中减慢机器人的速度吗?
我将如何对其进行编码以将其识别为.OneOfDozensOfPossibleUnits
?
也许我可以有一个包含所有单位名称的单独列表,并让它在.AnyOfThose
触发,但这是最佳方式吗?
假设机器人将.Lucius
识别为单元请求。机器人必须收集输入消息,减去"."
(天哪,我希望这是可能的,"." + "input"
听起来超级笨重哈哈哈)。
然后他将不得不查看包含数十个单元的 JSON 文件,并专门从 Lucius 那里收集数据。我该怎么做?
然后我会保存数据,例如统计数据。那些必须放在我称为“变量”的地方(检查代码),但它的语法是什么?
我还想添加一些额外的if
检查(例如,如果单位类型 == “防御”,则将颜色设为蓝色)。这个我可能可以搜索并找到它的语法,但如果你能包含它,我会非常高兴。
对不起,这是一个“请为我做这项工作”的帖子,但没办法,哈哈。我通常会花时间一点一点地学习所有东西,但是由于这是一个社区项目,所以我会在很多领域视而不见。如果您有任何其他提示或发现程序中的潜在缺陷,请告诉我。提前谢谢!
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】:你绝对可以得到存储在 JSON 文件中的东西,实际上这很容易,MDN here 有一个不错的文档。
我同意你的观点,因为你说检查每个命令在检查它的意义上是相当不优化的,所以你可以删除前缀然后处理命令的其余部分,.slice()
将允许你这样做,您可以找到有关此here 的更多信息。例如,您可以拥有<message>.content.slice(1);
,如果您输入.unitname
,它将返回unitname
,然后您可以使用它在另一个文件中的JSON对象中进行搜索,例如。
如果您要从 JSON 文件中获取单位并检查单位类型,您绝对可以更改嵌入的颜色,只需创建一个变量,然后在发送嵌入时使用它(即.setColor(myColourVariable)
) ,但只需确保颜色变量为 0x[hex_colour_code]
。我希望这会有所帮助,如果您需要其他任何帮助,请发表评论。
【讨论】:
以上是关于如何将 JSON 文件中的数据导入嵌入?的主要内容,如果未能解决你的问题,请参考以下文章
如何通过 iOS 6 中的 RESTkit 2.0 将 JSON 中的 base64 图像导入核心数据二进制文件?
如何将 JSON, Text, XML, CSV 数据文件导入 MySQL