Commit 3aabfae8 authored by nanahira's avatar nanahira

refactor with thirdeye

parent 9e7b6d2d
Pipeline #9519 passed with stage
in 1 minute and 20 seconds
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -26,7 +26,7 @@ ...@@ -26,7 +26,7 @@
}, },
"homepage": "https://github.com/koishijs/koishi-plugin-picsource-lolicon", "homepage": "https://github.com/koishijs/koishi-plugin-picsource-lolicon",
"dependencies": { "dependencies": {
"schemastery-gen": "^2.4.1", "koishi-thirdeye": "^8.2.1",
"source-map-support": "^0.5.20" "source-map-support": "^0.5.20"
}, },
"peerDependencies": { "peerDependencies": {
......
import 'source-map-support/register'; import 'source-map-support/register';
import { PicSourceConfig } from 'koishi-plugin-pics'; import { PicSourceConfig } from 'koishi-plugin-pics';
import { DefineSchema, RegisterSchema } from 'schemastery-gen'; import { DefineSchema, RegisterSchema } from 'koishi-thirdeye';
@RegisterSchema() @RegisterSchema()
export class PicSourceLoliconPluginConfig extends PicSourceConfig { export class PicSourceLoliconPluginConfig extends PicSourceConfig {
......
import 'source-map-support/register'; import 'source-map-support/register';
import { Context } from 'koishi'; import { Context } from 'koishi';
import { PicSourceLoliconPlugin } from './plugin'; import {
import { PicSourceLoliconPluginConfig } from './config'; PicSourceLoliconPluginConfig,
export * from './config'; PicSourceLoliconPluginConfigLike,
export * from './plugin'; } from './config';
import PicsContainer, { PicResult, PicSource } from 'koishi-plugin-pics';
export const name = 'picsource-lolicon'; import { LoliconReturnMessage } from './def';
const plugin = new PicSourceLoliconPlugin(); import {
export const Config = plugin.schema; DefinePlugin,
export const using = ['pics']; Inject,
export function apply(ctx: Context, config: PicSourceLoliconPluginConfig) { InjectConfig,
ctx.plugin(plugin, config); LifecycleEvents,
} from 'koishi-thirdeye';
@DefinePlugin({
name: 'picsource-lolicon',
schema: PicSourceLoliconPluginConfig,
})
export default class PicSourceLolicon
extends PicSource
implements LifecycleEvents
{
constructor(ctx: Context, config: PicSourceLoliconPluginConfigLike) {
super(ctx);
}
@InjectConfig()
private config: PicSourceLoliconPluginConfig;
@Inject(true)
private pics: PicsContainer;
onApply() {
this.config.applyTo(this);
this.pics.addSource(this);
}
async randomPic(picTags: string[]): Promise<PicResult> {
if (picTags.length > 3) {
return;
}
const result = await this.ctx.http.post<LoliconReturnMessage>(
this.config.endpoint,
{
r18: this.config.r18,
num: 1,
tag: picTags,
...this.config.extraConfig,
},
);
if (result.error) {
this.ctx
.logger('picsource-lolicon')
.warn(
`Failed to get Lolicon random pic ${picTags.join(',')}: ${
result.error
}`,
);
return;
}
if (!result.data?.length) {
return;
}
const data = result.data[0];
if (!data.urls?.original) {
return;
}
return {
url: data.urls.original,
description: `PID:${data.pid} ${data.title} by ${data.author}`,
};
}
} }
import 'source-map-support/register';
import { Context, Schema } from 'koishi';
import {
PicSourceLoliconPluginConfig,
PicSourceLoliconPluginConfigLike,
} from './config';
import { PicResult, PicSource } from 'koishi-plugin-pics';
import { LoliconReturnMessage } from './def';
export class PicSourceLolicon extends PicSource {
constructor(ctx: Context, private config: PicSourceLoliconPluginConfig) {
super(ctx);
config.applyTo(this);
}
async randomPic(picTags: string[]): Promise<PicResult> {
if (picTags.length > 3) {
return;
}
const result = await this.ctx.http.post<LoliconReturnMessage>(
this.config.endpoint,
{
r18: this.config.r18,
num: 1,
tag: picTags,
...this.config.extraConfig,
},
);
if (result.error) {
this.ctx
.logger('picsource-lolicon')
.warn(
`Failed to get Lolicon random pic ${picTags.join(',')}: ${
result.error
}`,
);
return;
}
if (!result.data?.length) {
return;
}
const data = result.data[0];
if (!data.urls?.original) {
return;
}
return {
url: data.urls.original,
description: `PID:${data.pid} ${data.title} by ${data.author}`,
};
}
}
export class PicSourceLoliconPlugin {
private config: PicSourceLoliconPluginConfig;
private ctx: Context;
name = 'picsource-lolicon-main';
schema = PicSourceLoliconPluginConfig;
apply(ctx: Context, config: PicSourceLoliconPluginConfig) {
this.ctx = ctx;
this.config = config;
const source = new PicSourceLolicon(ctx, this.config);
ctx.pics.addSource(source, ctx);
}
}
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