Как использовать clearInterval в другом операторе if вместо setInterval - PullRequest
4 голосов
/ 07 августа 2020

Я пробовал искать другие примеры, чтобы решить эту проблему самостоятельно, но я новичок в кодировании в целом, и я очень новичок в java скрипте, поэтому заранее прошу прощения за любые глупые ошибки, которые я совершаю .

По сути, я изучаю javascript, и я подумал, что хорошим интерактивным способом обучения будет создание бота Discord, чтобы я мог «видеть» окупаемость своих усилий и, следовательно, поддерживать мою мотивацию. Я решил, что спам-бот basi c будет хорошей отправной точкой, чтобы познакомить меня с большинством основных аспектов c.

После некоторого исследования я нашел метод « setInterval » что казалось идеальным для приложения, которое я задумал. Этот метод будет выполнять строку кода через каждый заданный интервал времени.

Так что я могу заставить своего бота спамить канал Discord, но эта проблема, с которой я столкнулся, заключается в том, что я хочу, чтобы он остановился.

client.on('message', message => {           //reacting when ever the 'message' EVENT occurs (e.g. a message is sent on a text channel in discord)

console.log('A message was detected and this is my reaction');
console.log(message.author + ' also knows as ' + message.author.username + ' said:\t' + message.content);       //message.author is the value of the person who sent the message, message.content is the content of the message


if(message.author.bot) {
    return null                 //returns nothing if the message author is the bot


} else if (message.content.startsWith(`${prefix}spam`)) {
    
    let timerId = setInterval(() => {                                           //starts to spams the channel
        message.channel.send('spamtest');
    }, 1500);   


} else if (message.content.startsWith(`${prefix}stop`)) {

    clearInterval(timerId);
    message.channel.send('condition met');

}

});

Ошибка, которую я получаю, заключается в том, что timerId не определен. Итак, я подумал, что это локальная переменная, и теперь я в тупике. Я не знаю, что еще попробовать, и я сильно расстроился из-за чего-то такого простого, поэтому я надеялся, что кто-то здесь может помочь.

Спасибо

1 Ответ

2 голосов
/ 07 августа 2020

Как указано Jaromanda X в комментариях , ключевое слово let объявляет переменную в текущей области видимости блока, делая эту переменную недоступной для другой области видимости блока (другой else if block).

Чтобы исправить это, вам нужно объявить переменную timerId в глобальной области видимости, чтобы она была доступна для всех других областей видимости блока:

let timerId; // declare timer in global scope

client.on('message', message => {           //reacting when ever the 'message' EVENT occurs (e.g. a message is sent on a text channel in discord)

console.log('A message was detected and this is my reaction');
console.log(message.author + ' also knows as ' + message.author.username + ' said:\t' + message.content);       //message.author is the value of the person who sent the message, message.content is the content of the message


if(message.author.bot) {
    return null                 //returns nothing if the message author is the bot


} else if (message.content.startsWith(`${prefix}spam`)) {
    
    timerId = setInterval(() => {                                           //starts to spams the channel
        message.channel.send('spamtest');
    }, 1500);   


} else if (message.content.startsWith(`${prefix}stop`)) {

    clearInterval(timerId);
    message.channel.send('condition met');

}
...