Hassan_BH
Hassan_BH

Reputation: 113

How can I stop the interval?

I'm making a setInterval method in my discord bot, but I have an issue in stopping the Interval. Look at my code:

const Discord = require('discord.js');

const client = new Discord.Client();


client.once('ready', () => {

  console.log('Im online');

});


client.on('message', async msg => {

var interval;

if(msg.content == '!spam')
{
interval = setInterval(() => {
    msg.channel.send('test');
   }, 2000);
}

if(msg.content.startsWith('!stop'))
{
clearInterval(interval);
}

});

That should definitely work, right? If you know the answer please help me!!

Upvotes: 0

Views: 52

Answers (1)

CertainPerformance
CertainPerformance

Reputation: 371019

The problem is:

client.on('message', async msg => {
   var interval;

This creates a new variable binding interval every single time the message handler runs. Inside any single message handler, either

  interval = setInterval(() => {
     msg.channel.send('test');
  }, 2000);

will run, or

  if (msg.content.startsWith('!stop')) {
     clearInterval(interval);
  }

will run (or neither will run). But the interval is not persistent outside of the function, so further messages will be attempting to clear a different interval binding.

Make interval persistent instead, and also check that you don't start an interval while one is already going on:

let interval;
client.on('message', (msg) => {
   if (msg.content == '!spam' && !interval) {
      interval = setInterval(() => {
         msg.channel.send('test');
      }, 2000);
   }
   if (msg.content.startsWith('!stop')) {
      clearInterval(interval);
      interval = null;
   }
});

Upvotes: 1

Related Questions