Невозможно проверить уровень до того, как таймер сообщения бота о повышении уровня за мин такта совпадет с точным временем

#javascript #node.js #discord.js

#javascript #node.js #discord.js

Вопрос:

Я совершенно новичок в javascript и не изучил никаких основ. Тем не менее, я научился выполнять некоторые коды.

Я создал бота для повышения уровня, который будет отправлять пользователям очки опыта за их сообщение раз в 40 секунд. Но команда, с помощью которой они будут проверять свою статистику уровня, — это вставка, которая попала в это время. Теперь пользователям приходится ждать около 40 секунд, чтобы активировать эту команду, или даже если они этого не сделали, если они ввели что-то более 40 секунд назад, они не смогут активировать команду, пока не пройдет еще 40 секунд.

 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];
userStats.xp  = random1.int(80, 100);
if (Date.now() - userStats.last_message > 40000) {
 userStats.last_message = Date.now();

 const rankS = '745901272506302484';
 const rankA = '744810702845378680';
 const rankB = '744835558991200367';
 const rankC = '750739926286336081';
 const rankD = '744810818771615745';
 const rankE = '744810822982959106';
 const rankF = '744810963558989844';

 const xpToNextLevel =
  5 * Math.pow(userStats.level, 1)   100 * userStats.level   100;
 if (userStats.xp >= xpToNextLevel) {
  userStats.level  ;

  if (userStats.level >= 35) {
   message.member.roles.add(rankS);
  }
  if (userStats.level >= 25) {
   message.member.roles.add(rankA);
  }
  if (userStats.level >= 15) {
   message.member.roles.add(rankB);
  }
  if (userStats.level >= 10) {
   message.member.roles.add(rankC);
  }
  if (userStats.level >= 7) {
   message.member.roles.add(rankD);
  }
  if (userStats.level >= 5) {
   message.member.roles.add(rankE);
  }
  if (userStats.level >= 1) {
   message.member.roles.add(rankF);
  }

  const Embed5 = new Discord.MessageEmbed()
   .setAuthor(
    message.author.username   '🎖️'   userStats.level,
    message.author.displayAvatarURL()
   )
   .setDescription('You just leveled up to '   userStats.level)
   .addField(
    'Keep up the work',
    'Text/VC/Post stuff in the server to gain more XP.'
   )
   .setColor(0xff5733)
   .setFooter('Type Ahri level to check you level card.');

  userStats.xp = userStats.xp - xpToNextLevel;
  client.channels.cache.get('743135573530902701').send(Embed5);
 }

 const args1 = message.content.slice(prefix.length).split(' ');
 const command1 = args1.shift().toLowerCase();

 if (command1 === 'level') {
  const Embed6 = new Discord.MessageEmbed()
   .setAuthor(
    'Level card for '   message.author.username,
    message.author.displayAvatarURL()
   )
   .addField('Current level ', userStats.level, true)
   .addField('Current exp ', userStats.xp, true)
   .addField('Exp needed for next level ', xpToNextLevel)
   .setColor(0xff5733);

  userStats.xp = userStats.xp - xpToNextLevel;
  client.channels.cache.get('743135573530902701').send(Embed6);

  jsonfile.writeFileSync('stats.json', stats);

  console.log(message.author.username   ' now has '   userStats.xp);
  console.log(xpToNextLevel   ' XP needed for next level.');
 }
}
  

Основная проблема в том, что я должен вытащить это (Embed6) из этих 2 скобок с конца. Но я не могу. Когда я вытаскиваю его, он не может связать свои объекты с константами, которые находятся внутри скобок.

Комментарии:

1.Как человек, который начинал discord.js до изучения JavaScript или каких-либо базовых основ кодирования, я настоятельно рекомендую вам воздержаться от этого, прежде чем изучать основы JS.

2. @Lioness100 хорошо, спасибо. Тогда я сначала начну изучать JS и его основы, прежде чем выполнять какую-либо работу с discord.js

3. @assassignshay круто! Очевидно, вы можете узнать все, что захотите, это была просто рекомендация. Удачи!