即使机器人离线或获得更新也可以保存用户数据

时间:2018-10-30 18:46:09

标签: javascript discord discord.js

晚上好, 我正在开发Discord机器人,但存在逻辑问题。我添加了一些可自定义的变量,但是如果该漫游器脱机或得到了更新,则将删除所有用户添加的数据。我应该将其存储在外部文件还是数据库中,甚至使用webhooks。谢谢。

2 个答案:

答案 0 :(得分:1)

我建议您将播放器变量存储在JSON文件中。它们易于读写,几乎不需要任何额外的代码。

存储xp和角色变量的播放器数据json文件示例:

{
  "407362137430687745": {
    "xpp": 2001,
    "xppr": 999182,
    "currentRole": "rank 4"
  },
  "389981749448409100": {
    "xpp": 112,
    "xppr": 148,
    "currentRole": "rank 2"
  },
  "405809293204520980": {
    "xpp": 100,
    "xppr": 128,
    "currentRole": "rank 1"
  }
}

它们可以自动在不和谐的用户ID下列出,这样您就可以使用message.author.id等在json中保存到播放器的键中。

写入json文件的示例:

const fs = require('fs') //importing file save
var xpPath = 'file path to json here'
var xpRead = fs.readFileSync(xpPath);
var xpFile = JSON.parse(xpRead); //ready for use
var userId = message.author.id //user id here
if (!xpFile[userId]) { //this checks if data for the user has already been created
    xpFile[userId] = {xpp: 0, xppr: 0, currentRole: ""}; //if not, create it
    fs.writeFileSync(xpPath, JSON.stringify(xpFile, null, 2));
} else {
    //as an example, I will give the owner of the id 50 xp and the role "Awesome Role"
    var xppVar = Number(xpFile.xpp) + 50 //add 50 to their original xp
    var xpprVar = Number(xpFile.xppr)
    var roleToGive = "Awesome Role"
    xpFile[userId] = {xpp: xppVar, xppr: xpprVar, currentRole: roleToGive};
    fs.writeFileSync(xpPath, JSON.stringify(xpFile, null, 2));
    console.log(`Changed that player's xp to ${xppVar} and gave him the role ${roleToGive}`)

}

在您的bot中实现此操作非常简单,因为您要做的就是将json文件中的键更改为所需的代码并创建一个json文件。

答案 1 :(得分:0)

这实际上取决于您要保存的数据的类型/数量。但是,如果要保存用户数据,则可能需要设置数据库。尝试签出MongoDB或rethinkDb