目前我可以使用 ?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}`'))
答案 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"
)