Discord.py:一张支票有两个不同的错误输出
Discord.py: Have one check have two different error outputs
所以,我已经完成并为我的 discord 机器人添加了不同的功能。我正在努力使一个函数如果使用不当可能有两个不同的错误输出,具体取决于用户权限。
例如:
当我作为服务器管理员使用命令“!clear”时,我将它带到了我会得到错误的地方,
“请指定要删除的邮件数量。”因为该命令应该像“!clear (amount)”这样使用。
但是当不是管理员的人运行此命令时,我希望填充一个不同的错误。
例如:普通用户尝试使用“!clear”,我希望错误输出显示
“错误:您没有执行此命令的权限。”
但我无法弄清楚如何将两种不同的错误输出应用于一个函数/命令。
每当我进入普通帐户并执行命令“!clear”时,它会填充“请指定要删除的消息数量。”,而我只想为管理员输出该错误。
我只想要输出“错误:您没有执行此命令的权限。”显示普通用户何时尝试使用管理机器人命令。
@client.command()
@commands.has_permissions(administrator=True) # Only allows administrators to use this command
async def clear(ctx, amount : int):
await ctx.channel.purge(limit=amount)
await ctx.send(f'**Messages have been cleared! :thumbsup:**')
@clear.error
async def clear_error(ctx, error):
if isinstance(error, commands.MissingPermissions): # Error populates when someone with no permissions tries to run the command.
await ctx.send(f'**Error: You do not have permissions for this command.**')
@clear.error
async def clear_error(ctx, error): # Error populates when the user does not specify the amount of messages to delete
await ctx.send(f'**Please specify an amount of messages to delete. :memo:**')```
您可以只检查同一 clear_error
函数中出现的错误,例如:
@client.command()
@commands.has_permissions(administrator=True) # Only allows administrators to use this command
async def clear(ctx, amount : int):
await ctx.channel.purge(limit=amount)
await ctx.send(f'**Messages have been cleared! :thumbsup:**')
@clear.error
async def clear_error(ctx, error):
if isinstance(error, commands.MissingPermissions): # Error populates when someone with no permissions tries to run the command.
await ctx.send(f'**Error: You do not have permissions for this command.**')
elif isinstance(error, commands.MissingRequiredArgument): # Error populates when the user does not specify the amount of messages to delete
await ctx.send(f'**Please specify an amount of messages to delete. :memo:**')
您甚至可以添加更多类型的错误,更好的方法是提供更一般的错误消息。
并且为了避免在每个函数之前放置 @clear.error
装饰器,您可以覆盖 discord.py:
中的默认错误处理程序
@commands.Cog.listener()
async def on_command_error(self, ctx, error):
if isinstance(error, commands.MissingPermissions): # Error populates when someone with no permissions tries to run the command.
await ctx.send(f'**Error: You do not have permissions for this command.**')
elif isinstance(error, commands.MissingRequiredArgument): # Error populates when the user does not specify the amount of messages to delete
await ctx.send(f'**Please specify an amount of messages to delete. :memo:**')
文档:
所以,我已经完成并为我的 discord 机器人添加了不同的功能。我正在努力使一个函数如果使用不当可能有两个不同的错误输出,具体取决于用户权限。
例如: 当我作为服务器管理员使用命令“!clear”时,我将它带到了我会得到错误的地方, “请指定要删除的邮件数量。”因为该命令应该像“!clear (amount)”这样使用。
但是当不是管理员的人运行此命令时,我希望填充一个不同的错误。 例如:普通用户尝试使用“!clear”,我希望错误输出显示 “错误:您没有执行此命令的权限。”
但我无法弄清楚如何将两种不同的错误输出应用于一个函数/命令。
每当我进入普通帐户并执行命令“!clear”时,它会填充“请指定要删除的消息数量。”,而我只想为管理员输出该错误。
我只想要输出“错误:您没有执行此命令的权限。”显示普通用户何时尝试使用管理机器人命令。
@client.command()
@commands.has_permissions(administrator=True) # Only allows administrators to use this command
async def clear(ctx, amount : int):
await ctx.channel.purge(limit=amount)
await ctx.send(f'**Messages have been cleared! :thumbsup:**')
@clear.error
async def clear_error(ctx, error):
if isinstance(error, commands.MissingPermissions): # Error populates when someone with no permissions tries to run the command.
await ctx.send(f'**Error: You do not have permissions for this command.**')
@clear.error
async def clear_error(ctx, error): # Error populates when the user does not specify the amount of messages to delete
await ctx.send(f'**Please specify an amount of messages to delete. :memo:**')```
您可以只检查同一 clear_error
函数中出现的错误,例如:
@client.command()
@commands.has_permissions(administrator=True) # Only allows administrators to use this command
async def clear(ctx, amount : int):
await ctx.channel.purge(limit=amount)
await ctx.send(f'**Messages have been cleared! :thumbsup:**')
@clear.error
async def clear_error(ctx, error):
if isinstance(error, commands.MissingPermissions): # Error populates when someone with no permissions tries to run the command.
await ctx.send(f'**Error: You do not have permissions for this command.**')
elif isinstance(error, commands.MissingRequiredArgument): # Error populates when the user does not specify the amount of messages to delete
await ctx.send(f'**Please specify an amount of messages to delete. :memo:**')
您甚至可以添加更多类型的错误,更好的方法是提供更一般的错误消息。
并且为了避免在每个函数之前放置 @clear.error
装饰器,您可以覆盖 discord.py:
@commands.Cog.listener()
async def on_command_error(self, ctx, error):
if isinstance(error, commands.MissingPermissions): # Error populates when someone with no permissions tries to run the command.
await ctx.send(f'**Error: You do not have permissions for this command.**')
elif isinstance(error, commands.MissingRequiredArgument): # Error populates when the user does not specify the amount of messages to delete
await ctx.send(f'**Please specify an amount of messages to delete. :memo:**')
文档: