#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, и я скажу «парар», он отправит сообщение, но неважно, что, если я скажу «пара» в другой раз, это будет до отправки сообщения. Я ясно выразился? я не говорю по-английски, так что извините, если вы меня не понимаете 🙁