Commit 537c6b66 authored by nanahira's avatar nanahira

bump

parent 1e8fb420
...@@ -27,7 +27,7 @@ app.plugin(ExtrasInDev); ...@@ -27,7 +27,7 @@ app.plugin(ExtrasInDev);
// Target plugin // Target plugin
app.plugin(TargetPlugin, { app.plugin(TargetPlugin, {
sources: [{ name: 'ygopro', isDefault: true, path: './dev/test-pics' }], instances: [{ name: 'ygopro', isDefault: true, path: './dev/test-pics' }],
}); });
app.start(); app.start();
This diff is collapsed.
...@@ -32,8 +32,8 @@ ...@@ -32,8 +32,8 @@
"read-dir-deep": "^7.0.1" "read-dir-deep": "^7.0.1"
}, },
"peerDependencies": { "peerDependencies": {
"koishi": "^4.6.0", "koishi": "^4.6.1",
"koishi-plugin-pics": "^9.0.0" "koishi-plugin-pics": "^9.0.3"
}, },
"devDependencies": { "devDependencies": {
"@koishijs/plugin-cache-lru": "^1.0.0-rc.0", "@koishijs/plugin-cache-lru": "^1.0.0-rc.0",
......
import { PicResult, PicSource } from 'koishi-plugin-pics';
import { Context, Random } from 'koishi';
import path from 'path';
import { readDirDeep } from 'read-dir-deep';
import fs from 'fs';
import { LocalSourceConfig } from './config';
export class LocalSource extends PicSource {
constructor(ctx: Context, private config: LocalSourceConfig) {
super(ctx);
config.applyTo(this);
}
async randomPic(picTags: string[]): Promise<PicResult> {
const absolutePath = path.resolve(process.cwd(), this.config.path);
const files = (
await readDirDeep(absolutePath, {
absolute: true,
patterns: this.config.patterns,
gitignore: false,
ignore: this.config.exclude,
})
).filter((f) => picTags.every((t) => f.includes(t)));
if (!files.length) {
return null;
}
const filename = Random.pick(files);
const fileBase64 = (await fs.promises.readFile(filename)).toString(
'base64',
);
return {
url: `base64://${fileBase64}`,
description: this.config.displayFilename
? path.basename(filename)
: undefined,
};
}
}
// import 'source-map-support/register'; // import 'source-map-support/register';
import { PicSourceConfig, PicSourceInfo } from 'koishi-plugin-pics'; import { PicSourceConfig } from 'koishi-plugin-pics';
import { Context } from 'koishi';
import { LocalSource } from './LocalSource';
import { DefineSchema, RegisterSchema } from 'schemastery-gen'; import { DefineSchema, RegisterSchema } from 'schemastery-gen';
export interface LocalSourceConfigLike extends PicSourceInfo {
path: string;
patterns?: string[];
exclude?: string[];
displayFilename?: boolean;
}
@RegisterSchema() @RegisterSchema()
export class LocalSourceConfig export class LocalSourceConfig extends PicSourceConfig {
extends PicSourceConfig constructor(config: Partial<LocalSourceConfig>) {
implements LocalSourceConfigLike
{
constructor(config: LocalSourceConfigLike) {
super(config); super(config);
} }
@DefineSchema({ description: '目录路径', required: true }) @DefineSchema({ description: '目录路径', required: true })
...@@ -43,27 +31,4 @@ export class LocalSourceConfig ...@@ -43,27 +31,4 @@ export class LocalSourceConfig
exclude: string[]; exclude: string[];
@DefineSchema({ description: '是否显示文件名', default: true }) @DefineSchema({ description: '是否显示文件名', default: true })
displayFilename: boolean; displayFilename: boolean;
registerInstance(ctx: Context) {
const instance = new LocalSource(ctx, this);
ctx
.logger('picsource-localfs')
.info(`Registered localfs pic source ${instance.name}.`);
ctx.pics.addSource(instance, ctx);
}
}
export interface PicSourceLocalFSPluginConfigLike {
sources: LocalSourceConfigLike[];
}
export class PicSourceLocalFSPluginConfig
implements PicSourceLocalFSPluginConfigLike
{
@DefineSchema({
description: '目录定义',
type: LocalSourceConfig,
required: true,
})
sources: LocalSourceConfig[];
} }
// import 'source-map-support/register'; import { Random } from 'koishi';
import { import {
PicSourceLocalFSPluginConfig, DefineMultiSourcePlugin,
PicSourceLocalFSPluginConfigLike, PicResult,
} from './config'; PicSourcePlugin,
import { } from 'koishi-plugin-pics';
BasePlugin, import { DefinePlugin } from 'koishi-thirdeye';
DefinePlugin, import path from 'path';
LifecycleEvents, import { readDirDeep } from 'read-dir-deep';
UsingService, import { LocalSourceConfig } from './config';
} from 'koishi-thirdeye'; import fs from 'fs';
@UsingService('pics') @DefinePlugin({ name: 'picsource-local', schema: LocalSourceConfig })
@DefinePlugin({ export class LocalSource extends PicSourcePlugin<LocalSourceConfig> {
name: 'picsource-localfs', async randomPic(picTags: string[]): Promise<PicResult> {
schema: PicSourceLocalFSPluginConfig, const absolutePath = path.resolve(process.cwd(), this.config.path);
}) const files = (
export default class PicSourceLocal await readDirDeep(absolutePath, {
extends BasePlugin< absolute: true,
PicSourceLocalFSPluginConfig, patterns: this.config.patterns,
PicSourceLocalFSPluginConfigLike gitignore: false,
> ignore: this.config.exclude,
implements LifecycleEvents })
{ ).filter((f) => picTags.every((t) => f.includes(t)));
onApply() { if (!files.length) {
this.config.sources.forEach((s) => s.registerInstance(this.ctx)); return null;
}
const filename = Random.pick(files);
const fileBase64 = (await fs.promises.readFile(filename)).toString(
'base64',
);
return {
url: `base64://${fileBase64}`,
description: this.config.displayFilename
? path.basename(filename)
: undefined,
};
} }
} }
export default class LocalSourcePlugin extends DefineMultiSourcePlugin(
LocalSource,
LocalSourceConfig,
) {}
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