現在、既存の XP システムにランク機能を追加しようとしています。データベースからリストを返すことができます。XP の順序で問題はありません。問題はマッピングとインデックス作成です。私はそれが単純であるべきだと知っていますが、私は苦労しています。どんな助けでも大歓迎です
const { MessageEmbed } = require("discord.js");
const { cyan } = require("../../colours.json")
const Discord = require("discord.js");
const botconfig = require("../../botconfig");
const SQLite = require("better-sqlite3");
const sql = new SQLite('../../scores.sqlite');
module.exports = {
config: {
name: "rank",
description: "Displays the users/@<users> current XP total & level",
usage: " | <user>",
category: "xp",
accessableby: "Members",
aliases: ["xp", "level"]
},
run: async (bot, message, args) => {
const member = message.mentions.members.first() || message.member || message.guild.members.cache.get(args[0])
score = bot.getScore.get(message.author.tag, message.guild.id);
console.log(score)
if (!score) {
score = {
id: `${message.guild.id}-${message.author.id}`,
user: message.author.tag,
guild: message.guild.id,
points: 0,
level: 1,
};
}
const data = sql.prepare("SELECT * FROM scores WHERE guild = ? ORDER BY points DESC;").all(message.guild.id);
let curxp = score.points;
let curlvl = score.level;
let nxtLvlXp = curlvl * 300;
let difference = nxtLvlXp - curxp;
const embed = new Discord.MessageEmbed()
.setTitle("XP / LEVEL")
.setDescription(member.user.tag)
.setThumbnail(member.user.displayAvatarURL())
.setColor(cyan)
.addField('**' + "Level" + '**', curlvl, true)
.addField('**' + "XP" + '**', curxp, true)
// .addField('**' + "Rank" + '**', rank, true)
.setFooter(`${difference} XP til next level up`, bot.user.displayAvatarURL());
return message.channel.send({ embed });
// message.reply(`You currently have ${score.points} points and are level ${score.level}!`);
}
}