如何将数据保存在 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() 将数据保存在其中

如何每次将新数据保存到我的 plist 文件而不是替换旧数据?

如何将每个数据保存在 JSON 文件中?安卓工作室

如何将点击路径保存为 JSON?

如何将我的 Python 爬虫输出保存到 JSON 文件?

在 .NET Web 服务中保存数据的最佳方式