匹配 discord.py 中最接近的命令名称

Match to the nearest command name in discord.py

我正在尝试为我的 discord.py 机器人创建一个功能,当用户输入的内容不正确时,它会发送类似于用户用作命令的命令名称。例如,存在名为 .slap 的命令。但是用户输入 .slp 或类似的东西。

我希望机器人使用最相似的命令进行响应,在本例中为 .slap。我还是个初学者,所以我不知道该怎么做。我发现了一个名为 fuzzywuzzyLevenshtein distance 的库,但我不知道如何将它们用于我的机器人。

非常感谢任何帮助! 谢谢

首先,模糊匹配命令并执行它 认为 是正确的东西,添加到您的机器人中并不是一件好事。它增加了一个故障点,无论如何这对用户来说都是非常令人沮丧的。

但是,如果您建议一个可能的命令列表,它可能会工作得更好。

FuzzyWuzzy 是一个很好的工具。
它的文档非常有用,所以我真的认为如果您实际阅读它们不会有问题。

我用于实施的 2 美分是(在 pythonian pesudocode 中)

# user had input an invalid command
invalid_command = #userinput

command_list = [#list of your commands]
fuzzy_ratios = []
for command in command_list:
   ratio = fuzzywuzzy.ratio(invalid_command, command)
   fuzzy_ratios.append(ratio)

max_ratio_index = fuzzy_ratios.index(max(fuzzy_ratios))
fuzzy_matched = command_list[max_ratio_index]

return f"did you mean {fuzzy_matched}?"

请尝试实施并思考为什么需要实施。
你需要真正地尝试来实现你自己,否则你永远学不会。

你可以试试这个:

disables = []

@client.command()
@commands.has_permissions(administrator=True)
async def disable(ctx, command):
    command = client.get_command(command)
    if not f"{command}: {ctx.guild.id}" in disables:
        disables.append(f"{command}: {ctx.guild.id}")
        await ctx.send(f"Disabled **{command}** for this server.")

    else:
        await ctx.send('This command is already disabled')



@client.command()
@commands.has_permissions(administrator=True)
async def enable(ctx, command):
    command = client.get_command(command)
    if f"{command}: {ctx.guild.id}\n" in disables:
        await ctx.send(f"Enabled **{command}** for this server.")
    else:
        await ctx.send('This command is already enabled')

现在你必须添加:

if "COMMAND: {ctx.guild.id}" in disables:
    return

async def command(ctx) 和您为此命令的代码之间。

警告:这样做真的很糟糕。您可以尝试将禁用列表保存到 json 文件中。如果您需要帮助,请给我留言 - Special unit#5323

您可以使用别名。别名是命令的快捷方式,这里有一个例子:

@client.command(aliases=["slp","spla","spal","slpa","sap","salp"])
async def slap(ctx):
  #Do whatever slap does

要创建别名,请添加 aliases=[""] 并开始添加别名。别名将作为命令调用。如果我做了 .spla 或你添加的任何别名,它仍然会做 .slap 做的事情。希望这对您有所帮助!