我目前正在为我的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。