【发布时间】:2020-11-11 10:40:50
【问题描述】:
您好,我正在创建一个服务器状态命令,但我不知道如何找到总成员在线/离线,所以如果有人可以帮助我,那就太好了。 :)
【问题讨论】:
标签: javascript node.js discord discord.js
您好,我正在创建一个服务器状态命令,但我不知道如何找到总成员在线/离线,所以如果有人可以帮助我,那就太好了。 :)
【问题讨论】:
标签: javascript node.js discord discord.js
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);
};
});
【讨论】:
最后这就是我发现的工作,请求意图。
当涉及到数据量时,维护有状态的应用程序可能很困难 您需要处理,尤其是大规模处理。 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"
]);
let onlineMembers = (await guild.members.fetch()).filter((member) => !member.user.bot && member.user.presence.status == 'online'); // Remove the bot check as per use
您现在可以检查 4 种状态,这与之前的答案 online、offline、idle、dnd 中所做的不同。
【讨论】: