Mirai RhinoJS SDK文档
所有类和类型方法皆为测试阶段,未来可能会有更改。若按照文档的方法调用出现问题,或文档有错字或术语性错误,请在 StageGuard/mirai-rhinojs-sdk 开issue反馈。ISSUE的标题前必须加上[SDK文档]或者[SDK Documentation],否则不予受理/更改。有关文档更新,请查看文档更新日志
由于
v1.6.0版本的breaking changes,文档大幅度改动。现在只提供对外使用的接口,内部实现的方法没有必要了解。
不同版本的MiraiQQBot.js在方法上略有不同,在方法前会用[http]和[core]标记来表示http版本和core版本独有方法。
类型预览
- Mirai - Mirai RhinoJS主类
- Bot - Bot对象
- MessageChain - 消息链
- MessageSender - 消息发送者(群或好友)
- GroupInfo - 群组信息
- MessageType - 消息类型
- MessageTypeConst - 消息类型常量
- EventType - 事件类型
- EventTypeConst - 事件类型常量
- utils.http - 网络操作类
- utils.file - 文件操作类
- utils.rsync - Rhino中的异步执行
- Log - 日志输出
其他内容
Mirai
Mirai类是基类。
方法预览
| 返回类型 | 方法 |
|---|---|
| PlaceHolder | PlaceHolder |
| VOID | static init(Object globalObject) |
| VOID | static registerClasses2Object(Object object) |
| VOID | static loadExternalObject(Object object, String filepath, String name) |
| VOID | static [http]setAuthKey(String authKey) |
| VOID | static [http]setSever(String server) |
Mirai.Bot |
static getBot(Number qq) |
Mirai.Bot |
static createNewBot(Number qq, String password) |
VOID表示无返回值。
详细方法
➢ VOID static init(Object globalObject)
初始化Mirai库,做平台判断和依赖下载等工作。
注:wrapper.js中已初始化,无需再次初始化。
➢ VOID static registerClasses2Object(Object object)
注册MessageType,MessageTypeConst,EventTypeConst,Permission和Log到object中,例如:
1 | var M; |
➢ VOID static loadExternalObject(Object object, String filepath, String name)
加载路径为filepath的本地文件或网络文件,该文件应该在eval后返回一个对象,将这个对象命名为name并注册到object中。
例如:
1 | //外部文件ex.js |
➢ [http] VOID static setAuthKey(String authKey)
设置连接http api服务器的验证密钥。
➢ [http] VOID static setServer(String server)
设置连接http api服务器地址。
Mirai.Bot static getBot(Number qq);
获取并返回bot对象,若无则返回null。
Mirai.Bot static createNewBot(Number qq, String password);
创建一个新的bot,将其添加到BotManager并返回bot对象。参数qq和password指定了bot的qq号和密码。
[http]在http版本中不需要传入
password。
若未指定服务器地址和验证密钥,将抛出Server host or authenticate key isnt set.异常。
若验证密钥错误,将抛出Authenticate key is invaild.异常。
Mirai.Bot
Bot是bot对象,提供消息处理功能。
方法预览
| 返回类型 | 方法 |
|---|---|
| PlaceHolder | PlaceHolder |
String |
[http]getSessionKey() |
Number |
subscribe(Object subscriber) |
| VOID | destroy() |
Number |
send(GroupOrSender target, MessageObject) |
Number |
sendFriendMessage(Sender target, [MessageObject][, Number quoteId]) |
Number |
sendGroupMessage(Group target, [MessageObject][, Number quoteId]) |
Number |
sendTempMessage(Sender target, Group from, [MessageObject][, Number quoteId]) |
Number |
recall(Number target) |
Array |
getFriendList() |
Array |
getGroupList() |
Array |
getGroupMemberList(Group group) |
Boolean |
haveFriend(Sender target) |
| VOID | mute(Group group, Sender[, Number time]) |
| VOID | unmute(Group group, Sender target) |
| VOID | muteAll(Group group) |
| VOID | unmuteAll(Group group) |
| VOID | kick(Group group, Sender target) |
| VOID | handleFriendRequest(JSON iArg, Number isAccept, String msg) |
| VOID | handleMemberJoinRequest(JSON iArg, Number isAccept, String msg) |
紫色参数表示聚合类型,将会在方法详细中介绍。
详细方法
➢ [http]String getSessionKey()
返回当前bot的sessionKey(由http api分配)。
➢ VOID subscribe(Object subscriber)
订阅当前bot接受到的消息。subscriber是一个JSON对象,它的格式是这样的:
1 | bot.subscribe({ |
在参数中,sender的数据类型为MessageSender,group的数据类型为GroupInfo,message的类型为MessageChain,error的数据类型为Error或String。
订阅什么类型消息是可选的:
1 | //只订阅群组消息 |
若再次调用subscribe(),则会覆盖之前的订阅对象。
➢ VOID destroy()
将这个bot从BotManager中移除并销毁当前bot对象。
➢ Number send(GroupOrSender target, MessageObject)
发送一条消息,GroupOrSender表示GroupInfo或MessageSender,若为GroupInfo则表示发送群消息,MessageSender则表示发送好友消息,若无这个好友,但在同一个群,会尝试发送临时消息。
若发送成功则返回消息ID,否则返回0。
聚合消息对象
MessageObject是聚合类消息对象,它可以为以下格式:
1 | //单消息对象 |
不是很懂?以下例子帮助你理解:
1 | send(xxx, At(xxx), Plain("at你!")); |
以下所有MessageObject的意义都与这里相同。
➢ Number sendFriendMessage(Sender target, [MessageObject][, Number quoteId])
发送好友消息,Sender表示 Number类型的用户qq号 或 MessageSender类型的消息发送者对象,quoteId是可选项,表示引用回复的消息ID。
若发送成功则返回消息ID,否则返回0。
注意这里的MessageObject,它是被[]套起来的,换句话说这里传入的MessageObject是单成员数组:
1 | sendFriendMessage(xxx, [Plain("hello")], quoteId); |
以下所有Sender的意义都与这里相同。
➢ Number sendGroupMessage(Group target, [MessageObject][, Number quoteId])
发送群组消息,Group表示 Number类型的群号 或 GroupInfo类型的群组对象,quoteId是可选项,表示引用回复的消息ID。
若发送成功则返回消息ID,否则返回0。
这里也需要注意MessageObject。
以下所有Group的意义都与这里相同。
➢ Number sendTempMessage(Sender target, Group from, [MessageObject][, Number quoteId])
发送临时消息,target表示要发送对象,from表示群组来源,quoteId是可选项,表示引用回复的消息ID。
若发送成功则返回消息ID,否则返回0。
同样需要注意MessageObject。
➢ Number recall(Number target)
撤回一条消息,target指定了要撤回的消息的ID。
➢ Array getFriendList()
获取当前bot的好友列表,它的格式是这样的:
1 | [ |
若出现了任何错误,会返回一个空数组。
➢ Array getGroupList()
获取当前bot的群组列表,它的格式是这样的:
1 | [ |
若出现了任何错误,会返回一个空数组。
➢ Array getGroupMemberList(Group group)
获取一个群的群员列表数组,group指定了要查询的群组。它的格式是这样的:
1 | [ |
若出现了任何错误,会返回一个空数组。
➢ Boolean haveFriend(Sender target)
判断bot是否有这个好友,target指定了查询的对象。
➢ VOID mute(Group group, Sender[, Number time])
禁言一个群员,group指定要操作的群,target指定要禁言的成员,time指定禁言的时间(秒)。
注:需要bot有对应权限!
➢ VOID unmute(Group group, Sender target)
解除禁言一个群员,group指定要操作的群,target指定要解除禁言的成员。
注:需要bot有对应权限!
➢ VOID muteAll(Group group)
全体禁言一个群组,group指定要操作的群。
注:需要bot有对应权限!
➢ VOID unmuteAll(Group group)
解除全体禁言一个群组,group指定要操作的群。
注:需要bot有对应权限!
➢ VOID kick(Group group, Sender target)
踢出群组的某个群员,group指定要操作的群,target指定要踢出的群员。
注:需要bot有对应权限!
➢ VOID handleFriendRequest(JSON iArg, Number isAccept, String msg)
处理一个好友请求,iArg必须为新好友事件的event.toIArg()方法返回的JSON。isAccept表示要执行的操作,0为同意好友请求; 1为拒绝好友请求; 2为拒绝添加好友并添加黑名单,不再接收该用户的好友申请。msg是可选的,表示拒绝同意好友请求的理由。
➢ VOID handleMemberJoinRequest(JSON iArg, Number isAccept, String msg)
处理一个好友请求,iArg必须为新成员入群事件的event.toIArg()方法返回的JSON。isAccept表示要执行的操作,0为同意入群请求; 1为拒绝入群请求; 2为忽略入群请求; 3为拒绝入群并添加黑名单,不再接收该用户的入群申请; 4为忽略入群并添加黑名单,不再接收该用户的入群申请。msg是可选的,表示拒绝入群请求的理由。
注:需要bot有对应权限!
Mirai.MessageChain
MessageChain提供消息链构造方法。
(QQ的一个消息可能是由各种消息构成的,如”文字+图片”。Mirai对此的处理方式是:将这些复合消息转化成各种类型消息构成的消息链。)
方法预览
| 返回类型 | 方法 |
|---|---|
| PlaceHolder | PlaceHolder |
Number |
length() |
MessageType.? |
get(MessageTypeConst.? type) |
Boolean |
contain(RegExp regex) |
| TempObject | contain(RegExp* / Array[RegExp*] regex) |
self(MessageChain) |
discard(MessageTypeConst.? type) |
self(MessageChain) |
add(MessageObject messages) |
self(MessageChain) |
addF(MessageObject messages) |
String |
toString() |
详细方法
➢ Number length()
返回消息链中消息对象的数目。
➢ MessageType.? get(MessageTypeConst.? type)
返回消息链中第一个类型为type的消息。
若该链中不存在type类型的消息,则返回一个新的参数均为null的type类型的消息。
➢ Boolean contain(RegExp regex)
判断消息链中的文本消息是否匹配regex正则表达式。
➢ TempObject contain(RegExp* / Array[RegExp*] regex)
判断消息链中的文本消息是否匹配regex正则表达式,并返回一个临时对象,用于执行后续操作。
参数regex可以是一个正则表达式字符串或正则表达式对象,或一个包含多个正则表达式的数组,用于一次匹配多个正则表达式。
详情请浏览:contains返回的临时对象和contains正则表达式拓展。
➢ self(MessageChain) discard(MessageTypeConst.? type)
删除(丢弃)消息链中所有类型为type的消息,并返回自己(方便链式调用)。
若消息链无type类型的消息,则什么也不会做。
➢ self(MessageChain) add(MessageObject messages)
在消息链末端追加消息对象或消息链,并返回自己(方便链式调用)。
➢ self(MessageChain) addF(MessageObject messages)
在消息链首端追加消息对象或消息链,并返回自己(方便链式调用)。
➢ String toString()
返回消息链原始JSON信息字符串。
Mirai.MessageSender
MessageSender消息发送者对象。
MessageSender只从
Bot.subscribe返回,实例化MessageSender是没有任何意义的。
构造函数与方法预览
| 返回类型 | 方法 |
|---|---|
Number |
getId() |
String |
getName() |
Permission |
getPermission() |
Number |
getSourceId() |
Number |
send(MessageObject messages) |
Number |
reply(MessageObject messages) |
Number |
at(MessageObject messages) |
| VOID | mute(Number time) |
| VOID | unmute() |
| VOID | kick(String msg) |
String |
toString() |
详细方法
➢ Number getId()
返回该用户QQ号。
➢ String getName()
返回该用户名称。
➢ Permission getPermission()
返回在群群的权限,若为subscribe()的friend返回的MessageSender,则为null
➢ Number getSourceId()
MessageSender都是通过订阅的消息构造的,该方法返回这条消息的ID用于引用或撤回消息。
➢ Number send(MessageObject messages)
给这个用户发送私人消息并返回消息ID,若无好友则发送临时消息。
➢ Number reply(MessageObject messages)
回复这个用户的消息并返回消息ID。
➢ Number at(MessageObject messages)
at这个用户并发送消息并返回消息ID。
➢ VOID mute(Number time)
禁言这个用户,time指定了要禁言的时间(秒),若为subscribe()的friend返回的MessageSender,则什么也不做。
注:需要bot有对应权限。
➢ VOID unmute()
解禁这个用户,若为subscribe()的friend返回的MessageSender,则什么也不做。
注:需要bot有对应权限。
➢ VOID kick(String msg)
将这个用户踢出群组,msg为踢出原因,若为subscribe()的friend返回的MessageSender,则什么也不做。
注:需要bot有对应权限。
➢ String toString()
返回该用户信息。
Mirai.GroupInfo
GroupInfo为群组对象。
GroupInfo只从
Bot.subscribe返回,实例化GroupInfo是没有任何意义的。
构造函数与方法预览
| 返回类型 | 方法 |
|---|---|
Number |
getId() |
String |
getName() |
Permission |
getPermission() |
Number |
send(MessageObject messages) |
Number |
reply(MessageObject messages) |
Number |
at(Sender target, MessageObject messages) |
| VOID | mute(Sender target, Number time) |
| VOID | unmute(Sender target) |
| VOID | muteAll() |
| VOID | unmuteAll() |
| VOID | kick(Sender, String msg) |
String |
toString() |
详细方法
➢ Number getId()
返回该QQ群的群号。
➢ String getName()
返回该QQ群的名称。
➢ Permission getPermission()
返回成员在该群的权限(一般为bot)。
➢ Number send(MessageObject messages)
给这个群组发送消息并返回消息ID。
➢ Number reply(MessageObject messages)
GroupInfo都是通过订阅的消息构造的,该方法回复这条消息的发送者并返回消息ID。
➢ Number at(Sender target, MessageObject messages)
at用户并发送消息并返回消息ID。
➢ VOID mute(Sender target, Number time)
禁言这个用户,target指定了要禁言的群成员,time指定了要禁言的时间(秒)。
注:需要bot有对应权限。
➢ VOID unmute(Sender target)
解禁这个用户,target指定了要解禁的群成员。
注:需要bot有对应权限。
➢ VOID muteAll()
全体禁言。
注:需要bot有对应权限。
➢ VOID unmuteAll()
解除全体禁言。
注:需要bot有对应权限。
➢ VOID kick(Sender target, String msg)
将这个用户踢出群组,target为踢出的群友,msg为踢出原因,若为subscribe()的friend返回的GroupInfo,则什么也不做。
注:需要bot有对应权限。
➢ String toString()
返回该群信息。
Mirai.GroupInfo.Permission
该常量集用于表示群组成员权限
Permission.OWNER 群主
Permission.ADMIN 管理员
Permission.MEMBER 普通成员
Mirai.MessageType
MessageType提供各种消息类型的方法,提供给sdk使用者的都是静态方法。
所有子类
| 类名称 | 对应消息类型 |
|---|---|
Source |
源消息连首 |
Quote |
引用(回复) |
Plain |
文字 |
Image |
图片 |
FlashImage |
闪照 |
Face |
QQ表情 |
At |
@某人 |
AtAll |
@全体成员 |
Xml |
XML消息 |
Json2 |
JSON消息 |
App |
APP消息 |
Poke |
戳一戳 |
详细方法
不需要实例化消息类型
Source(Number id, Number time)
源消息链首,id为消息ID,time为UNIX时间。
构建Source类型消息毫无意义,因为Source只作为群组消息ID的标记,而发送消息不需要消息ID(除了引用)。
Quote(Number id, Number senderId, Number groupId, Mirai.MessageChain origin)
引用消息,id为消息ID,senderId为引用原文发送者QQ号,groupId为该消息QQ群的群号,origin为引用原文消息链。
构建Quote类型消息毫无意义,因为发送引用消息的方法是在Bot.sendGroupMessage的第三个参数传入要引用的消息ID或GroupInfo.reply或MessageSender.reply。
Plain(String text)
文字消息,text为文本内容。
Image(String imageId, String url, String path)
图片消息,imageId为图片的UUID,url为图片的链接,path为图片本地链接。
三者可以任选一个参数,当同时有多个参数时,http api会按照imageId>url>path的优先级发送图片。
接收到的图片永远不可能会有path。
FlashImage(String imageId, String url, String path)
闪照消息,用法和Image完全相同。
Face(Number faceId, String name)
QQ表情,faceId为表情编号(优先级高于后面的name),name为表情名称。
At(Number target, String displayText)
@某人,taeget为被@的人的QQ号,displayText为@发送时显示的@文字。
AtAll()
@全体成员。
Xml(String xml)
XML消息,xml为XML消息内容。
Json2(String json)
JSON消息,json为JSON消息内容。
App(String app)
APP消息,app为APP消息内容。
Poke(PokeType.? name)
Poke(戳一戳)消息,name为Poke消息内容。
1 | Mirai.MessageType.Image.getImageId(); |
Mirai.MessageTypeConst
MessageTypeConst保存一些静态常量。
SOURCE 源消息链首
QUOTE 引用消息
PLAIN 文字消息
IMAGE 图片消息
FLASHIMAGE 闪照消息
FACE QQ表情
AT @某人
ATALL @全体成员
XML XML消息
JSON2 JSON消息
APP APP消息
POKE 戳一戳消息
PokeType
PokeType.POKE 戳一戳
PokeType.SHOWLOVE 比心
PokeType.LIKE 点赞
PokeType.HEARTBROKEN 心碎
PokeType.SIXSIXSIX 666
PokeType.FANGDAZHAO 放大招
Mirai.EventType(Const)
EventType为Bot.subscribe中的其他事件event的参数中的event的类型基类
注:
EventType.?只作为返回参数,构造它们是没有任何意义的。
所有事件类型
在Bot.subscribe中的event中,我们可以通过判断event.type来确定接受到的事件类型。
下面是所有事件类型常量(EventTypeConst.?):
它们后面对应着event中有的属性
➢BOT_ONLINE: bot上线
Number id: bot的qq号
➢BOT_OFFLINE: bot下线
Number id: bot的qq号
➢BOT_OFFLINE_FORCE: bot被挤下线
Number id: bot的qq号
➢BOT_OFFLINE_DROPPED: bot异常下线
Number id: bot的qq号
➢BOT_RELOGIN: bot重新登录
Number id: bot的qq号
➢GROUP_RECALL: 群组撤回消息
Number senderId: 撤回者QQ号Number messageId: 撤回的消息的idNumber time: 撤回时间GroupInfo group: 事件发生所在的群组MessageSender operator: 撤回者信息
➢FRIEND_RECALL: 好友撤回消息
Number senderId: 撤回者QQ号Number messageId: 撤回的消息的idNumber time: 撤回时间
➢BOT_GROUP_PERMISSION_CHANGE: bot在群的权限被改变
Permission before: 改前权限Permission after: 改后权限GroupInfo group: 事件发生所在群组
➢BOT_MUTE: bot被禁言
Number duration: 禁言时长MessageSender operator: 禁言者
(群组信息可以在event.getOperator().group找到)
➢BOT_UNMUTE: bot被解除禁言
MessageSender operator: 禁言者
(群组信息可以在event.getOperator().group找到)
➢BOT_JOIN_GROUP: bot新加入群组
GroupInfo group: 加入的群组
➢GROUP_NAME_CHANGE: 群名称改变
String before: 改之前名称String after: 改之后名称GroupInfo group: 事件发生所在群组
➢GROUP_ENTRANCE_ANN_CHANGE: 入群公告改变
String before: 改之前入群公告String after: 改之后入群公告GroupInfo group: 事件发生所在群组MessageSender operator: 操作者
➢GROUP_MUTE_ALL: 群全体禁言事件
Boolean before: 之前是否禁言Boolean after: 之后是否禁言GroupInfo group: 事件发生所在群组MessageSender operator: 操作者
➢GROUP_ALLOW_ANONYMOUS_CHAT: 匿名聊天
未写
➢GROUP_ALLOW_CONFESS_TALK: 坦白说
未写
➢GROUP_ALLOW_MEMBER_INVITE: 允许成员邀请其他人入群
未写
➢GROUP_MEMBER_JOIN: 新人入群
MessageSender member: 入群人信息
(群组信息可以在event.getMember().group找到)
➢GROUP_MEMBER_KICK: 群员被踢
MessageSender target: 被踢人信息MessageSender operator: 操作者
(群组信息可以在event.getOperator/Target().group找到)
➢GROUP_MEMBER_QUIT: 群员退群
MessageSender member: 退群人信息
(群组信息可以在event.getMember().group找到)
➢GROUP_MEMBER_NAME_CHANGE: 群成员昵称改变
String before: 改之前昵称String after: 改之后昵称MessageSender target: 被改昵称的人MessageSender operator: 操作者(自己或者管理员)
(群组信息可以在event.getOperator/Target().group找到)
➢GROUP_MEMBER_FAME_CHANHE: 群特殊头衔改变
String before: 改之前头衔(空或有)String after: 改之后头衔MessageSender target: 被改特殊头衔的人
(群组信息可以在event.getTarget().group找到)
➢GROUP_MEMBER_PERMISSION_CHANGE: 群成员权限改变(不能是bot)
Permission before: 改之前权限Permission after: 改之后权限MessageSender target: 被改权限的人
➢GROUP_MEMBER_MUTE: 群员被禁言
Number duration: 禁言时长MessageSender target: 被禁言的人MessageSender operator: 操作者(自己或者管理员)
➢GROUP_MEMBER_UNMUTE: 群员被解除禁言
MessageSender target: 被解除禁言的人MessageSender operator: 操作者(自己或者管理员)
➢NEW_FRIEND_REQUEST: 新好友请求事件
Number eventId: 事件ID,用于标识事件Number fromId: 新好友QQ号Number groupId: 新好友来自的群(0为不是通过群加的好友)String nickname: 新好友昵称
特殊方法:event.accept() 同意好友请求。event.reject() 拒绝好友请求。event.block() 拒绝并拉黑,不再接收请求。event.toIArg()用于获取要传入Bot.handleFriendRequest的一个参数。
(下面有例子)
➢NEW_MEMBER_JOIN_REQUEST: 新成员入群请求事件
Number eventId: 事件ID,用于标识事件Number fromId: 加群人QQ号Number groupId: 加群群号String groupName: 加群群名称String nickname: 加群人昵称
特殊方法:event.accept() 同意加群请求。event.reject() 拒绝加群请求。event.ignore() 忽略加群请求。event.ignoreAndBlock() 忽略加群请求并不再接收请求。event.rejectAndBlock() 拒绝加群请求并不再接收请求。event.toIArg()用于获取要传入Bot.handleMemberJoinRequest的一个参数。
所有的属性都可以通过调用event.getXxx()(get+属性首字母大写)方法来过得。
下面通过一个例子展示用法:
1 | ... |
Mirai.utils.file
file类提供简单的文件读取和写入方法。
方法预览
| 返回类型 | 方法 |
|---|---|
| VOID | static create(String path) |
| VOID | static remove(String path) |
? |
static read(String path, ? mode) |
| VOID | static writeString(String path, String string, Boolean isCover) |
| VOID | static writeStream(String path, java.io.InputStream inputStream, Boolean isCover, Boolean isInputStreamClose) |
| VOID | static appendString(String path, String appendString) |
详细方法
➢ VOID static create(String path)
在path创建一个文件或目录。
➢ VOID static remove(String path)
删除在path的一个文件或目录。
➢ ? static read(String path, ? mode)
读取在path的文件。
如果mode为Mirai.utils.file.STRING,则返回文件内容。
如果mode为Mirai.utils.file.STREAM,则返回文件输入流。
➢ VOID static writeString(String path, String string, Boolean isCover)
写入字符串到path的文件。isCover设定是否在文件已存在的情况下覆盖文件内容。
➢ VOID static writeStream(String path, java.io.InputStream inputStream, Boolean isCover, Boolean isInputStreamClose)
写入字符串到path的文件。isCover设定是否在文件已存在的情况下覆盖文件内容。isInputStreamClose设定是否在写入完成后关闭并回收输入流。
➢ VOID static appendString(String path, String appendString)
追加字符串到path的文件。
Mirai.utils.http
http类提供简单HTTP POST/GET方法。
方法预览
| 返回类型 | 方法 |
|---|---|
[Number, java.io.InputStream] |
static getInputStream(String url[, Array headers]) |
String |
static get(String url[, Array headers, Boolean isLineBreak]) |
String |
static post(String url, String params[, Array headers]) |
详细方法
➢ [Number, java.io.InputStream] static getInputStream(String url[, Array headers])
读取远程服务器资源并返回输入流,常用于获取图片,音乐等非文字信息。headers是可选的,指定了请求头,它应该是这样的格式:
1 | [ |
返回的Array中,第一个元素为输入流大小(文件大小),第二个元素为输入流。
➢ String static get(String url[, Array headers, Boolean isLineBreak]) |
读取远程服务器资源并返回字符串。isLineBreak指定是否有换行符,若为false则读取后的字符串都在一行l。
➢ String static post(String url, String params[, Array headers])
向远程服务器发送请求。
Mirai.utils.rsync
rsync类提供在rhino中异步执行的方法。
方法预览
| 返回类型 | 方法 |
|---|---|
| PlaceHolder | PlaceHolder |
rsync |
static run(Object func) |
rsync |
static loop(Object func, Number times, Number, interval) |
rsync |
static corun(Object func, Number count) |
rsync |
static flag(String name) |
rsync |
static interval(Number interval) |
rsync |
static co_count(Number count) |
rsync |
static loop_times(Number count) |
self(rsync) |
run(Object func) |
self(rsync) |
loop(Object func, Number times, Number, interval) |
self(rsync) |
corun(Object func, Number count) |
String/self(rsync) |
flag(String name) |
Number/self(rsync) |
interval(Number interval) |
Number/self(rsync) |
co_count(Number count) |
Number/self(rsync) |
loop_times(Number count) |
| VOID | sleep(Number duration) |
| VOID | stop() |
| VOID | restart() |
详细方法
➢ rsync static run(Object func)
创建执行单程异步线程,并返回这个异步线程对象。
rsync调用方法
例如:
1 | rsync.run((s) => { |
输出:
1 | in rsync thread. |
func中的参数s表示自身rsync对象,可以对当前异步线程进行sleep()或stop()等操作。
例如:
1 | rsync.run((s) => { |
输出:
1 | in rsync thread. |
stop()是可以将sleep()打断的。
1 | var r = rsync.run((s) => { |
输出:
1 | in rsync thread. |
➢ rsync static loop(Object func, Number times, Number, interval)
创建执行循环异步线程并返回这个异步线程对象。times表示循环执行的次数,-1表示无限次(默认就是执行无限次),直到调用stop()。interval表示每次上一次执行完毕到下一次执行的中间间隔(毫秒)。
它的本质是创建一个rsync对象,将标记循环执行次数的属性loop_times和执行间隔属性interval设置为参数times和interval。
➢ rsync static corun(Object func, Number count)
创建同时执行count个单程异步线程并返回这个异步线程对象。count表示创建同时执行线程的个数,若设置为为1,个则最终效果和rsync.run()相同。
它的本质是创建一个rsync对象,将标记同时执行线程个数的属性co_count设置为参数count。
1 | rsync.corun((s, i) => { |
将同时输出:
1 | 我是第0个线程 |
➢ rsync static flag(String name)
创建一个新的异步线程,将线程组名称设置为name并返回这个异步线程对象。
➢ rsync static interval(Number interval)
创建一个新的异步线程,将上一次执行完毕到下一次执行的中间间隔设置为interval并返回这个异步线程对象。
当loop_times为1(默认)时异步线程不会执行第二次,所以interval属性不会起作用。
➢ rsync static co_count(Number count)
创建一个新的异步线程,将同时异步执行线程的个数设置为count并返回这个异步线程对象。
➢ rsync static loop_times(Number times)
创建一个新的异步线程,将循环执行次数设置为interval(-1表示执行无限次)并返回这个异步线程对象。
➢ self(rsync) run(Object func)
开始执行异步线程。
若func为null,则什么也不会执行。
若当前rsync对象线程已开始执行,则会抛出异常。
➢ self(rsync) loop(Object func, Number times, Number, interval)
同上方静态方法,若当前rsync对象线程已开始执行,则会抛出异常。
它的本质是将当前rsync对象线程标记循环执行次数的属性loop_times和执行间隔属性interval设置为参数times和interval。
➢ self(rsync) corun(Object func, Number count)
同上方静态方法,若当前rsync对象线程已开始执行,则会抛出异常。
它的本质是将当前rsync对象标记同时执行线程个数的属性co_count设置为参数count。
➢ String/self(rsync) flag(String name)
将当前rsync对象线程组名称设置为name并返回这个异步线程对象。
若当前rsync对象线程已开始执行,则会抛出异常。
若参数为空,则会返回当前rsync对象flag值。
➢ Number/self(rsync) interval(Number interval)
将当前rsync对象上一次执行完毕到下一次执行的中间间隔设置为interval并返回这个异步线程对象。
当loop_times为1(默认)时异步线程不会执行第二次,所以interval属性不会起作用。
若当前rsync对象线程已开始执行,则会抛出异常。
若参数为空,则会返回当前rsync对象interval值。
➢ Number/self(rsync) co_count(Number count)
将当前rsync对象同时异步执行线程的个数设置为count并返回这个异步线程对象。
若当前rsync对象线程已开始执行,则会抛出异常。
若参数为空,则会返回当前rsync对象co_count值。
➢ Number/self(rsync) loop_times(Number times)
将当前rsync对象循环执行次数设置为times(-1表示执行无限次)并返回这个异步线程对象。
若当前rsync对象线程已开始执行,则会抛出异常。
若参数为空,则会返回当前rsync对象loop_times值。
➢ VOID sleep(Number duration)
睡眠,duration表示时长。
➢ VOID stop()
打断并停止线程执行。
➢ VOID restart()
重新执行。
rsync链式调用例子:
1 | //循环执行,以下方法是等价的 |
Mirai.Log
Log类向控制台输出日志,自动适配标准输出流和AutoJS控制台。
方法预览
| 返回类型 | 方法 |
|---|---|
| VOID | static v(Object object) |
| VOID | static i(Object object) |
| VOID | static w(Object object) |
| VOID | static e(Object object) |
他们分别对应着verbose,info,warning和error消息,这里只是颜色不同而已。
其他内容
contains返回的临时对象
MessageChain.contains会返回一个临时对象用于执行.then(Sync)/.or(Sync)后续操作
例如:
1 | msg.contains("打招呼").then(() => sender.at("你好呀!")); |
当消息内容满足正则表达式(组)匹配,则会将该临时对象中的flag标为true,表示包含满足匹配的消息
这里的
then并不是Promise中的then,此then非彼then…
看一下详细方法:
➢ self(TempObject) then(Object func)
➢ self(TempObject) thenSync(Object func)
➢ self(TempObject) or(Object func)
➢ self(TempObject) orSync(Object func)
若flag被标为true,则then(Sync)可以被执行,否则执行or(Sync)。
为了防止消息处理阻塞消息监听线程,你可以调用xxxSync来异步执行。func表示一个函数,为执行的内容,这个函数应该有两个(三个)形参:
1 | .then((i, v) => {}); |
其中:
i表示满足contains表达式中的第几个表达式。
当contains的参数为RegExp时,这个值是0,当为Array[RegExp]时,返回满足的表达式的元素序号。
1 | msg.contains([ |
v表示匹配结果,请看contains正则表达式拓展
1 | msg.contains([ |
r表示调用xxxSync后执行的异步线程对象,也就是一个rsync对象。
1 | msg.contains("...").thenSync((i, k, r) => Log.i(r)); |
输出:
1 | RsyncThreadGroup-unnamed@xxxxx-x |
上述四个方法都返回自身,可以链式调用
1 | msg.contains([ |
contains正则表达式拓展
此处基于常规正则表达式添加了简便子匹配结果提取方法,简化exec()获得子匹配内容的过程。
它的格式是这样的:
${[type[<properties...>]:]name}
其中[...]表示为可选项。
例如:${content} : 隐式定义匹配字符串,不包含空格和换行符,相当于${s:content}${s:content} : 显式指定匹配字符串,不包含空格和换行符${s<sp>:content} : 匹配字符串,包含空格(space),相当于([^\n]+)${s<lb>:content} : 匹配字符串,包含换行符(break line),相当于([^ ]+)${s<lb, sp>:content} : 匹配字符串,包含所有字符,相当于([\s\S]+)${s<len=5>:content} : 匹配字符串,限制匹配长度,相当于([^ \n]{5})
正如你所见,未指定type则默认为匹配字符串(s),properties可以同事指定多个属性,中间用逗号隔开。
某些属性需要设置属性值,如类型s中的len属性,表示匹配字符的个数。
它有什么用?
所有匹配结果都将以JSON格式封装至contains返回的临时对象中的.then(Sync)/.or(Sync)的第二个参数中,你可以更方便地得到匹配结果。
1 | msg |
所有用户定义的子匹配表达式
(...)都会被转为非捕获组子匹配表达式(?:...)
拓展匹配格式是无视正则表达式规则的:
1 | msg.contains(/${s:name}/).then(...); |
将匹配连续不包含空格和换行的字符,而$不表示表达式的开始标识符
类型支持:
n: 匹配数字
属性:
bit=value指定匹配数字的位数为value位
s: 匹配字符,不包括空格符和换行符
属性:
sp匹配空格lb匹配换行符len=value指定匹配字符的长度为value




