diff --git a/.github/dependabot.yml b/.github/dependabot.yml index b5cacc0..377121a 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -4,6 +4,6 @@ updates: directory: "/" schedule: interval: "daily" - target-branch: "develop" + target-branch: "master" labels: - "area/dependency" diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index aaf76a7..647e4ef 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -3,6 +3,7 @@ name: Test on: push: branches: + - master - main - develop - '*-dev*' diff --git a/choir-test.php b/choir-test.php index 6b2956c..dbfdc9a 100644 --- a/choir-test.php +++ b/choir-test.php @@ -3,10 +3,12 @@ /** @noinspection PhpComposerExtensionStubsInspection */ declare(strict_types=1); +use Choir\Http\Server; +use Choir\Protocol\HttpConnection; require_once 'vendor/autoload.php'; -$server = new \Choir\Http\Server('0.0.0.0', 20001, false, [ +$server = new Server('0.0.0.0', 20001, false, [ 'worker-num' => 8, // 'logger-level' => 'debug', ]); @@ -22,7 +24,7 @@ // echo "http://127.0.0.1:8080/index.php?run={$id}&source=xhprof_testing\n"; }); -$server->on('request', function (Choir\Protocol\HttpConnection $connection) { +$server->on('request', function (HttpConnection $connection) { $connection->end('hello world'); }); diff --git a/composer.json b/composer.json index ef113e4..30dc27d 100644 --- a/composer.json +++ b/composer.json @@ -25,7 +25,7 @@ "wiki": "https://github.com/botuniverse/php-libonebot/wiki" }, "require": { - "php": "^7.4 || ^8.0 || ^8.1 || ^8.2", + "php": "^7.4 || ^8.0 || ^8.1 || ^8.2 || ^8.3 || ^8.4", "ext-json": "*", "psr/cache": "^1.0 || ^3.0", "psr/event-dispatcher": "^1.0", @@ -85,7 +85,7 @@ "[ $COMPOSER_DEV_MODE -eq 0 ] || vendor/bin/cghooks add" ], "analyse": "phpstan analyse --memory-limit 300M", - "cs-fix": "php-cs-fixer fix", + "cs-fix": "PHP_CS_FIXER_IGNORE_ENV=1 php-cs-fixer fix", "test": "phpunit --no-coverage" } } diff --git a/demo/repl.php b/demo/repl.php index 2157140..0b193bf 100644 --- a/demo/repl.php +++ b/demo/repl.php @@ -3,12 +3,15 @@ declare(strict_types=1); use OneBot\Driver\Event\DriverInitEvent; +use OneBot\Driver\Swoole\SwooleDriver; use OneBot\Util\Utils; +use OneBot\V12\EventBuilder; use OneBot\V12\Object\Action; use OneBot\V12\Object\ActionResponse; use OneBot\V12\OneBot; use OneBot\V12\OneBotBuilder; use OneBot\V12\Validator; +use ZM\Logger\ConsoleLogger; require_once __DIR__ . '/../vendor/autoload.php'; @@ -23,11 +26,11 @@ function message_id(): string 'self_id' => 'REPL-1', 'db' => true, 'logger' => [ - 'class' => \ZM\Logger\ConsoleLogger::class, + 'class' => ConsoleLogger::class, 'level' => 'info', ], 'driver' => [ - 'class' => \OneBot\Driver\Swoole\SwooleDriver::class, + 'class' => SwooleDriver::class, 'config' => [ 'init_in_user_process_block' => true, ], @@ -81,7 +84,7 @@ function message_id(): string $event->getDriver()->getEventLoop()->delReadEvent($x); return; } - $event = (new \OneBot\V12\EventBuilder('message', 'private')) + $event = (new EventBuilder('message', 'private')) ->feed('message', trim($s)) ->feed('alt_message', trim($s)) ->feed('message_id', message_id()) diff --git a/demo/weixin.php b/demo/weixin.php index c2bb53a..3731aa6 100644 --- a/demo/weixin.php +++ b/demo/weixin.php @@ -15,6 +15,7 @@ use OneBot\V12\RetCode; use OneBot\V12\Validator; use Swoole\Coroutine\Channel; +use ZM\Logger\ConsoleLogger; require_once __DIR__ . '/../vendor/autoload.php'; @@ -24,7 +25,7 @@ 'self_id' => '', // 后续会自动获取 'db' => true, 'logger' => [ - 'class' => \ZM\Logger\ConsoleLogger::class, + 'class' => ConsoleLogger::class, 'level' => 'info', ], 'driver' => [ @@ -118,7 +119,7 @@ function wx_make_xml_reply(Action $action, string $self_id): string return str_replace('{content}', '', $xml_template); } -function swoole_channel(string $name, int $size = 1): Swoole\Coroutine\Channel +function swoole_channel(string $name, int $size = 1): Channel { global $channel; if (!isset($channel[$name])) { diff --git a/src/OneBot/Config/Loader/DelegateLoader.php b/src/OneBot/Config/Loader/DelegateLoader.php index 4bcc9ad..2f1c9cc 100644 --- a/src/OneBot/Config/Loader/DelegateLoader.php +++ b/src/OneBot/Config/Loader/DelegateLoader.php @@ -14,7 +14,7 @@ class DelegateLoader implements LoaderInterface /** * @param null|array{string: LoaderInterface} $loaders 加载器列表,null则使用默认列表 */ - public function __construct(array $loaders = null) + public function __construct(?array $loaders = null) { foreach ((array) $loaders as $key => $loader) { if (!$loader instanceof LoaderInterface) { diff --git a/src/OneBot/Config/Loader/LoadException.php b/src/OneBot/Config/Loader/LoadException.php index 38f00b0..d63e262 100644 --- a/src/OneBot/Config/Loader/LoadException.php +++ b/src/OneBot/Config/Loader/LoadException.php @@ -4,6 +4,4 @@ namespace OneBot\Config\Loader; -class LoadException extends \RuntimeException -{ -} +class LoadException extends \RuntimeException {} diff --git a/src/OneBot/Driver/Event/Event.php b/src/OneBot/Driver/Event/Event.php index 9c7c3b9..75943d4 100644 --- a/src/OneBot/Driver/Event/Event.php +++ b/src/OneBot/Driver/Event/Event.php @@ -4,6 +4,4 @@ namespace OneBot\Driver\Event; -interface Event -{ -} +interface Event {} diff --git a/src/OneBot/Driver/Event/Process/ManagerStartEvent.php b/src/OneBot/Driver/Event/Process/ManagerStartEvent.php index 028b368..4d2c443 100644 --- a/src/OneBot/Driver/Event/Process/ManagerStartEvent.php +++ b/src/OneBot/Driver/Event/Process/ManagerStartEvent.php @@ -6,6 +6,4 @@ use OneBot\Driver\Event\DriverEvent; -class ManagerStartEvent extends DriverEvent -{ -} +class ManagerStartEvent extends DriverEvent {} diff --git a/src/OneBot/Driver/Event/Process/ManagerStopEvent.php b/src/OneBot/Driver/Event/Process/ManagerStopEvent.php index aa83bd2..212c9b5 100644 --- a/src/OneBot/Driver/Event/Process/ManagerStopEvent.php +++ b/src/OneBot/Driver/Event/Process/ManagerStopEvent.php @@ -6,6 +6,4 @@ use OneBot\Driver\Event\DriverEvent; -class ManagerStopEvent extends DriverEvent -{ -} +class ManagerStopEvent extends DriverEvent {} diff --git a/src/OneBot/Driver/Event/Process/WorkerExitEvent.php b/src/OneBot/Driver/Event/Process/WorkerExitEvent.php index 3b26fd4..80098d8 100644 --- a/src/OneBot/Driver/Event/Process/WorkerExitEvent.php +++ b/src/OneBot/Driver/Event/Process/WorkerExitEvent.php @@ -6,6 +6,4 @@ use OneBot\Driver\Event\DriverEvent; -class WorkerExitEvent extends DriverEvent -{ -} +class WorkerExitEvent extends DriverEvent {} diff --git a/src/OneBot/Driver/Event/Process/WorkerStartEvent.php b/src/OneBot/Driver/Event/Process/WorkerStartEvent.php index 318a704..b5e8111 100644 --- a/src/OneBot/Driver/Event/Process/WorkerStartEvent.php +++ b/src/OneBot/Driver/Event/Process/WorkerStartEvent.php @@ -6,6 +6,4 @@ use OneBot\Driver\Event\DriverEvent; -class WorkerStartEvent extends DriverEvent -{ -} +class WorkerStartEvent extends DriverEvent {} diff --git a/src/OneBot/Driver/Event/Process/WorkerStopEvent.php b/src/OneBot/Driver/Event/Process/WorkerStopEvent.php index 931ba4d..80c826c 100644 --- a/src/OneBot/Driver/Event/Process/WorkerStopEvent.php +++ b/src/OneBot/Driver/Event/Process/WorkerStopEvent.php @@ -6,6 +6,4 @@ use OneBot\Driver\Event\DriverEvent; -class WorkerStopEvent extends DriverEvent -{ -} +class WorkerStopEvent extends DriverEvent {} diff --git a/src/OneBot/Driver/Event/StopException.php b/src/OneBot/Driver/Event/StopException.php index b5014aa..029e874 100644 --- a/src/OneBot/Driver/Event/StopException.php +++ b/src/OneBot/Driver/Event/StopException.php @@ -8,7 +8,7 @@ class StopException extends \Exception { private DriverEvent $event; - public function __construct(DriverEvent $event, $message = '', $code = 0, \Throwable $previous = null) + public function __construct(DriverEvent $event, $message = '', $code = 0, ?\Throwable $previous = null) { $this->event = $event; parent::__construct($message, $code, $previous); diff --git a/src/OneBot/Driver/Swoole/Socket/HttpClientSocket.php b/src/OneBot/Driver/Swoole/Socket/HttpClientSocket.php index da68b22..4e13117 100644 --- a/src/OneBot/Driver/Swoole/Socket/HttpClientSocket.php +++ b/src/OneBot/Driver/Swoole/Socket/HttpClientSocket.php @@ -6,6 +6,4 @@ use OneBot\Driver\Socket\HttpClientSocketBase; -class HttpClientSocket extends HttpClientSocketBase -{ -} +class HttpClientSocket extends HttpClientSocketBase {} diff --git a/src/OneBot/Driver/Swoole/Socket/WSClientSocket.php b/src/OneBot/Driver/Swoole/Socket/WSClientSocket.php index c61a383..4ff0876 100644 --- a/src/OneBot/Driver/Swoole/Socket/WSClientSocket.php +++ b/src/OneBot/Driver/Swoole/Socket/WSClientSocket.php @@ -6,6 +6,4 @@ use OneBot\Driver\Socket\WSClientSocketBase; -class WSClientSocket extends WSClientSocketBase -{ -} +class WSClientSocket extends WSClientSocketBase {} diff --git a/src/OneBot/Driver/Workerman/Socket/HttpClientSocket.php b/src/OneBot/Driver/Workerman/Socket/HttpClientSocket.php index 6e21cdf..15cf0d1 100644 --- a/src/OneBot/Driver/Workerman/Socket/HttpClientSocket.php +++ b/src/OneBot/Driver/Workerman/Socket/HttpClientSocket.php @@ -6,6 +6,4 @@ use OneBot\Driver\Socket\HttpClientSocketBase; -class HttpClientSocket extends HttpClientSocketBase -{ -} +class HttpClientSocket extends HttpClientSocketBase {} diff --git a/src/OneBot/Driver/Workerman/Socket/WSClientSocket.php b/src/OneBot/Driver/Workerman/Socket/WSClientSocket.php index ca62466..e8540e9 100644 --- a/src/OneBot/Driver/Workerman/Socket/WSClientSocket.php +++ b/src/OneBot/Driver/Workerman/Socket/WSClientSocket.php @@ -6,6 +6,4 @@ use OneBot\Driver\Socket\WSClientSocketBase; -class WSClientSocket extends WSClientSocketBase -{ -} +class WSClientSocket extends WSClientSocketBase {} diff --git a/src/OneBot/Driver/Workerman/Worker.php b/src/OneBot/Driver/Workerman/Worker.php index 724c35a..09a5db9 100644 --- a/src/OneBot/Driver/Workerman/Worker.php +++ b/src/OneBot/Driver/Workerman/Worker.php @@ -121,7 +121,7 @@ public static function stopAll($code = 0, $log = '') Timer::add(static::$stopTimeout, '\posix_kill', [$worker_pid, \SIGKILL], false); } } - Timer::add(1, '\\Workerman\\Worker::checkIfChildRunning'); + Timer::add(1, '\Workerman\Worker::checkIfChildRunning'); // Remove statistics file. if (\is_file(static::$_statisticsFile)) { @\unlink(static::$_statisticsFile); diff --git a/src/OneBot/V12/Action/DefaultActionHandler.php b/src/OneBot/V12/Action/DefaultActionHandler.php index a8ee336..39c38b9 100644 --- a/src/OneBot/V12/Action/DefaultActionHandler.php +++ b/src/OneBot/V12/Action/DefaultActionHandler.php @@ -7,6 +7,4 @@ /** * 当未设置 Action 基础处理类时,将默认使用 ActionBase 级别的所有 Not Implemented Action */ -class DefaultActionHandler extends ActionHandlerBase -{ -} +class DefaultActionHandler extends ActionHandlerBase {} diff --git a/src/OneBot/V12/Exception/OneBotException.php b/src/OneBot/V12/Exception/OneBotException.php index 91d7b50..88860f9 100644 --- a/src/OneBot/V12/Exception/OneBotException.php +++ b/src/OneBot/V12/Exception/OneBotException.php @@ -4,6 +4,4 @@ namespace OneBot\V12\Exception; -class OneBotException extends \Exception -{ -} +class OneBotException extends \Exception {} diff --git a/src/OneBot/V12/Exception/OneBotFailureException.php b/src/OneBot/V12/Exception/OneBotFailureException.php index 89576f6..85efc12 100644 --- a/src/OneBot/V12/Exception/OneBotFailureException.php +++ b/src/OneBot/V12/Exception/OneBotFailureException.php @@ -20,7 +20,7 @@ public function __construct( $retcode = RetCode::INTERNAL_HANDLER_ERROR, ?Action $action_object = null, $message = null, - \Exception $previous = null + ?\Exception $previous = null ) { $this->retcode = $retcode; $this->action_object = $action_object; diff --git a/src/OneBot/V12/OneBot.php b/src/OneBot/V12/OneBot.php index ecc8a81..b57e038 100644 --- a/src/OneBot/V12/OneBot.php +++ b/src/OneBot/V12/OneBot.php @@ -250,8 +250,7 @@ public function dispatchEvent(OneBotEvent $event): void } $socket->post(json_encode($event->jsonSerialize()), $this->getRequestHeaders(), function (ResponseInterface $response) { // TODO:编写 HTTP Webhook 响应的处理逻辑 - }, function (RequestInterface $request) { - }); + }, function (RequestInterface $request) {}); } $frame_str = FrameFactory::createTextFrame(json_encode($event->jsonSerialize())); // 创建文本帧 foreach ($this->driver->getWSServerSockets() as $socket) { diff --git a/src/OneBot/V12/OneBotBuilder.php b/src/OneBot/V12/OneBotBuilder.php index 767d881..244ee9d 100644 --- a/src/OneBot/V12/OneBotBuilder.php +++ b/src/OneBot/V12/OneBotBuilder.php @@ -5,6 +5,7 @@ namespace OneBot\V12; use OneBot\Config\Config; +use OneBot\Config\Repository; use OneBot\Config\RepositoryInterface; use OneBot\Driver\Driver; use Psr\Log\LoggerInterface; @@ -136,7 +137,7 @@ public function build(): OneBot */ public static function buildFromArray(array $array): OneBot { - $config = new \OneBot\Config\Repository($array); + $config = new Repository($array); return self::buildFromConfig($config); } diff --git a/src/OneBot/global_defines.php b/src/OneBot/global_defines.php index c6a3ce9..5062309 100644 --- a/src/OneBot/global_defines.php +++ b/src/OneBot/global_defines.php @@ -10,10 +10,11 @@ use OneBot\V12\Object\MessageSegment; use OneBot\V12\OneBot; use Psr\Log\LoggerInterface; +use Symfony\Component\VarDumper\VarDumper; use ZM\Logger\ConsoleLogger; const ONEBOT_VERSION = '12'; -const ONEBOT_LIBOB_VERSION = '0.6.8'; +const ONEBOT_LIBOB_VERSION = '0.6.9'; const ONEBOT_JSON = 1; const ONEBOT_MSGPACK = 2; @@ -38,7 +39,7 @@ class_alias(MessageSegment::class, 'MessageSegment'); if (DIRECTORY_SEPARATOR === '\\') { - define('ONEBOT_TMP_DIR', 'C:\\Windows\\Temp'); + define('ONEBOT_TMP_DIR', 'C:\Windows\Temp'); } elseif (!empty(getenv('TMPDIR'))) { define('ONEBOT_TMP_DIR', getenv('TMPDIR')); } elseif (is_writable('/tmp')) { @@ -56,9 +57,9 @@ class_alias(MessageSegment::class, 'MessageSegment'); function ob_dump($var, ...$moreVars) { if (class_exists('\Symfony\Component\VarDumper\VarDumper')) { - Symfony\Component\VarDumper\VarDumper::dump($var); + VarDumper::dump($var); foreach ($moreVars as $v) { - Symfony\Component\VarDumper\VarDumper::dump($v); + VarDumper::dump($v); } } elseif (PHP_VERSION >= 8.0) { var_dump($var, ...$moreVars); @@ -121,7 +122,7 @@ function ob_logger_register(LoggerInterface $logger): void * @param null|mixed $default * @return mixed */ -function ob_config(string $key = null, $default = null) +function ob_config(?string $key = null, $default = null) { $config = OneBot::getInstance()->getConfig(); if (!is_null($key)) { @@ -144,8 +145,8 @@ function ob_uuidgen(bool $uppercase = false): string } $data[6] = chr(ord($data[6]) & 0x0F | 0x40); $data[8] = chr(ord($data[8]) & 0x3F | 0x80); - return $uppercase ? strtoupper(vsprintf('%s%s-%s-%s-%s-%s%s%s', str_split(bin2hex($data), 4))) : - vsprintf('%s%s-%s-%s-%s-%s%s%s', str_split(bin2hex($data), 4)); + return $uppercase ? strtoupper(vsprintf('%s%s-%s-%s-%s-%s%s%s', str_split(bin2hex($data), 4))) + : vsprintf('%s%s-%s-%s-%s-%s%s%s', str_split(bin2hex($data), 4)); } function ob_event_dispatcher(): HandledDispatcherInterface diff --git a/tests/OneBot/Config/Loader/AbstractFileLoaderTest.php b/tests/OneBot/Config/Loader/AbstractFileLoaderTest.php index b5c9697..dd62e00 100644 --- a/tests/OneBot/Config/Loader/AbstractFileLoaderTest.php +++ b/tests/OneBot/Config/Loader/AbstractFileLoaderTest.php @@ -45,15 +45,15 @@ public function providerTestGetAbsolutePath(): array 'Linux', ], 'windows absolute path' => [ - 'C:\\Windows\\System32\\drivers\\etc\\hosts', - 'C:\\Windows\\System32', - 'C:\\Windows\\System32\\drivers\\etc\\hosts', + 'C:\Windows\System32\drivers\etc\hosts', + 'C:\Windows\System32', + 'C:\Windows\System32\drivers\etc\hosts', 'Windows', ], 'windows relative path' => [ - 'drivers\\etc\\hosts', - 'C:\\Windows\\System32', - 'C:\\Windows\\System32\\drivers\\etc\\hosts', + 'drivers\etc\hosts', + 'C:\Windows\System32', + 'C:\Windows\System32\drivers\etc\hosts', 'Windows', ], ]; diff --git a/tests/OneBot/Config/RepositoryTest.php b/tests/OneBot/Config/RepositoryTest.php index 16b82de..e9770c6 100644 --- a/tests/OneBot/Config/RepositoryTest.php +++ b/tests/OneBot/Config/RepositoryTest.php @@ -109,6 +109,16 @@ public function testDeleteValue(string $key): void $this->assertNull($this->repository->get($key)); } + public function providerTestDeleteValue(): array + { + return [ + 'shallow' => ['foo'], + 'deep' => ['associate.x'], + 'not exists' => ['not_exists'], + 'not exists deep' => ['deep.not_exists'], + ]; + } + public function testHas(): void { $this->assertTrue($this->repository->has('foo')); @@ -119,14 +129,4 @@ public function testAll(): void { $this->assertSame($this->config, $this->repository->all()); } - - public function providerTestDeleteValue(): array - { - return [ - 'shallow' => ['foo'], - 'deep' => ['associate.x'], - 'not exists' => ['not_exists'], - 'not exists deep' => ['deep.not_exists'], - ]; - } } diff --git a/tests/OneBot/Exception/ExceptionHandlerTest.php b/tests/OneBot/Exception/ExceptionHandlerTest.php index c7261d6..f074a5b 100644 --- a/tests/OneBot/Exception/ExceptionHandlerTest.php +++ b/tests/OneBot/Exception/ExceptionHandlerTest.php @@ -4,6 +4,7 @@ namespace Tests\OneBot\Exception; +use OneBot\Exception\ExceptionHandler; use PHPUnit\Framework\TestCase; use Psr\Log\NullLogger; @@ -20,7 +21,7 @@ public function testCanHandleWithoutOverriding(): void ob_logger_register(new NullLogger()); // we want fresh instance here, since it's a singleton, we use reflection to get a new instance - $reflection = new \ReflectionClass(\OneBot\Exception\ExceptionHandler::class); + $reflection = new \ReflectionClass(ExceptionHandler::class); $instance = $reflection->newInstanceWithoutConstructor(); // expect handle() to not throw any exception $this->expectNotToPerformAssertions(); diff --git a/tests/bootstrap.php b/tests/bootstrap.php index 4e80822..b49071e 100644 --- a/tests/bootstrap.php +++ b/tests/bootstrap.php @@ -3,6 +3,7 @@ declare(strict_types=1); use OneBot\Driver\Workerman\WorkermanDriver; +use OneBot\Util\FileUtil; use OneBot\V12\OneBotBuilder; use ZM\Logger\ConsoleLogger; @@ -17,4 +18,4 @@ ->setCommunicationsProtocol([['http' => ['host' => '0.0.0.0', 'port' => 20001]]]) ->build(); -$ob->getConfig()->set('file_upload.path', \OneBot\Util\FileUtil::getRealPath(__DIR__ . '/../data/files')); +$ob->getConfig()->set('file_upload.path', FileUtil::getRealPath(__DIR__ . '/../data/files'));