我需要帮助检查斜线命令是否存在。 我的目标是添加一个斜杠命令,让您禁用其他斜杠命令。因此我需要检查命令是否存在。 这是我现在拥有的代码:
@tree.command(guild = discord.Object(id=1129737425653071992), name='disable', description='Disable a specified Command')
async def disable(interaction: discord.Interaction, command: str):
print(tree.get_commands(guild=discord.Object(id=1129737425653071992)))
if command in tree.get_commands(guild=discord.Object(id=1129737425653071992)):
await tree.remove_command(command)
await interaction.response.send_message(f"{command} was disabled. You can reenable it by running /enable {command}")
else:
await interaction.response.send_message(f"Command could not be found: {command}")
当命令不存在时,确实如此。但当它这样做时,它仍然说它不存在。
我尝试过,正如你在上面的代码中看到的那样
tree.get_commands(guild=discord.Object(id=1129737425653071992)
打印,就像这样:
如何检查斜杠命令是否存在?
tree.remove_command(command)
是不是异步。
tree.get_commands
返回:
List[Union[ContextMenu, Command, Group]]
这意味着如果您想专门检查
Command
,则必须对其进行解析。 command
参数也是一个字符串,这就是它一开始没有返回 true 的原因。但是,我们可以在命令树中使用一个更简单的命令。
tree.get_command
(单数而非复数)返回:
Optional[Union[Command, ContextMenu, Group]]
是的,这是同一件事。但参数不同。
command (str) – 要获取的根命令的名称。
guild (可选[Snowflake]) – 从中获取命令的公会。如果没有给出或没有,那么它会得到一个全局命令。
type (AppCommandType) – 要获取的命令类型。默认为 chat_input,即斜杠命令。
您可以将之前的
command
字符串参数传入此命令中。然后你可以检查它是否返回了任何东西。这比解析快得多(如前所述)。您也不检查是否存在多个命令,所以这是最好的选择。
下面我有一个代码示例(作为参考,我之前做了另一个命令):
@tree.command(guild=discord.Object(id=pretendtheressomethinghere), name='disable', description='Disable a specified Command')
async def disable(interaction: discord.Interaction, command: str):
if tree.get_command(command, guild=discord.Object(id=pretendtheressomethinghere)):
tree.remove_command(command)
await interaction.response.send_message(
f"{command} was disabled. You can reenable it by running /enable {command}")
else:
await interaction.response.send_message(f"Command could not be found: {command}")
但是,这实际上并没有禁用该命令。为什么是这样?嗯,
tree.remove_command
需要同步树。只需添加以下行:
await tree.sync(guild=discord.Object(id=inserthingyhere))
它应该可以工作!
完整代码:
@tree.command(guild=discord.Object(id=1044711937956651089), name='disable', description='Disable a specified Command')
async def disable(interaction: discord.Interaction, command: str):
await interaction.response.defer()
if tree.get_command(command, guild=discord.Object(id=1044711937956651089)): # check if the command exists
tree.remove_command(command, guild=discord.Object(id=1044711937956651089)) # remove the command
print("command removed!")
await tree.sync(guild=discord.Object(id=1044711937956651089)) # sync the tree
print("tree synced!")
await interaction.followup.send(
f"{command} was disabled. You can reenable it by running /enable {command}")
else:
await interaction.followup.send(f"Command could not be found: {command}")
在本地进行了测试,斜杠命令
say
不再出现。