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

部署到Ubuntu 16.04虚拟服务器的Discord Bot不响应命令求助

问题原因及修复方案

1. 缺少必要的Gateway Intents配置

你当前初始化Client只开启了GUILDS这一个intent,完全没有配置消息相关的权限,这是导致Bot收不到消息的最常见原因:

  • 首先要在Discord开发者后台的Bot设置页,开启「Message Content Intent」权限
  • 修改Client初始化代码,补充必要的intent:
const client = new Client({ intents: [
  Intents.FLAGS.GUILDS,
  Intents.FLAGS.GUILD_MESSAGES,
  Intents.FLAGS.DIRECT_MESSAGES // 需要接收私聊消息可以补充这个配置
] });
  • 如果你使用的是discord.js v13及以上版本,原来的client.on("message")事件已经废弃,要改成client.on("messageCreate")才能正常触发消息监听。

2. Node.js版本不兼容

discord.js v13以上要求Node.js版本 >= 16.6.0,Ubuntu 16.04默认软件源的Node.js版本最高只有8.x,完全不满足运行要求:

  • 你可以执行node -v查看当前服务器的Node版本,如果低于要求版本,用nvm安装符合要求的Node版本即可。

3. 数据库操作异步逻辑错误

你写的IsThereAnythingSQL函数是完全无效的,mysql的query是异步回调执行,你函数里直接return false的代码会在数据库查询返回之前就执行,永远拿不到正确的查询结果:

  • 可以把数据库查询改成Promise写法,用async/await来处理异步逻辑,修正后的示例如下:
function IsThereAnythingSQL(sql) {
  return new Promise((resolve, reject) => {
    connection.query(sql, (err, results, fields) => {
      if (err) return reject(err);
      resolve(results.length >= 1);
    });
  })
}
// 调用的时候要在async函数里用await:
// const exists = await IsThereAnythingSQL("你的SQL语句")

另外也要确认服务器上的MySQL服务正常运行,已经创建了quiz数据库和对应的users表,root用户的密码确实为空,本地和服务器的数据库配置是一致的。

4. 其他检查项

  • 执行node 你的入口文件名.js的时候查看控制台输出,有没有打印I am ready!,如果没打印就是token无效或者登录失败,检查token是否正确、服务器网络能不能正常访问Discord的API
  • 确认Bot已经被邀请到对应服务器,并且拥有发送消息、读取消息历史的权限
  • Ubuntu 16.04的系统防火墙有没有限制出站请求,Discord的API请求被拦截也会导致Bot无响应。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 23:06:01