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

如何实现Discord按钮点击发放角色?遇AttributeError问题求助

问题分析与解决

错误原因

你遇到的AttributeError是因为**InteractionResponse对象没有add_roles方法**,这个方法属于Discord的成员(Member)对象,你找错了调用对象。

修正后的代码

@client.slash_command() # 创建一个斜杠命令
async def button(ctx):
    button = Button(label="验证", style=discord.ButtonStyle.gray)

    async def button_callback(interaction):
        # 获取点击按钮的服务器成员对象(必须是Member,不能是User)
        member = interaction.user
        # 通过角色ID获取服务器中的角色对象
        role = interaction.guild.get_role(1075847753495756860)
        
        if role:
            # 给成员添加角色
            await member.add_roles(role)
            # 回应交互,告知用户操作成功(必须回应,否则Discord会判定交互超时)
            await interaction.response.send_message("已成功获取验证角色!", ephemeral=True)
        else:
            await interaction.response.send_message("未找到指定角色,请检查角色ID是否正确!", ephemeral=True)

    button.callback = button_callback
    view = View()
    view.add_item(button)
    embed = discord.Embed(title="<:fileandfolder:1066266358171586611> | **验证**", description="> 点击下方按钮完成验证")
    embed.set_image(url="https://i.imgur.com/lvSiQm8.png")
    await ctx.respond(embed=embed, view=view) # 发送包含按钮的消息

关键修改点

  • 替换调用对象:从interaction.response.add_roles改为对成员对象调用add_roles,且需先通过ID获取角色实例
  • 强制交互回应:必须用interaction.response.send_message反馈结果,否则Discord会判定交互超时;ephemeral=True设置仅操作用户可见提示
  • 增加错误校验:检查角色是否存在,避免因ID错误导致后续报错
  • 中文适配:将按钮标签、嵌入内容改为中文,贴合使用场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 03:07:37