业务注册与管线装配

消息类型

QQ 服务器传入的消息被 onebot 协议 定义为四类

  • message:消息事件
  • notice:通知事件
  • request:请求事件
  • meta_event:元事件

详见

onebot-11 - event
https://github.com/botuniverse/onebot-11/blob/master/event/README.md

业务注册

对于常见的事件,比如 message 中的私聊 和 群聊,我们提供了 mapper 装饰器让阁下以一种比较优雅的方法快速实现阁下的函数方法。它们的写法如下:

import { mapper, LagrangeContext, PrivateMessage } from 'lagrange.onebot';

export class ... {

    @mapper.onPrivateUser(1193466151)
    async handleJinhui(c: LagrangeContext<PrivateMessage>) {
        // ...
    }

    @mapper.onGroup(956419963)
    async handleTestGroup(c: LagrangeContext<GroupMessage>) {
        // ...
    }
}

上面的函数注册了对于用户 1193466151 的私聊事务 和 对于群聊 956419963 的群聊事务。

私聊业务

私聊业务的模板如下

export class ... {

    @mapper.onPrivateUser(1193466151)
    async handleJinhui(c: LagrangeContext<PrivateMessage>) {
        // ...
    }
}

需要注意,由于我对装饰器的签名做了泛型约束,所以对于私聊事务而言,它的上下文必须是 LagrangeContext<PrivateMessage>,这代表 c.message 的数据类型为 PrivateMessage.

群聊业务

群聊业务的模板如下

export class ... {

    @mapper.onGroup(956419963)
    async handleTestGroup(c: LagrangeContext<GroupMessage>) {
        // ...
    }
}

和私聊一样,群聊的上下文必须是 LagrangeContext<GroupMessage>

默认情况下(也就是上面写得这样),阁下注册的函数在每次有人在群里发消息时都会被调用。但是很多时候,我们希望只有当有人 @ 机器人时,我们注册的函数才被调用,此时可以启动装饰器的 at 参数:

    @mapper.onGroup(956419963, { at: true })

这样,进行装配时,框架会自动帮阁下过滤非 @ 的信息。而且 c.message.messagec.message.raw_message 也会被自动过滤掉开头的 @ 字段。

通知事件

请求事件

Last Updated 2024-09-19 04:43:18