改变颜色角色不和谐

2024-10-01 11:22:00 发布

您现在位置:Python中文网/ 问答频道 /正文

首先,我想指出,我是python的初学者。在

我正在尝试编写一个命令,允许用户通过bot更改其角色的颜色。但是,我遇到了很多问题,我找不到答案。在

第一个问题是我无法访问调用命令的用户的角色。 然而,我决定跳过它,直接进入一个特定的角色。 所以我做了这个代码:

@client.command(pass_context=1)
async def changecolor(ctx, NewColor):
    author = ctx.message.author
    server = ctx.message.author.server
    dictOfColors = { '1' : discord.Color.default(),
                     '2' : discord.Color.teal(),
                     '3' : discord.Color.dark_teal(),
                     '4' : discord.Color.green(),
                     '5' : discord.Color.dark_green(),
                     '6' : discord.Color.blue(),
                     '7' : discord.Color.purple(),
                     '8' : discord.Color.dark_purple(),
                     '9' : discord.Color.magenta(),
                     '10' : discord.Color.dark_magenta(),
                     '11' : discord.Color.gold(),
                     '12' : discord.Color.dark_gold(),
                     '13' : discord.Color.orange(),
                     '14' : discord.Color.dark_orange(),
                     '15' : discord.Color.red(),
                     '16' : discord.Color.dark_red() }
    role = discord.utils.get(server.roles, name='New Member')
    if NewColor in dictOfColors:
        await client.edit_role(server, role, colour=NewColor)

但当我尝试时:.changecolor 5收到以下错误:

^{pr2}$

你能告诉我我做错了什么吗?在


Tags: 用户命令client角色messageserverroleauthor
2条回答

您可以使用角色converter从角色提及中获取角色。我还可以让用户传递颜色的名称而不是数字:

@client.command(pass_context=True)
async def changecolor(ctx, role: discord.Role, *, color):
    if role not in ctx.message.author.roles:
        await bot.say("You do not have the role " + role.name)
        return
    color = '_'.join(color.lower().split())
    if not hasattr(discord.Color, color):  # We could also use inspect.ismethod to only accept classmethod names
        await bot.say("I do not recognize the color " + color)
        return
    await client.edit_role(ctx.message.server, role, colour=getattr(discord.Color, color)())

你可以用类似于

^{pr2}$

把最后一行改成

await client.edit_role(server, role, colour=dictOfColors[NewColor])

您将要从字典中获得的颜色编号分配给colour属性,而不是该键处的值,该键是实际颜色。在

相关问题 更多 >