【问题标题】:How do I make it such that the user gets xp only once per minute, instead of once per message?如何使用户每分钟仅获得一次 xp,而不是每条消息一次?
【发布时间】:2021-02-09 12:35:36
【问题描述】:

我正在开发我的不和谐机器人的调平系统。我想让用户每分钟只获得一次 xp,无论发送多少条消息。我无法弄清楚,需要一些帮助。我尝试添加冷却时间,但没有任何效果。

这是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")}`)

}
})

【问题讨论】:

标签: javascript discord discord.js bots


【解决方案1】:

我使用它,但它需要 jsonfile 和随机

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)
}
}   

【讨论】:

  • 嘿射箭,你能补充一些信息吗?你的目标是什么,你到底在哪里卡住了,你已经尝试过什么来解决问题?
  • 虽然这段代码 sn-p 可以解决问题,including an explanation 确实有助于提高您的帖子质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。
猜你喜欢
  • 2019-06-09
  • 1970-01-01
  • 1970-01-01
  • 2013-06-24
  • 2020-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多