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 @@
},
"homepage": "https://github.com/koishijs/koishi-plugin-picsource-lolicon",
"dependencies": {
"schemastery-gen": "^2.4.1",
"koishi-thirdeye": "^8.2.1",
"source-map-support": "^0.5.20"
},
"peerDependencies": {
......
import 'source-map-support/register';
import { PicSourceConfig } from 'koishi-plugin-pics';
import { DefineSchema, RegisterSchema } from 'schemastery-gen';
import { DefineSchema, RegisterSchema } from 'koishi-thirdeye';
@RegisterSchema()
export class PicSourceLoliconPluginConfig extends PicSourceConfig {
......
import 'source-map-support/register';
import { Context } from 'koishi';
import { PicSourceLoliconPlugin } from './plugin';
import { PicSourceLoliconPluginConfig } from './config';
export * from './config';
export * from './plugin';
export const name = 'picsource-lolicon';
const plugin = new PicSourceLoliconPlugin();
export const Config = plugin.schema;
export const using = ['pics'];
export function apply(ctx: Context, config: PicSourceLoliconPluginConfig) {
ctx.plugin(plugin, config);
import {
PicSourceLoliconPluginConfig,
PicSourceLoliconPluginConfigLike,
} from './config';
import PicsContainer, { PicResult, PicSource } from 'koishi-plugin-pics';
import { LoliconReturnMessage } from './def';
import {
DefinePlugin,
Inject,
InjectConfig,
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