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

Discord.js机器人仅识别自身,需他人发消息后才能获取角色全部成员

解决思路

1. 废弃的fetchAllMembers配置是核心问题

Discord.js v14+已移除fetchAllMembers选项,你代码中的该配置完全无效,这是初始缓存仅包含机器人自身的关键原因。需改用主动调用guild.members.fetch()来预加载成员。

2. 主动拉取成员而非依赖本地缓存

不要直接依赖role.members的本地缓存,通过fetch()方法从Discord API主动获取角色成员的最新数据,避免缓存未更新的问题:

module.exports = (client) => {
    client.on('ready', async () => {
        // 机器人就绪后预加载目标服务器的所有成员
        const guild = client.guilds.cache.get('1050150840813498401');
        if (!guild) return;
        
        // 预加载成员到缓存
        await guild.members.fetch();

        setInterval(async () => {
            const role = guild.roles.cache.get('1050889003110506516');
            if (!role) return;
            
            // 主动拉取该角色的所有成员
            const roleMembers = await role.members.fetch();
            console.log(roleMembers.map(m => m.user.id));
        }, 5000);
    });
};

3. 确保代码在机器人完全就绪后执行

原定时任务可能在机器人未完成初始化、缓存未加载时就启动,将定时任务放在ready事件内运行,可保证客户端已连接并完成基础数据加载。

4. 再次验证权限与Intent配置

  • 确认Discord开发者后台的机器人页面中,服务器成员Intent(Privileged Gateway Intents下的选项)已开启;
  • 代码中确保正确导入GatewayIntentBits,且GuildMembers Intent已加入配置数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 14:20:25