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

Discord.py给消息作者分配角色时报Member无add_role属性如何解决

问题修复方案

错误原因

你使用的是discord.py 2.0及以上版本,该版本已移除旧版的Member.add_role()单数方法,因此调用时会触发属性不存在的报错。

修复步骤

  1. 替换角色添加方法
    将原代码中的await member.add_role(role)替换为新版API await member.add_roles(role)即可,该方法支持同时传入多个角色对象。
  2. 可选优化
    增加角色存在性校验逻辑,避免因角色不存在导致的二次报错。

完整修正后代码

if message.content.startswith(prefix + 'give admin'):
    if message.author.id == ownerid:
        member = message.author
        role_name = 'Admin'
        guild = client.get_guild(guildid)
        role = discord.utils.get(guild.roles, name=role_name)
        if role: # 校验角色是否存在
            await member.add_roles(role) # 替换为新版方法
            # 可选添加操作原因,方便服务器审计
            # await member.add_roles(role, reason="Owner self-grant admin")
        else:
            await message.channel.send(f"未找到名为{role_name}的角色")

额外注意事项

需确认Discord开发者后台的机器人设置中已开启Server Members Intent和Message Content Intent,同时代码初始化客户端时已正确配置对应权限:

import discord
intents = discord.Intents.default()
intents.members = True # 开启成员相关权限
intents.message_content = True # 开启消息内容读取权限,否则无法匹配命令前缀
client = discord.Client(intents=intents)

已确认的权限条件(Admin角色层级低于机器人、机器人有管理员权限)无需额外调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 22:15:03