diff --git a/src/ZM/Bootstrap/HandleExceptions.php b/src/ZM/Bootstrap/HandleExceptions.php index 709552d3..0ca4e13e 100644 --- a/src/ZM/Bootstrap/HandleExceptions.php +++ b/src/ZM/Bootstrap/HandleExceptions.php @@ -4,7 +4,7 @@ declare(strict_types=1); namespace ZM\Bootstrap; -use OneBot\Driver\ExceptionHandler; +use OneBot\Exception\ExceptionHandler; use ZM\Exception\Handler; class HandleExceptions diff --git a/src/ZM/Exception/ConfigException.php b/src/ZM/Exception/ConfigException.php index 7d415943..86233125 100644 --- a/src/ZM/Exception/ConfigException.php +++ b/src/ZM/Exception/ConfigException.php @@ -6,22 +6,17 @@ namespace ZM\Exception; class ConfigException extends ZMException { - public const UNSUPPORTED_FILE_TYPE = 'E00079'; + public const UNSUPPORTED_FILE_TYPE = 79; - public const LOAD_CONFIG_FAILED = 'E00080'; - - public function __construct($err_code, $message = '', $code = 0, \Throwable $previous = null) - { - parent::__construct(zm_internal_errcode($err_code) . $message, $code, $previous); - } + public const LOAD_CONFIG_FAILED = 80; public static function unsupportedFileType(string $file_path): ConfigException { - return new self(self::UNSUPPORTED_FILE_TYPE, "不支持的配置文件类型:{$file_path}"); + return new self("不支持的配置文件类型:{$file_path}", '请检查配置文件的后缀名是否正确', self::UNSUPPORTED_FILE_TYPE); } public static function loadConfigFailed(string $file_path, string $message): ConfigException { - return new self(self::LOAD_CONFIG_FAILED, "加载配置文件失败:{$file_path},{$message}"); + return new self("加载配置文件失败:{$file_path},{$message}", '请检查配置文件的格式是否正确,并尝试按照错误信息排查', self::LOAD_CONFIG_FAILED); } } diff --git a/src/ZM/Exception/Handler.php b/src/ZM/Exception/Handler.php index e2457320..24358f56 100644 --- a/src/ZM/Exception/Handler.php +++ b/src/ZM/Exception/Handler.php @@ -4,14 +4,14 @@ declare(strict_types=1); namespace ZM\Exception; -use OneBot\Driver\ExceptionHandler; +use OneBot\Exception\ExceptionHandler; +use OneBot\Exception\ExceptionHandlerInterface; -class Handler extends ExceptionHandler +class Handler extends ExceptionHandler implements ExceptionHandlerInterface { public function __construct() { - // 我们知道此处没有调用父类的构造函数,这是设计上的缺陷 - // 将会在稍后修复 + parent::__construct(); } public function handle(\Throwable $e): void @@ -21,12 +21,6 @@ class Handler extends ExceptionHandler // TODO } - if (is_null($this->whoops)) { - ob_logger()->error('Uncaught ' . get_class($e) . ': ' . $e->getMessage() . ' at ' . $e->getFile() . '(' . $e->getLine() . ')'); - ob_logger()->error($e->getTraceAsString()); - return; - } - -// $this->whoops->handleException($e); + $this->handle0($e); } } diff --git a/src/ZM/Exception/InitException.php b/src/ZM/Exception/InitException.php index 49ba9dce..538bf743 100644 --- a/src/ZM/Exception/InitException.php +++ b/src/ZM/Exception/InitException.php @@ -6,4 +6,9 @@ namespace ZM\Exception; class InitException extends ZMException { + public function __construct(string $message = '', int $code = 0, ?\Throwable $previous = null) + { + // TODO: change this to a better error message + parent::__construct($message, '', $code, $previous); + } } diff --git a/src/ZM/Exception/InterruptException.php b/src/ZM/Exception/InterruptException.php index 3dcb2286..904404f3 100644 --- a/src/ZM/Exception/InterruptException.php +++ b/src/ZM/Exception/InterruptException.php @@ -10,7 +10,7 @@ class InterruptException extends ZMException public function __construct($return_var = null, $message = '', $code = 0, \Throwable $previous = null) { - parent::__construct($message, $code, $previous); + parent::__construct($message, '', $code, $previous); $this->return_var = $return_var; } } diff --git a/src/ZM/Exception/InvalidArgumentException.php b/src/ZM/Exception/InvalidArgumentException.php index 460b0bf0..355d93e2 100644 --- a/src/ZM/Exception/InvalidArgumentException.php +++ b/src/ZM/Exception/InvalidArgumentException.php @@ -8,6 +8,7 @@ class InvalidArgumentException extends ZMException { public function __construct($message = '', $code = 0, \Throwable $previous = null) { - parent::__construct(zm_internal_errcode('E00074') . $message, $code, $previous); + // TODO: change this to a better error message + parent::__construct($message, '', $code ?: 74, $previous); } } diff --git a/src/ZM/Exception/ZMException.php b/src/ZM/Exception/ZMException.php index e5fef9a8..67abda11 100644 --- a/src/ZM/Exception/ZMException.php +++ b/src/ZM/Exception/ZMException.php @@ -6,4 +6,8 @@ namespace ZM\Exception; abstract class ZMException extends \Exception { + public function __construct(string $description, string $solution = '', int $code = 0, ?\Throwable $previous = null) + { + parent::__construct($description . PHP_EOL . $solution, $code, $previous); + } } diff --git a/src/ZM/Exception/ZMKnownException.php b/src/ZM/Exception/ZMKnownException.php index cd176782..c514b9ef 100644 --- a/src/ZM/Exception/ZMKnownException.php +++ b/src/ZM/Exception/ZMKnownException.php @@ -4,10 +4,21 @@ declare(strict_types=1); namespace ZM\Exception; +use JetBrains\PhpStorm\Deprecated; + +#[Deprecated(reason: '建议使用具体的异常类')] class ZMKnownException extends ZMException { public function __construct($err_code, $message = '', $code = 0, \Throwable $previous = null) { parent::__construct(zm_internal_errcode($err_code) . $message, $code, $previous); + if ($err_code === 'E99999') { + $code = 0; + // 这也太懒了吧 + } else { + // 取最后两数 + $code = (int) substr($err_code, -2); + } + parent::__construct($message, '', $code, $previous); } } diff --git a/src/entry.php b/src/entry.php index 754cf405..0bfbbece 100644 --- a/src/entry.php +++ b/src/entry.php @@ -2,13 +2,9 @@ declare(strict_types=1); -use OneBot\Driver\ExceptionHandler; +use OneBot\Exception\ExceptionHandler; -/** - * CLI Application 入口文件,先引入 Composer 组件 - * - * @noinspection PhpIncludeInspection - */ +// CLI Application 入口文件,先引入 Composer 组件 require_once((!is_dir(__DIR__ . '/../vendor')) ? getcwd() : (__DIR__ . '/..')) . '/vendor/autoload.php'; // 适配 Windows 的 conhost 中文显示,因为使用 micro 打包框架运行的时候在 Windows 运行中文部分会变成乱码