Discord斜杠命令中user.status始终返回offline问题求助
问题解决:Discord斜杠命令中获取用户状态始终返回offline
问题根源
斜杠命令中通过交互传入的discord.Member对象,以及通过get_context获取的ctx.author,均来自Discord的初始交互缓存数据,并未实时拉取用户的最新状态。而非斜杠命令基于消息上下文触发,成员数据会自动同步最新状态,因此能正常工作。
解决方案
通过interaction.guild.fetch_member()主动从Discord API拉取成员的最新数据,确保获取到实时状态。修改后的代码如下:
@app_commands.command(name='user', description=f'Детальна інформація про користувача') async def user_(self, interaction: discord.Interaction, user: discord.Member = None): # 无需转换为传统上下文,直接使用interaction的属性 target_user = user or interaction.user # 主动拉取最新成员数据,确保状态实时 target_user = await interaction.guild.fetch_member(target_user.id) print(target_user.status) user_status = None if target_user.status == discord.Status.online: user_status = "<:online:1038376483758030898>В мережі" elif target_user.status == discord.Status.offline or target_user.status == discord.Status.invisible: user_status = "<:ofline:1038376481774120970>Не в мережі" elif target_user.status == discord.Status.idle: user_status = "<:idle:1038376474958381056>Відійшов" elif target_user.status == discord.Status.dnd or target_user.status == discord.Status.do_not_disturb: user_status = "<:dnds:1048347246556626954>Не турбувати" # 确保embed变量已正确定义 await interaction.response.send_message(embed=embed, ephemeral=True)
额外检查项
- 确认开发者面板中,机器人的
Presence Intent和Server Members Intent已勾选(即使代码中设置了Intents.all(),这两个特权意图仍需在面板单独开启)。 - 避免将斜杠命令交互转换为传统上下文,
interaction对象已包含所有所需数据,转换操作易引入过时缓存。
内容的提问来源于stack exchange,提问作者Bohdan
相关产品推荐
相关产品推荐

