python - 为自定义子命令 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)
在命令是帮助所需的命令的地方进行操作,而错误是我要输入的错误消息。因此,如果我的静音命令失败,它将要求用户使用我的子命令,而我的子命令将为他们提供有关此命令如何工作的信息。谢谢!
解决方案
有一个内置的子命令支持:
@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
推荐阅读
- android - 为什么Android Studio ScrollView,有资源编译失败
- reactjs - 将文件从 Django FileField 上传到 Nex.js 公用文件夹
- html - Adding a table.tsv to HTML document
- python - 如何在 django 中使用外键来设置项目集?
- php - How to put the answer from recursive function in an array (PHP)?
- google-api - Converting a google calendar API in google colab
- swagger - Swagger: Changing property values based on status within a response example?
- reactjs - what are the command to send my local react app files to Github repository in VsCode?
- reactjs - 如何从嵌套集合中的数组中删除一条数据?
- c# - Getting Inconsistent Accessibility error on public interface