$v) { if (empty($v) && $k === 0) { continue; } if (empty($v) && $k === count($exp) - 1) { $subject .= '^EOL'; $v = '^EOL'; } $cur_var = ''; $ori = $i; while (($a = mb_substr($subject, $i, mb_strlen($v))) !== $v && !empty($a)) { $cur_var .= mb_substr($subject, $i, 1); ++$i; } if ($i !== $ori || $k === 1 || $k === count($exp) - 1) { $result[] = $cur_var; } $i += mb_strlen($v); } return $result; } return false; } /** * 构建消息段的助手函数 * * @param string $type 类型 * @param array $data 字段 */ function segment(string $type, array $data = []): MessageSegment { return new MessageSegment($type, $data); } /** * 中间件操作类的助手函数 */ function middleware(): MiddlewareHandler { return MiddlewareHandler::getInstance(); } // ////////////////// 容器部分 ////////////////////// /** * 获取容器实例 */ function container(): DI\Container { return ContainerHolder::getEventContainer(); } /** * 解析类实例(使用容器) * * 这是 {@see container()}->make($abstract, $parameters) 的别名 * * @template T * @param class-string $abstract * @return Closure|mixed|T */ function resolve(string $abstract, array $parameters = []) { /* @noinspection PhpUnhandledExceptionInspection */ return container()->make($abstract, $parameters); } /** * 获取 MySQL 调用的类 * * @throws DBException */ function db(string $name = '') { return new DBWrapper($name); } /** * 获取构建 MySQL 的类 * * @throws DBException */ function sql_builder(string $name = ''): DBQueryBuilder { return (new DBWrapper($name))->createQueryBuilder(); } /** * 获取 Redis 操作类 * * @param string $name 使用的 Redis 连接名称 */ function redis(string $name = 'default'): RedisWrapper { return new RedisWrapper($name); } /** * 获取 / 设置配置项 * * 传入键名和(或)默认值,获取配置项 * 传入数组,设置配置项 * 不传参数,返回配置容器 * * @param null|array|string $key 键名 * @param null|mixed $default 默认值 * @return mixed|void|ZMConfig */ function config(array|string $key = null, mixed $default = null) { $config = ZMConfig::getInstance(); if (is_null($key)) { return $config; } if (is_array($key)) { $config->set($key); return; } return $config->get($key, $default); } function bot(): ZM\Context\BotContext { if (container()->has(ZM\Context\BotContext::class)) { return container()->get(ZM\Context\BotContext::class); } return new \ZM\Context\BotContext('', ''); } function kv(string $name = ''): Psr\SimpleCache\CacheInterface { global $kv_class; if (!$kv_class) { $kv_class = config('global.kv.use', \LightCache::class); } /* @phpstan-ignore-next-line */ return is_a($kv_class, KVInterface::class, true) ? $kv_class::open($name) : new $kv_class($name); }