会话 (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取消该中间件的函数
注册一个仅对当前会话生效的中间件。
session.prompt(timeout?) beta
- 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 中。