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

Discord.py开发rob命令时成员身份与状态判断逻辑失效求助

问题原因

你的if判断逻辑存在多处错误,完全没有匹配你想要的校验规则:

  • 你没有将discord.Status.offline和被提及成员的实际状态做对比,单独写这个枚举值属于真值常量,永远判定为真,无法实现拦截离线用户的逻辑
  • 第三个判断条件写的是member.bot,即要求被提及成员是机器人才能进入抢劫逻辑,和你要的「拦截机器人」规则完全相反
  • 逻辑组合不符合要求,你需要三个校验条件同时满足才放行抢劫操作,需要将三个正确的正向条件用and组合

修复代码

@client.command(aliases=['rb'])
@commands.cooldown(2, 60, commands.BucketType.user)
async def rob(ctx,member : discord.Member):
  # 三个条件同时满足:不是自己、不是离线、不是机器人才放行
  if member != ctx.author and member.status != discord.Status.offline and not member.bot:
    await open_account(ctx.author)
    await open_account(member)
    bal = await update_bank(member)

    if bal[0]<100:
        await ctx.send('It is useless to rob them :(')
        return

    earning = random.randrange(0,bal[0])
    
    await update_bank(ctx.author,earning)
    await update_bank(member,-1*earning)
    await ctx.send(f'{ctx.author.mention} You robbed {member} and got ֍{earning} ')
  else:
    await ctx.send('你不能抢劫自己、离线用户或者机器人')

额外注意

如果你运行代码后还是无法正确识别用户状态,需要检查两处配置:

  1. 前往Discord开发者门户,在你的机器人设置页开启Presence Intent权限
  2. 代码中初始化client时需要开启对应intent,示例如下:
intents = discord.Intents.default()
intents.presences = True
intents.members = True
client = commands.Bot(command_prefix='你的前缀', intents=intents)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 10:45:02