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

discord.py斜杠命令无法正确检测用户在线状态问题求助

问题原因与解决方案

核心原因

斜杠命令(应用命令)模式下,Discord传递的discord.Member对象默认不包含实时状态数据——应用命令的交互 payload 里只提供基础用户信息,不会主动附带在线状态这类需要实时同步的字段。而前缀命令是通过bot本地缓存获取成员数据,缓存里已经包含了通过Intents同步的状态信息,所以能正常显示。

代码额外问题

你代码里还有个明显bug:把创建embed和发送消息的逻辑放在了for status in l:循环内部,这会导致同一个命令触发四次消息发送,且状态替换逻辑会重复执行,必须把这部分代码移到循环外面。

修复步骤

  1. 拉取最新成员数据:在使用member.status前,调用await member.fetch()强制从Discord API获取最新的成员信息,包括在线状态。
  2. 调整代码结构:将embed创建、消息发送逻辑移到状态替换循环之外,避免重复发送。

修复后的代码示例:

@client.hybrid_command(name="userinfo", with_app_command=True, description="Get information about a user")
@app_commands.guilds(discord.Object(id=1009907559391567912))
async def userinfo(ctx: commands.Context, member: discord.Member = None):
    datetime_format = "%a, %d %b %Y"
    if member is None:
        member = ctx.author
    
    # 关键:拉取最新成员数据,确保状态正确
    member = await member.fetch()
    
    mstatus = str(member.status)
    status_mapping = [
        ["dnd", "🔴 Do Not Disturb"],
        ["idle", "🟠 Idle"],
        ["online", "🟢 Online"],
        ["offline", "⚫ Offline"]
    ]
    # 状态替换逻辑
    for status in status_mapping:
        mstatus = mstatus.replace(status[0], status[1])
    
    roles = [role for role in member.roles[1:]]
    embed = discord.Embed(
        color=discord.Color(embedcolor),  # 注意:embedcolor需提前定义
        title=f"{member}"
    )
    embed.add_field(name="**•Status•**", value=str(mstatus), inline=True)
    embed.set_thumbnail(url=f"{member.avatar.url}")
    embed.add_field(name=f"**•Roles• ({len(member.roles) - 1})**", value='• '.join([role.mention for role in roles]), inline=False)
    embed.add_field(name="**•Account Created At•**", value=f"{member.created_at.strftime(datetime_format)}", inline=True)
    embed.add_field(name="**•Joined Server At•**", value=f"{member.joined_at.strftime(datetime_format)}", inline=True)
    await ctx.reply(embed=embed)

额外说明

  • 确认你的bot已开启presences和members Intents(你提到已开启,这部分无需调整)。
  • member.fetch()会调用Discord API,这类低频操作不会触发调用次数限制,可放心使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 05:15:34