首页 > 解决方案 > 为自定义子命令 discord.py 编写函数

问题描述

所以,我想为我的 python 机器人的所有子命令编写一个函数,但我不确定它们在 discord.py 中是如何工作的。例如,我在这里有这个静音代码。

@bot.command()
async def mute(ctx,member : discord.Member, *, reason=None):

    with open("role.json", "r") as f:
        roles = json.load(f)

    muted_role = discord.utils.get(ctx.guild.roles, id=roles[f"{ctx.guild.id}"]["role_id"])
  
    embed = discord.Embed(color=discord.Color(0xFF0000), title=f"{member} has been muted.")
            #sent to DM
    embedC=discord.Embed(title=f"{member} has been muted.",color=discord.Color(0xff0000))
    embedC.add_field(name=f"Member",value=f"{member}",inline=False)
    embedC.add_field(name=f"Moderator",value=f"{ctx.author}",inline=False)
    embedC.add_field(name=f"Reason",value=f"{reason}",inline=False)
    embedC.set_footer(text=f"Mute was successfully invoked. Expiration is indefinite.")
    await member.add_roles(muted_role)
    await ctx.send(embed=embed)
    await member.send(embed=embedC)

在上面的代码中是我的mute命令。我知道这与我的问题有点无关,但我想为 bot 创建一个自定义子命令。help您可以通过执行 bot删除内置命令,bot.remove_command("help")但如何删除自定义帮助子命令?现在这引出了问题的第二部分,这也是主要问题。如何为自定义子命令编写函数,这样我就不必为每个子命令编写和重复相同的过程?我尝试def subcommand(command, error)在命令是帮助所需的命令的地方进行操作,而错误是我要输入的错误消息。因此,如果我的静音命令失败,它将要求用户使用我的子命令,而我的子命令将为他们提供有关此命令如何工作的信息。谢谢!

标签: pythoncommandbotsdiscord.py

解决方案


有一个内置的子命令支持:

@bot.group()
async def cmd(ctx):
    if ctx.invoked_subcommand is None:
        await ctx.send("Command can't be invoked without a subcommand")


@cmd.command()
async def subcommand1(ctx, *args):
    #...


@cmd.command()
async def subcommand2(ctx, *args):
    #...

调用:

{prefix}cmd subcommand1 arg1 arg2

文档


推荐阅读