diff --git a/packages/lolicon/src/index.ts b/packages/lolicon/src/index.ts index f58ef4a79..b7273a2a8 100644 --- a/packages/lolicon/src/index.ts +++ b/packages/lolicon/src/index.ts @@ -20,6 +20,7 @@ class LoliconImageSource extends ImageSource { r18: this.config.r18, tag: query.tags, num: query.count, + excludeAI: this.config.excludeAI, proxy, } const resp = await this.ctx.http.post(this.config.endpoint, param) @@ -28,16 +29,19 @@ class LoliconImageSource extends ImageSource { return } - return resp.data.map((setu) => { - return { - url: setu.urls.original, - title: setu.title, - author: setu.author, - nsfw: setu.r18, - tags: setu.tags, - pageUrl: `https://pixiv.net/i/${setu.pid}`, - } - }) + return resp.data + .filter((setu) => !(this.config.excludeAI && setu.aiType === 2)) + .filter((setu) => !!this.config.r18 || !!this.config.r18 === setu.r18) + .map((setu) => { + return { + url: setu.urls.original, + title: setu.title, + author: setu.author, + nsfw: setu.r18, + tags: setu.tags, + pageUrl: `https://pixiv.net/i/${setu.pid}`, + } + }) } } @@ -46,6 +50,7 @@ namespace LoliconImageSource { endpoint: string r18: number proxy: { endpoint: string } | string + excludeAI: boolean } export const Config: Schema = Schema.intersect([ @@ -65,6 +70,10 @@ namespace LoliconImageSource { endpoint: Schema.string().required().description('反代服务的地址。'), }).description('自定义'), ]).description('Pixiv 反代服务。').default('i.pixiv.re'), + excludeAI: Schema.union([ + Schema.const(true).description('排除AI作品'), + Schema.const(false).description('不排除AI作品') + ]).description('是否排除 AI 作品。').default(true) }).description('搜索设置'), ]) } diff --git a/packages/pixiv/src/index.ts b/packages/pixiv/src/index.ts index 3fa2fe23d..fee272963 100644 --- a/packages/pixiv/src/index.ts +++ b/packages/pixiv/src/index.ts @@ -45,6 +45,8 @@ class PixivImageSource extends ImageSource { return data.illusts .filter((illust) => illust.total_bookmarks > this.config.minBookmarks) + .filter((illust) => illust.x_restrict <= this.config.rank) + .filter((illust) => illust.illust_ai_type <= this.config.ai) .slice(0, query.count) .map((illust) => { let url = '' @@ -132,6 +134,8 @@ namespace PixivImageSource { endpoint: string token?: string minBookmarks: number + rank: number + ai: number proxy?: { endpoint: string } | string } @@ -150,6 +154,16 @@ namespace PixivImageSource { endpoint: Schema.string().required().description('反代服务的地址。'), }).description('自定义'), ]).description('Pixiv 反代服务。').default('https://i.pixiv.re'), + rank: Schema.union([ + Schema.const(0).description('全年龄'), + Schema.const(1).description('R18'), + Schema.const(2).description('R18G') + ]).description('年龄分级').default(0), + ai: Schema.union([ + Schema.const(0).description('不允许AI作品'), + Schema.const(1).description('允许未知(旧画作或字段未更新)'), + Schema.const(2).description('允许AI作品') + ]).description('是否允许搜索AI作品').default(0) }).description('搜索设置'), ]) }