discord.py中create_role()设置角色位置的参数是什么?
解决Discord机器人自定义颜色角色位置问题
- 正确操作是创建角色后通过
Role.edit()方法调整位置,create_role()本身不支持直接传入位置参数,你之前尝试的position/pos参数在该方法中无效。 - 注意:机器人自身角色的位置必须高于要调整的目标角色,否则没有权限修改角色位置。
修改后的可用代码:
async def supercolor(ctx, hexcode): await ctx.send(hexcode) guild = ctx.guild # 修正十六进制颜色转换逻辑,原写法会导致格式错误 color_int = int(hexcode, 16) # 创建角色 role = await guild.create_role(name=hexcode, color=discord.Color(color_int)) # 获取用户当前最高角色的位置,将新角色设为该位置+1,确保显示在上方 user_highest_pos = ctx.author.top_role.position await role.edit(position=user_highest_pos + 1) # 给用户添加角色 await ctx.author.add_roles(role)
补充说明:
- 原代码中
newhex = "0x".join(hexcode)的写法错误,比如输入FF0000会被错误拼接成F0xF0x00x0,改用int(hexcode, 16)可以直接将十六进制字符串转为合法的颜色整数。 - 调整角色位置时,必须保证机器人角色的层级足够高(在服务器角色列表中的位置比目标角色更靠上),否则会触发权限异常。
- 通过
ctx.author.top_role.position获取用户最高角色的位置,将新角色位置设为该值+1,能确保自定义颜色角色显示在用户原有角色的上方,让颜色生效。
内容的提问来源于stack exchange,提问作者hiwhatsup
相关产品推荐
相关产品推荐

