使用discord.py修改Discord角色颜色遇AttributeError报错求助
解决discord.py中AttributeError: 'DiscordClient' object has no attribute 'edit_role'的问题
你碰到这个错误是因为discord.py v1.0及以上版本已经移除了Client.edit_role()方法,旧版本的API写法不再适用啦。现在修改角色属性的正确方式是直接调用角色对象自身的edit()方法。
问题分析
你的代码里尝试通过客户端对象self调用edit_role(),这是discord.py早期版本的用法。在新版本中,角色的编辑操作已经被封装到discord.Role对象内部,不需要再通过客户端来中转。
修正后的代码
只需要把原来的编辑角色那一行替换成角色对象的edit()调用即可:
import discord import os import asyncio from dotenv import load_dotenv, find_dotenv load_dotenv() discord_token = os.environ['your_discord_bot_token'] class DiscordClient(discord.Client): async def on_ready(self): print("Login as") print(self.user) print("-------") server = discord.utils.get(self.guilds) print(server) # 建议指定角色名称/ID来精准获取目标角色,避免拿到@everyone role = discord.utils.get(server.roles, name="测试角色") # 或者用ID获取:role = server.get_role(1234567890) print(role) # 直接调用角色对象的edit方法 await role.edit(hoist=True, colour=discord.Colour(0xe91e63)) client = DiscordClient() client.run(discord_token)
额外提醒
- 如果你用
discord.utils.get(server.roles)不指定筛选条件,默认会拿到服务器的@everyone角色,这个角色的部分属性(比如hoist)是无法修改的,建议通过角色名称或ID精准定位你要修改的角色。 - 确保机器人账号确实拥有管理角色的权限,并且机器人的角色位置要高于目标角色(否则无法修改该角色)。
内容的提问来源于stack exchange,提问作者Dmitriy Kisil
相关产品推荐
相关产品推荐

