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

如何在Node.js程序退出时执行代码?discord.js机器人设置离线状态方法

实现方法

你不需要额外寻找onDestroy类的钩子,discord.js 内置的Client.destroy()方法本身就会主动断开与Discord服务器的WebSocket连接,调用完成后机器人会自动被标记为离线状态,你只需要监听Node.js进程的退出信号,在进程终止前执行该方法即可。

你可以在现有代码末尾添加如下代码:

// 监听Ctrl+C触发的手动退出信号
process.on('SIGINT', async () => {
  console.log('正在执行下线操作...');
  await client.destroy();
  console.log('机器人已离线,进程退出');
  process.exit(0);
});

// 监听系统发送的进程终止信号
process.on('SIGTERM', async () => {
  console.log('收到终止信号,正在下线机器人...');
  await client.destroy();
  process.exit(0);
});

// 可选:监听未捕获异常,避免异常崩溃时机器人状态异常
process.on('uncaughtException', async (error) => {
  console.error('出现未捕获异常:', error);
  await client.destroy();
  process.exit(1);
});

补充说明

如果你的业务逻辑中会主动调用client.destroy()关闭机器人,不需要额外做其他处理,该方法执行完成后机器人状态就会自动更新为离线。上述代码仅处理进程被外部信号终止的场景,覆盖异常退出、手动终止等边界情况,保证机器人状态能正常更新。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 01:15:04