Раздор бот интервал путаница
Я пытаюсь сделать что-то вроде таймера обратного отсчета на моем боте Discord. Вот что я использую рН.
//Command base
client.on("message", async message => {
var sender = message.author;
const args = message.content.slice(config.prefix.length).trim().split(/ +/g);
const command = args.shift().toLowerCase();
//timetestvars
var starttimer = 0;
var counter = 10;
//countdown timer
if (command === 'testcount'){
while(starttimer <= 9){
setTimeout(function(){message.channel.send(counter), starttimer++, counter--},1*1)
}
};
});
но когда я набираю команду, ничего не происходит, как... ничего. Бот просто падает, я знаю, что делаю что-то не так, но я не знаю что.
Может ли кто-нибудь сказать мне, что я делаю неправильно, как я могу это исправить и как этот код действительно работает, и почему происходит конфликт?
Большое спасибо за помощь!
1 ответ
args.shift()
возвращает число, поэтому при запуске args.shift().toLowerCase()
, TypeError
брошен
Попробуйте использовать args.slice(1)
чтобы получить новый массив каждого элемента, кроме первого.
К тому же, args.slice(1)
возвращает массив, который не совместим с методом.toLowerCase().
Попробуйте заменить
const command = args.shift().toLowerCase();
С
const command = args.slice(1)[0].toLowerCase();
---- или же ----
const command = args[0].toLowerCase();
Причина вашего сбоя в том, что у бота закончилась память для попытки повторить одно и то же столько раз раньше starttimer
даже достиг 9.
while (starttimer <= 9) {
setTimeout(function(){message.channel.send(counter), starttimer++, counter--},1*1) // Note that setTimeout waits in milliseconds, not seconds (also 1*1=1) so the correct number to put here would be 1000
}
Правильный способ сделать это так:
var starttimer = 10; // set this to your desired start time
for (let i=0; i <= starttimer; i++) {
setTimeout(function(){
message.channel.send(i);
}, 1000*(starttimer-i));
}
Вы даже можете узнать время начала, выполнив var starttimer = args[0]
поэтому вы бы использовали команду !testcount 10
(при условии, что вы установили свой префикс на !
), например, для запуска 10-секундного таймера. Обратите внимание, что если есть задержка, это из-за перезарядки Discord API, и нет большого обходного пути, кроме установки более медленного таймера (путем изменения1000*(starttimer-i)
к 2000*(starttimer-i)
например).
PS Я только что заметил, что этот вопрос был задан более года назад, но я надеюсь, что это кому-то поможет:P