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

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)

额外检查项

  1. 确认开发者面板中,机器人的Presence Intent和Server Members Intent已勾选(即使代码中设置了Intents.all(),这两个特权意图仍需在面板单独开启)。
  2. 避免将斜杠命令交互转换为传统上下文,interaction对象已包含所有所需数据,转换操作易引入过时缓存。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 16:15:57