如何在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
相关产品推荐
相关产品推荐

