【问题标题】:Find the total of members online/offline Discord.js在线/离线 Discord.js 查找成员总数
【发布时间】:2020-11-11 10:40:50
【问题描述】:

您好,我正在创建一个服务器状态命令,但我不知道如何找到总成员在线/离线,所以如果有人可以帮助我,那就太好了。 :)

【问题讨论】:

标签: javascript node.js discord discord.js


【解决方案1】:
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);
    };
});

【讨论】:

    【解决方案2】:

    以前的答案可能不起作用,因为自 2020 年 10 月以来,intents 在默认情况下处于关闭状态。

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

    意图

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

    特权意图

    关于公会的基本信息,无需任何额外努力。但是在启用 Privileged Intent 之前,在有效负载中找不到一些数据。此答案的特权意图之一是GUILD_PRESENCES。阅读docs here

    启用意图

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

    • 第 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"
    ]);
    
    • 第 3 步 - 现在获取所有在线会员的地图,只需这样做
    let onlineMembers = (await guild.members.fetch()).filter((member) => !member.user.bot && member.user.presence.status == 'online'); // Remove the bot check as per use
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-16
      • 1970-01-01
      • 1970-01-01
      • 2021-05-10
      相关资源
      最近更新 更多