Skip to content
页面信息
📝 描述设置注册模型,用于声明用户级、域级和系统级设置
📥 导入import { SettingModel } from 'hydrooj'

SettingModel

设置注册模型,用于声明用户级、域级和系统级设置。

SettingModel 是一个纯模块,导出常量和注册函数而非类。插件使用它将自定义设置注册到相应的分类中。


类型导出

SettingType

typescript
type SettingType = "text" | "yaml" | "number" | "float" | "markdown" | "password" | "boolean" | "textarea" | [string, string][] | Record<string, string> | "json"

设置值类型的类型别名。


常量

标志常量

常量说明
FLAG_HIDDEN1在设置界面隐藏
FLAG_DISABLED2显示但不可编辑
FLAG_SECRET4密钥字段(如密码)
FLAG_PRO8需要 Hydro Pro
FLAG_PUBLIC16对非管理员用户可见
FLAG_PRIVATE32仅对拥有者可见

集合常量

由注册函数填充的只读数组:

常量说明
PREFERENCE_SETTINGS所有已注册的偏好设置
ACCOUNT_SETTINGS所有已注册的账户设置
DOMAIN_SETTINGS所有已注册的域设置
DOMAIN_USER_SETTINGS所有已注册的域用户设置
SYSTEM_SETTINGS所有已注册的系统设置
SETTINGS合并的偏好 + 账户设置数组(扁平)

由注册函数填充的只读字典(按键索引):

常量说明
SETTINGS_BY_KEY偏好 + 账户设置的查找映射
DOMAIN_SETTINGS_BY_KEY域设置的查找映射
DOMAIN_USER_SETTINGS_BY_KEY域用户设置的查找映射
SYSTEM_SETTINGS_BY_KEY系统设置的查找映射

方法

设置工厂

Setting(family: string, key: string, value?: any, type?: SettingType, name?: string, desc?: string, flag?: number, validation?: (val: any) => boolean): Setting

创建一个设置描述符对象。这是所有注册函数使用的底层工厂函数。

参数类型默认值说明
familystring用于 UI 分类的组/族名(如 "setting_basic"
keystring唯一设置键(如 "pagination.problem"
valueanynull默认值
typeSettingType"text"输入类型。对象类型渲染为 <select>(内部转换为 type: 'select'range 字段保存选项)。type: 'yaml' 配合非字符串 value 时,内部转换为 type: 'textarea'subType: 'yaml'
namestring""显示名称
descstring""描述文本
flagnumber0FLAG_* 常量的位运算组合
validation(val: any) => boolean(optional)可选验证器
返回值Setting设置描述符对象

注册函数

每个注册函数接受 Setting[] 或 schemastery Schema 对象,将其注册到相应集合中,并返回一个销毁函数() => void)用于移除这些设置。

PreferenceSetting(...settings: (Setting | Schema)[]): () => void

注册偏好级设置(每用户的显示/UI 偏好,如语言、时区)。添加到 PREFERENCE_SETTINGSSETTINGSSETTINGS_BY_KEY

参数类型默认值说明
...settings(Setting | Schema)[]设置描述符或 schemastery Schema
返回值() => void销毁函数,调用后移除已注册设置

AccountSetting(...settings: (Setting | Schema)[]): () => void

注册账户级设置(用户资料信息,如头像、简介、手机)。添加到 ACCOUNT_SETTINGSSETTINGSSETTINGS_BY_KEY

参数类型默认值说明
...settings(Setting | Schema)[]设置描述符或 schemastery Schema
返回值() => void销毁函数,调用后移除已注册设置

DomainSetting(...settings: (Setting | Schema)[]): () => void

注册域级设置(每域配置,如名称、公告)。添加到 DOMAIN_SETTINGSDOMAIN_SETTINGS_BY_KEY

参数类型默认值说明
...settings(Setting | Schema)[]设置描述符或 schemastery Schema
返回值() => void销毁函数,调用后移除已注册设置

DomainUserSetting(...settings: (Setting | Schema)[]): () => void

注册域用户级设置(每用户每域的数据,如显示名称、排名)。添加到 DOMAIN_USER_SETTINGSDOMAIN_USER_SETTINGS_BY_KEY

参数类型默认值说明
...settings(Setting | Schema)[]设置描述符或 schemastery Schema
返回值() => void销毁函数,调用后移除已注册设置

SystemSetting(...settings: (Setting | Schema)[]): () => void

注册系统级设置(全局服务器配置,如 SMTP、限制、分页)。添加到 SYSTEM_SETTINGSSYSTEM_SETTINGS_BY_KEY

参数类型默认值说明
...settings(Setting | Schema)[]设置描述符或 schemastery Schema
返回值() => void销毁函数,调用后移除已注册设置

属性

属性类型说明
langsRecord<string, LangConfig>hydrooj.langs 系统设置解析得到的语言配置。该设置变更时动态更新

备注

  • 所有注册函数除 Setting 描述符外还接受 schemastery Schema 对象——会通过 schemaToSettings() 自动转换。
  • 每个注册函数返回一个销毁回调。调用它可从所有相关集合中移除设置,支持插件清理。
  • 重复的设置键会触发警告日志但不会被阻止。
  • Setting 接口(来自 hydrooj/src/interface.ts)定义了结构:{ family, key, range, value, type, subType?, name, desc, flag, validation? }