diff --git a/crowdin.yml b/crowdin.yml
index 66141ba7d..1fffb5e01 100644
--- a/crowdin.yml
+++ b/crowdin.yml
@@ -5,6 +5,10 @@ pull_request_labels:
files:
- source: /packages/*/src/locales/zh-CN.yml
translation: /%original_path%/%locale%.yml
+ - source: /packages/*/src/locales/zh-CN.schema.yml
+ translation: /%original_path%/%locale%.schema.yml
+ - source: /packages/*/src/locales/zh-CN.source.schema.yml
+ translation: /%original_path%/%locale%.source.schema.yml
- source: /docs/zh-CN/**/*.md
translation: /docs/%locale%/**/%file_name%.md
- source: /docs/**/zh-CN.json
diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts
index 8dfd50ff1..e3bef56f5 100644
--- a/packages/core/src/index.ts
+++ b/packages/core/src/index.ts
@@ -214,63 +214,47 @@ export const Config = Schema.intersect([
Schema.intersect([
Schema.union([
Schema.object({
- detectLanguage: Schema.boolean().default(false).description('自动检测输入语言并选择语言匹配的图源。'),
+ detectLanguage: Schema.boolean().default(false),
}),
Schema.object({
- detectLanguage: Schema.const(true).description('自动检测输入语言并选择语言匹配的图源。'),
- confidence: Schema.number().default(0.5).description('语言检测的置信度。'),
+ detectLanguage: Schema.const(true),
+ confidence: Schema.number().default(0.5),
}),
]),
Schema.object({
- maxCount: Schema.number().default(10).description('每次搜索的最大数量。'),
- nsfw: Schema.boolean().default(false).description('是否允许输出 NSFW 内容。'),
+ maxCount: Schema.number().default(10),
+ nsfw: Schema.boolean().default(false),
}),
- ]).description('搜索设置'),
+ ]),
Schema.object({
- output: Schema.union([
- Schema.const(0).description('仅发送图片'),
- Schema.const(1).description('发送图片和相关信息'),
- Schema.const(2).description('发送图片、相关信息和链接'),
- Schema.const(3).description('发送全部信息'),
- ])
- .description('输出方式。')
- .default(1),
+ output: Schema.union([Schema.const(0), Schema.const(1), Schema.const(2), Schema.const(3)]).default(1),
outputMethod: Schema.union([
- Schema.const('one-by-one').description('逐条发送每张图片'),
- Schema.const('merge-multiple').description('合并多条发送 (部分平台可能不支持)'),
- Schema.const('forward-all').description('合并为子话题发送所有图片 (部分平台需求较高权限)'),
- Schema.const('forward-multiple').description('仅当多于一张图片使用合并为子话题发送 (部分平台需求较高权限)'),
+ Schema.const('one-by-one'),
+ Schema.const('merge-multiple'),
+ Schema.const('forward-all'),
+ Schema.const('forward-multiple'),
])
.experimental()
.role('radio')
- .default('merge-multiple')
- .description('发送方式。'),
+ .default('merge-multiple'),
preferSize: Schema.union([
- Schema.const('original').description('原始尺寸'),
- Schema.const('large').description('较大尺寸 (通常为约 1200px)'),
- Schema.const('medium').description('中等尺寸 (通常为约 600px)'),
- Schema.const('small').description('较小尺寸 (通常为约 300px)'),
- Schema.const('thumbnail').description('缩略图'),
- ])
- .description('优先使用图片的最大尺寸。')
- .default('large'),
- autoResize: Schema.computed(Schema.boolean())
- .experimental()
- .default(false)
- .description('根据 preferSize 自动缩小过大的图片。
- 需要安装提供 canvas 服务的插件'),
- asset: Schema.boolean().default(false).description('优先使用 [assets服务](https://assets.koishi.chat/) 转存图片。'),
- base64: Schema.boolean().default(false).description('使用 base64 发送图片。'),
- spoiler: Schema.union([
- Schema.const(0).description('禁用'),
- Schema.const(1).description('所有图片'),
- Schema.const(2).description('仅 NSFW 图片'),
- ])
- .description('发送为隐藏图片,单击后显示(在 QQ 平台中以「合并转发」发送)。')
+ Schema.const('original'),
+ Schema.const('large'),
+ Schema.const('medium'),
+ Schema.const('small'),
+ Schema.const('thumbnail'),
+ ]).default('large'),
+ autoResize: Schema.computed(Schema.boolean()).experimental().default(false),
+ asset: Schema.boolean().default(false),
+ base64: Schema.boolean().default(false),
+ spoiler: Schema.union([Schema.const(0), Schema.const(1), Schema.const(2)])
.default(0)
.experimental(),
- showTips: Schema.boolean().default(true).description('是否输出使用提示信息。'),
- }).description('输出设置'),
-])
+ showTips: Schema.boolean().default(true),
+ }),
+]).i18n({
+ 'zh-CN': require('./locales/zh-CN.schema'),
+})
export function apply(ctx: Context, config: Config) {
// @ts-expect-error inject structure not compatible
diff --git a/packages/core/src/locales/zh-CN.schema.yml b/packages/core/src/locales/zh-CN.schema.yml
new file mode 100644
index 000000000..20e27e165
--- /dev/null
+++ b/packages/core/src/locales/zh-CN.schema.yml
@@ -0,0 +1,41 @@
+$inner:
+ - $description: 搜索设置
+ detectLanguage: 自动检测输入语言并选择语言匹配的图源。
+ confidence: 语言检测的置信度。
+ maxCount: 每次搜索的最大数量。
+ nsfw: 是否允许输出 NSFW 内容。
+
+ - $description: 输出设置
+ output:
+ $description: 输出方式。
+ $inner:
+ - 仅发送图片
+ - 发送图片和相关信息
+ - 发送图片、相关信息和链接
+ - 发送全部信息
+ outputMethod:
+ $description: 发送方式。
+ $inner:
+ - 逐条发送每张图片
+ - 合并多条发送 (部分平台可能不支持)
+ - 合并为子话题发送所有图片 (部分平台需求较高权限)
+ - 仅当多于一张图片使用合并为子话题发送 (部分平台需求较高权限)
+ preferSize:
+ $description: 优先使用图片的最大尺寸。
+ $inner:
+ - 原始尺寸
+ - 较大尺寸 (通常为约 1200px)
+ - 中等尺寸 (通常为约 600px)
+ - 较小尺寸 (通常为约 300px)
+ - 缩略图
+ autoResize:
+ $description: 根据 preferSize 自动缩小过大的图片。 **需要安装提供 canvas 服务的插件**
+ asset: 优先使用 [assets服务](https://assets.koishi.chat/) 转存图片。
+ base64: 使用 base64 发送图片。
+ spoiler:
+ $description: 发送为隐藏图片,单击后显示(在 QQ 平台中以「合并转发」发送)。
+ $inner:
+ - 禁用
+ - 所有图片
+ - 仅 NSFW 图片
+ showTips: 是否输出使用提示信息。
diff --git a/packages/core/src/locales/zh-CN.source.schema.yml b/packages/core/src/locales/zh-CN.source.schema.yml
new file mode 100644
index 000000000..6068d4d86
--- /dev/null
+++ b/packages/core/src/locales/zh-CN.source.schema.yml
@@ -0,0 +1,7 @@
+$inner:
+ - $description: 全局设置
+ label: 图源标签,可用于在指令中手动指定图源。
+ weight: 图源权重。在多个符合标签的图源中,将按照各自的权重随机选择。
+
+ - $description: 请求设置
+ proxyAgent: 请求图片时使用代理服务器。
diff --git a/packages/core/src/source.ts b/packages/core/src/source.ts
index 9f622ccc1..132f5f18b 100644
--- a/packages/core/src/source.ts
+++ b/packages/core/src/source.ts
@@ -45,16 +45,15 @@ export namespace ImageSource {
export function createSchema(o: { label: string }) {
return Schema.intersect([
Schema.object({
- label: Schema.string().default(o.label).description('图源标签,可用于在指令中手动指定图源。'),
- weight: Schema.number()
- .min(1)
- .default(1)
- .description('图源权重。在多个符合标签的图源中,将按照各自的权重随机选择。'),
- }).description('全局设置'),
+ label: Schema.string().default(o.label),
+ weight: Schema.number().min(1).default(1),
+ }),
Schema.object({
- proxyAgent: Schema.string().default(undefined).description('请求图片时使用代理服务器。'),
- }).description('请求设置'),
- ])
+ proxyAgent: Schema.string().default(undefined),
+ }),
+ ]).i18n({
+ 'zh-CN': require('./locales/zh-CN.source.schema.yml'),
+ })
}
export const Config: Schema = createSchema({ label: 'default' })
diff --git a/packages/danbooru/src/index.ts b/packages/danbooru/src/index.ts
index 214beee34..54165bb1a 100644
--- a/packages/danbooru/src/index.ts
+++ b/packages/danbooru/src/index.ts
@@ -53,21 +53,19 @@ namespace DanbooruImageSource {
export const Config: Schema = Schema.intersect([
ImageSource.createSchema({ label: 'danbooru' }),
Schema.object({
- endpoint: Schema.string().description('Danbooru 的 URL。').default('https://danbooru.donmai.us/'),
+ endpoint: Schema.string().default('https://danbooru.donmai.us/'),
/**
* @see https://danbooru.donmai.us/wiki_pages/help%3Aapi
*/
keyPairs: Schema.array(
Schema.object({
- login: Schema.string().required().description('用户名。'),
- apiKey: Schema.string().required().role('secret').description('API 密钥。'),
+ login: Schema.string().required(),
+ apiKey: Schema.string().required().role('secret'),
}),
- )
- .default([])
- .description(
- 'Danbooru 的登录凭据。[点击前往获取及设置教程](https://booru.koishi.chat/zh-CN/plugins/danbooru.html#configure-credentials)',
- ),
- }).description('搜索设置'),
+ ).default([]),
+ }).i18n({
+ 'zh-CN': require('./locales/zh-CN.schema'),
+ }),
])
}
diff --git a/packages/danbooru/src/locales/zh-CN.schema.yml b/packages/danbooru/src/locales/zh-CN.schema.yml
new file mode 100644
index 000000000..7cdfb5d31
--- /dev/null
+++ b/packages/danbooru/src/locales/zh-CN.schema.yml
@@ -0,0 +1,7 @@
+$description: 搜索设置
+endpoint: Danbooru 的 URL。
+keyPairs:
+ $description: Danbooru 的登录凭据。[点击前往获取及设置教程](https://booru.koishi.chat/zh-CN/plugins/danbooru.html#configure-credentials)
+ $inner:
+ login: 用户名。
+ apiKey: API 密钥。
diff --git a/packages/e621/src/index.ts b/packages/e621/src/index.ts
index c39a55b7f..86c8295e3 100644
--- a/packages/e621/src/index.ts
+++ b/packages/e621/src/index.ts
@@ -68,22 +68,20 @@ namespace e621ImageSource {
export const Config: Schema = Schema.intersect([
ImageSource.createSchema({ label: 'e621' }),
Schema.object({
- endpoint: Schema.string().description('e621/e926 的 URL。').default('https://e621.net/'),
+ endpoint: Schema.string().default('https://e621.net/'),
keyPairs: Schema.array(
Schema.object({
- login: Schema.string().required().description('e621/e926 的用户名。'),
- apiKey: Schema.string().required().role('secret').description('e621/e926 的 API Key。'),
+ login: Schema.string().required(),
+ apiKey: Schema.string().required().role('secret'),
}),
- )
- .default([])
- .description(
- 'e621/e926 的登录凭据。[点击前往获取及设置教程](https://booru.koishi.chat/zh-CN/plugins/e621.html#configure-credentials)',
- ),
- userAgent: Schema.string().description('设置请求的 User Agent。').default(
+ ).default([]),
+ userAgent: Schema.string().default(
// eslint-disable-next-line max-len
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 Edg/114.0.1823.37',
),
- }).description('搜索设置'),
+ }).i18n({
+ 'zh-CN': require('./locales/zh-CN.schema'),
+ }),
])
}
diff --git a/packages/e621/src/locales/zh-CN.schema.yml b/packages/e621/src/locales/zh-CN.schema.yml
new file mode 100644
index 000000000..33c2d7bbd
--- /dev/null
+++ b/packages/e621/src/locales/zh-CN.schema.yml
@@ -0,0 +1,8 @@
+$description: 搜索设置
+endpoint: e621/e926 的 URL。
+keyPairs:
+ $description: e621/e926 的登录凭据。[点击前往获取及设置教程](https://booru.koishi.chat/zh-CN/plugins/e621.html#configure-credentials)
+ $inner:
+ login: e621/e926 的用户名。
+ apiKey: e621/e926 的 API Key。
+userAgent: 设置请求的 User Agent。
diff --git a/packages/gelbooru/src/index.ts b/packages/gelbooru/src/index.ts
index 465dd1b3d..07bb1d8ac 100644
--- a/packages/gelbooru/src/index.ts
+++ b/packages/gelbooru/src/index.ts
@@ -67,13 +67,11 @@ namespace GelbooruImageSource {
export const Config: Schema = Schema.intersect([
ImageSource.createSchema({ label: 'gelbooru' }),
Schema.object({
- endpoint: Schema.string().description('Gelbooru 的 URL。').default('https://gelbooru.com/index.php'),
- keyPairs: Schema.array(Schema.string().required().role('secret'))
- .description(
- 'Gelbooru 的登录凭据。[点击前往获取及设置教程](https://booru.koishi.chat/zh-CN/plugins/gelbooru.html#configure-credentials)',
- )
- .default([]),
- }).description('搜索设置'),
+ endpoint: Schema.string().default('https://gelbooru.com/index.php'),
+ keyPairs: Schema.array(Schema.string().required().role('secret')).default([]),
+ }).i18n({
+ 'zh-CN': require('./locales/zh-CN.schema'),
+ }),
])
}
diff --git a/packages/gelbooru/src/locales/zh-CN.schema.yml b/packages/gelbooru/src/locales/zh-CN.schema.yml
new file mode 100644
index 000000000..fd6b0a002
--- /dev/null
+++ b/packages/gelbooru/src/locales/zh-CN.schema.yml
@@ -0,0 +1,4 @@
+$description: 搜索设置
+endpoint: Gelbooru 的 URL。
+keyPairs:
+ $description: Gelbooru 的登录凭据。[点击前往获取及设置教程](https://booru.koishi.chat/zh-CN/plugins/gelbooru.html#configure-credentials)
diff --git a/packages/konachan/src/index.ts b/packages/konachan/src/index.ts
index ca038ce86..99fb224dd 100644
--- a/packages/konachan/src/index.ts
+++ b/packages/konachan/src/index.ts
@@ -75,21 +75,18 @@ namespace KonachanImageSource {
export const Config: Schema = Schema.intersect([
ImageSource.createSchema({ label: 'konachan' }),
Schema.object({
- endpoint: Schema.union([
- Schema.const('https://konachan.com/').description('Konachan.com (NSFW)'),
- Schema.const('https://konachan.net/').description('Konachan.net (SFW)'),
- ])
- .description('Konachan 的 URL。')
- .default('https://konachan.com/'),
+ endpoint: Schema.union([Schema.const('https://konachan.com/'), Schema.const('https://konachan.net/')]).default(
+ 'https://konachan.com/',
+ ),
keyPairs: Schema.array(
Schema.object({
- login: Schema.string().required().description('用户名'),
- password: Schema.string().required().role('secret').description('密码'),
+ login: Schema.string().required(),
+ password: Schema.string().required().role('secret'),
}),
- )
- .default([])
- .description('Konachan 的登录凭据。'),
- }).description('搜索设置'),
+ ).default([]),
+ }).i18n({
+ 'zh-CN': require('./locales/zh-CN.schema'),
+ }),
])
}
diff --git a/packages/konachan/src/locales/zh-CN.schema.yml b/packages/konachan/src/locales/zh-CN.schema.yml
new file mode 100644
index 000000000..2da310004
--- /dev/null
+++ b/packages/konachan/src/locales/zh-CN.schema.yml
@@ -0,0 +1,11 @@
+$description: 搜索设置
+endpoint:
+ $description: Konachan 的 URL。
+ $inner:
+ - Konachan.com (NSFW)
+ - Konachan.net (SFW)
+keyPairs:
+ $description: Konachan 的登录凭据。
+ $inner:
+ login: 用户名
+ password: 密码
diff --git a/packages/local/src/index.ts b/packages/local/src/index.ts
index f13068f55..36c0bac6f 100644
--- a/packages/local/src/index.ts
+++ b/packages/local/src/index.ts
@@ -184,19 +184,21 @@ namespace LocalImageSource {
export const Config: Schema = Schema.intersect([
ImageSource.createSchema({ label: 'local' }),
- Schema.object({
- // TODO: Schema.path()?
- endpoint: Schema.array(String).description('图源文件夹,支持多个不同的文件夹'),
- storage: Schema.union(['file', 'database']).description('图源数据保存方式').default('file'),
- reload: Schema.boolean().description('每次启动时重新构建图源数据').default(false),
- languages: Schema.array(String).description('支持的语言').default(['zh-CN']),
- }).description('图源设置'),
- Schema.object({
- scraper: Schema.string()
- .description('文件名元信息生成格式,详见文档')
- .default('{filename}-{tag}'),
- extension: Schema.array(String).description('支持的扩展名').default(['.jpg', '.png', '.jpeg', '.gif']),
- }).description('文件设置'),
+ Schema.intersect([
+ Schema.object({
+ // TODO: Schema.path()?
+ endpoint: Schema.array(String),
+ storage: Schema.union(['file', 'database']).default('file'),
+ reload: Schema.boolean().default(false),
+ languages: Schema.array(String).default(['zh-CN']),
+ }),
+ Schema.object({
+ scraper: Schema.string().default('{filename}-{tag}'),
+ extension: Schema.array(String).default(['.jpg', '.png', '.jpeg', '.gif']),
+ }),
+ ]).i18n({
+ 'zh-CN': require('./locales/zh-CN.schema'),
+ }),
])
}
diff --git a/packages/local/src/locales/zh-CN.schema.yml b/packages/local/src/locales/zh-CN.schema.yml
new file mode 100644
index 000000000..3d9dc6bea
--- /dev/null
+++ b/packages/local/src/locales/zh-CN.schema.yml
@@ -0,0 +1,11 @@
+$inner:
+ - $description: 图源设置
+ $inner:
+ endpoint: 图源文件夹,支持多个不同的文件夹
+ storage: 图源数据保存方式
+ reload: 每次启动时重新构建图源数据
+ languages: 支持的语言
+ - $description: 文件设置
+ $inner:
+ scraper: 文件名元信息生成格式,详见文档
+ extension: 支持的扩展名
diff --git a/packages/lolibooru/src/index.ts b/packages/lolibooru/src/index.ts
index eb4294a9b..da3d07de8 100644
--- a/packages/lolibooru/src/index.ts
+++ b/packages/lolibooru/src/index.ts
@@ -78,16 +78,16 @@ namespace LolibooruImageSource {
export const Config: Schema = Schema.intersect([
ImageSource.createSchema({ label: 'lolibooru' }),
Schema.object({
- endpoint: Schema.string().description('Lolibooru 的 URL。').default('https://lolibooru.moe'),
+ endpoint: Schema.string().default('https://lolibooru.moe'),
keyPairs: Schema.array(
Schema.object({
- login: Schema.string().required().description('用户名'),
- password: Schema.string().required().role('secret').description('密码'),
+ login: Schema.string().required(),
+ password: Schema.string().required().role('secret'),
}),
- )
- .default([])
- .description('Lolibooru 的登录凭据。'),
- }).description('搜索设置'),
+ ).default([]),
+ }).i18n({
+ 'zh-CN': require('./locales/zh-CN.schema'),
+ }),
])
}
diff --git a/packages/lolibooru/src/locales/zh-CN.schema.yml b/packages/lolibooru/src/locales/zh-CN.schema.yml
new file mode 100644
index 000000000..14cc90fb1
--- /dev/null
+++ b/packages/lolibooru/src/locales/zh-CN.schema.yml
@@ -0,0 +1,7 @@
+$description: 搜索设置
+endpoint: Lolibooru 的 URL。
+keyPairs:
+ $description: Lolibooru 的登录凭据。
+ $inner:
+ login: 用户名
+ password: 密码
diff --git a/packages/lolicon/src/index.ts b/packages/lolicon/src/index.ts
index 13a8cae53..f4a91d3b8 100644
--- a/packages/lolicon/src/index.ts
+++ b/packages/lolicon/src/index.ts
@@ -83,7 +83,9 @@ namespace LoliconImageSource {
])
.description('是否排除 AI 作品。')
.default(true),
- }).description('搜索设置'),
+ }).i18n({
+ 'zh-CN': require('./locales/zh-CN.schema'),
+ }),
])
}
diff --git a/packages/lolicon/src/locales/zh-CN.schema.yml b/packages/lolicon/src/locales/zh-CN.schema.yml
new file mode 100644
index 000000000..515282784
--- /dev/null
+++ b/packages/lolicon/src/locales/zh-CN.schema.yml
@@ -0,0 +1,22 @@
+$description: 搜索设置
+endpoint: Lolicon API 的 URL。
+r18:
+ $description: 是否检索 R18 图片。
+ $inner:
+ - 非 R18
+ - 仅 R18
+ - 混合
+proxy:
+ $description: Pixiv 反代服务。
+ $inner:
+ - i.pixiv.re
+ - i.pixiv.cat
+ - i.pixiv.nl
+ - $description: 自定义
+ $inner:
+ endpoint: 反代服务的地址。
+excludeAI:
+ $description: 是否排除 AI 作品。
+ $inner:
+ - 排除AI作品
+ - 不排除AI作品
diff --git a/packages/moehu/src/index.ts b/packages/moehu/src/index.ts
index af544588a..7cd3815e8 100644
--- a/packages/moehu/src/index.ts
+++ b/packages/moehu/src/index.ts
@@ -61,8 +61,10 @@ namespace MoehuImageSource {
export const Config: Schema = Schema.intersect([
ImageSource.createSchema({ label: 'moehu' }),
Schema.object({
- endpoint: Schema.string().description('Moehu 的 URL。').default('https://img.moehu.org/pic.php'),
- }).description('搜索设置'),
+ endpoint: Schema.string().default('https://img.moehu.org/pic.php'),
+ }).i18n({
+ 'zh-CN': require('./locales/zh-CN.schema'),
+ }),
])
}
diff --git a/packages/moehu/src/locales/zh-CN.schema.yml b/packages/moehu/src/locales/zh-CN.schema.yml
new file mode 100644
index 000000000..780607c61
--- /dev/null
+++ b/packages/moehu/src/locales/zh-CN.schema.yml
@@ -0,0 +1,2 @@
+$description: 搜索设置
+endpoint: Moehu 的 URL。
diff --git a/packages/pixiv/src/index.ts b/packages/pixiv/src/index.ts
index 1359e8ffa..d54c34b88 100644
--- a/packages/pixiv/src/index.ts
+++ b/packages/pixiv/src/index.ts
@@ -240,62 +240,46 @@ namespace PixivImageSource {
export const Config: Schema = Schema.intersect([
ImageSource.createSchema({ label: 'pixiv' }),
- Schema.object({
- endpoint: Schema.string().description('Pixiv 的 API Root').default('https://app-api.pixiv.net/'),
- // TODO: set token as non-required for illust recommend
- token: Schema.string().required().role('secret').description('Pixiv 的 Refresh Token'),
- minBookmarks: Schema.number()
- .default(0)
- .description('最少收藏数,仅在设置了 Token 并有 Pixiv Premium 的情况下可用'),
- 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(1).description('不允许AI作品'), Schema.const(2).description('允许AI作品')])
- .description('是否允许搜索AI作品')
- .default(1),
- }).description('搜索设置'),
Schema.intersect([
Schema.object({
- bypassMethod: Schema.union([
- Schema.const('proxy').description('使用现有反代服务'),
- Schema.const('route').description('使用插件本地反代'),
- Schema.const('asset').description('下载到 assets 缓存'),
- ])
- .description(
- '突破 Pixiv 站点图片防外部引用检测的方式。[参考](https://booru.koishi.chat/zh-CN/plugins/pixiv.html#bypass-pixiv-detection)',
- )
- .default('proxy'),
+ endpoint: Schema.string().default('https://app-api.pixiv.net/'),
+ // TODO: set token as non-required for illust recommend
+ token: Schema.string().required().role('secret'),
+ minBookmarks: Schema.number().default(0),
+ rank: Schema.union([Schema.const(0), Schema.const(1), Schema.const(2)]).default(0),
+ ai: Schema.union([Schema.const(1), Schema.const(2)]).default(1),
}),
- Schema.union([
+ Schema.intersect([
Schema.object({
- bypassMethod: Schema.const('proxy'),
- proxy: Schema.union([
- Schema.const('https://i.pixiv.re').description('i.pixiv.re'),
- Schema.const('https://i.pixiv.cat').description('i.pixiv.cat'),
- Schema.const('https://i.pixiv.nl').description('i.pixiv.nl'),
- Schema.object({
- endpoint: Schema.string().required().description('反代服务的地址。'),
- }).description('自定义'),
- ])
- .description('Pixiv 反代服务。')
- .default('https://i.pixiv.re'),
- }),
- Schema.object({
- bypassMethod: Schema.const('route'),
- route: Schema.string()
- .description('反代服务的路径(需在 server 插件配置中填写 `selfUrl`)。')
- .default('/booru/pixiv/proxy'),
- aesKey: Schema.string().hidden().description('AES 加密密钥').default(''),
- }),
- Schema.object({
- bypassMethod: Schema.const('asset'),
+ bypassMethod: Schema.union([Schema.const('proxy'), Schema.const('route'), Schema.const('asset')]).default(
+ 'proxy',
+ ),
}),
+ Schema.union([
+ Schema.object({
+ bypassMethod: Schema.const('proxy'),
+ proxy: Schema.union([
+ Schema.const('https://i.pixiv.re'),
+ Schema.const('https://i.pixiv.cat'),
+ Schema.const('https://i.pixiv.nl'),
+ Schema.object({
+ endpoint: Schema.string().required(),
+ }),
+ ]).default('https://i.pixiv.re'),
+ }),
+ Schema.object({
+ bypassMethod: Schema.const('route'),
+ route: Schema.string().default('/booru/pixiv/proxy'),
+ aesKey: Schema.string().hidden().default(''),
+ }),
+ Schema.object({
+ bypassMethod: Schema.const('asset'),
+ }),
+ ]),
]),
- ]),
+ ]).i18n({
+ 'zh-CN': require('./locales/zh-CN.schema'),
+ }),
])
}
diff --git a/packages/pixiv/src/locales/zh-CN.schema.yml b/packages/pixiv/src/locales/zh-CN.schema.yml
new file mode 100644
index 000000000..b39338c47
--- /dev/null
+++ b/packages/pixiv/src/locales/zh-CN.schema.yml
@@ -0,0 +1,32 @@
+$description: 搜索设置
+$inner:
+ - endpoint: Pixiv 的 API Root
+ token: Pixiv 的 Refresh Token
+ minBookmarks: 最少收藏数,仅在设置了 Token 并有 Pixiv Premium 的情况下可用
+ rank:
+ $description: 年龄分级
+ $inner:
+ - 全年龄
+ - R18
+ - R18G
+ ai:
+ $description: 是否允许搜索AI作品
+ $inner:
+ - 不允许AI作品
+ - 允许AI作品
+ - bypassMethod:
+ $description: 突破 Pixiv 站点图片防外部引用检测的方式。[参考](https://booru.koishi.chat/zh-CN/plugins/pixiv.html#bypass-pixiv-detection)
+ $inner:
+ - 使用现有反代服务
+ - 使用插件本地反代
+ - 下载到 assets 缓存
+ proxy:
+ $description: Pixiv 反代服务。
+ $inner:
+ - i.pixiv.re
+ - i.pixiv.cat
+ - i.pixiv.nl
+ - $description: 自定义
+ endpoint: 反代服务的地址。
+ route: 反代服务的路径(需在 server 插件配置中填写 `selfUrl`)。
+ aesKey: AES 加密密钥
diff --git a/packages/safebooru/src/index.ts b/packages/safebooru/src/index.ts
index dd6de2a10..8dc026189 100644
--- a/packages/safebooru/src/index.ts
+++ b/packages/safebooru/src/index.ts
@@ -60,8 +60,10 @@ namespace SafebooruImageSource {
export const Config: Schema = Schema.intersect([
ImageSource.createSchema({ label: 'safebooru' }),
Schema.object({
- endpoint: Schema.string().description('Safebooru 的 URL。').default('https://safebooru.org/index.php'),
- }).description('搜索设置'),
+ endpoint: Schema.string().default('https://safebooru.org/index.php'),
+ }).i18n({
+ 'zh-CN': require('./locales/zh-CN.schema'),
+ }),
])
}
diff --git a/packages/safebooru/src/locales/zh-CN.schema.yml b/packages/safebooru/src/locales/zh-CN.schema.yml
new file mode 100644
index 000000000..633adee95
--- /dev/null
+++ b/packages/safebooru/src/locales/zh-CN.schema.yml
@@ -0,0 +1,2 @@
+$description: 搜索设置
+endpoint: Safebooru 的 URL。
diff --git a/packages/sankaku/src/index.ts b/packages/sankaku/src/index.ts
index ee555b572..fce40ac71 100644
--- a/packages/sankaku/src/index.ts
+++ b/packages/sankaku/src/index.ts
@@ -96,19 +96,19 @@ namespace SankakuComplexImageSource {
Schema.object({
keyPairs: Schema.array(
Schema.object({
- login: Schema.string().required().description('SankakuComplex 用户名'),
- password: Schema.string().required().role('secret').description('SankakuComplex 密码'),
- tokenType: Schema.string().hidden().default('Bearer').description('SankakuComplex 访问令牌类型'),
- accessToken: Schema.string().hidden().description('SankakuComplex 访问令牌'),
+ login: Schema.string().required(),
+ password: Schema.string().required().role('secret'),
+ tokenType: Schema.string().hidden().default('Bearer'),
+ accessToken: Schema.string().hidden(),
}),
- )
- .default([])
- .description('SankakuComplex 的登录凭证'),
- userAgent: Schema.string().description('设置请求的 User Agent。').default(
+ ).default([]),
+ userAgent: Schema.string().default(
// eslint-disable-next-line max-len
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36',
),
- }).description('搜索设置'),
+ }).i18n({
+ 'zh-CN': require('./locales/zh-CN.schema'),
+ }),
])
}
diff --git a/packages/sankaku/src/locales/zh-CN.schema.yml b/packages/sankaku/src/locales/zh-CN.schema.yml
new file mode 100644
index 000000000..3add10876
--- /dev/null
+++ b/packages/sankaku/src/locales/zh-CN.schema.yml
@@ -0,0 +1,9 @@
+$description: 搜索设置
+keyPairs:
+ $description: SankakuComplex 的登录凭证
+ $inner:
+ login: SankakuComplex 用户名
+ password: SankakuComplex 密码
+ tokenType: SankakuComplex 访问令牌类型
+ accessToken: SankakuComplex 访问令牌
+userAgent: 设置请求的 User Agent。
diff --git a/packages/yande/src/index.ts b/packages/yande/src/index.ts
index dedac8869..067644d3d 100644
--- a/packages/yande/src/index.ts
+++ b/packages/yande/src/index.ts
@@ -79,16 +79,16 @@ namespace YandeImageSource {
export const Config: Schema = Schema.intersect([
ImageSource.createSchema({ label: 'yande' }),
Schema.object({
- endpoint: Schema.string().description('Yande.re 的 URL。').default('https://yande.re'),
+ endpoint: Schema.string().default('https://yande.re'),
keyPairs: Schema.array(
Schema.object({
- login: Schema.string().required().description('Yande.re 的用户名。'),
- password: Schema.string().required().role('secret').description('Yande.re 的密码。'),
+ login: Schema.string().required(),
+ password: Schema.string().required().role('secret'),
}),
- )
- .default([])
- .description('Yande.re 的登录凭据。'),
- }).description('搜索设置'),
+ ).default([]),
+ }).i18n({
+ 'zh-CN': require('./locales/zh-CN.schema'),
+ }),
])
}
diff --git a/packages/yande/src/locales/zh-CN.schema.yml b/packages/yande/src/locales/zh-CN.schema.yml
new file mode 100644
index 000000000..0dd96499e
--- /dev/null
+++ b/packages/yande/src/locales/zh-CN.schema.yml
@@ -0,0 +1,7 @@
+$description: 搜索设置
+endpoint: Yande.re 的 URL。
+keyPairs:
+ $description: Yande.re 的登录凭据。
+ $inner:
+ login: Yande.re 的用户名。
+ password: Yande.re 的密码。