【问题标题】:Attempting To Make A Color Picker Command尝试制作颜色选择器命令
【发布时间】:2021-05-27 09:55:58
【问题描述】:

我正在尝试在 discord python 中创建一个颜色选择器命令,允许人们使用十六进制代码选择自定义颜色。它通过创建一个名为消息作者的角色,然后将角色的颜色设置为使用命令 db!color(十六进制代码)在聊天中发送的十六进制代码来实现此目的。但由于某种原因,我得到了错误

SyntaxError: invalid hexadecimal literal

这是代码

elif message.content.startswith('db!color'):
        role = str(message.author)
        color = message.content.replace('db!color ', '')
        guild = message.author.guild
        sleep(0.3)
        print(color)
        if get(message.guild.roles, name=role):
            await role.edit(guild=message.guild, role=role, color=discord.Color(0x + int(color))
        else:
            await guild.create_role(role=role, color=discord.Color(0x + int(color))

【问题讨论】:

  • SyntaxError 可能来自最后一行:cord.Color(0x + int(color)) 其中0x 不是有效的“十六进制文字。我猜你想加上引号:"0x" + str(color)

标签: python url-rewriting discord discord.py


【解决方案1】:

我不明白您为什么需要使用 on_message 事件,但是我使用命令创建了这个示例,这使得这项任务变得更加容易,而不必使用事件过滤更具体的结果。

使用此命令,您可以使用例如db!color red 来创建红色角色,或者您也可以使用十六进制代码#ff0000discord.Color 可以作为参数传递以允许这样做,然后您的 color 变量存储用户的颜色输入。

@client.command()
async def color(ctx, colour: discord.Colour):
    name = ctx.author.name
    await ctx.send('Created role with colour: ' + str(colour))
    await ctx.guild.create_role(name=name, colour=colour)

【讨论】:

    【解决方案2】:

    我很少使用discord.Color() 函数,但我认为你可以使用的是:

    if get(message.guild.roles, name=role):
        await role.edit(guild=message.guild color=int(color, 16))
    else:
        await guild.create_role(color=int(color, 16))
    

    请注意,此命令语法唯一有效的是:db!color FF000。如果用户输入像db!color #FF0000 这样的颜色作为颜色,您必须从字符串中删除“#”。

    【讨论】:

    • color=int(color, 16)中的16做了什么。试图理解我在我的代码中添加了什么。
    • 此代码返回错误py File "\\DESKTOP-H1GG905\He\bot.py", line 158, in on_message await guild.create_role(role=role, color=int(color,16)) File "C:\Users\Mikey Reeves\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages\discord\guild.py", line 1788, in create_role raise InvalidArgument('%r is not a valid field.' % key) discord.errors.InvalidArgument: 'role' is not a valid field.
    • int(color, 16) 将字符串变量“color”从十六进制转换为基数 10。
    • 从你的错误来看,角色关键字不是一个字段,所以我认为你必须删除代码中的role=role
    猜你喜欢
    • 2017-02-18
    • 1970-01-01
    • 1970-01-01
    • 2015-04-12
    • 2011-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多