Python 3.9.x下使用discord.py开发准入系统出现AttributeError求助
错误原因
你遇到的AttributeError: 'Client' object has no attribute 'add_roles'报错,是因为discord.py库的add_roles方法属于成员(Member)对象,而非全局的客户端(Client)对象,你调用的对象错误。
修复步骤
- 替换添加身份组的代码行:将原代码中
await client.add_roles(message.author, role)修改为await message.author.add_roles(role) - 补充角色存在判断,避免角色不存在时触发参数异常
- 确认权限配置:
- 机器人账号需要在服务器内持有「管理身份组」权限
- 机器人自身的身份组在服务器身份组排序中,必须高于要分配的
Hoplite身份组
- 若使用discord.py 2.0及以上版本,还需要在Discord开发者后台开启消息内容意图,同时初始化Client时传入对应的intents配置,否则机器人无法读取消息内容触发指令。
修复后完整代码
import discord from discord.utils import get import os # 2.0以下版本可删除intents相关配置,直接使用client = discord.Client() intents = discord.Intents.default() intents.message_content = True client = discord.Client(intents=intents) @client.event async def on_ready(): print('we are logged in as {0.user}'.format(client)) @client.event async def on_message(message): if message.author == client.user: return if message.content == 'give me admin': role = get(message.guild.roles, name='Hoplite') # 新增角色非空判断 if role: await message.author.add_roles(role) else: await message.channel.send("未找到对应身份组") client.run(os.getenv('Token'))
内容的提问来源于stack exchange,提问作者MadMeadyRevenge
相关产品推荐
相关产品推荐

