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

我正在尝试编写一条命令,允许用户通过机器人更改其角色的颜色。 但是,我遇到了许多无法找到答案的问题。

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

@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收到此错误:

discord.ext.commands.errors.CommandInvokeError: Command raised an exception: AttributeError: 'NoneType' object has no attribute 'name'

您能告诉我我做错了什么吗?

#1楼 票数:3

您可以使用角色转换器从角色提及中获取角色。 我也会这样做,以便用户传递颜色的名称而不是数字:

@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)())

然后,您可以通过以下方式将其称为

!changecolor @NewMember dark gold

#2楼 票数:1 已采纳

将最后一行更改为

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

您正在将字典中所需的colour编号分配给colour属性,而不是该键上的实际颜色值。

  ask by ArtFiNCH translate from so

未解决问题?本站智能推荐:

2回复

存储不和谐的颜色

我正在尝试制作一个机器人,公会可以在其中选择嵌入的颜色。 我唯一的问题是存储这些颜色。 这是一些代码,作为我正在尝试做的一个例子。 我想要它,以便我可以在单独的命令中调用颜色。 唯一的问题是我不能调用 discord.Color.Blue。 我有存储它的方法,但我无法调用它。 有没有办法做到这一
1回复

赋予具有特定状态的不和谐成员角色

让我解释一下,所以我想给我 discord 服务器上状态为 discord.gg/chilling 的每个人一个角色! 到目前为止,我想出了这个逻辑 现在的问题是,我希望它一遍又一遍地迭代,我想不出这样做的想法! Ik 这个网站充满了天才,所以有人有想法吗? 非常感谢 :)
2回复

如何编码我的不和谐机器人以添加角色?

我希望我的不和谐机器人向我服务器中的成员提供滚动。 这是我尝试过但不起作用的方法。
1回复

不和谐静音命令

我目前正在尝试制作一个能够将用户静音的不和谐机器人。 到目前为止,我已经创建了这个脚本,它允许具有“员工”角色的人运行命令,并为标记的用户提供“静音”角色。 如果它不存在,它也会创建一个。 问题是下面的代码不起作用。 它不会在控制台中显示任何内容,但是如果您具有员工角色并且您运行该命令,则不会发生任
1回复

当用户对特定频道中的消息做出反应时分配不和谐角色

我希望用户在我的欢迎和角色不和谐频道中选择某种反应时被分配一个角色。 我到处寻找,但在 python 中找不到适用于最新版本 discord.py 的代码。 这是我到目前为止所拥有的:
1回复

为什么该程序在不和谐机器人中不能作为具有自动角色的验证系统工作?

请看下面的代码,我为验证做的事情。我想要一个程序,当新用户来到服务器并输入msg:verify我会得到一个反应验证的事情要做,如果它在 15 没有反应秒程序将终止,如果其他用户代替要求验证的用户做出反应,则不会发生任何事情,验证后用户将通过机器人自动获得角色,该角色称为“成员”。代码是在蟒蛇。 该程
1回复

403 Forbidden(错误代码:50001):添加角色时缺少访问权限 | 不和谐.py

我正在尝试快速为人们分配不同的角色,让用户感觉他们的名字是彩虹(是的,我知道它反对 TOS),并且我开始在删除它们之前向人们添加角色。 但是,在添加角色时,我在这篇文章的标题中收到错误消息。 我已经研究过这个问题并尝试了很多方法来解决它。 机器人的角色高于被分配的角色。 这是我的代码和输出: 输
1回复

如何创建赋予上述用户角色的机器人命令 | 不和谐.py

我想创建一个 Discord bot 命令。 例如,我想创建一个警告命令。 所以管理员会输入以下命令: 然后该命令将检查目标用户 ( @user ) 是否具有某些角色(例如,“A”、“B”、“C”和“D”)。 如果他没有“A”角色,他就会得到它,如果他有 A,他就会得到 B,依此类推。 管理