You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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开发库,下面是迁移的完整步骤:

  1. 卸载旧依赖,安装新库
npm uninstall discord.io winston
npm install discord.js
  1. 重写你的 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);
  1. 开启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

火山引擎 最新活动