如何将数据保存在 JSON 文件中,这样每次我的 Discord Bot 注销时数据都不会重置
Posted
技术标签:
【中文标题】如何将数据保存在 JSON 文件中,这样每次我的 Discord Bot 注销时数据都不会重置【英文标题】:How to save data on a JSON file so data doesn't reset each time my Discord Bot logs off 【发布时间】:2020-09-28 20:12:11 【问题描述】:我正在尝试制作一个使用警告系统的机器人。
根据你被警告的原因,你会得到“积分”,当你达到 100 分时,你会被自动踢出服务器。
例如,如果 Insults 为 15 分,Spam 为 20 分:
/warn Sappeur Insults:我的 warnLevel 将是 15 点
/warn Sappeur Spam:我的 warnLevel 应该是 35 点,因为我已经有 15 点了。
但是如果机器人碰巧离线,这些数据就会重置,所以我需要知道如何将这些数据保存到我创建的名为“warnLevel”的 JSON 文件中。拜托,你在这里和一个初学者交谈,尽量不要让这太复杂。谢谢。
【问题讨论】:
【参考方案1】:您可以使用
写入系统中的文件writeFile(Path, Data, Callback)
它是来自 fsLibrary 的 node.js 方法,但是当您使用 discord.js 时,您肯定正在使用 node(如果我错了,请纠正我) 示例:
// import fs module in which writeFile function is defined.
const fsLibrary = require('fs') // Data which will need to add in a file.
let data = "Hello world." // Write data in 'newfile.txt' .
fsLibrary.writeFile('newfile.txt', data, (error) =>
// In case of a error throw err exception.
if (error) throw err;
)
并从文件中读取并加载配置,然后您可以使用该方法
readFile(Path, Options, Callback)
【讨论】:
【参考方案2】:所以我用你建议的那些命令尝试了一些代码
` switch (args[2])
case 'Freekill':
let data = "20";
fs.writeFile('./warnLevel.json', data, (error) =>
if (error) throw err;
)
break;
case 'Spam' :
let data = "10";
fs.writeFile('./warnLevel.json', data, (error) =>
if (error) throw err;
)
break;
break;
`
我有两个主要问题: 1) 该命令覆盖了 json 文件中已经存在的所有内容,我需要它来跟踪不同的用户点,它不能每次都被覆盖 2)当我添加第二种情况时,发生了这个错误:
internal/modules/cjs/loader.js:1175
throw err;
^
SyntaxError: C:\Users\ACER\Desktop\PobWarn\warnLevel.json: Unexpected end of JSON input
at parse (<anonymous>)
?[90m at Object.Module._extensions..json (internal/modules /cjs/loader.js:1172:22)?[39m
?[90m at Module.load (internal/modules/cjs/loader.js:986:32)?[39m
?[90m at Function.Module._load (internal/modules/cjs/loader.js:879:14)?[39m
?[90m at Module.require (internal/modules/cjs/loader.js:1026:19)?[39m
?[90m at require (internal/modules/cjs/helpers.js:72:18)?[39m
at Object.<anonymous> (C:\Users\ACER\Desktop\PobWarn\index.js:6:19)
?[90m at Module._compile (internal/modules/cjs/loader.js:1138:30)?[39m
?[90m at Object.Module._extensions..js (internal/modules /cjs/loader.js:1158:10)?[39m
?[90m at Module.load (internal/modules/cjs/loader.js:986:32)?[39m
很抱歉,但我认为我不明白 readFile 命令的用途以及我应该在选项和回调中添加什么。很抱歉打扰了
【讨论】:
你没有像我想的那样回复塞巴斯蒂安,你必须提到他。无论如何,您需要将 json 文件设置为对象,而不是数字或字符串。这样你可以有更多的数据和更少的“覆盖”,虽然这很简单,因为你不理解它,我建议你在继续之前先学习 javascript。以上是关于如何将数据保存在 JSON 文件中,这样每次我的 Discord Bot 注销时数据都不会重置的主要内容,如果未能解决你的问题,请参考以下文章
将数组保存到 JSON 文件,然后使用 Array.push() 将数据保存在其中