javascript - JSON 数据库的排行榜命令
问题描述
我有一个调平系统,代码如下,它使用 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+
解决方案
如果您需要按照您提供的方式对 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);
推荐阅读
- javascript - php处理完成后如何在SQLite表中插入数据?
- gnuplot - 如何使用 gnuplot 从计算数据中绘制磁场线?
- node.js - 如何修复 npm ERR!peer dep 缺失:discord.js@11.5.1 需要的 node-opus@^0.2.7?
- reactjs - Google Calendar API 是否允许在多供应商 React Web 应用程序中安排约会?
- performance - 在 GPU 上运行多个深度学习模型时如何优化
- c# - automapper - 将列表属性展平为单个单个属性
- python - Python如何手动结束收集数据的无限while循环,而不结束代码并且不使用KeyboardInterrupt?
- javascript - Vue.js - 内联调用异步方法
- java - 如何使用 Spring Integration 动态创建多个 TcpOutboundGateways?
- python-3.x - 如何将数据集导入 kaggle