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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 18:31:15