discord.js 试图获得 guildMember.presence.status 结果 "Cannot read properties of undefined (reading 'status')"
discord.js attempting to get guildMember.presence.status results in "Cannot read properties of undefined (reading 'status')"
我一直在摆弄 discord.js 并且一直在尝试制作一个命令,让我能够列出服务器(公会)中的所有在线用户。这个片段不完全是我的,但根据我的理解,我正在从交互中取出公会对象,并进一步取出公会成员经理。从那里调用 fetch 方法以获取所有成员的集合,然后根据状态对其进行过滤。
async execute(interaction) {
let { guild: { members } } = interaction;
let allMembers = await members.fetch();
let onlineUsers = allMembers.filter((member) => member.presence.status !== 'offline');
let usernames = onlineUsers.map((member) => member.displayName);
// array of usernames of users who are not offline
console.log(usernames);
我得到的错误是:
TypeError: Cannot read properties of undefined (reading 'status')
当我运行 node index.js
我认为值得一提的时候,当有其他users/other个机器人处于离线状态时,似乎会发生此错误。
我认为我的意图是正确的:
client = new Client({ intents: [Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_PRESENCES, Intents.FLAGS.GUILD_MEMBERS] });
This is what the Discord developer portal looks like.
如有任何帮助,我们将不胜感激!
是的,几周前我遇到了同样的问题...这解决了我的问题:
let guildMembers = await <guild>.members.fetch({ withPresences: true })
var onlineMembers = await guildMembers.filter(member => member.presence?.status != "offline").size
如果您想将机器人排除在计数之外,请将第二行更改为:
var onlineMembers = await guildMembers.filter(member => !member.user.bot && member.presence?.status != "offline").size
所以您可能已经注意到,现在只有在 presence
之后添加 ?.
才能正常工作,但为什么呢?
Mozilla 是这样解释的:
The optional chaining operator (?.) enables you to read the value of a property located deep within a chain of connected objects without having to check that each reference in the chain is valid.
这意味着,如果 presence
是 undefined 或 null,则 ?.
returns undefined 或 null 而不是停止程序并抛出错误。该成员的状态不会添加到集合中,机器人会继续计数。
如果你想了解更多,here's来源
备注
请记住,onlineMembers
永远不会 100% 准确。总有会员状态读不出来!
我一直在摆弄 discord.js 并且一直在尝试制作一个命令,让我能够列出服务器(公会)中的所有在线用户。这个片段不完全是我的,但根据我的理解,我正在从交互中取出公会对象,并进一步取出公会成员经理。从那里调用 fetch 方法以获取所有成员的集合,然后根据状态对其进行过滤。
async execute(interaction) {
let { guild: { members } } = interaction;
let allMembers = await members.fetch();
let onlineUsers = allMembers.filter((member) => member.presence.status !== 'offline');
let usernames = onlineUsers.map((member) => member.displayName);
// array of usernames of users who are not offline
console.log(usernames);
我得到的错误是:
TypeError: Cannot read properties of undefined (reading 'status')
当我运行 node index.js
我认为值得一提的时候,当有其他users/other个机器人处于离线状态时,似乎会发生此错误。
我认为我的意图是正确的:
client = new Client({ intents: [Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_PRESENCES, Intents.FLAGS.GUILD_MEMBERS] });
This is what the Discord developer portal looks like.
如有任何帮助,我们将不胜感激!
是的,几周前我遇到了同样的问题...这解决了我的问题:
let guildMembers = await <guild>.members.fetch({ withPresences: true })
var onlineMembers = await guildMembers.filter(member => member.presence?.status != "offline").size
如果您想将机器人排除在计数之外,请将第二行更改为:
var onlineMembers = await guildMembers.filter(member => !member.user.bot && member.presence?.status != "offline").size
所以您可能已经注意到,现在只有在 presence
之后添加 ?.
才能正常工作,但为什么呢?
Mozilla 是这样解释的:
The optional chaining operator (?.) enables you to read the value of a property located deep within a chain of connected objects without having to check that each reference in the chain is valid.
这意味着,如果 presence
是 undefined 或 null,则 ?.
returns undefined 或 null 而不是停止程序并抛出错误。该成员的状态不会添加到集合中,机器人会继续计数。
如果你想了解更多,here's来源
备注
请记住,onlineMembers
永远不会 100% 准确。总有会员状态读不出来!