Discord JS 消息分级系统
Posted
技术标签:
【中文标题】Discord JS 消息分级系统【英文标题】:Discord JS Message Leveling System 【发布时间】:2019-11-11 08:32:57 【问题描述】:我正在为我的 Discord 机器人制作关卡系统,我想要它,所以如果我达到 5 级,它会给我一个角色。我希望这样当你达到一定的水平时,你就会被赋予一个角色。
我粘贴了我正在使用的消息分级系统的代码。
bot.on("message", async message =>
let xpAdd = Math.floor(Math.random() * 7) + 8;
if(!xp[message.author.id])
xp[message.author.id] =
xp: 0,
level: 1
if(xp[message.author.id].level[5]) //idk if im doing this right, I want it so if level reaches a certain number, it will give out a role
console.log("skrt");
let curxp = xp[message.author.id].xp;
let curlvl = xp[message.author.id].level;
let nxtlvl = xp[message.author.id].level * 300;
let rankuplvl = xp[message.author.id].xp * 7;
xp[message.author.id].xp = curxp + xpAdd;
if(nxtlvl <= xp[message.author.id].xp)
xp[message.author.id].level = curlvl + 1;
const lvlUp = new Discord.RichEmbed()
.setTitle("You leveled up!")
.setColor("#FFC0CB")
.addField("NEW LEVEL", curlvl + 1);
message.channel.send(lvlUp);
fs.writeFile("./xp.json", JSON.stringify(xp), (err) =>
if(err) console.log(error)
);
if(message.content.startsWith(prefix + "level"))
message.channel.bulkDelete(1)
if(!xp[message.author.id])
xp[message.author.id] =
xp: 0,
level: 1
;
let curxp = xp[message.author.id].xp;
let curlvl = xp[message.author.id].level;
let nxtlvl = curlvl * 300;
let difference = nxtlvl - curxp;
const lvlEmbed = new Discord.RichEmbed()
.setAuthor(message.author.username)
.setColor("#FFC0CB")
.addField("XP", curxp, true)
.addField("Level", curlvl, true)
.setFooter(`$difference XP until next rank!`, message.author.displayAvatarURL);
message.channel.send(lvlEmbed)
);
【问题讨论】:
【参考方案1】:让我们分解一下我们需要做什么才能达到您想要的行为。假设您使用的是 stable 分支(很可能)...
检查用户的等级是否为5。Equality operator
检索所需的角色。Guild.roles
Map.get()
或使用 ID 作为 #3 中的 RoleResolvable。
按属性:Collection.find()
为用户添加角色。GuildMember.addRole()
现在,让我们将所有内容放在一起并将其实现到您的代码中。
if(nxtlvl <= xp[message.author.id].xp)
xp[message.author.id].level = curlvl + 1;
// Check if the user's level is 5.
if (xp[message.author.id].level === 5)
// Retrieve the desired role. Uncomment whichever line you need, as described.
// const role = message.guild.roles.get('idHere');
// const role = message.guild.roles.find(role => role.name === 'Level 5');
message.member.addRole(role) // Or simply use the role ID directly.
.catch(console.error); // Make sure to catch any rejected promises.
// Continue with your level-up embed.
【讨论】:
一切正常,感谢您的帮助! 很高兴我能帮上忙。如果它有效地解决了您的问题,请随时使用左侧的复选标记accept this answer。以上是关于Discord JS 消息分级系统的主要内容,如果未能解决你的问题,请参考以下文章
discord.js - 如何在提到的用户之间随机拆分消息?
(Discord 机器人)当用户加入 Discord 服务器(discord.js)时,如何发送欢迎消息?