查找在线/离线 Discord.js 的成员总数

2 javascript node.js discord discord.js

您好,我正在执行服务器状态命令,但我不知道如何在线/离线查找总成员,因此如果有人可以帮助我,那就太棒了。:)

Jak*_*kye 6

client.on("message", message => {
    if (message.author.bot) return false;

    if (message.content.toLowerCase() == "stats") {
        const Embed = new discord.MessageEmbed();
        Embed.setTitle(`Server Stats`)
        // Using Collection.filter() to separate the online members from the offline members.
        Embed.addField("Online Members", message.guild.members.cache.filter(member => member.presence.status !== "offline").size);
        Embed.addField("Offline Members", message.guild.members.cache.filter(member => member.presence.status == "offline").size);
        message.channel.send(Embed);
    };
});
Run Code Online (Sandbox Code Playgroud)


小智 5

以前的答案可能不起作用,因为自 2020 年 10 月以来,意图默认关闭。

最后,这就是我发现的工作,要求意图

意图

当涉及到您期望处理的数据量时,维护有状态的应用程序可能很困难,尤其是在规模上。Gateway Intents 是一个帮助您降低计算负担的系统。

特权意图

无需任何额外努力即可获得有关公会的基本信息。但是在启用特权意图之前,在有效负载中找不到一些数据。作为这个答案的特权意图之一是GUILD_PRESENCES。在这里阅读文档

启用意图

  • 第 1 步:转到不和谐开发者门户 -> 您的应用程序 -> 机器人,然后选择存在意图

  • 第2步:

const Discord = require('discord.js');
const intents = new Intents([
    Intents.NON_PRIVILEGED, // include all non-privileged intents, would be better to specify which ones you actually need
    "GUILD_MEMBERS", // lets you request guild members
    "GUILD_PRESENCES"
]);
Run Code Online (Sandbox Code Playgroud)
  • 第 3 步 - 现在要获取所有在线成员的地图,只需执行
let onlineMembers = (await guild.members.fetch()).filter((member) => !member.user.bot && member.user.presence.status == 'online'); // Remove the bot check as per use
Run Code Online (Sandbox Code Playgroud)

您现在可以检查 4 种状态,这与之前的答案onlineofflineidle、 中所做的不同dnd