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

Discord.js机器人欢迎/退群消息未发送到指定频道无报错求排查

核心问题排查与修复方案

1. 未开启GUILD_MEMBERS特权意图

这是无报错不触发事件的最常见原因:discord.js v12及以上版本中,guildMemberAdd、guildMemberRemove属于特权意图,必须同时开启两处配置事件才会触发:

  • 进入Discord开发者面板对应应用的「Bot」设置页,开启「Privileged Gateway Intents」分类下的Server Members Intent
  • 客户端初始化时,在intents配置项中添加GuildMembers(v14版本写法)或GUILD_MEMBERS(v13版本写法)

2. 静态guild变量获取频道逻辑错误

你提前声明的guild是启动时获取的静态实例,极易出现缓存缺失、实例失效的问题,正确逻辑是从事件回调的member对象上动态获取当前服务器实例:
将所有guild.channels.cache.get替换为member.guild.channels.cache.get

3. 消息发送参数格式不符合版本要求

discord.js v13及以上版本中,channel.send()的所有参数必须合并为单个配置对象,不能拆分传文本和附件:
原欢迎消息发送代码:

channel.send(
    "Welcome message here",
  attachment
);

修改为:

channel.send({
  content: "Welcome message here",
  files: [attachment]
})

如果使用discord.js v14,MessageAttachment类已迁移至@discordjs/builders包,也可以直接将canva返回的Buffer传入files数组省略实例化步骤。

4. 退群消息缺失空判断

退群逻辑中获取频道后未做空校验,频道不存在/缓存未加载时直接调用send会抛出未捕获异常,修改为以下逻辑:

client.on('guildMemberRemove',(member) => {
  if(member.guild.id !== "737222740305641472") return;
  const channel = member.guild.channels.cache.get('781737515421138984')
  if (!channel) return;
  channel.send({content: `Goodbye message here`});
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 14:54:04