Я подумал, что было бы легче генерировать исключения, если, скажем, у человека нет прав на запуск команды, или есть перезарядка, или что-то еще, вместо того, чтобы просто обрабатывать это каждый ... один ... время . Поэтому я сделал свои собственные исключения, но проблема в том, что 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
}