【发布时间】:2021-04-10 11:17:53
【问题描述】:
我的机器人目前只被允许并有权在一个频道中发送和管理消息。如果我在允许的频道中触发$enable 之类的命令,则启用命令将检查用户是否具有管理员权限。如果没有,它会触发下面的MissingPermissions 错误并向通道发送错误消息。
我现在尝试在机器人没有权限的频道中触发另一个命令$help,这会导致此错误:
Ignoring exception in on_command_error
Traceback (most recent call last):
File "C:\Users\User\AppData\Local\Programs\Python\Python39\lib\site-packages\discord\client.py", line 343, in _run_event
await coro(*args, **kwargs)
File "c:\Users\User\Documents\discordbots\bot1\bot.py", line 212, in on_command_error
await ctx.message.delete()
File "C:\Users\User\AppData\Local\Programs\Python\Python39\lib\site-packages\discord\message.py", line 1022, in delete
await self._state.http.delete_message(self.channel.id, self.id)
File "C:\Users\User\AppData\Local\Programs\Python\Python39\lib\site-packages\discord\http.py", line 248, in request
raise Forbidden(r, data)
discord.errors.Forbidden: 403 Forbidden (error code: 50013): Missing Permissions
应该如此,因为该命令在不允许机器人混入的频道中使用。理想情况下,我想捕获它并打印以控制台一些简单的而不是完整的错误。
@bot.command()
async def help(ctx):
embed = discord.Embed(description="Commands", color=config.main_color)
embed.add_field(value="Check bot status", name="`$status`", inline=False)
await ctx.send(embed=embed)
await ctx.message.delete()
@bot.event
async def on_command_error(ctx, error):
await ctx.message.delete()
if isinstance(error, commands.CommandInvokeError):
print("Command used in invalid channel")
if isinstance(error, commands.MissingPermissions):
await ctx.send(error, delete_after=30)
return
我尝试使用 commands.CommandInvokeError 捕获它,但它似乎甚至没有打印到控制台,它仍然显示完整的错误。我还尝试了下面的另一种方法,它似乎具有相同的结果,因为它甚至没有进入 print 语句。
@help.error
async def help_error(ctx, error):
if isinstance(error, commands.CommandInvokeError):
print("hey")
return
【问题讨论】:
-
问题是你的机器人没有删除消息的权限。
标签: python discord discord.py