discord.py 如何在命令中传递另一个命令

时间:2021-03-02 16:19:07

标签: python python-3.x discord discord.py

目前我可以使用 ?hoist yes 更改设置。

如果我想更改我必须编写的设置?settings [setting] [value],我想这样做。例如,?settings hoist yes

@commands.command()
@commands.has_permissions(administrator=True)
async def settings(self, ctx):
    embed=discord.Embed(description="You can use `?[settings] [value]` to change a value of a specific setting. \nfor example, `?createroles yes`", color=0x850000)
    embed.set_author(name='ARB', icon_url='https://i.imgur.com/7ytdI2o.png')
    embed.add_field(name="Create Roles - `createroles`", value="Automatically create roles for games being played by members.", inline=False)
    embed.add_field(name="Mention - `mention`", value="Allow anyone to @mention roles created by ARB.", inline=False)
    embed.add_field(name="Hoist - `hoist`", value="Display roles created by ARB separately from online members.", inline=False)
    embed.set_footer(text="use prefix ? before each command.")
    await ctx.send(embed=embed)

@commands.command()
@commands.has_permissions(administrator=True)
async def hoist(self, ctx, value):
    embed=discord.Embed(color=0x850000)
    embed.add_field(name="hoist", value=f'has been set to `{value}`.', inline=False)
      
    if value.lower() == 'yes':
        self.stg_hoist = True
        await ctx.send(embed=embed)
    elif value.lower() == 'no':
        self.stg_hoist = False
        await ctx.send(embed=embed)
    else:
        await ctx.send(embed=discord.Embed(color=0x850000).add_field(name="hoist", value=f'can not be set to `{value}`'))

1 个答案:

答案 0 :(得分:0)

根据 discord.py 文档 (https://discordpy.readthedocs.io/en/latest/ext/commands/commands.html#positional),您可以拥有任意多个 位置 参数。所以只需添加一些位置参数。

@commands.command()
@commands.has_permissions(administrator=True)
async def settings(self, ctx, setting=None, value=None):
  if setting is None:
    # Whatever your settings was doing before, maybe with
    # updated help text to show new usage
  elif setting == "hoist":
    await self.hoist(ctx, value)

如果这不适合您,例如因为并非所有设置都只有一个值,所以您可以使用 variable 数量的参数 (https://discordpy.readthedocs.io/en/latest/ext/commands/commands.html#variable) 并根据您要更改的特定设置检查您是否拥有所需的内容(例如这:len(args) >= 1 and args[0] == "hoist")