Bot配置文件
有关bot的配置文件相关内容,请先阅读 BOT配置 。
架构
mirai组件为其下的BOT配置文件提供了 json-schema
。
当前
schema
版本:0.1.0
架构资源
你可以通过 此处 下载 bot.config.json
文件,
或者使用远程资源路径:
$host/schema/component/mirai/bot/0.1.0/bot.config.json
远程资源路径的 $host
即为当前站点,例如:
https://simbot.forte.love/schema/component/mirai/bot/0.1.0/bot.config.json
如何使用
以 IntelliJ IDEA 为例,
对一个 JSON
文件使用JSON架构可以参考其 官方文档。
JSON架构 的约束适用于 JSON
、YAML
文件。
最简配置
明文密码
- JSON
- YAML
- Properties
{
"component": "simbot.mirai",
"code": 123456789,
"passwordInfo": {
"type": "text",
"text": "你的密码"
}
}
component: "simbot.mirai"
code: 123456789
passwordInfo: !<text>
text: "你的密码"
code=123456789
passwordInfo.type=text
passwordInfo.value.text=你的密码
MD5密码
- JSON
- YAML
- Properties
{
"component": "simbot.mirai",
"code": 123456789,
"passwordInfo": {
"type": "md5_text",
"md5": "e807f1fcf82d132f9bb018ca6738a19f"
}
}
component: "simbot.mirai"
code: 123456789
passwordInfo: !<md5_text>
text: "e807f1fcf82d132f9bb018ca6738a19f"
component=simbot.mirai
code=123456789
passwordInfo.type=md5_text
passwordInfo.value.text=e807f1fcf82d132f9bb018ca6738a19f
完整配置参考
仅供参考,以具体代码效果为准。
配置属性 config
下的几乎所有属性都是可选的(甚至包括 config
属性自己),因此你没有必要书写过于完整的配置文件。
下述的完整配置参考中,config.deviceInfo
将会被省略。
下述部分属性不会提供所有的可能(例如
passwordInfo
),对所有属性的完整解释参见后续说明。
- JSON
- YAML
- Properties
{
"component": "simbot.mirai",
"code": 123,
"passwordInfo": {
"type": "text",
"text": "明文密码"
},
"config": {
"workingDir": ".",
"heartbeatPeriodMillis": 60000,
"statHeartbeatPeriodMillis": 300000,
"heartbeatTimeoutMillis": 5000,
"heartbeatStrategy": "STAT_HB",
"reconnectionRetryTimes": 2147483647,
"autoReconnectOnForceOffline": false,
"protocol": "ANDROID_PHONE",
"highwayUploadCoroutineCount": 16,
"deviceInfo": {
"type": "auto"
},
"noNetworkLog": false,
"noBotLog": false,
"isShowingVerboseEventLog": false,
"cacheDir": "cache",
"contactListCache": {
"saveIntervalMillis": 60000,
"friendListCacheEnabled": false,
"groupMemberListCacheEnabled": false
},
"loginCacheEnabled": true,
"convertLineSeparator": true,
"recallMessageCacheStrategyConfig": {
"type": "invalid"
},
"accountSecrets": false
}
}
component: "simbot.mirai"
code: 123456789
passwordInfo: !<text>
text: "明文密码"
config:
deviceInfoSeed: 1
workingDir: "."
heartbeatPeriodMillis: 60000
statHeartbeatPeriodMillis: 300000
heartbeatTimeoutMillis: 5000
heartbeatStrategy: "STAT_HB"
reconnectionRetryTimes: 2147483647
autoReconnectOnForceOffline: false
protocol: "ANDROID_PHONE"
highwayUploadCoroutineCount: 8
deviceInfo: !<auto>
noNetworkLog: false
noBotLog: false
isShowingVerboseEventLog: false
cacheDir: "cache"
contactListCache:
saveIntervalMillis: 60000
friendListCacheEnabled: false
groupMemberListCacheEnabled: false
loginCacheEnabled: true
convertLineSeparator: true
recallMessageCacheStrategyConfig: !<invalid>
accountSecrets: false
component=simbot.mirai
code=123456789
passwordInfo.type=text
passwordInfo.value.text=明文密码
config.deviceInfoSeed=1
config.workingDir=.
config.heartbeatPeriodMillis=60000
config.statHeartbeatPeriodMillis=300000
config.heartbeatTimeoutMillis=5000
config.heartbeatStrategy=STAT_HB
config.reconnectionRetryTimes=2147483647
config.autoReconnectOnForceOffline=false
config.protocol=ANDROID_PHONE
config.highwayUploadCoroutineCount=8
config.deviceInfo.type=auto
config.noNetworkLog=false
config.noBotLog=false
config.isShowingVerboseEventLog=false
config.cacheDir=cache
config.contactListCache.saveIntervalMillis=60000
config.contactListCache.friendListCacheEnabled=false
config.contactListCache.groupMemberListCacheEnabled=false
config.loginCacheEnabled=true
config.convertLineSeparator=true
config.recallMessageCacheStrategyConfig.type=invalid
config.accountSecrets=false
参数释义
参数 | 类型 | 含义 | ||||||
---|---|---|---|---|---|---|---|---|
component 必须 | const | 固定值:simbot.mirai ,代表当前配置文件是针对mirai组件的 | ||||||
code 必须 | integer | 账号。 | ||||||
string | 已弃用 | |||||||
string | 已弃用 | |||||||
passwordInfo 必须 | PasswordInfoConfiguration | 密码配置。后续会提供详细解释。 | ||||||
config | Config | 其他详细配置 | ||||||
integer | 已弃用 | |||||||
config.workingDir | string | 同原生mirai配置,mirai的工作目录。默认为 "." 。 | ||||||
config.heartbeatPeriodMillis | integer | 同原生mirai配置,连接心跳包周期。 | ||||||
config.statHeartbeatPeriodMillis | integer | 同原生mirai配置,状态心跳包周期。 | ||||||
config.heartbeatTimeoutMillis | integer | 同原生mirai配置,每次心跳时等待结果的时间。 | ||||||
config.heartbeatStrategy | enum | 同原生mirai配置,枚举类型。心跳策略。可选元素: STAT_HB REGISTER NONE | ||||||
config.reconnectionRetryTimes | integer | 同原生mirai配置,最多尝试多少次重连。 | ||||||
config.autoReconnectOnForceOffline | boolean | 同原生mirai配置,Boolean类型。在被挤下线时 (BotOfflineEvent.Force ) 自动重连。 | ||||||
config.protocol | enum | 同原生mirai配置,枚举类型。使用协议类型。可选元素: ANDROID_PHONE ANDROID_PAD ANDROID_WATCH IPAD MACOS | ||||||
config.highwayUploadCoroutineCount | integer | 同原生mirai配置,Highway 通道上传图片, 语音, 文件等资源时的协程数量。 | ||||||
config.deviceInfo | DeviceInfoConfiguration | 使用的自定义设备信息配置,详见下文。 | ||||||
object | 已弃用 | |||||||
string | 已弃用 | |||||||
config.noNetworkLog | boolean | 不展示mirai网络日志。默认false | ||||||
config.noBotLog | boolean | 不展示mirai Bot日志。默认false | ||||||
config.isShowingVerboseEventLog | boolean | 同原生mirai配置,是否显示过于冗长的事件日志。默认false。 | ||||||
config.cacheDir | string | 同原生mirai配置,缓存数据目录, 相对于 workingDir 。 | ||||||
config.contactListCache | ContactListCacheConfiguration | 同原 生mirai配置,详见下文。 | ||||||
config.loginCacheEnabled | boolean | 同原生mirai配置,登录缓存。开启后在密码登录成功时会保存秘钥等信息, 在下次启动时通过这些信息登录, 而不提交密码。可以减少验证码出现的频率。 秘钥信息会由密码加密保存. 如果秘钥过期, 则会进行普通密码登录。默认为true。 | ||||||
config.convertLineSeparator | boolean | 同原生mirai配置,是否处理接受到的特殊换行符, 默认为 true。 | ||||||
enum | 已弃用 用于 消息撤回事件(
| |||||||
config.recallMessageCacheStrategyConfiguration | RecallMessageCacheStrategyConfiguration | 用于 消息撤回事件( | ||||||
config.accountSecrets | boolean | 是否禁用 |
PasswordInfoConfiguration
PasswordInfoConfiguration
是用于配置账号密码的配置类型。其大致结构如下:
- JSON
- YAML
- Properties
{
"passwordInfo": {
"type": "password_type",
"paramA": "valueA",
"paramB": "valueB"
}
}
passwordInfo: !<password_type>
paramA: "valueA"
paramB: "valueB"
passwordInfo.type=password_type
passwordInfo.value.paramA=valueA
passwordInfo.value.paramB=valueB
上述示例中可见,passwordInfo
一定存在一个 type
属性来标记当前配置的类型。type
是一个具有固定可选范围的字符串值,并且 type
的选择会决定其他的可用属性。
下面会分别介绍所有的type以及它们对应的具体结构。
text
当 type
值为 text
时,代表所配置的内容为 明文密码。
- JSON
- YAML
- Properties
{
"passwordInfo": {
"type": "text",
"text": "password"
}
}
passwordInfo: !<text>
text: "password"
passwordInfo.type=text
passwordInfo.value.text=password
md5_text
与 type=text
时类似,当 type
值为 md5_text
时,代表所配置的内容为 MD5密码(字符串)。
- JSON
- YAML
- Properties
{
"passwordInfo": {
"type": "md5_text",
"md5": "e807f1fcf84d112f3bb018ca6738a19f"
}
}
passwordInfo: !<md5_text>
md5: "e807f1fcf84d112f3bb018ca6738a19f"
passwordInfo.type=md5_text
passwordInfo.value.md5=e807f1fcf84d112f3bb018ca6738a19f
md5_bytes
与 type=md5_text
时类似,当 type
值为 md5_text
时,代表所配置的内容为 MD5密码(字节组)。
- JSON
- YAML
- Properties
{
"passwordInfo": {
"type": "md5_bytes",
"md5": [-24, 7, -15, -4, -14, 45, 18, 47, -101, -80, 24, -54, 102, 56, -95, -97]
}
}
passwordInfo: !<md5_bytes>
md5: [-117, 26, -103, 83, -60, 97, 18, -106, -88, 39, -85, -8, -60, 120, 4, -41]
kotlinx-serialization-properties
的序列化风格使得它并不太适用于大量元素的"数组"格式,就像下面这个示例一样。
passwordInfo.type=md5_bytes
passwordInfo.value.md5.0=-117
passwordInfo.value.md5.1=26
passwordInfo.value.md5.2=-103
passwordInfo.value.md5.3=83
passwordInfo.value.md5.4=-60
passwordInfo.value.md5.5=97
passwordInfo.value.md5.6=18
passwordInfo.value.md5.7=-106
passwordInfo.value.md5.8=-88
passwordInfo.value.md5.9=39
passwordInfo.value.md5.10=-85
passwordInfo.value.md5.11=-8
passwordInfo.value.md5.12=-60
passwordInfo.value.md5.13=120
passwordInfo.value.md5.14=4
passwordInfo.value.md5.15=-41
env
下文几个以 env_
开头的配置类型代表那些直接通过虚拟机参数或者环境变量来进行动态配置的方式。
这类配置方式暂且称其为环境变量类的配置。
在环境变量配置中,会存在两个属性:prop
和 env
。比如如下示例:
- JSON
- YAML
- Properties
{
"code": 123456,
"passwordInfo": {
"type": "env_xxx",
"prop": "mirai.$CODE$.password",
"env": "mirai.$CODE$.password"
}
}
code: 123456
passwordInfo: !<env_xxx>
prop: "mirai.$CODE$.password"
env: "mirai.$CODE$.password"
code=123456
passwordInfo.type=env_xxx
passwordInfo.value.prop=mirai.$CODE$.password
passwordInfo.value.env=mirai.$CODE$.password
上述配置代表,当前配置的bot的密码,会先通过虚拟机参数,也就是 System.getProperty("simbot.mirai.123456.password")
获取。
如果无法获取,则会尝试通过环境变量,也就是 System.getenv("simbot.mirai.123456.password")
获取。
带入上述示例,你可以通过如下启动命令来动态提供账号 123456
的密码信息。
java -jar -Dsimbot.mirai.123456.password=myPassword myBot.jar
注意,prop
是优先于 env
进行获取的。
也许你发现 了,上述配置中存在一串占位符 $CODE$
。占位符会在 后续 进行简单介绍。
prop
和 env
本质上都是 可选 属性,但是它们二者必须至少 存在一个 。
因此下述配置将会引发运行时异常:
- JSON
- YAML
- Properties
{
"passwordInfo": {
"type": "env_xxx"
}
}
code: 123456
passwordInfo: !<env_xxx>