discord.js获取指定用户在线状态报presence.status未定义如何解决
错误原因
- 执行顺序错误:你在客户端还未完成登录初始化(ready事件触发前)就尝试拉取用户数据,此时Discord接口还未完成连接,无法正确返回用户及在线状态数据
- 异步方法未处理:
client.users.fetch()是异步方法,返回的是Promise对象而非直接的用户实例,直接访问.presence必然返回undefined - 缺少状态兜底判断:即使用户实例拉取成功,部分场景下用户presence也可能为空,需要做空值判断避免报错
- 缺少必要权限意图:需要补充
GUILD_MEMBERS网关意图,才能正常拉取服务器内用户的状态数据
额外前置操作
你需要先进入Discord开发者后台的对应Bot设置页,在Privileged Gateway Intents分类下,开启Presence Intent和Server Members Intent两个开关,否则无法拉取到用户在线状态数据。
修正后代码
const { Client, Intents } = require('discord.js'); const { token} = require('./config.json'); const client = new Client({ intents: [ Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES, Intents.FLAGS.GUILD_PRESENCES, Intents.FLAGS.GUILD_MEMBERS ] }); client.once('ready', async () => { console.log("should be online"); try { // 异步拉取目标用户实例 const user = await client.users.fetch('替换为你要查询的用户ID'); // 空值兜底,用户状态不可见时返回预设提示 const usersStatus = user.presence?.status ?? '状态不可获取'; console.log(usersStatus); } catch (error) { console.error('拉取用户状态失败:', error); } }) //place at end of file client.login(token);
内容的提问来源于stack exchange,提问作者Anthony Littell
相关产品推荐
相关产品推荐

