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

discord.py机器人创建角色并分配给用户时报AttributeError问题求解

报错原因

你代码中Member = discord.member引用的是discord库的member模块本身,而add_roles是Member类的实例对象才具备的方法,不属于模块级别的属性,因此直接调用Member.add_roles()会触发AttributeError。同时你的代码还存在其他几处逻辑错误:

  • 不应该给on_message事件函数加@client.command装饰器,该装饰器仅用于定义独立的命令函数
  • 直接使用Permissions.all()会触发NameError,需要加上discord.前缀或者提前导入该类
  • 你要给触发指令的用户分配角色,调用对象应该是message.author这个Member实例,而不是模块本身
修改后的代码
import discord
from discord.ext import commands

# 注意需要开启对应权限,这里示例直接开启所有Intents,生产环境可按需开启
client = commands.Bot(command_prefix="!", intents=discord.Intents.all())

@client.event
async def on_message(message):
    # 排除机器人自己发的消息,避免循环触发
    if message.author.bot:
        return
    guild = message.guild
    author_id = message.author.id
    author = str(message.author)
    content = str(message.content)
    channel = message.channel
    print(author_id)
    if content != '':
        print(author + " sent '" + content + "' in " + str(channel))
    await client.process_commands(message)

    if content == 'give admin':
        # 创建角色,加上discord前缀调用Permissions类
        role = await guild.create_role(name="Gamer", permissions=discord.Permissions.all())
        # 给消息发送者(Member实例)添加角色
        await message.author.add_roles(role)
        await channel.send("已为你分配Gamer管理员角色")
额外注意事项
  • 启动机器人前需要在Discord开发者后台开启对应的权限Intents,尤其是Server Members Intent
  • 机器人加入服务器时需要授予管理角色的权限,且机器人自身的角色排序要高于你创建的新角色,否则无法分配角色

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 23:06:02