【问题标题】:Discord.py commands.CommandInvokeError not triggering: discord.errors.Forbidden: 403 Forbidden (error code: 50013): Missing PermissionsDiscord.py commands.CommandInvokeError 未触发:discord.errors.Forbidden:403 Forbidden(错误代码:50013):缺少权限
【发布时间】: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


【解决方案1】:

你可以使用 try/except 语法:

try:
    this_might_go_wrong()
except Exception as e:
    print(f"Oops... The error was: {e}")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-11
    • 2020-07-22
    • 2020-11-15
    • 2022-01-17
    • 2020-11-28
    • 2011-10-02
    • 2021-12-10
    • 2022-10-09
    相关资源
    最近更新 更多