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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 00:18:03