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('你不能抢劫自己、离线用户或者机器人')
额外注意
如果你运行代码后还是无法正确识别用户状态,需要检查两处配置:
- 前往Discord开发者门户,在你的机器人设置页开启
Presence Intent权限 - 代码中初始化client时需要开启对应intent,示例如下:
intents = discord.Intents.default() intents.presences = True intents.members = True client = commands.Bot(command_prefix='你的前缀', intents=intents)
内容的提问来源于stack exchange,提问作者Infinotiver
相关产品推荐
相关产品推荐

