You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 08:36:07