Запустите бота с одним сообщением и завершите другой командой

#javascript #node.js #discord.js #setinterval

Вопрос:

Я в основном создаю бота, который делает цикл, и я хочу, чтобы он закончился, когда вы скажете *parar , но я не знаю, как это сделать.

Вот немного кода, чтобы объяснить мою проблему

 module.exports = {
    name: 'epico',
    execute(message, args, Discord, client){

    //this is the loop
    var interval = setInterval(function(){...}, 1000)

}
 

Цикл начинается, когда я ставлю *epico , и я хочу, чтобы он останавливался, когда пользователь отправляет *parar

Я пытался сделать что-то вроде этого:

 client.on('message', message =>{
    if(message.content.startsWith('parar')){clearInterval(interval)}
}
 

Но это работает до тех пор, пока я не выключу бота (я хочу, чтобы он работал только 1 раз).

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

1. Вы пропускаете ) букву » а «в своем заявлении «если»

2. Код находится в одном файле или в разных? Я предполагаю, что команда находится в другом файле, если это так, вам нужно передать interval функцию в свой основной код. Либо это, либо, может быть, покажите нам больше вашего кода? (Особенно взаимодействие между обоими файлами).

Ответ №1:

Попробуйте что-то вроде следующего: В основном вы хотите сохранить свой интервал в переменной, которая будет доступна позже, чтобы снова остановить интервал.

 const Discord = require("discord.js");
const client = new Discord.Client();

let interval;

client.on("message", async (message) => {
  if (message.content.startsWith("*epico")) {
    return (interval = setInterval(() => {
      console.log("do something");
    }, 1000));
  }

  if (message.content.startsWith("*parar")) {
    clearInterval(interval);
    return console.log("stopped interval");
  }
});

client.login("your-token");
 

Я предполагаю, что вы используете несколько команд в нескольких разных файлах. Если это так, я бы просто сохранил интервал в объекте клиента в вашем *epico командном файле, так как вы все равно передаете его client своей execute функции.

 module.exports = {
  name: "epico",
  execute(message, args, Discord, client) {
    return (client.interval = setInterval(() => {
      console.log("do something");
    }, 1000));
  },
};
 

А затем просто очистите интервал в своей *parar команде. Также не забудьте проверить, установлен ли client.interval он вообще 😉

 module.exports = {
  name: "parar",
  execute(message, args, Discord, client) {
    client.interval amp;amp; clearInterval(client.interval);
    return console.log("stopped interval");
  },
};
 

Ответ №2:

может быть, у вас опечатка???

 client.on('message', message => {
    if (message.content.startsWith('parar')){
        clearInterval(interval)
    }
});
 

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

1. ноно, код работает нормально, но он просто продолжает работать, например, если вместо clearInterval это был message.channel.send, и я скажу «парар», он отправит сообщение, но неважно, что, если я скажу «пара» в другой раз, это будет до отправки сообщения. Я ясно выразился? я не говорю по-английски, так что извините, если вы меня не понимаете 🙁