Discord机器人角色校验异常:用户含指定角色仍触发拒绝逻辑
问题分析与解决方案
你的代码始终触发拒绝响应的核心原因是角色ID类型不匹配:
- 你定义的
role是字符串类型,但discord.Member.roles中角色的id属性是整数类型 - 用字符串ID去匹配整数ID,永远无法命中条件,因此会一直进入
else分支
修改后的代码
@bot.slash_command(name="test", description = "testing cmd") async def test(ctx, member: discord.Member): # 将角色ID改为整数类型 role_id = 1023451893575450665 # 遍历成员角色ID进行匹配 if role_id in [r.id for r in member.roles]: await ctx.send("your application has been accepted") else: await ctx.send("your application has been denied")
更高效的写法
借助discord.utils.get工具函数,先获取目标角色对象再判断:
from discord.utils import get @bot.slash_command(name="test", description = "testing cmd") async def test(ctx, member: discord.Member): role_id = 1023451893575450665 # 从服务器角色列表中获取目标角色 target_role = get(ctx.guild.roles, id=role_id) # 直接判断角色是否在成员的角色列表中 if target_role in member.roles: await ctx.send("your application has been accepted") else: await ctx.send("your application has been denied")
内容的提问来源于stack exchange,提问作者The OPKNIGHT
相关产品推荐
相关产品推荐

