Skip to content

会话

在zhin中,机器人发出的任何事件,都会被封装为一个统一格式的会话对象,开发者可以通 过访问会话对象的属性,来获取对应事件产生的信息。

下面是会话中的一些常用属性及其类型:

typescript
interface Session<
  P extends keyof Zhin.Adapters = keyof Zhin.Adapters,
  E extends keyof Zhin.BotEventMaps[P] = keyof Zhin.BotEventMaps[P],
> {
  protocol: P; // 所使用的适配器
  type?: string; // 事件类型
  user_id?: string | number; // 用户id
  user_name?: string; // 用户名
  group_id?: string | number; // 群组id 仅在detail_type为group时存在
  group_name?: string; // 群组名 仅在detail_type为group时存在
  discuss_id?: string | number; // 讨论组id 仅在detail_type为discuss时存在
  discuss_name?: string; // 讨论组名 仅在detail_type为discuss时存在
  channel_id?: string; // 频道id 仅在detail_type为guild时存在
  channel_name?: string; // 频道名 仅在detail_type为guild时存在
  guild_id?: string; // 服务器id 仅在detail_type为guild时存在
  guild_name?: string; // 服务器名 仅在detail_type为guild时存在
  detail_type?: string; // 事件详细类型
  zhin: Zhin; // 当前zhin实例
  context: Context; // 当前上下文
  adapter: Zhin.Adapters[P]; // 当前适配器实例
  prompt: Prompt; // 当前会话的提示输入器
  content: string; // 消息内容
  bot: Zhin.Bots[P]; // 当前机器人实例
  event: E; // 事件完整名
  quote?: QuoteMessage; // 引用消息
  message_id?: string; // 消息id 仅在type为message时存在
}

除此以外,你还可以访问到会话的一些方法和getter,通过这些方法和getter,你可以获取 到更多的信息,或者对会话进行一些操作。

typescript
import { Bot } from "./bot";
interface Session {
  middleware(middleware: Middleware): void; // 在当前会话上添加一个中间件
  reply(element: Element.Fragment): Promise<Bot.MessageRet>; // 回复当前会话
  intercept(
    tip: Element.Fragment,
    runFunc: (
      session: NSession<keyof Zhin.Adapters>,
    ) => Element.Fragment | void,
    free:
      | Element.Fragment
      | ((session: NSession<keyof Zhin.Adapters>) => boolean),
    filter?: (session: NSession<keyof Zhin.Adapters>) => boolean,
  ): void; // 拦截当前会话
  get isMaster(): boolean; // 当前会话发起者是否为主人
  get isAdmins(): boolean; // 当前会话发起者是否为zhin管理员
  get isOwner(): boolean; // 当前会话发起者是否为群主
  get isAdmin(): boolean; // 当前会话发起者是否为群组管理
  get isAtMe(): boolean; // 当前会话是否at了机器人
  get isPrivate(): boolean; // 当前会话是否为私聊
  get isGroup(): boolean; // 当前会话是否为群聊
}