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

如何修复Discord.js客户端Intents初始化以实现批量私信服务器成员?

解决Discord机器人批量发送私信失败的问题

核心问题分析

你的代码无法正常运行,主要不是Intents配置的语法问题,而是两个关键因素:缓存未加载完整、后台Intents权限未开启。

具体解决方案

1. 开启Discord开发者后台必要权限

即使代码里写了Intents.all(),你仍需在Discord开发者平台的机器人页面,手动开启以下两个关键Intent:

  • Server Members Intent:用于获取服务器成员列表
  • Message Content Intent:用于发送和读取消息内容

2. 主动拉取成员数据,不要依赖缓存

guild.members.cache只存储机器人启动后缓存到的成员,并非服务器全部成员。必须主动调用fetch()方法拉取完整成员列表:

const { Client, Intents } = require('discord.js');
const client = new Client({ 
    intents: [
        Intents.FLAGS.GUILDS, 
        Intents.FLAGS.GUILD_MEMBERS, 
        Intents.FLAGS.DIRECT_MESSAGES
    ] 
});

client.on('ready', async () => {
    console.log(`已登录:${client.user.tag}`);
    // 遍历所有服务器
    for (const guild of client.guilds.cache.values()) {
        try {
            // 拉取当前服务器的所有成员
            const members = await guild.members.fetch();
            // 遍历成员发送私信
            for (const member of members.values()) {
                // 跳过机器人自身
                if (member.user.bot) continue;
                try {
                    await member.send("hi");
                    console.log(`已发送给 ${member.user.tag}`);
                } catch (err) {
                    console.error(`发送给 ${member.user.tag} 失败:`, err);
                }
                // 添加延迟避免触发Discord风控
                await new Promise(resolve => setTimeout(resolve, 1000));
            }
        } catch (err) {
            console.error(`获取服务器 ${guild.name} 成员失败:`, err);
        }
    }
});

client.login('你的机器人Token');

3. 额外注意事项

  • 批量发送必须加延迟,否则会被Discord API限制甚至封禁
  • 部分用户可能设置了拒绝接收陌生人私信,这类错误需用catch捕获处理
  • 确保机器人在目标服务器拥有查看成员列表的权限

内容的提问来源于stack exchange,提问作者Dev-91823

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 04:40:26