[英]How do I make it such that the user gets xp only once per minute, instead of once per message?
I am working on the leveling system of my discord bot.我正在研究我的不和谐机器人的调平系统。 I want to make it such that the user gets xp only once per minute, no matter how many messages are sent.
我想让用户每分钟只获得一次 xp,无论发送多少条消息。 I can't figure it out and need some help.
我无法弄清楚,需要一些帮助。 I tried adding a cooldown but nothing works.
我尝试添加冷却时间,但没有任何效果。
This is the xp code:这是xp代码:
bot.on("message", async message => {
if (!message.guild) return;
if (message.author.bot) return;
const args = message.content.slice(PREFIX.length).split(" ");
const cmd = args.shift().toLowerCase();
let randomXp = Math.floor(Math.random() * 9) + 1;
const hasLeveledUp = await Levels.appendXp(message.author.id, message.guild.id, randomXp);
if (hasLeveledUp)
{
const user = await Levels.fetch(message.author.id, message.guild.id);
message.channel.send(`You leveled up to level ${user.level}!`);
}
if(cmd === "rank")
{
const user = await Levels.fetch(message.author.id, message.guild.id);
message.channel.send(`You are currently level **${user.level}**!`)
}
if(cmd === "lb")
{
const rawLeaderboard = await Levels.fetchLeaderboard(message.guild.id, 5);
if (rawLeaderboard.length < 1) return reply(" Nobody's in the leaderboard yet..");
const leaderboard = Levels.computeLeaderboard(bot, rawLeaderboard);
const lb = leaderboard.map(e => `${e.position}. ${e.username}#${e.discriminator}\nLevel: ${e.level}\nXP: ${e.xp.toLocaleString()}`);
message.channel.send(`${lb.join("\n\n")}`)
}
})
I use that but it needs jsonfile and random我使用它,但它需要 jsonfile 和 random
var stats = {};
if(fs.existsSync('stats.json')) {
stats = jsonfile.readFileSync('stats.json');
}
if(message.author.bot) return;
if(!message.guild) return;
if(message.guild.id in stats === false){
stats[message.guild.id] = {};
}
const guildstats = stats[message.guild.id];
if(message.author.id in guildstats === false){
guildstats[message.author.id] = {
xp: 0,
level: 0,
last_message: 0,
};
}
const userstats = guildstats[message.author.id];
if(Date.now() - userstats.last_message > 60000) {
userstats.xp += Random.int(15, 25);
userstats.last_message = Date.now();
jsonfile.writeFileSync('stats.json', stats);
const xptonextlevel = 5 * Math.pow(userstats.level, 2) + 50 * userstats.level + 100;
if(userstats.xp >= xptonextlevel) {
userstats.level++;
userstats.xp - userstats.xp - xptonextlevel;
message.reply('Has reached level ' + userstats.level)
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.