Commit bcea2e6b authored by nanahira's avatar nanahira

more

parent 3bd1026f
Pipeline #11805 failed with stage
in 19 seconds
......@@ -200,11 +200,16 @@ export class PicSourceConfig {
和图源类似,图像中间件是 `koishi-plugin-pics` 的另一类附属插件,可以对图源获取的随机 URL 在发送给用户之前进行一定的变换。
### 图像中间件系统
图像中间件系统使用洋葱模型的方式进行处理。每一层处理的过程中,可以使用 `next(url?: string)` 函数进行后续的操作,并得到后续结果的返回值,再进行进一步的处理。
`next` 函数中的 `url` 参数可以对进行后续操作的初始 URL 值进行控制。若不填写,则与本中间件的传入 URL 值相同。
### 开发图像中间件插件
图像中间件插件需要使用 [koishi-thirdeye](https://koishi.js.org/about/decorator) 进行开发。请在开发之前阅读相关相关文档。推荐在 `package.json``keywords` 内写上 `required:pics` 以保证正确被 Koishi 插件市场搜索。
#### 插件基类
图源中间件插件需要继承 `PicMiddlewareBase<Config>` 类,覆盖 `use` 方法,并使用 `@DefinePlugin({ schema: Config })` 进行注解。
......
......@@ -245,20 +245,20 @@ export default class PicsContainer
return this.bufferToUrl(buffer);
}
async resolveUrl(url: string, middlwares = this.picMiddlewares) {
if (!middlwares.length) {
async resolveUrl(url: string, middlewares = this.picMiddlewares) {
if (!middlewares.length) {
return url;
}
const next: PicNext = async (nextUrl) => {
nextUrl ||= url;
const nextResult = await this.resolveUrl(nextUrl, middlwares.slice(1));
const nextResult = await this.resolveUrl(nextUrl, middlewares.slice(1));
return nextResult || nextUrl;
};
try {
let result = await middlwares[0].use(url, next);
let result = await middlewares[0].use(url, next);
if (!result) {
this.logger.warn(
`Got empty result from middleware ${middlwares[0].name || '???'}`,
`Got empty result from middleware ${middlewares[0].name || '???'}`,
);
result = url;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment