export interface AccessObject<T> {
  readable?: T[]
  writable?: T[]
}
export type Access<T> = T[] | AccessObject<T>
主线程 API
生命周期事件
eval/before-start
- 触发方式: parallel
 
即将启动子线程之前触发。
eval/start
- response: 
WorkerResponse子线程的 response 对象 - 触发方式: parallel
 
子线程成功启动并完成初始化之后触发。
eval/before-send
- content: 
string要发送的内容 - session: 
Session当前会话 - 触发方式: waterfall
 
在子线程中调用 main.send(),主线程实际发送消息之前触发。你可以在这里修改 content 的值并返回。
Trap 实例方法
trap.define(key, decl)
- key: 
string字段名 - decl: 
Declaraion陷阱的定义- decl.fields: 
Iterable<string>依赖的字段 - decl.get?: 
(target: {}) => any陷阱的 getter - decl.set?: 
(target: {}, value: any) => void陷阱的 setter 
 - decl.fields: 
 
定义一个陷阱字段。
trap.fields(fields)
- fields: 
Iterable<string>需要的字段 
根据陷阱所需的字段生成实际数据所需的字段。
trap.get(target, fields)
- target: 
Observed<{}>目标对象 - fields: 
Iterable<string>需要的字段 
根据需要的字段生成一个陷阱对象。
trap.set(target, data)
- target: 
Observed<{}>目标对象 - data: 
object需要更新的数据 
根据给定的数据更新目标对象。
Trap 静态属性
访问配置格式
这个数据类型将被用于 userFields 等配置项,以及扩展功能的 manifest.yml 中。其中 readable 表示可读的字段,writable 表示可写的字段。如果直接传入一个数组,则表示所有这些字段都是只读的。
Trap.user
- 类型: 
Trap 
代理用户数据的陷阱对象。
Trap.channel
- 类型: 
Trap 
代理频道数据的陷阱对象。
Trap.resolve(fields)
- fields: 
Access<T>访问配置 - 返回值: 
AccessObject<T> 
将一个一般形式的访问配置转化为对象格式的。
Trap.merge(baseAccess, fields)
- baseAccess: 
AccessObject<T>访问配置 - fields: 
Access<T>访问配置 - 返回值: 
AccessObject<T> 
以 baseAccess 为基础,合并另一个访问配置,返回一个新的对象格式访问配置。
Trap.action(command, userAccess, channelAccess, action)
- command: 
Command指令 - userAccess: 
AccessObject<User.Field>用户数据访问配置 - channelAccess: 
AccessObject<Channel.Field>频道数据访问配置 - action: 
Command.Action回调函数 
以用户和频道数据的陷阱对象为基础,添加一个用于子线程的指令回调函数。其参数 argv 附加了一个额外的属性:
- argv.payload: 
SessionData会话信息,可用于子线程中的createSession()方法 
MainHandle
handle.execute(uuid, content)
- uuid: 
string会话 UUID - content: 
string要执行的指令 
在 uuid 相对应的会话中触发指令。
handle.send(uuid, content)
- uuid: 
string会话 UUID - content: 
string要发送的文本 
在 uuid 相对应的会话中发送消息。
handle.updateUser(uuid, data)
- uuid: 
string会话 UUID - data: 
Partial<User>要更新的用户数据 
在 uuid 相对应的会话中更新用户数据。
handle.updateChannel(uuid, data)
- uuid: 
string会话 UUID - data: 
Partial<Channel>要更新的频道数据 
在 uuid 相对应的会话中更新频道数据。
EvalWorker
worker.remote
- 类型: 
WorkerHandle 
子线程 WorkerHandle 对象的代理。Koishi 的内部机制将允许你如同直接在子线程里调用 WorkerHandle 方法那样调用这里的 remote 对象。当然你只能通过 remote 做到这件事。
worker.state
- 类型: 
number 
子线程的运行状态。分别用 0, 1, 2, 3 表示 closing, close, opening, open。
worker.start()
- 返回值: 
Promise<void> 
启动子线程。
worker.stop()
- 返回值: 
Promise<void> 
关闭子线程。
worker.restart()
- 返回值: 
Promise<void> 
关闭并重新启动子线程。