You need to enable JavaScript to run this app. discord.py机器人userinfo指令异常:用户在线/勿扰却显示离线
优惠活动
大模型
产品
解决方案
定价
更多

discord.py机器人userinfo指令异常:用户在线/勿扰却显示离线

问题核心成因

在discord.py中读取Member.status这类实时在线状态,需要机器人拥有接收Discord网关Presence事件的权限。如果权限缺失,机器人完全收不到任何用户的状态变更推送,所有成员对象的status属性会被默认赋值为离线——这就是无论目标用户实际处于在线、勿扰(dnd)状态,指令始终返回离线的根本原因。

分步排查与解决步骤

1. 开启机器人后台的特权意图权限

  • 登录Discord开发者平台,进入对应机器人的应用管理页面
  • 左侧导航栏切换到「Bot」配置页,下滑找到「Privileged Gateway Intents」(特权网关意图)板块
  • 打开两个权限开关:
    • Presence Intent:用于接收用户实时在线状态、活动变更推送
    • Server Members Intent:用于获取服务器内的完整成员列表、成员属性数据
  • 保存后台配置修改

2. 在Bot初始化代码中显式声明意图

仅在后台开启权限还不够,discord.py v1.5+、v2.x 版本要求代码层面显式声明需要加载的意图,否则即使后台开了权限,客户端也不会加载对应事件。
修改你的Bot初始化代码:

# 顶部导入基础模块
from discord.ext import commands
import discord

# 实例化默认意图集,再手动开启需要的权限
intents = discord.Intents.default()
intents.presences = True  # 允许读取用户状态
intents.members = True    # 允许读取服务器成员数据

# 初始化Bot时传入intents参数
client = commands.Bot(
    command_prefix="你的实际指令前缀",
    intents=intents
)

如果你之前的初始化代码完全没有传入intents参数,就是最直接的问题点。

3. 验证与排错

  • 配置完成后重启Bot,重新运行userinfo指令测试
  • 如果仍有异常,可以在userinfo命令内加入临时调试代码,确认配置生效:
    # 在获取status的位置加一句打印
    print(f"调试输出:目标用户实际状态值为 {user.status};当前Bot已开启presence意图:{client.intents.presences};已开启members意图:{client.intents.members}")
    
    查看控制台输出,确认两个意图的值都为True,且返回的status值和实际状态匹配。
  • 版本兼容检查:如果调试输出显示意图已开启但状态仍为离线,检查当前安装的discord.py版本,过旧的v1.4及以下版本对新意图机制存在兼容问题,可升级到正式稳定版后重试。
补充说明

你现有代码中读取status、构造Embed的逻辑本身没有问题,只要意图配置正确,就会正常返回online、dnd、idle、offline等对应状态,不需要修改这部分业务代码。

内容的提问来源于stack exchange,提问作者ChaoticNebula

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.26 11:06:02