以一条消息启动机器人并以其他命令结束

Start bot with one message and end with other command

我基本上是在创建一个执行循环的机器人,我希望它在您说 *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 次)

可能你打错了???

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

尝试如下操作:基本上您要做的是将您的间隔保存到一个变量中,稍后可以访问该变量以便再次停止您的间隔。

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 && clearInterval(client.interval);
    return console.log("stopped interval");
  },
};