discord.js获取guildMember.presence.status提示无法读取undefined的status属性如何解决
问题根因
该报错由部分成员的presence属性为undefined导致:即便已开启所有必要权限和Intent,Discord API也不会为长期离线的用户、未同步到状态的离线机器人返回presence数据,直接读取presence.status就会触发类型错误。
修复方案
调整成员筛选逻辑,先判断presence属性是否存在再校验状态,修正后的代码如下:
async execute(interaction) { let { guild: { members } } = interaction; let allMembers = await members.fetch(); // 仅保留presence存在且状态不是离线的成员 let onlineUsers = allMembers.filter((member) => member.presence && member.presence.status !== 'offline'); let usernames = onlineUsers.map((member) => member.displayName); // array of usernames of users who are not offline console.log(usernames); }
也可以使用ES2020的可选链语法简化判断:
let onlineUsers = allMembers.filter((member) => member.presence?.status !== 'offline' && !!member.presence);
额外排查点
- 若你使用的是discord.js v14及以上版本,原有Intent声明方式已失效,需要替换为
GatewayIntentBits枚举对应的配置项。 - 确认你所在服务器的成员隐私设置没有限制机器人读取成员状态。
内容的提问来源于stack exchange,提问作者akmrv
相关产品推荐
相关产品推荐

