简体   繁体   English

如何让用户每分钟只获得一次 xp,而不是每条消息一次?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM