云崽的文档过度缺失,下面的是我根据现有插件总结出来的,欢迎评论补充和指出错误。
另外强调: 本文全部适用于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 | 均能触发 |
基础
e的参数
函数必须传入参数e
函数 | 作用 | 返回示例 |
e.isMaster | 判断是否为云崽主人 | 是主人 1 即 true 不是则为 0 即 false |
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.reply()和e.group.recallMsg()
e.reply()
完整格式:e.reply([msg1,msg2],answer,{recallMsg:time})
可选性 | 默认值 | 可选值 | 说明 | |
[msg1,msg2] | 必选 | 无 | 1.字符串 2.数组 | 发送消息。 这种方式与 msg1+msg2 或者 `${msg1}${msg2} ` 等效 |
answer | 可选 | false | true 和 false | 否回复触发的消息 |
{recallMsg:time} | 可选 | 无 | time为数字 | 自动撤回这条消息。 time的单位:秒(s) |
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
我也不会,嘿嘿
Comments NOTHING