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

Discord Bot无法向选择Advertiser角色的新成员发送欢迎DM求助

问题排查与修复方案

核心问题:事件触发时机错误

你当前用guildMemberAdd事件监听新成员加入,但新成员刚加入服务器时还未选择Advertiser角色,此时member.roles.cache里不会包含该角色,条件永远不成立,自然无法触发DM发送逻辑。

修复方案:监听角色添加事件

改用guildMemberRoleAdd事件,当成员被添加Advertiser角色时再触发发送逻辑:

const { Client, GatewayIntentBits } = require('discord.js');
const client = new Client({
    intents: [
        GatewayIntentBits.Guilds,
        GatewayIntentBits.GuildMembers, // 必须开启
        GatewayIntentBits.GuildMessages,
        GatewayIntentBits.GuildMessageReactions,
    ]
});

const advertiserRoleId = '1138502484210495648';

client.on('guildMemberRoleAdd', (member, role) => {
    // 校验添加的角色是否为目标角色
    if (role.id === advertiserRoleId) {
        // 发送DM并捕获可能的错误
        member.send("Welcome to the server! Thank you for selecting the 'Advertiser' role.")
            .catch(err => {
                console.error(`无法给用户 ${member.tag} 发送DM:`, err);
            });
    }
});

client.login('TOKEN');

其他必须检查的事项

  • 开启特权意图:在Discord开发者门户的Bot页面,找到「Privileged Gateway Intents」,开启Server Members Intent,否则guildMemberRoleAdd等成员相关事件不会触发。
  • Bot权限验证:确保Bot在服务器中有Manage Roles权限,同时注意部分用户可能关闭了非好友的DM接收,导致发送失败。
  • 错误日志补充:添加catch块捕获DM发送错误,能快速定位是权限问题还是用户设置问题。

补充优化思路

如果你的角色选择是通过欢迎面板(按钮/菜单)实现的,也可以直接在面板的交互事件里发送DM,逻辑更精准,无需监听全局角色添加事件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 18:33:25