К сожалению, ваша текущая система не поможет. Вам придется хранить больше, чем просто пользователя, если вы хотите использовать время его перезарядки.
Давайте используем Map для нашей переменной, чтобы у нас могли быть пары ключ-значение. Это упростит отслеживание необходимой нам информации
// Replace talkedRecently's declaration with this...
const cooldowns = new Map();
Чтобы перевести пользователя на перезарядку, используйте Map.set()
, чтобы добавить пользователя и время его перезарядки. должен истечь до cooldowns
. Затем используйте Map.delete()
, когда время восстановления должно закончиться, чтобы снова предоставить пользователю доступ к команде.
// Replace the talkedRecently.add(...) section with this...
cooldowns.set(message.author.id, Date.now() + 900000);
setTimeout(() => cooldowns.delete(message.author.id), 900000);
Чтобы определить количество времени, оставшегося на время восстановления, мы должны вычесть текущее время из того, в котором оно истекает. Однако это даст нам миллисекунды, что сделает значение нечитаемым для нас. Простой и простой способ преобразования длительности в слова - это использование humanize-duration
(moment
также опция) . Наконец, мы можем отправить желаемое сообщение, сообщив пользователю, сколько времени у него осталось на его перезарядке.
// Put this where you require your other dependencies...
const humanizeDuration = require('humanize-duration');
// Replace the if (talkedRecently.has(...)) part with this...
const cooldown = cooldowns.get(message.author.id);
if (cooldown) {
const remaining = humanizeDuration(cooldown - Date.now());
return message.channel.send(`You have to wait ${remaining} before you can work again`)
.catch(console.error);
}