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
相关产品推荐
相关产品推荐

