Discord.js v13版本Bot新成员加入时不发欢迎消息无报错如何解决
Discord.js v13 机器人新成员加入不发送欢迎消息解决方案
核心原因
discord.js v13 版本强制要求显式声明 Gateway Intents,且成员相关事件需要开启特权网关权限才能触发,这是无报错不触发 guildMemberAdd 事件的最常见原因。
1. 初始化客户端时补充必要意图
你需要在创建bot实例时添加 GUILD_MEMBERS 意图,示例代码如下:
const { Client, Intents } = require('discord.js'); const bot = new Client({ intents: [ Intents.FLAGS.GUILDS, // 基础服务器意图必须开启 Intents.FLAGS.GUILD_MEMBERS, // 监听成员加入/离开事件的必要意图 Intents.FLAGS.GUILD_MESSAGES // 发送消息必要意图 ] });
2. 开启Discord开发者后台特权网关权限
操作路径:打开Discord开发者平台 → 进入当前机器人对应的应用页 → 左侧切换到「Bot」选项卡 → 下拉找到「Privileged Gateway Intents」板块 → 开启「Server Members Intent」开关。
3. 补充代码异常兜底逻辑
当前代码缺少异常判断,可能因为频道不存在、无权限、用户无自定义头像导致发送失败,修改后的事件代码参考如下:
bot.on('guildMemberAdd', guildMember=>{ const User = guildMember.user console.log(User) // 如果这行没有输出,说明事件未触发,优先检查前两步的意图配置 const channel = guildMember.guild.channels.cache.get('798928691988004897'); // 频道不存在直接返回并打日志 if (!channel) return console.log('未找到指定欢迎频道,请检查频道ID是否正确') const embed = new Discord.MessageEmbed() .setColor('#0099ff') .setTitle('Welcome') .setDescription(`Welcome to the server <@${User.id}>`) // 无自定义头像时兜底使用默认头像 .setThumbnail(User.avatarURL() ?? User.defaultAvatarURL) channel.send({embeds :[embed]}).catch(err => console.log('发送欢迎消息失败:', err)); });
提示:直接用 channels.cache.get(频道ID) 比 find 更高效准确。
4. 确认机器人权限
检查欢迎频道的权限设置,确保机器人拥有以下权限:
- 发送消息
- 嵌入链接
内容的提问来源于stack exchange,提问作者Asuka
相关产品推荐
相关产品推荐

