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

Discord Bot长时间在线触发Node.js未处理error事件求助

解决Discord Bot随机触发未处理"error"事件的问题

兄弟,我之前维护Discord Bot的时候也碰到过几乎一模一样的情况——运行几小时后突然崩掉,抛出这个WebSocket相关的未处理错误。本质原因很简单:你的Bot没有监听Discord.js客户端的error事件,当WebSocket连接出现异常时,这个事件没被捕获处理,就会直接导致进程崩溃。

下面是具体的解决步骤:

1. 强制添加error事件监听器

这是最核心的修复,必须给你的Discord Client实例绑定error事件处理函数,把错误捕获下来,避免进程直接挂掉。示例代码:

const { Client } = require('discord.js');
const client = new Client();

// 关键:添加error事件监听
client.on('error', (error) => {
  console.error('[Discord客户端错误]', error);
  // 可选:把错误写入日志文件,方便后续排查
  // fs.appendFileSync('error.log', `${new Date().toISOString()}: ${error.stack}\n`);
});

// 其他Bot逻辑...
client.login('你的Bot Token');

2. 监听更多连接相关事件辅助排查

除了error,建议同时监听disconnect和reconnecting事件,这样能更清楚地知道连接状态变化,方便定位问题:

client.on('disconnect', (event) => {
  console.log(`[连接断开] 代码: ${event.code}, 原因: ${event.reason}`);
});

client.on('reconnecting', () => {
  console.log('[正在重新连接] 尝试恢复与Discord的连接...');
});

3. 排查潜在的依赖或网络问题

  • 更新依赖版本:旧版本的discord.js或ws(WebSocket库)可能存在已知的连接bug,建议更新到稳定版:
    npm update discord.js ws
    
  • 检查网络稳定性:如果你的Bot部署在本地或不稳定的服务器上,网络波动也可能导致WebSocket连接中断,这种情况下可以考虑换更稳定的主机,或者给Bot加个自动重连的逻辑(不过最新版discord.js已经自带重连机制了)。

4. 用进程管理器保障Bot可用性

如果你的Bot需要长时间在线,推荐用PM2这类进程管理器来运行,它能在Bot意外崩溃时自动重启,还能监控运行状态:

# 全局安装PM2
npm install -g pm2
# 启动Bot并命名
pm2 start your-bot-file.js --name "MyDiscordBot"
# 查看日志
pm2 logs MyDiscordBot

这样处理之后,你的Bot就不会再因为未处理的error事件突然崩溃了,而且能更清晰地追踪连接问题~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:45:57