Discord.NET - 获取命令中抛出的异常类型

时间:2018-04-30 21:12:34

标签: c# exception bots discord discord.net

我认为如果说一个人没有正确的权限来运行命令,或者有一个冷却时间,或者其他什么,而不是仅仅处理那个每个......那么就会更容易抛出异常......时间所以我做了我自己的异常,但问题是,CommandService.ExecuteAsync()。Error只返回CommandError.Exception,没有办法(据我所知)找出抛出了哪种类型的异常。

我的代码如下:

try { var result = await _service.ExecuteAsync(context, argPos);

            if (!result.IsSuccess)
                switch (result.Error)
                {
                    case CommandError.BadArgCount:
                        await context.Channel.SendMessageAsync("Bad argument count.");
                        break;
                    case CommandError.UnknownCommand:
                        break;
                    case CommandError.Exception:
                        // This is what happens instead of the catch block.
                        break;
                    default:
                        await context.Channel.SendMessageAsync($"You  Broke  It ({result.ErrorReason})");
                        break;

                }
        }
        catch (Exceptions.GameCommandNotReadyException e)
        {
            // The code never gets here because of the CommandError.Exception
        }

1 个答案:

答案 0 :(得分:1)

你可能不想在那里使用try / catch,因为你会不必要地抛出你自己的异常然后直接捕获它。您可以将错误处理放入case CommandError.Exception

如果您想了解导致错误的异常的更多信息:

由于您正在调用ExecuteAsync函数,因此可能会出现"结果"不仅是IResult类型,还有ExecuteResult类型。这意味着有一个属性" Exception"存储"出了什么问题"。

case CommandError.Exception:
    if (result is ExecuteResult execResult)
    {
        //you can now access execResult.Exception to see what happened
    }

break;