You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Discord.js机器人添加终止持续命令的停止指令?

实现Discord机器人循环指令与停止功能的正确方式

你之前的实现逻辑有问题:直接让机器人发送触发指令的消息会导致无差别自我触发,而且用client.process.end会直接终止机器人进程,显然不是合理的停止方式。正确的做法是用开关变量+定时任务来控制循环的启停,具体方案如下:

核心思路

  • 用全局变量标记循环状态,避免重复启动
  • 用定时任务发送消息,而非依赖消息触发消息
  • 停止时清除定时任务并重置状态,不会导致机器人崩溃

完整代码示例

// 全局变量:控制循环状态与存储定时任务实例
let spamTask = null;
let isRunning = false;

client.on("messageCreate", (message) => {
  // 忽略机器人自身发送的消息,避免无意义触发
  if (message.author.bot) return;

  // 启动循环指令
  if (message.content.startsWith("bt!donotusethis")) {
    if (isRunning) {
      return message.reply("已经在跑循环了!别重复触发");
    }
    isRunning = true;
    // 每隔1秒发送一次消息,可自行调整间隔时间
    spamTask = setInterval(() => {
      message.channel.send("这是循环发送的垃圾消息");
    }, 1000);
    message.reply("循环启动成功!输入bt!stop停止");
  }

  // 停止循环指令
  if (message.content.startsWith("bt!stop")) {
    if (!isRunning) {
      return message.reply("当前没在跑循环啊!");
    }
    // 清除定时任务并重置状态
    clearInterval(spamTask);
    isRunning = false;
    spamTask = null;
    message.reply("循环已停止!");
  }
});

关键细节说明

  • message.author.bot判断:必须加上这一行,防止机器人响应自己发送的消息,从根源避免无限制的自我触发
  • 定时任务管理:setInterval返回的任务实例要存起来,才能用clearInterval精准停止对应任务
  • 状态标记:isRunning变量用来判断当前是否处于循环状态,避免重复启动多个定时任务

内容的提问来源于stack exchange,提问作者Evan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 19:34:52