d.js v14 - 获取所有非机器人和非离线成员

问题描述 投票:0回答:1

我只是想统计非机器人用户、非机器人在线用户和机器人用户

非机器人用户和机器人用户工作得很好,但非机器人在线用户向我返回随机数

        await guild.members.fetch({ withPresences: true }).then(async fetchedMembers => {
            const onlineS = await fetchedMembers.filter(member => !member.presence || member.presence?.status !== 'offline' && !member.user.bot);
            console.log(onlineS.size)
        })

目前我使用它来获取非机器人在线用户数,但它只返回随机数并且始终member.presence为空,这就是我初始化客户端的方式

const client = new Client({ 
    intents: [GatewayIntentBits.Guilds, GatewayIntentBits.GuildMembers, GatewayIntentBits.MessageContent, GatewayIntentBits.GuildMessages, GatewayIntentBits.GuildMessageReactions, GatewayIntentBits.GuildVoiceStates, GatewayIntentBits.GuildPresences ],
    partials: [Partials.Message, Partials.Channel, Partials.Reaction, Partials.GuildMember],
    allowedMentions: { parse: [ 'roles', 'users' ] }
});

所以一切都应该正常工作,我犯了某种错误吗?

ps。我在 Discord 开发者门户中启用了存在意图

javascript discord discord.js
1个回答
0
投票

对我有帮助的是查看用户是否存在(在线、dnd、空闲),而不是查看他的存在是否未定义。我不确定为什么后者不能正常工作。

所以在你的代码中它看起来像这样:

await server.members.fetch({ withPresences: true }).then(async fetchedMembers => {
const onlineS = await fetchedMembers.filter(member => (member.presence?.status === 'online' || member.presence?.status === 'dnd' || member.presence?.status === 'idle') && !member.user.bot);
console.log(onlineS.size)
})

我确信有一个更简单的解决方案,但这对我有用

© www.soinside.com 2019 - 2024. All rights reserved.