有没有更简单的方法可以通过命令进行嵌入? |不一致重新写入

时间:2019-05-06 18:44:14

标签: python discord.py discord.py-rewrite

我正在设置一个新命令,我想对其进行很好的嵌入。如果每个参数都为1个字长,则此方法有效。但是,对于dark reddark magenta之类的颜色,它将“深色”作为颜色,将“洋红色”作为标题,然后将其后的所有值作为值。

我认为我可以使用它的唯一方法是该命令让您执行k!embed <colour>, <title>, <value>之类的操作,但都用逗号隔开,但是我不知道执行此操作的方法。我尝试使用谷歌搜索,但是很可能是由于缺乏术语而没有发现。另外,添加更多的星号似乎也无济于事……这是我最后的绝望努力。

@client.command(name='embed',
                aliases=['e'],
                pass_ctx=True)
async def embed(ctx, colour, name, *, value):

    # making paramater match dictionary
    colour = colour.lower()
    colour.replace(' ', '_') 

    # checking if colour is valid
    if colour not in colours:
        await ctx.send('Invalid colour')
        return
    else:
        colour = colours[colour]
        # sets colour
        embed = discord.Embed(
            color = colour()
            )  
    # adds other paramaters
    embed.add_field(name='{}'.format(name), value="{}".format(value), inline=False)

    # final product
    await ctx.send(embed=embed)
    print('Embed executed\n- - -')

正如我所提到的,键入k!embed dark magenta title this is the value之类的内容会完全丢失,我更喜欢k!embed dark magenta, title, this is the value之类的内容。谢谢!

edit:对于上下文,这是colours字典和标题错字:

colours = { "red" : discord.Color.red,
            "dark_red" : discord.Color.dark_red,
            "blue" : discord.Color.blue,
            "dark_blue" : discord.Color.dark_blue,
            "teal" : discord.Color.teal,
            "dark_teal" :discord.Color.dark_teal,
            "green" : discord.Color.green,
            "dark_green" : discord.Color.dark_green,
            "purple" : discord.Color.purple,
            "dark_purple" :discord.Color.dark_purple,
            "magenta" : discord.Color.magenta,
            "dark_magenta" : discord.Color.dark_magenta,
            "gold" :discord.Color.gold,
            "dark_gold" : discord.Color.dark_gold,
            "orange" :discord.Color.orange,
            "dark_orange" :discord.Color.dark_orange
            }

1 个答案:

答案 0 :(得分:1)

这是一个自定义转换器,即使不引用颜色,也可以使用未解析的参数中的另一个单词来识别颜色:

from discord.ext.commands import Converter, ArgumentParsingError
from discord import Color, Embed

class ColorConverter(Converter):
    async def convert(self, ctx, argument):
        argument = argument.lower()
        if argument in ('dark', 'darker', 'light', 'lighter'):
            ctx.view.skip_ws()
            argument += "_" + ctx.view.get_word().lower()
        if not hasattr(Color, argument):
            ctx.view.undo()
            raise ArgumentParsingError(f"Invalid color {argument}")
        return getattr(Color, argument)()

@bot.command()
async def test(ctx, color: ColorConverter, *, text):
    await ctx.send(embed=Embed(color=color, description=text))