【问题标题】:Leaderboard command for JSON databaseJSON 数据库的排行榜命令
【发布时间】:2021-03-20 07:00:42
【问题描述】:

我有一个等级系统,代码如下,它使用 JSON 数据库对数据进行排序,如下所示{"626916199783071750":{"xp":94,"level":12} 我想创建一个命令,按等级顺序显示所有成员的排行榜。 代码

nst Discord = require('discord.js');
const client = new Discord.Client();
const config = require('./config.json');
const fs = require("fs");
let db = JSON.parse(fs.readFileSync("./database.json", "utf8"));

client.on("message", message => {
    if (message.author.bot) return; // ignore bots

    // if the user is not on db add the user and change his values to 0
    if (!db[message.author.id]) db[message.author.id] = {
        xp: 0,
        level: 0
      };
    db[message.author.id].xp++;
    let userInfo = db[message.author.id];
    if(userInfo.xp > 100) {
        userInfo.level++
        userInfo.xp = 0
        message.reply("Congratulations, you level up")
    }
    const args = message.content.slice(config.prefix.length).trim().split(/ +/g);
    const cmd = args.shift().toLowerCase();
    if(cmd === "rank") {
        let userInfo = db[message.author.id];
        let member = message.mentions.members.first();
        let embed = new Discord.RichEmbed()
        .setColor(0x4286f4)
        .addField("Level", userInfo.level)
        .addField("XP", userInfo.xp+"/100");
        if(!member) return message.channel.sendEmbed(embed)
        let memberInfo = db[member.id]
        let embed2 = new Discord.RichEmbed()
        .setColor(0x4286f4)
        .addField("Level", memberInfo.level)
        .addField("XP", memberInfo.xp+"/100")
        message.channel.sendEmbed(embed2)
    }
    fs.writeFile("./database.json", JSON.stringify(db), (x) => {
        if (x) console.error(x)
      });
})

client.login(config.token)

顺便说一句,我正在使用 discord.js v12+

【问题讨论】:

  • 你有什么错误吗?

标签: javascript node.js json discord.js


【解决方案1】:

如果您需要按照您提供的方式对 JSON 数据进行排序,这里是解决方案

// Your database
const members = [
  {"626916199783071750":{"xp":94,"level":7}},
  {"626916199783071750":{"xp":94,"level":22}},
  {"626916199783071750":{"xp":94,"level":12}}
];

// Sort function
members.sort(function(a, b) {
  const keyA = a[Object.keys(a)[0]].level,
        keyB = b[Object.keys(a)[0]].level;
  // Compare
  // (swap -1 and 1 to change sort order)
  if(keyA < keyB) return -1;
  if(keyA > keyB) return 1;
  return 0;
});
// Result
console.log(members);

【讨论】:

  • 我的数据库中所有不同的用户彼此相邻,而不是一个在另一个之下,这有关系吗?我也把它放在我的 database.json 文件中?
  • 如果每个条目的结构与您在问题中提供的相同,那么有多少用户并不重要(好吧,这取决于服务器硬件),但是这个排序功能会排序他们。
  • 这是javascript代码。我把它放在一个 json 文件中?,我很困惑
  • Nope) 您在此处读取并解析您的 JSON:let db = JSON.parse(fs.readFileSync("./database.json", "utf8"));,然后使用 db 数组并将数据发送给用户。我不知道这个文件中的数据是什么格式的。你提供了{"626916199783071750":{"xp":94,"level":12}},我为它写了排序函数...如果数据结构不同,那么你需要改变这个函数)
  • 好的,谢谢。我没有在我的 index.js 文件中定义成员,所以它给了我一个错误。我应该如何定义成员?
猜你喜欢
  • 2021-09-14
  • 2020-11-22
  • 2021-05-29
  • 2021-04-20
  • 2021-07-05
  • 1970-01-01
  • 2021-10-06
  • 2016-09-13
  • 2020-08-19
相关资源
最近更新 更多