Repository: koishijs/novelai-bot
File: src/config.ts (TypeScript)

Code before:
          'referer': 'https://novelai.net/',
          'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36',
        }),
        allowAnlas: Schema.union([
          Schema.const(true).description('允许'),
          Schema.const(false).description('禁止'),
          Schema.natural().description('权限等级').default(1),
        ]).default(true).description('是否启用高级功能 (例如图片增强和手动设置某些参数)。'),
      }),
    ]),
    Schema.object({
      type: Schema.const('naifu'),
      token: Schema.string().description('授权令牌。').role('secret'),
      endpoint: Schema.string().description('API 服务器地址。').required(),
      headers: Schema.dict(String).description('要附加的额外请求头。'),
    }),
    Schema.object({
      type: Schema.const('sd-webui'),
      endpoint: Schema.string().description('API 服务器地址。').required(),
      headers: Schema.dict(String).description('要附加的额外请求头。'),
    }),
    Schema.object({
      type: Schema.const('stable-horde'),
      endpoint: Schema.string().description('API 服务器地址。').default('https://stablehorde.net/'),
      token: Schema.string().description('授权令牌。').role('secret').default('0000000000'),
      nsfw: Schema.union([
        Schema.const('disallow').description('禁止'),
        Schema.const('censor').description('遮罩'),
        Schema.const('allow').description('允许'),
      ]).description('是否允许 NSFW 内容。').default('allow'),
    }),
  ]),

  Schema.union([
    Schema.object({
      type: Schema.const('sd-webui'),
      sampler: sampler.createSchema(sampler.sd),
      upscaler: Schema.union(upscalers).description('默认的放大算法。').default('Lanczos'),
    }).description('参数设置'),
    Schema.object({
      type: Schema.const('stable-horde'),
      sampler: sampler.createSchema(sampler.horde),
      model: Schema.union(hordeModels),
    }),
    Schema.object({
      type: Schema.const('naifu'),
      sampler: sampler.createSchema(sampler.nai),
    }).description('参数设置'),
    Schema.object({
      model: Schema.union(models).description('默认的生成模型。').default('nai'),
      sampler: sampler.createSchema(sampler.nai),

Review comment (suggestion):
- Default to `allow` may be arguable.
- Don't know what is the translation of `censor` (or `censored`?)

Code after:
      type: Schema.const('stable-horde'),
      sampler: sampler.createSchema(sampler.horde),
      model: Schema.union(hordeModels),
    }),
    Schema.object({
      type: Schema.const('naifu'),
      sampler: sampler.createSchema(sampler.nai),
    }).description('参数设置'),
    Schema.object({
      model: Schema.union(models).description('默认的生成模型。').default('nai'),
      sampler: sampler.createSchema(sampler.nai),
    }).description('参数设置'),
  ] as const),

  Schema.object({
    scale: Schema.number().description('默认对输入的服从度。').default(11),
    textSteps: Schema.natural().description('文本生图时默认的迭代步数。').default(28),
    imageSteps: Schema.natural().description('以图生图时默认的迭代步数。').default(50),
    maxSteps: Schema.natural().description('允许的最大迭代步数。').default(64),
    resolution: Schema.union([
      Schema.const('portrait' as const).description('肖像 (768x512)'),
      Schema.const('landscape' as const).description('风景 (512x768)'),
      Schema.const('square' as const).description('方形 (640x640)'),
      Schema.object({
        width: Schema.natural().description('图片宽度。').default(640),
        height: Schema.natural().description('图片高度。').default(640),
      }).description('自定义'),
    ] as const).description('默认生成的图片尺寸。').default('portrait'),
    maxResolution: Schema.natural().description('允许生成的宽高最大值。').default(1024),
  }),

  PromptConfig,

  Schema.object({
    output: Schema.union([
      Schema.const('minimal').description('只发送图片'),
      Schema.const('default').description('发送图片和关键信息'),
      Schema.const('verbose').description('发送全部信息'),
    ]).description('输出方式。').default('default'),
    maxIterations: Schema.natural().description('允许的最大绘制次数。').default(1),
    maxRetryCount: Schema.natural().description('连接失败时最大的重试次数。').default(3),
    requestTimeout: Schema.number().role('time').description('当请求超过这个时间时会中止并提示超时。').default(Time.minute),
    recallTimeout: Schema.number().role('time').description('图片发送后自动撤回的时间 (设置为 0 以禁用此功能)。').default(0),
    maxConcurrency: Schema.number().description('单个频道下的最大并发数量 (设置为 0 以禁用此功能)。').default(0),
  }).description('高级设置'),
]) as Schema<Config>

interface Forbidden {
  pattern: string
  strict: boolean
}