Discord开发:状态查询命令始终返回用户为'offline'问题求助
问题根本原因
Discord平台出于用户隐私保护规则,用户在线状态、成员列表等数据属于特权网关数据,默认不对机器人开放。未获取对应权限的机器人调用用户状态相关属性时,无论用户实际状态如何,都会统一返回offline,和代码逻辑无关。
修复方案
需按以下两个步骤配置即可正常拉取用户状态:
1. Discord开发者后台开启特权意图
- 进入Discord开发者平台的当前机器人应用管理页面,切换到「Bot」配置栏
- 找到Privileged Gateway Intents(特权网关意图)分区
- 手动开启
SERVER MEMBERS INTENT和PRESENCE INTENT两个开关,保存更改
2. 代码中显式声明启用对应意图
初始化机器人客户端时需要传入启用了对应权限的意图配置,完整参考代码如下:
import discord from discord.ext import commands # 初始化意图对象,启用基础默认权限 intents = discord.Intents.default() # 开启成员列表权限(对应后台SERVER MEMBERS INTENT配置) intents.members = True # 开启用户状态权限(对应后台PRESENCE INTENT配置) intents.presences = True # 初始化Bot实例时传入intents参数 client = commands.Bot(command_prefix="你自己设置的命令前缀", intents=intents) # 原有status命令逻辑无需修改 @client.command(name="status") async def status(ctx, user: discord.Member=None): if not user: user = ctx.message.author print(user) print(user.raw_status)
注意:如果你的机器人加入的服务器数量超过100个,需要向Discord官方提交特权意图使用申请,审核通过后才能正常开启上述两个开关。个人使用、服务器数量不足100的机器人直接开启即可。
内容的提问来源于stack exchange,提问作者Broso56
相关产品推荐
相关产品推荐

