Discord. js XP System, добавление ролей по мере повышения уровня участников - PullRequest
0 голосов
/ 02 мая 2020

Итак, я нашел немного понятной системы XP и просто хотел отредактировать ее и добавить такую ​​функцию, как добавление ролей на более высоком уровне. В настоящее время ничего не происходит. Я попытался переместить несколько вещей здесь и там, которые либо заканчивали спамом на канале с встраиваниями уровня, либо просто ничего. Я не получаю ошибок.

Заранее спасибо!

Код ниже:

// Further up are the level roles defined, etc but that's not relevant.
  if (message.author.bot) return;

  let xpAdd = Math.floor(Math.random() * 7) + 8;

  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 = xp[message.author.id].level * 500;
  xp[message.author.id].xp = curxp + xpAdd;

  let lvlupRoles = new Discord.RichEmbed()
  .setAuthor("Level Up!", message.author.displayAvatarURL)
  .setThumbnail("https://cdn.discordapp.com/attachments/682717976771821646/705125856455950496/Levelup.png")
  .setColor("RANDOM")
  .setDescription(`Level: ${curlvl + 1}\nXP: ${curxp}`);

  if (nxtLvl <= xp[message.author.id].xp) {
    xp[message.author.id].level = curlvl + 1;

    let lvlup = new Discord.RichEmbed()
      .setAuthor("Level Up!", message.author.displayAvatarURL) .setThumbnail("https://cdn.discordapp.com/attachments/682717976771821646/705125856455950496/Levelup.png")
      .setColor("#00703C")
      .setDescription(`Level: ${curlvl + 1}\nXP: ${curxp}`);

      message.channel.send(lvlup).then(message => {message.delete(10000)});

    if (curlvl === "10") {
      lvlupRoles.addField("Roles gained", `${Level10Role.toString()}`, true)
      let addrankup = message.member;
      addrankup.addRole(Level10Role.id).catch(console.error);
      message.channel.send(lvlupRoles).catch(e => console.log(e))
    }

    if (curlvl === "20") {
      lvlupRoles.addField("Roles gained", `${Level20Role.toString()}`, true)
      let addrankup = message.member;
      addrankup.addRole(Level20Role.id).catch(console.error);
      message.channel.send(lvlupRoles).catch(e => console.log(e))
    }
   // ETC . . .
  }

  fs.writeFile("./storage/xp.json", JSON.stringify(xp), (err) => {
    if (err) console.log(err)
  });

1 Ответ

1 голос
/ 02 мая 2020

Я думаю, это может быть связано с тем, что вы сохранили xp[message.author.id].level в curlvl, изменили xp[message.author.id].level и все еще используете curlvl. В JS только объекты ({}, массивы, функции и т. Д. c) передаются по ссылке, поэтому curlvl не будет обновляться, если xp[message.author.id].level такое, как число.

Добавьте это под xp[message.author.id].level = curlvl + 1;:

curlvl = xp[message.author.id].level;
...