会话 (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 中。