具有角色的Level系统(discord.js, node.js)



我目前正在为我的Bot做一个升级系统,我想让达到特定分数的用户获得特定角色(例如:如果你达到5级,你可以获得角色5级)

这是我目前拥有的关卡系统:

const Discord = require('discord.js');
const bot = new Discord.Client();
const fs = require('fs')
const xpfile = require('./xp.json')

bot.on("message", function(message){
if(message.author.bot) return;  
var addXP = Math.floor(Math.random() * 8) + 3;

if(!xpfile[message.author.id]){
xpfile[message.author.id] = {
xp: 0,
level: 1,
reqxp: 1000
}

fs.writeFile("./xp.json", JSON.stringify(xpfile), function(err){
if(err) console.log(err)
})
}

xpfile[message.author.id].xp += addXP

if(xpfile[message.author.id].xp > xpfile[message.author.id].reqxp){
xpfile[message.author.id].xp -= xpfile[message.author.id].reqxp //remove xp after level up
xpfile[message.author.id].reqxp *= 1.5 //add difficulty to get a higher level
xpfile[message.author.id].reqxp = Math.floor(xpfile[message.author.id].reqxp) //reqxp better number ig (In german: reqxp runden)
xpfile[message.author.id].level += 1 //add 1 level

message.reply("Is now Level **"+xpfile[message.author.id].level+"**! :tada:")
}

fs.writeFile("./xp.json", JSON.stringify(xpfile), function(err){
if(err) console.log(err)
})

if (message.content.startsWith(".level")){
message.delete()

let user = message.mentions.users.first() || message.author

if(user.bot) return message.reply("Bots dont have XP or Levels :(")

const embed = new Discord.RichEmbed()
.setThumbnail(message.author.avatarURL)
.setTitle('Level for '+message.author.username)
.setColor ('#12A5F1')
.addField("Level: ",xpfile[user.id].level)
.addField("XP: ",xpfile[user.id].xp+"/"+xpfile[user.id].reqxp)
message.channel.send(embed)
}

这里的想法是获得没有工作的角色(自动会更酷,但我不知道它是如何工作的):

if (message.content.startsWith(".reward")){
message.delete()
try{
if([user.id].level = '2'){
message.guild.roles.fetch('816587197868015646')
let member = message.mentions.members.first();
member.roles.add(role).catch(console.error);
}
}
catch {
return message.reply("There are currently no rewards to claim!")
}
}

和这里myxp.json:

{"751092600890458203":{"xp":740,"level":2,"reqxp":1500}}

您的语法中缺少cache。点击这里阅读从V11到V12的更新。

message.guild.roles.fetch('816587197868015646');
//Old V11 Syntax →
message.guild.roles.cache.find(role => role.id === "816587197868015646");
//New V12 Syntax ✓

我强烈建议不要在JSON中存储任何用户数据,尝试SQL或MongoDB。

最新更新