TRSS云崽插件编写指南

KaedeharaLu 发布于 2024-10-27 270 次阅读


云崽的文档过度缺失,下面的是我根据现有插件总结出来的,欢迎评论补充和指出错误。

另外强调: 本文全部适用于TRSS应用端,喵崽等其他类型可能会有部分内容不太一致

一些说明

插件加载

单JS插件一般都可以热加载,而Plugin不行。即单JS插件直接放入插件目录就可以用,而Plugin必须要重启。

目录

注:本标题下的 TRSS 表示云崽根目录的上一级,Windows下完整目录可能为 D:\TRSS\ ,Linux中可能为 /opt/TRSS/

JS插件存放目录:TRSS/plugins/example/

Plugin存放目录:TRSS/plugins/plugin-name/

另外,单独的js插件中,未定义的前提下,./data/ 即为 TRSS/data/

单JS插件

插件基本框架

import axios from 'axios'

export class JSplugins extends plugin {
    constructor() {
        super({
            name: 'name',
            dsc: 'dsc',
            event: 'message',
            priority: '-1',
            rule: [
                {
                    reg: '^#我的名字是',
                    fnc: 'aFunction'
                }
            ]
        })
    }

    async aFunction(e){
        let name=e.raw_message.slice(6).trim()
        e.reply(`Hello ${name}`)
        return
    }
}

这就是一个最基本的框架。

  • constructor(){}:结构。其中的name表示插件名称,dsc为插件描述,event为消息类别(一般使用message),priority为优先级(数字越小优先级越高),rule为匹配规则。
  • rule[]:用来匹配内容来运行函数。reg为匹配规则,使用正则表达式,fnc为对应的函数。
  • async aFunction(e){}:async使函数为异步进行,方式影响其他插件使用。e可以说是一个必备参数,包含了用户信息获取、发送消息的方法等内容。
reg内容(引号内)发送内容是否触发
^#你好$#你好
你好
#你好呀


^#?你好$#你好
你好
#你好呀


^#?你好#你好
你好
#你好呀
你好呀



^#?(你好|Hello)
#你好 或者 #Hello
你好 或者 Hello
#你好呀 或者 #HelloMan
你好呀 或者 HelloMan
均能触发
reg内容示例

基础

e的参数

函数必须传入参数e

函数作用返回示例
e.isMaster 判断是否为云崽主人是主人 1true
不是则为 0false
e.user_id触发者QQ号"123456789"
e.member.card || e.member.nickname触发者QQ昵称(非群昵称)"KaedeharaLu"
e.group_id触发的QQ群号"987654321"
e.message
e.raw_message
触发的完整消息,包括提示词用户发送"#我的名字是KaedeharaLu"
得到的也是"#我的名字是KaedeharaLu"
e的参数

e的基础方法

我所知道的只有e.reply()和e.group.recallMsg()

e.reply()

完整格式:e.reply([msg1,msg2],answer,{recallMsg:time})

可选性默认值可选值说明
[msg1,msg2]必选1.字符串
2.数组
发送消息。
这种方式与 msg1+msg2 或者 `${msg1}${msg2}` 等效
answer可选falsetrue 和 false否回复触发的消息
{recallMsg:time}可选time为数字自动撤回这条消息。
time的单位:秒(s)
e.reply()的参数说明

e.recallMsg()

直接上示例代码。

async replyHaha(e){   
    let msg=await e.reply('haha',true)
    //do something here
    e.group.recallMsg(msg.message_id)
    return
}

首先定义一个变量将 await e.reply('haha',true) 的信息记录一下,撤回时使用 message_id 标定某个消息,使用 e.group.recallMsg(msg.message_id) 撤回就可以了。

注:只有群聊可以使用,私聊无法使用。

进阶

e.reply()

合并转发信息

函数:Bot.makeForwardArray([])

示例:

e.reply(Bot.makeForwardArray(['1','2','3']))

这样就可以发送一个包含三条转发消息,内容分别为 1 2 3。

当然,一般不会用这么简单的方式,尤其是不确定数组长度的时候。也可以用下面的方式。

let msgs=['1','2','3']
e.reply(Bot.makeForwardArray([...msgs]))

原理很简单,就是将一个数组展开了而已。

注:

  • 如果发送转发消息还设置回复则会出现同时发两条消息的情况,一条回复触发消息,但是内容为空;一条是正常的合并转发消息
  • 即使回复消息的信息数为1也可以使用转发消息,非常适合用来防刷屏

发送图片

函数:segment.image(filePath)

示例:

let filePath=`./data/pic.webp`
e.reply(['图片是: ',segment.image(filePath)], false)

艾特某人

函数:segment.at(qq)

其中,qq就是某人的qq号码。例如我要艾特触发者并发送Hello:

e.reply([segment.at(e.user_id),' Hello'])

Plugin

我也不会,嘿嘿