Discord Bot显示离线且bot.js报ReferenceError问题求助
Discord Bot 离线且无响应的问题解决指南
看起来你遇到的问题主要来自两个核心点:过时的依赖库,以及错误的运行命令。让我一步步帮你理清并解决:
首先,纠正错误的运行命令
你执行的node -p bot.js是错误的用法:-p参数是让Node.js执行一段JavaScript表达式,而不是运行整个文件。所以它会把bot.js当成一个变量名,自然会报ReferenceError: bot is not defined。正确启动Bot的命令还是:
node bot.js
核心问题:discord.io 已停止维护
你使用的discord.io库已经多年没有更新,完全跟不上Discord API的新版本迭代,这就是为什么你的Bot进程能运行但始终显示离线的原因——它无法和Discord服务器建立有效的WebSocket连接。
最佳解决方案:迁移到维护中的 discord.js
discord.js是当前最流行、维护最活跃的Discord Bot开发库,下面是迁移的完整步骤:
- 卸载旧依赖,安装新库
npm uninstall discord.io winston npm install discord.js
- 重写你的 bot.js 代码(适配discord.js v14+)
替换成以下代码,和你原有逻辑保持一致:
const { Client, GatewayIntentBits } = require('discord.js'); const auth = require('./auth.json'); // 初始化客户端,必须开启必要的"意图"才能获取消息等数据 const client = new Client({ intents: [ GatewayIntentBits.Guilds, // 允许访问服务器信息 GatewayIntentBits.GuildMessages, // 允许读取服务器内的消息 GatewayIntentBits.MessageContent // 必须开启!允许读取消息的内容 ] }); // Bot上线后的回调 client.on('ready', () => { console.log(`✅ 已成功登录,用户名:${client.user.tag}`); }); // 监听消息事件 client.on('messageCreate', (message) => { // 忽略Bot自己发送的消息,避免循环 if (message.author.bot) return; // 处理!ping命令 if (message.content.startsWith('!ping')) { message.reply('Pong!'); } }); // 使用你的token登录Bot client.login(auth.token);
- 开启Discord开发者门户的权限
登录Discord开发者门户,找到你的Bot应用:
- 进入「Bot」页面
- 在「Privileged Gateway Intents」区域,开启Message Content Intent权限
- 保存更改
为什么你之前的定时器没用?
你添加的setInterval只是让Node.js进程保持运行,但discord.io本身无法建立有效的连接,所以Bot始终处于离线状态,自然无法响应!ping命令。迁移到discord.js后,不需要额外的定时器,库会自动维持连接。
额外提示
如果你坚持要继续使用discord.io,只能尝试安装它的旧兼容版本(比如npm install discord.io@github:izy521/discord.io#gateway_v6),但不推荐——因为这个库已经废弃,后续会不断出现更多兼容性问题,甚至完全无法使用。
内容的提问来源于stack exchange,提问作者SgtBot




