首页 > 解决方案 > Discord.js 使用 better-sqlite3 向 XP 系统添加排名功能

问题描述

我目前正在尝试将排名功能添加到我已经存在的 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}!`);

  }
}

标签: sqlitediscorddiscord.jsbetter-sqlite3

解决方案


推荐阅读