使用与编写插件

为什么需要插件

对于一些常用的功能,比如测试用的 echo 和展示进程管理器,我们没有必要在实现每一个具体的事务时去实现它们,只需要给事务函数套上一个插件,就可以在事务中一行代码都不用写就能完成对于某个 QQ 好友的事务注册。

内置插件

时间有限,我只提供了两个插件: echopm,它们的用法如下:

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

export class ... {

    @mapper.onPrivateUser(1193466151)
    @plugins.use('echo')
    async handleJinhui(c: LagrangeContext<PrivateMessage>) {

    }
}

一行注解/装饰器就能将当前 echo 插件安装到对于 1193466151 这个用户的事务函数上。

这样一来,每当这个用户使用 \echo xxx 和机器人对话时,机器人就会重复 xxx 的内容:

这个功能可以用于快速调试机器人。

pm 则是将 pm2 工具的日志信息发送到 QQ 上。

自定义插件

想要自定义插件,则需要使用全局对象 plugins 的 register 装饰器。比如我们这里实现一个简单的图片链接下载器:

User: \wget-image https://picx.zhimg.com/80/v2-bdae55043d61d7bcfeeabead6e953959_1440w.jpeg
Bot: <图片>

注册插件的事务函数的函数签名必须是:

(c: LagrangeContext<Message>) => any;

我们先在 快速开始open in new window 的基础上新建一个 plugins.ts 文件。

// plugins.ts

import { plugins, LagrangeContext, Message } from 'lagrange.onebot';

export class Impl {

    @plugins.register('wget-image')
    async wgetImage(c: LagrangeContext<Message>) {
        // 判断一下,只解析 message 类型的数据
        if (c.message.post_type === 'message') {
            const text = c.message.raw_message;
            if (text.startsWith('\\wget-image')) {
                const url = text.substring('\\wget-image'.length).trim();
                c.sendMessage([
                    {
                        type: 'image',
                        data: {
                            file: url,
                            timeout: 10000
                        }
                    }
                ]);

                // 插件中使用 finishSession 会让被装饰的事务函数不再被执行,直接结束对话
                c.finishSession();
            }
        }
    }
}

impl.ts 中安装它:

import './plugins';

import { mapper, plugins, LagrangeContext, PrivateMessage, GroupMessage, Send } from 'lagrange.onebot'

export class Impl {
    @mapper.onPrivateUser(1193466151)
    @plugins.use('wget-image')
    async handleJinhui(c: LagrangeContext<PrivateMessage>) {
        c.finishSession();
    }
}

最终的效果

Finally, have fun!!!

Last Updated 2024-06-01 15:42:58