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

Discord.js机器人本地可运行但在Azure Linux虚拟机上无法回复消息

排查解决步骤

1. 校验discord.js版本兼容性

首先确认虚拟机上安装的discord.js版本和本地开发环境一致,执行以下命令查看版本:
npm list discord.js
如果虚拟机上安装的是v14及以上版本,原有代码存在两处不兼容问题:

  • 旧版Intents.FLAGS已被替换为IntentsBitField.Flags
  • 消息监听事件message已被废弃,需改为messageCreate

2. 补全网关意图配置

你当前代码仅开启了GUILDS单意图,要实现消息监听和内容读取,必须额外开启两个权限:

  • 代码中添加GUILD_MESSAGES(接收服务器消息)和MESSAGE_CONTENT(读取消息文本内容)意图
  • 前往Discord开发者后台对应机器人设置页,找到Privileged Gateway Intents板块,开启Message Content Intent开关,该权限是Discord API v10之后强制要求的特权权限,仅代码配置不开启后台开关不会生效

3. 排查Azure网络限制

虽然机器人能正常登录说明网关连接正常,但仍有可能存在出站规则拦截消息发送请求:

  • 在虚拟机内执行curl https://discord.com/api/v10/gateway,确认可以正常返回JSON数据,无超时或拒绝访问报错
  • 检查Azure网络安全组(NSG)的出站规则,确认443端口出站未限制Discord相关IP段,同时检查虚拟机内部防火墙(ufw/iptables)没有拦截对应请求

4. 校验机器人权限配置

确认当前使用的机器人账号:

  • 邀请进服务器时已授予查看频道、发送消息、读取消息历史基础权限
  • 对应测试频道的单独权限配置没有拒绝机器人的发信权限

修正后兼容v14版本的测试代码

const {Client, IntentsBitField } = require('discord.js');
const client = new Client({ 
  intents: [
    IntentsBitField.Flags.Guilds,
    IntentsBitField.Flags.GuildMessages,
    IntentsBitField.Flags.MessageContent
  ] 
});
const token = "hidden";
client.on("ready", () => {
  console.log(`Logged in as ${client.user.tag}!`);
});
client.on("messageCreate", message => {
  if (message.content === "ping") {
    message.reply("pong");
  }
});

client.login(token);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 05:57:01