会话 (Session)
会话来源于 Koishi v1 的元信息对象,并在后续的版本中发展成了专门的类并大幅扩展了功能。目前的会话已经参与到了 Koishi 的绝大部分工作。
标有 数据库 的 API 需要安装数据库才能使用。
实例属性
你应该已经读过 事件 (Events) 一章了。由于每个会话都必定表达了一个上报事件,因此上报事件中定义的属性也都可以在 Session 的实例中访问到。此外,也只有来自上报事件的属性才会在序列化中被保留。下面将介绍的实例属性都是无法被序列化的。
session.app
当前会话绑定的 App 实例。
session.bot
当前会话绑定的 Bot 实例。
session.user
当前会话绑定的可观测 User 对象。
session.channel
当前会话绑定的可观测 Channel 对象。
session.database
当前应用的 Database 对象。
实例方法
session.send(message)
- message:
string
要发送的内容 - 返回值:
Promise<void>
在当前上下文发送消息。
session.sendQueued(message, delay?)
- message:
string
要发送的内容 - delay:
number
与下一条消息的时间间隔,缺省时会使用app.options.delay.queue
- 返回值:
Promise<void>
在当前上下文发送消息,并与下一条通过 session.sendQueued
发送的消息之间保持一定的时间间隔。
session.cancelQueued(delay?)
- delay:
number
与下一条消息的时间间隔,默认值为0
- 返回值:
Promise<void>
取消当前正在等待发送的消息队列,并重置与下一条通过 session.sendQueued
发送的消息之间的时间间隔。
session.middleware(middleware)
- middleware:
Middleware
要注册的中间件 - 返回值:
() => void
取消该中间件的函数
注册一个仅对当前会话生效的中间件。
beta
session.prompt(timeout?)- timeout:
number
中间件的生效时间,缺省时会使用app.options.delay.prompt
- 返回值:
Promise<string>
用户输入
等待当前会话的下一次输入,如果超时则会返回空串。
session.suggest(options)
- options.target:
string
目标字符串 - options.items:
string[]
源字符串列表 - options.next:
NextFunction?
回调函数 - options.prefix:
string?
显示在候选输入前的文本 - options.suffix:
string
当只有一个选项时,显示在候选输入后的文本 - options.coefficient:
number
用于模糊匹配的相似系数,缺省时会使用app.options.minSimilarity
- options.apply:
(suggestion: string, next: NextFunction) => void
确认后执行的操作 - 返回值:
Promise<void>
尝试显示候选输入。
session.resolve(argv)
- argv:
Argv
运行时参数对象 - 返回值:
Command
关联的指令
尝试解析一个 argv 所关联的指令。
session.collect(argv, key, fields)
- argv:
Argv
只需确保其中存在 command 属性即可 - key:
'user' | 'group'
用户字段集合 - fields:
Set<string>
用户字段集合 - 返回值:
void
按照 argv 中的 command 属性向 fields 添加所需的用户字段。它是内置的 before-attach-user 和 before-attach-channel 监听器。
session.execute(argv, next?)
- argv:
string | Argv
指令文本或运行时参数对象 - next:
NextFunction
回调函数 - 返回值:
Promise<void>
执行一个指令。可以传入一个 argv 对象或者指令对应的文本。
数据库
session.getUser(id?, authority?, fields?)- id:
string | string[]
用户标识符 - authority:
number
未找到该用户时,该用户的默认权限等级 - fields?:
string[]
需要请求的字段 - 返回值:
Promise<User>
用户数据
获取当前会话对应的用户表中的用户数据。
数据库
session.getChannel(id?, selfId?, fields?)- id:
string | string[]
频道标识符 - selfId:
string
未找到该频道时,该频道的 代理者 ID - fields?:
string[]
需要请求的字段 - 返回值:
Promise<Channel>
频道数据
获取当前会话对应的频道表中的频道数据。
数据库
session.observeUser(fields?)- fields:
Iterable<User.Field>
- 返回值:
Promise<User.Observed>
观测特定的用户字段,并更新到 session.user
中。
数据库
session.observeChannel(fields?)- fields:
Iterable<Channel.Field>
- 返回值:
Promise<Channel.Observed>
观测特定的用户字段,并更新到 session.channel
中。